Date: Thu, 27 Apr 2000 10:01:08 -0600 From: Steve Passe <smp@csn.net> To: Luoqi Chen <luoqi@watermarkgroup.com> Cc: bright@wintelcom.net, djb@ifa.au.dk, freebsd-smp@FreeBSD.ORG Subject: Re: hlt instructions and temperature issues Message-ID: <200004271601.KAA24638@Ilsa.StevesCafe.com> In-Reply-To: Your message of "Thu, 27 Apr 2000 11:33:50 EDT." <200004271533.e3RFXoI01828@lor.watermarkgroup.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Hi, > No, we don't use hlt instruction on SMP. We could, but I guess nobody > bothered to work on it. It should be fairly straight forward: prior to > hlt, lower TPR priority so that this processor is first in line to > receive an interrupt. If you are interested, you may give the follwing > patch a try. > > -lq > > Index: swtch.s > =================================================================== > RCS file: /home/ncvs/src/sys/i386/i386/swtch.s,v > retrieving revision 1.91 > diff -u -r1.91 swtch.s > --- swtch.s 2000/03/29 06:15:38 1.91 > +++ swtch.s 2000/04/27 15:31:11 > @@ -258,9 +258,14 @@ > > ENTRY(default_halt) > sti > -#ifndef SMP > - hlt /* XXX: until a wakeup IPI */ > +#ifdef SMP > +#ifdef CHEAP_TPR > + movl $0, lapic_tpr > +#else > + andl $~APIC_TPR_PRIO, lapic_tpr > +#endif /** CHEAP_TPR */ > #endif > + hlt > ret That won't help, we already make it first candidate for an INT in idle(): 2: /* enable intrs for a halt */ movl $0, lapic_tpr /* 1st candidate for an INT */ call *_hlt_vector /* wait for interrupt */ cli jmp idle_loop The problem is that if a CPU is in the hlt'd state it will never re-enter cpu_switch() to be able to be assigned a new process, at least until it happens to catch an INT that wakes it up and leaves it in cpu_switch at a point where there is another ready process. It isn't guaranteed that the first INT will be sent to the halted CPU, especially in a >2 CPU machine. As I stated before, code is needed that sends a wakeup IPI from cpu_switch() when the running CPU detects both a hlt'de CPU and more than 1 READY process in the que. -- Steve Passe | powered by smp@csn.net | Symmetric MultiProcessor FreeBSD To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-smp" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200004271601.KAA24638>