688ebe120c
the process of exiting the kernel. The ast() function now loops as long as the PS_ASTPENDING or PS_NEEDRESCHED flags are set. It returns with preemption disabled so that any further AST's that arrive via an interrupt will be delayed until the low-level MD code returns to user mode. - Use u_int's to store the tick counts for profiling purposes so that we do not need sched_lock just to read p_sticks. This also closes a problem where the call to addupc_task() could screw up the arithmetic due to non-atomic reads of p_sticks. - Axe need_proftick(), aston(), astoff(), astpending(), need_resched(), clear_resched(), and resched_wanted() in favor of direct bit operations on p_sflag. - Fix up locking with sched_lock some. In addupc_intr(), use sched_lock to ensure pr_addr and pr_ticks are updated atomically with setting PS_OWEUPC. In ast() we clear pr_ticks atomically with clearing PS_OWEUPC. We also do not grab the lock just to test a flag. - Simplify the handling of Giant in ast() slightly. Reviewed by: bde (mostly) |
||
---|---|---|
.. | ||
_limits.h | ||
ansi.h | ||
asm.h | ||
atomic.h | ||
bat.h | ||
bootinfo.h | ||
bus.h | ||
clock.h | ||
cpu.h | ||
cpufunc.h | ||
db_machdep.h | ||
elf.h | ||
endian.h | ||
exec.h | ||
fpu.h | ||
frame.h | ||
globaldata.h | ||
globals.h | ||
intr.h | ||
ipl.h | ||
limits.h | ||
md_var.h | ||
mutex.h | ||
openpicreg.h | ||
param.h | ||
pcb.h | ||
pcpu.h | ||
pio.h | ||
pmap.h | ||
powerpc.h | ||
proc.h | ||
psl.h | ||
pte.h | ||
ptrace.h | ||
reg.h | ||
reloc.h | ||
resource.h | ||
setjmp.h | ||
sigframe.h | ||
signal.h | ||
smp.h | ||
stdarg.h | ||
trap.h | ||
types.h | ||
ucontext.h | ||
varargs.h | ||
vmparam.h |