Errr, this doesn't really make sense, and if anything is probably
hiding the problem. Also, this change will potentially increase
interrupt latency even further on SMP machines.
Interrupts are disabled if Giant is busy in vm_page_zero_idle, thus
the idle proc calls mi_switch with interrupts disabled and the process
being scheduled starts running with interrupts disabled.
I suggest removing the asm statement from vm_page_zero_idle as a first
stage in rewriting vm_page_zero_idle.
Ahhhh.. Thanks for the tip. I didn't know that vm_page_zero_idle
was this evil. Yuck. In fact, vm_page_zero_idle() is no longer called
with interrupts disabled, so all the interrupt foolishness can go away.