- NetBSD Manual Pages
CPU_NEED_RESCHED(9) NetBSD Kernel Developer's Manual CPU_NEED_RESCHED(9)
Powered by man-cgi 1.15, Panagiotis Christias
cpu_need_resched -- context switch notification
cpu_need_resched(struct cpu_info *ci, struct lwp *l, int flags);
The cpu_need_resched() function is the machine-independent interface for
the scheduler to notify machine-dependent code that a context switch from
the current LWP l, on the cpu ci, is required. This event may occur if a
higher priority LWP appears on the run queue or if the current LWP has
exceeded its time slice. l is the last LWP observed running on the CPU.
It may no longer be running, as cpu_need_resched() can be called without
holding scheduler locks.
If the RESCHED_KPREEMPT flag is specified in flags and __HAVE_PREEMPTION
C pre-processor macro is defined in <machine/intr.h>, machine-dependent
code should make a context switch happen as soon as possible even if the
CPU is running in kernel mode. If the RESCHED_KPREEMPT flag is not spec-
ified, then RESCHED_UPREEMPT is specified instead.
If the RESCHED_IDLE flag is specified in flags, the last thread observed
running on the CPU was the idle LWP.
If RESCHED_REMOTE flag is specified in flags, the request is not for the
current CPU. The opposite also holds true. If ci is not the current
processor, cpu_need_resched() typically issues an inter processor call to
the processor to make it notice the need of a context switch as soon as
cpu_need_resched() is always called with kernel preemption disabled.
Typically, the cpu_need_resched() function will perform the following
· Set a per-processor flag which is checked by userret(9) when
returning to user-mode execution.
· Post an asynchronous software trap (AST).
· Send an inter processor interrupt to wake up cpu_idle(9) and/or
force an user process across the user/kernel boundary, thus
making a trip through userret().
NetBSD 9.99 November 17, 2019 NetBSD 9.99
Modified for NetBSD
by Kimmo Suominen