Two changes to kmem_malloc():
- Use VM_ALLOC_WIRED. - Perform vm_page_wakeup() after pmap_enter(), like we do everywhere else.
This commit is contained in:
parent
c8029eccc0
commit
a623fedef7
@ -354,9 +354,9 @@ kmem_malloc(map, size, flags)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
if ((flags & (M_NOWAIT|M_USE_RESERVE)) == M_NOWAIT)
|
if ((flags & (M_NOWAIT|M_USE_RESERVE)) == M_NOWAIT)
|
||||||
pflags = VM_ALLOC_INTERRUPT;
|
pflags = VM_ALLOC_INTERRUPT | VM_ALLOC_WIRED;
|
||||||
else
|
else
|
||||||
pflags = VM_ALLOC_SYSTEM;
|
pflags = VM_ALLOC_SYSTEM | VM_ALLOC_WIRED;
|
||||||
|
|
||||||
if (flags & M_ZERO)
|
if (flags & M_ZERO)
|
||||||
pflags |= VM_ALLOC_ZERO;
|
pflags |= VM_ALLOC_ZERO;
|
||||||
@ -391,6 +391,7 @@ retry:
|
|||||||
m = vm_page_lookup(kmem_object,
|
m = vm_page_lookup(kmem_object,
|
||||||
OFF_TO_IDX(offset + i));
|
OFF_TO_IDX(offset + i));
|
||||||
vm_page_lock_queues();
|
vm_page_lock_queues();
|
||||||
|
vm_page_unwire(m, 0);
|
||||||
vm_page_free(m);
|
vm_page_free(m);
|
||||||
vm_page_unlock_queues();
|
vm_page_unlock_queues();
|
||||||
}
|
}
|
||||||
@ -431,16 +432,13 @@ retry:
|
|||||||
vm_object_lock(kmem_object);
|
vm_object_lock(kmem_object);
|
||||||
m = vm_page_lookup(kmem_object, OFF_TO_IDX(offset + i));
|
m = vm_page_lookup(kmem_object, OFF_TO_IDX(offset + i));
|
||||||
vm_object_unlock(kmem_object);
|
vm_object_unlock(kmem_object);
|
||||||
vm_page_lock_queues();
|
|
||||||
vm_page_wire(m);
|
|
||||||
vm_page_wakeup(m);
|
|
||||||
vm_page_unlock_queues();
|
|
||||||
/*
|
/*
|
||||||
* Because this is kernel_pmap, this call will not block.
|
* Because this is kernel_pmap, this call will not block.
|
||||||
*/
|
*/
|
||||||
pmap_enter(kernel_pmap, addr + i, m, VM_PROT_ALL, 1);
|
pmap_enter(kernel_pmap, addr + i, m, VM_PROT_ALL, 1);
|
||||||
vm_page_lock_queues();
|
vm_page_lock_queues();
|
||||||
vm_page_flag_set(m, PG_WRITEABLE | PG_REFERENCED);
|
vm_page_flag_set(m, PG_WRITEABLE | PG_REFERENCED);
|
||||||
|
vm_page_wakeup(m);
|
||||||
vm_page_unlock_queues();
|
vm_page_unlock_queues();
|
||||||
}
|
}
|
||||||
vm_map_unlock(map);
|
vm_map_unlock(map);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user