o Remove the acquisition and release of Giant from the idle priority thread
that pre-zeroes free pages. o Remove GIANT_REQUIRED from some low-level page queue functions. (Instead assertions on the page queue lock are being added to the higher-level functions, like vm_page_wire(), etc.) In collaboration with: peter
This commit is contained in:
parent
5acf5031ca
commit
f23050633f
@ -195,7 +195,6 @@ _vm_pageq_find(int basequeue, int index)
|
||||
vm_page_t m = NULL;
|
||||
struct vpgqueues *pq;
|
||||
|
||||
GIANT_REQUIRED;
|
||||
pq = &vm_page_queues[basequeue];
|
||||
|
||||
/*
|
||||
@ -219,8 +218,6 @@ vm_pageq_find(int basequeue, int index, boolean_t prefer_zero)
|
||||
{
|
||||
vm_page_t m;
|
||||
|
||||
GIANT_REQUIRED;
|
||||
|
||||
#if PQ_L2_SIZE > 1
|
||||
if (prefer_zero) {
|
||||
m = TAILQ_LAST(&vm_page_queues[basequeue+index].pl, pglist);
|
||||
|
@ -74,18 +74,15 @@ vm_page_zero_idle(void)
|
||||
static int free_rover;
|
||||
vm_page_t m;
|
||||
|
||||
mtx_lock(&Giant);
|
||||
mtx_lock_spin(&vm_page_queue_free_mtx);
|
||||
zero_state = 0;
|
||||
m = vm_pageq_find(PQ_FREE, free_rover, FALSE);
|
||||
if (m != NULL && (m->flags & PG_ZERO) == 0) {
|
||||
vm_pageq_remove_nowakeup(m);
|
||||
mtx_unlock_spin(&vm_page_queue_free_mtx);
|
||||
mtx_unlock(&Giant);
|
||||
pmap_zero_page_idle(m);
|
||||
mtx_lock(&Giant);
|
||||
mtx_lock_spin(&vm_page_queue_free_mtx);
|
||||
vm_page_flag_set(m, PG_ZERO);
|
||||
m->flags |= PG_ZERO;
|
||||
vm_pageq_enqueue(PQ_FREE + m->pc, m);
|
||||
++vm_page_zero_count;
|
||||
++cnt_prezero;
|
||||
@ -94,7 +91,6 @@ vm_page_zero_idle(void)
|
||||
}
|
||||
free_rover = (free_rover + PQ_PRIME2) & PQ_L2_MASK;
|
||||
mtx_unlock_spin(&vm_page_queue_free_mtx);
|
||||
mtx_unlock(&Giant);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user