From 3ef5867e0b39050f8fd12ca962467d8d1c30263c Mon Sep 17 00:00:00 2001 From: nyan Date: Sat, 30 Mar 2002 11:14:52 +0000 Subject: MFi386: revision 1.506. --- sys/pc98/i386/machdep.c | 13 +++++++++---- sys/pc98/pc98/machdep.c | 13 +++++++++---- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/sys/pc98/i386/machdep.c b/sys/pc98/i386/machdep.c index ed253cb..ddd958c 100644 --- a/sys/pc98/i386/machdep.c +++ b/sys/pc98/i386/machdep.c @@ -815,9 +815,14 @@ cpu_idle(void) #ifndef SMP if (cpu_idle_hlt) { disable_intr(); - if (procrunnable()) { + if (procrunnable()) { enable_intr(); } else { + /* + * we must absolutely guarentee that hlt is the + * absolute next instruction after sti or we + * introduce a timing window. + */ __asm __volatile("sti; hlt"); } } @@ -1758,9 +1763,9 @@ init386(first) * Initialize mutexes. * * icu_lock: in order to allow an interrupt to occur in a critical - * section, to set pcpu->ipending (etc...) properly, we - * must be able to get the icu lock, so it can't be under - * witness. + * section, to set pcpu->ipending (etc...) properly, we + * must be able to get the icu lock, so it can't be + * under witness. */ mtx_init(&Giant, "Giant", MTX_DEF | MTX_RECURSE); mtx_init(&sched_lock, "sched lock", MTX_SPIN | MTX_RECURSE); diff --git a/sys/pc98/pc98/machdep.c b/sys/pc98/pc98/machdep.c index ed253cb..ddd958c 100644 --- a/sys/pc98/pc98/machdep.c +++ b/sys/pc98/pc98/machdep.c @@ -815,9 +815,14 @@ cpu_idle(void) #ifndef SMP if (cpu_idle_hlt) { disable_intr(); - if (procrunnable()) { + if (procrunnable()) { enable_intr(); } else { + /* + * we must absolutely guarentee that hlt is the + * absolute next instruction after sti or we + * introduce a timing window. + */ __asm __volatile("sti; hlt"); } } @@ -1758,9 +1763,9 @@ init386(first) * Initialize mutexes. * * icu_lock: in order to allow an interrupt to occur in a critical - * section, to set pcpu->ipending (etc...) properly, we - * must be able to get the icu lock, so it can't be under - * witness. + * section, to set pcpu->ipending (etc...) properly, we + * must be able to get the icu lock, so it can't be + * under witness. */ mtx_init(&Giant, "Giant", MTX_DEF | MTX_RECURSE); mtx_init(&sched_lock, "sched lock", MTX_SPIN | MTX_RECURSE); -- cgit v1.1