CPU_NEED_RESCHED(9) Kernel Developer's Manual CPU_NEED_RESCHED(9)

cpu_need_reschedcontext switch notification

#include <sys/cpu.h>

void
cpu_need_resched(struct cpu_info *ci, struct lwp *l, int flags);

The () 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 specified, 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, () typically issues an inter processor call to the processor to make it notice the need of a context switch as soon as possible.

() is always called with kernel preemption disabled.

Typically, the () function will perform the following operations:

sched_4bsd(9), userret(9)

November 17, 2019 NetBSD 11.0