#
d966c761 |
| 15-Dec-2019 |
Jeff Roberson <jeff@FreeBSD.org> |
Slightly optimize locking in vm_map_copy_swap_entry(). Anonymous objects require the object lock to synchronize collapse. Other swap objects such as tmpfs do not.
Reported by: mjg Reviewed by: kib
Slightly optimize locking in vm_map_copy_swap_entry(). Anonymous objects require the object lock to synchronize collapse. Other swap objects such as tmpfs do not.
Reported by: mjg Reviewed by: kib, markj Differential Revision: https://reviews.freebsd.org/D22747
show more ...
|
#
037c0994 |
| 11-Dec-2019 |
Doug Moore <dougm@FreeBSD.org> |
Extract code common to _vm_map_clip_start and _vm_map_clip_end into a function, vm_map_entry_clone, that can be invoked by each.
Reviewed by: kib, markj Differential Revision: https://reviews.freebs
Extract code common to _vm_map_clip_start and _vm_map_clip_end into a function, vm_map_entry_clone, that can be invoked by each.
Reviewed by: kib, markj Differential Revision: https://reviews.freebsd.org/D22760
show more ...
|
#
c0829bb1 |
| 08-Dec-2019 |
Mark Johnston <markj@FreeBSD.org> |
Add casts required by the 32-bit build after r355491.
|
#
c1ad5342 |
| 07-Dec-2019 |
Doug Moore <dougm@FreeBSD.org> |
Remove the next and prev fields from vm_map_entry, to save a bit of space. Where the vm_map tree now has null pointers, store pointers to next and previous entries in right and left fields, making t
Remove the next and prev fields from vm_map_entry, to save a bit of space. Where the vm_map tree now has null pointers, store pointers to next and previous entries in right and left fields, making the binary tree threaded. Have the predecessor and successor functions compute what the prev and next fields previously stored.
Reviewed by: markj, kib (previous version) Tested by: pho (previous version) Differential Revision: https://reviews.freebsd.org/D21964
show more ...
|
#
a6f21d15 |
| 07-Dec-2019 |
Mark Johnston <markj@FreeBSD.org> |
Fix fault_type handling in vm_map_lookup().
Suppose that the map entry is wired, so that we later assign fault_type = entry->protection. Suppose further that we jump back to RetryLookup. Then faul
Fix fault_type handling in vm_map_lookup().
Suppose that the map entry is wired, so that we later assign fault_type = entry->protection. Suppose further that we jump back to RetryLookup. Then fault_type will no longer contain the original fault protection mask, but instead that of the wired entry.
Submitted by: Wuyang Chung <wuyang.chung1@gmail.com> Reviewed by: kib MFC after: 3 days Github PR: https://github.com/freebsd/freebsd/pull/419 Differential Revision: https://reviews.freebsd.org/D22683
show more ...
|
#
ed2f945a |
| 04-Dec-2019 |
Mark Johnston <markj@FreeBSD.org> |
Fix an off-by-one error in vm_map_pmap_enter().
If the starting pindex is equal to object->size, there is nothing to do. This was harmless since the rest of vm_map_pmap_enter() has no effect when ps
Fix an off-by-one error in vm_map_pmap_enter().
If the starting pindex is equal to object->size, there is nothing to do. This was harmless since the rest of vm_map_pmap_enter() has no effect when psize == 0.
Submitted by: Wuyang Chung <wuyang.chung1@gmail.com> Reviewed by: alc, dougm, kib MFC after: 1 week Github PR: https://github.com/freebsd/freebsd/pull/417 Differential Revision: https://reviews.freebsd.org/D22678
show more ...
|
#
67388836 |
| 01-Dec-2019 |
Konstantin Belousov <kib@FreeBSD.org> |
Store the bottom of the shadow chain in OBJ_ANON object->handle member.
The handle value is stable for all shadow objects in the inheritance chain. This allows to avoid descending the shadow chain
Store the bottom of the shadow chain in OBJ_ANON object->handle member.
The handle value is stable for all shadow objects in the inheritance chain. This allows to avoid descending the shadow chain to get to the bottom of it in vm_map_entry_set_vnode_text(), and eliminate corresponding object relocking which appeared to be contending.
Change vm_object_allocate_anon() and vm_object_shadow() to handle more of the cred/charge initialization for the new shadow object, in addition to set up the handle.
Reported by: jeff Reviewed by: alc (previous version), jeff (previous version) Tested by: pho Sponsored by: The FreeBSD Foundation Differrential revision: https://reviews.freebsd.org/D22541
show more ...
|
#
886b9021 |
| 29-Nov-2019 |
Jeff Roberson <jeff@FreeBSD.org> |
Restore swap space accounting for non-anonymous swap objects. This was broken in r355082. Reduce some locking in nearby related object type checks.
Reviewed by: kib, markj Differential Revision: h
Restore swap space accounting for non-anonymous swap objects. This was broken in r355082. Reduce some locking in nearby related object type checks.
Reviewed by: kib, markj Differential Revision: https://reviews.freebsd.org/D22565
show more ...
|
#
85b7bedb |
| 29-Nov-2019 |
Doug Moore <dougm@FreeBSD.org> |
Functions that call vm_map_splay_merge sometimes set data fields (e.g. root->left = NULL) to affect the behavior of that function. This change stops that data manipulation, and instead calls a pair o
Functions that call vm_map_splay_merge sometimes set data fields (e.g. root->left = NULL) to affect the behavior of that function. This change stops that data manipulation, and instead calls a pair of functions, one for the left direction and the other for the right, with the function called depending whether or not we currently null the root child in that direction to control the behavior of vm_map_splay_merge.
Reviewed by: kib Tested by: pho Differential Revision: https://reviews.freebsd.org/D22589
show more ...
|
#
1867d2f2 |
| 27-Nov-2019 |
Doug Moore <dougm@FreeBSD.org> |
Inline some splay helper functions to improve performance on a micro-benchmark.
Reviewed by: markj Tested by: pho Differential Revision: https://reviews.freebsd.org/D22544
|
#
4d987866 |
| 25-Nov-2019 |
Jeff Roberson <jeff@FreeBSD.org> |
Move anonymous object copying for fork into its own routine and so that we can avoid locking non-anonymous objects.
Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D22472
|
#
2767c9f3 |
| 25-Nov-2019 |
Doug Moore <dougm@FreeBSD.org> |
Where 'current' is used to index over vm_map entries, use 'entry'. Where 'entry' is used to identify the starting point for iteration, use 'first_entry'. These are the naming conventions used in most
Where 'current' is used to index over vm_map entries, use 'entry'. Where 'entry' is used to identify the starting point for iteration, use 'first_entry'. These are the naming conventions used in most of the vm_map.c code. Where VM_MAP_ENTRY_FOREACH can be used, do so. Squeeze a few lines to fit in 80 columns. Where lines are being modified for these reasons, look to remove style(9) violations.
Reviewed by: alc, markj Differential Revision: https://reviews.freebsd.org/D22458
show more ...
|
#
32362449 |
| 24-Nov-2019 |
Konstantin Belousov <kib@FreeBSD.org> |
Ignore object->handle for OBJ_ANON objects.
Note that the change in vm_object_collapse() is arguably a correctness fix. We must not collapse into content-identity carrying objects.
Reviewed by: je
Ignore object->handle for OBJ_ANON objects.
Note that the change in vm_object_collapse() is arguably a correctness fix. We must not collapse into content-identity carrying objects.
Reviewed by: jeff Tested by: pho Sponsored by: The FreeBSD Foundation Differential revision: https://reviews.freebsd.org/D22467
show more ...
|
#
83704cc2 |
| 20-Nov-2019 |
Doug Moore <dougm@FreeBSD.org> |
Instead of looking up a predecessor or successor to the current map entry, when that entry has been seen already, keep the already-looked-up value in a variable and use that instead of looking it up
Instead of looking up a predecessor or successor to the current map entry, when that entry has been seen already, keep the already-looked-up value in a variable and use that instead of looking it up again.
Approved by: alc, markj (earlier version), kib (earlier version) Differential Revision: https://reviews.freebsd.org/D22348
show more ...
|
#
63967687 |
| 20-Nov-2019 |
Jeff Roberson <jeff@FreeBSD.org> |
Simplify anonymous memory handling with an OBJ_ANON flag. This eliminates reudundant complicated checks and additional locking required only for anonymous memory. Introduce vm_object_allocate_anon(
Simplify anonymous memory handling with an OBJ_ANON flag. This eliminates reudundant complicated checks and additional locking required only for anonymous memory. Introduce vm_object_allocate_anon() to create these objects. DEFAULT and SWAP objects now have the correct settings for non-anonymous consumers and so individual consumers need not modify the default flags to create super-pages and avoid ONEMAPPING/NOSPLIT.
Reviewed by: alc, dougm, kib, markj Tested by: pho Differential Revision: https://reviews.freebsd.org/D22119
show more ...
|
#
156e8654 |
| 17-Nov-2019 |
Konstantin Belousov <kib@FreeBSD.org> |
Add elf image flag to disable stack gap.
Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D22379
|
#
bdb90e76 |
| 17-Nov-2019 |
Doug Moore <dougm@FreeBSD.org> |
The loop in vm_map_protect that verifies that all transition map entries are stabilized, repeatedly verifies the same entry. Check each entry in turn.
Reviewed by: kib (code only), alc Tested by: ph
The loop in vm_map_protect that verifies that all transition map entries are stabilized, repeatedly verifies the same entry. Check each entry in turn.
Reviewed by: kib (code only), alc Tested by: pho MFC after: 7 days Differential Revision: https://reviews.freebsd.org/D22405
show more ...
|
#
7cdcf863 |
| 13-Nov-2019 |
Doug Moore <dougm@FreeBSD.org> |
Define wrapper functions vm_map_entry_{succ,pred} to act as wrappers around entry->{next,prev} when those are used for ordered list traversal, and use those wrapper functions everywhere. Where the ne
Define wrapper functions vm_map_entry_{succ,pred} to act as wrappers around entry->{next,prev} when those are used for ordered list traversal, and use those wrapper functions everywhere. Where the next field is used for maintaining a stack of deferred operations, #define defer_next to make that different usage clearer, and then use the 'right' pointer instead of 'next' for that purpose.
Approved by: markj Tested by: pho (as part of a larger patch) Differential Revision: https://reviews.freebsd.org/D22347
show more ...
|
#
461587dc |
| 09-Nov-2019 |
Doug Moore <dougm@FreeBSD.org> |
For vm_map, #defining DIAGNOSTIC to turn on full assertion-based consistency checking slows performance dramatically. This change reduces the number of assertions checked by completely walking the vm
For vm_map, #defining DIAGNOSTIC to turn on full assertion-based consistency checking slows performance dramatically. This change reduces the number of assertions checked by completely walking the vm_map tree only when the write-lock is released, and only then if the number of modifications to the tree since the last walk exceeds the number of tree nodes.
Reviewed by: alc, kib Tested by: pho Differential Revision: https://reviews.freebsd.org/D22163
show more ...
|
Revision tags: release/12.1.0 |
|
#
0012f373 |
| 15-Oct-2019 |
Jeff Roberson <jeff@FreeBSD.org> |
(4/6) Protect page valid with the busy lock.
Atomics are used for page busy and valid state when the shared busy is held. The details of the locking protocol and valid and dirty synchronization are
(4/6) Protect page valid with the busy lock.
Atomics are used for page busy and valid state when the shared busy is held. The details of the locking protocol and valid and dirty synchronization are in the updated vm_page.h comments.
Reviewed by: kib, markj Tested by: pho Sponsored by: Netflix, Intel Differential Revision: https://reviews.freebsd.org/D21594
show more ...
|
#
32731f2e |
| 14-Oct-2019 |
Doug Moore <dougm@FreeBSD.org> |
Correct a transcription error that broke GENERIC introduced in r353496.
|
#
721899b1 |
| 14-Oct-2019 |
Doug Moore <dougm@FreeBSD.org> |
Move the definition of _vm_map_assert_consistent so that it can use vm_map_free_{left,right} rather than re-implementing them. Use the VM_MAP_FOREACH macro where applicable. Fix some indentation.
Move the definition of _vm_map_assert_consistent so that it can use vm_map_free_{left,right} rather than re-implementing them. Use the VM_MAP_FOREACH macro where applicable. Fix some indentation.
Suggested by: kib (in a comment on D21964) Tested by: pho (as part of D21964) Differential Revision: https://reviews.freebsd.org/D22011
show more ...
|
#
8b3bc70a |
| 08-Oct-2019 |
Dimitry Andric <dim@FreeBSD.org> |
Merge ^/head r352764 through r353315.
|
#
df08823d |
| 27-Sep-2019 |
Konstantin Belousov <kib@FreeBSD.org> |
Improve MD page fault handlers.
Centralize calculation of signal and ucode delivered on unhandled page fault in new function vm_fault_trap(). MD trap_pfault() now almost always uses the signal numb
Improve MD page fault handlers.
Centralize calculation of signal and ucode delivered on unhandled page fault in new function vm_fault_trap(). MD trap_pfault() now almost always uses the signal numbers and error codes calculated in consistent MI way.
This introduces the protection fault compatibility sysctls to all non-x86 architectures which did not have that bug, but apparently they were already much more wrong in selecting delivered signals on protection violations.
Change the delivered signal for accesses to mapped area after the backing object was truncated. According to POSIX description for mmap(2): The system shall always zero-fill any partial page at the end of an object. Further, the system shall never write out any modified portions of the last page of an object which are beyond its end. References within the address range starting at pa and continuing for len bytes to whole pages following the end of an object shall result in delivery of a SIGBUS signal.
An implementation may generate SIGBUS signals when a reference would cause an error in the mapped object, such as out-of-space condition. Adjust according to the description, keeping the existing compatibility code for SIGSEGV/SIGBUS on protection failures.
For situations where kernel cannot handle page fault due to resource limit enforcement, SIGBUS with a new error code BUS_OBJERR is delivered. Also, provide a new error code SEGV_PKUERR for SIGSEGV on amd64 due to protection key access violation.
vm_fault_hold() is renamed to vm_fault(). Fixed some nits in trap_pfault()s like mis-interpreting Mach errors as errnos. Removed unneeded truncations of the fault addresses reported by hardware.
PR: 211924 Reviewed by: alc Discussed with: jilles, markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D21566
show more ...
|
#
419f843f |
| 17-Sep-2019 |
Dimitry Andric <dim@FreeBSD.org> |
Merge ^/head r352319 through r352435.
|