mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-16 10:20:30 +00:00
0c0b25ae91
than as one-off hacks in various other parts of the kernel: - Add a function maybe_preempt() that is called from sched_add() to determine if a thread about to be added to a run queue should be preempted to directly. If it is not safe to preempt or if the new thread does not have a high enough priority, then the function returns false and sched_add() adds the thread to the run queue. If the thread should be preempted to but the current thread is in a nested critical section, then the flag TDF_OWEPREEMPT is set and the thread is added to the run queue. Otherwise, mi_switch() is called immediately and the thread is never added to the run queue since it is switch to directly. When exiting an outermost critical section, if TDF_OWEPREEMPT is set, then clear it and call mi_switch() to perform the deferred preemption. - Remove explicit preemption from ithread_schedule() as calling setrunqueue() now does all the correct work. This also removes the do_switch argument from ithread_schedule(). - Do not use the manual preemption code in mtx_unlock if the architecture supports native preemption. - Don't call mi_switch() in a loop during shutdown to give ithreads a chance to run if the architecture supports native preemption since the ithreads will just preempt DELAY(). - Don't call mi_switch() from the page zeroing idle thread for architectures that support native preemption as it is unnecessary. - Native preemption is enabled on the same archs that supported ithread preemption, namely alpha, i386, and amd64. This change should largely be a NOP for the default case as committed except that we will do fewer context switches in a few cases and will avoid the run queues completely when preempting. Approved by: scottl (with his re@ hat) |
||
---|---|---|
.. | ||
pc | ||
_inttypes.h | ||
_limits.h | ||
_stdint.h | ||
_types.h | ||
alpha_cpu.h | ||
asm.h | ||
atomic.h | ||
bootinfo.h | ||
bus_memio.h | ||
bus_pio.h | ||
bus.h | ||
bwx.h | ||
chipset.h | ||
clock.h | ||
clockvar.h | ||
cpu.h | ||
cpuconf.h | ||
cpufunc.h | ||
critical.h | ||
db_machdep.h | ||
elf.h | ||
endian.h | ||
exec.h | ||
float.h | ||
floatingpoint.h | ||
fpu.h | ||
frame.h | ||
ieee.h | ||
ieeefp.h | ||
in_cksum.h | ||
inst.h | ||
intr.h | ||
intrcnt.h | ||
ioctl_bt848.h | ||
ioctl_meteor.h | ||
limits.h | ||
md_var.h | ||
mutex.h | ||
pal.h | ||
param.h | ||
pcb.h | ||
pcpu.h | ||
pmap.h | ||
proc.h | ||
profile.h | ||
prom.h | ||
pte.h | ||
ptrace.h | ||
reg.h | ||
reloc.h | ||
resource.h | ||
rpb.h | ||
runq.h | ||
setjmp.h | ||
sf_buf.h | ||
sgmap.h | ||
sigframe.h | ||
signal.h | ||
smp.h | ||
stdarg.h | ||
swiz.h | ||
sysarch.h | ||
ucontext.h | ||
varargs.h | ||
vmparam.h |