vm_page_queue_free_mtx is a spin mutex, not a normal sleep mutex.
I do not know why this didn't panic my box, but I have most certainly been using it: peter@overcee[3:14pm]~src/sys/i386/i386-110> sysctl -a | grep zero vm.stats.misc.zero_page_count: 2235 vm.stats.misc.cnt_prezero: 638951 vm.idlezero_enable: 1 vm.idlezero_maxrun: 16 Submitted by: Tor.Egge@cvsup.no.freebsd.org Approved by: Tor's patches are never wrong. :-)
This commit is contained in:
parent
b428c5fd23
commit
5e13bcd6c4
@ -79,18 +79,18 @@ vm_page_zero_idle(void)
|
||||
vm_page_t m;
|
||||
|
||||
mtx_lock(&Giant);
|
||||
mtx_lock(&vm_page_queue_free_mtx);
|
||||
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_page_queues[m->queue].lcnt--;
|
||||
TAILQ_REMOVE(&vm_page_queues[m->queue].pl, m, pageq);
|
||||
m->queue = PQ_NONE;
|
||||
mtx_unlock(&vm_page_queue_free_mtx);
|
||||
mtx_unlock_spin(&vm_page_queue_free_mtx);
|
||||
mtx_unlock(&Giant);
|
||||
pmap_zero_page_idle(m);
|
||||
mtx_lock(&Giant);
|
||||
mtx_lock(&vm_page_queue_free_mtx);
|
||||
mtx_lock_spin(&vm_page_queue_free_mtx);
|
||||
vm_page_flag_set(m, PG_ZERO);
|
||||
m->queue = PQ_FREE + m->pc;
|
||||
vm_page_queues[m->queue].lcnt++;
|
||||
@ -102,7 +102,7 @@ vm_page_zero_idle(void)
|
||||
zero_state = 1;
|
||||
}
|
||||
free_rover = (free_rover + PQ_PRIME2) & PQ_L2_MASK;
|
||||
mtx_unlock(&vm_page_queue_free_mtx);
|
||||
mtx_unlock_spin(&vm_page_queue_free_mtx);
|
||||
mtx_unlock(&Giant);
|
||||
return 1;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user