Don't hold the scheduler lock while doing context switches. Instead we unlock after selecting the new thread and switch within a spinlock section leaving interrupts and preemption disabled to prevent local concurrency. This means that mi_switch() is entered with the thread locked but returns without. This dramatically simplifies scheduler locking because we will not hold the schedlock while spinning on blocked lock in switch. This change has not been made to 4BSD but in principle it would be more straightforward. Discussed with: markj Reviewed by: kib Tested by: pho Differential Revision: https://reviews.freebsd.org/D22778 |
||
---|---|---|
.. | ||
atheros | ||
beri | ||
broadcom | ||
cavium | ||
conf | ||
include | ||
ingenic | ||
malta | ||
mediatek | ||
mips | ||
nlm |