[haiku-appserver] Re: CPU-idle-loop and HALT instruction?

  • From: Stephan Assmus <superstippi@xxxxxx>
  • To: haiku-appserver@xxxxxxxxxxxxx
  • Date: Tue, 13 Dec 2005 01:11:25 +0100

On 2005-12-13 at 00:46:51 [+0100], Ingo Weinhold <bonefish@xxxxxxxxxxxxxxx> 
wrote:
> 
> On 2005-12-13 at 00:33:10 [+0100], Stephan Assmus <superstippi@xxxxxx> 
> wrote:
> > On 2005-12-13 at 00:26:58 [+0100], Ingo Weinhold 
> > <bonefish@xxxxxxxxxxxxxxx>
> > wrote:
> > > On 2005-12-12 at 23:52:06 [+0100], Stephan Assmus <superstippi@xxxxxx>
> > > wrote:
> > > > > > Or, is it already in there and can I somehow enable it?
> > > > > 
> > > > > From src/system/kernel/arch/x86/arch_cpu.c:
> > > > > 
> > > > > void
> > > > > arch_cpu_idle(void)
> > > > > {
> > > > >     switch (smp_get_num_cpus()) {
> > > > >         case 0:
> > > > >             panic("You need at least 1 CPU to run Haiku\n");
> > > > >         case 1:
> > > > >             asm("hlt");
> > > > >         default:
> > > > >             break;
> > > > >     }
> > > > > }
> > > > > 
> > > > > So, if you have more than one CPU, the only thing you can do is 
> > > > > change
> > > > > this
> > > > > code. There might be a reason, why it is implemented like it is,
> > > > > though.
> > > > > On
> > > > > the other hand there's also no comment that you computer will 
> > > > > explode
> > > > > when
> > > > > executing "hlt" on a multi CPU machine either...
> > > > 
> > > > I seem to recall that on my dual CPU machine, there is simply two idle
> > > > threads running. Or is my memory failing me?
> > > 
> > > No. The question was, what the idle threads are executing, though. And
> > > that's
> > > the above function (in an endless loop).
> > 
> > Yeah, but why would a person with more than one CPU have to change that
> > code,
> > if the real fix is making sure that there is simply as many idle threads 
> > as
> > CPUs? (Somewhere else form this code.) Or am I totally confused?
> 
> Yep, you're totally confused. ;-)
> There are as many idle threads as there are CPUs. Each of which executing 
> the
> above function in a endless loop. The real fix is to change the above code 
> to
> also execute "hlt" when there's more than one CPU. The only suspicious thing
> is why this hadn't been done in the first place.

Ah!! Now I understand. Thanks. Doh.

Best regards,
-Stephan

Other related posts: