Disable using wait in cpu_idle() until a better solution to timer and
interrupt handling can be implemented.
This commit is contained in:
parent
e7b8707889
commit
373e645211
@ -485,9 +485,24 @@ spinlock_exit(void)
|
|||||||
/*
|
/*
|
||||||
* call platform specific code to halt (until next interrupt) for the idle loop
|
* call platform specific code to halt (until next interrupt) for the idle loop
|
||||||
*/
|
*/
|
||||||
|
/*
|
||||||
|
* This is disabled because of three issues:
|
||||||
|
*
|
||||||
|
* + By calling critical_enter(), any interrupt which occurs after that but
|
||||||
|
* before the wait instruction will be handled but not serviced (in the case
|
||||||
|
* of a netisr) because preemption is not allowed at this point;
|
||||||
|
* + Any fast interrupt handler which schedules an immediate or fast callout
|
||||||
|
* will not occur until the wait instruction is interrupted, as the clock
|
||||||
|
* has already been set by cpu_idleclock();
|
||||||
|
* + There is currently no known way to atomically enable interrupts and call
|
||||||
|
* wait, which is how the i386/amd64 code gets around (1). Thus even if
|
||||||
|
* interrupts were disabled and reenabled just before the wait call, any
|
||||||
|
* interrupt that did occur may not interrupt wait.
|
||||||
|
*/
|
||||||
void
|
void
|
||||||
cpu_idle(int busy)
|
cpu_idle(int busy)
|
||||||
{
|
{
|
||||||
|
#if 0
|
||||||
KASSERT((mips_rd_status() & MIPS_SR_INT_IE) != 0,
|
KASSERT((mips_rd_status() & MIPS_SR_INT_IE) != 0,
|
||||||
("interrupts disabled in idle process."));
|
("interrupts disabled in idle process."));
|
||||||
KASSERT((mips_rd_status() & MIPS_INT_MASK) != 0,
|
KASSERT((mips_rd_status() & MIPS_INT_MASK) != 0,
|
||||||
@ -502,6 +517,7 @@ cpu_idle(int busy)
|
|||||||
cpu_activeclock();
|
cpu_activeclock();
|
||||||
critical_exit();
|
critical_exit();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
Loading…
Reference in New Issue
Block a user