Re: [PATCH] Set bit 1 in disabled processor's _STA

Glauber Costa
2009-05-17T15:01:18Z

On Sun, May 17, 2009 at 05:30:06PM +0300, Gleb Natapov wrote:
> On Sun, May 17, 2009 at 10:27:41AM -0300, Glauber Costa wrote:
> > On Sun, May 17, 2009 at 11:23:47AM +0300, Gleb Natapov wrote:
> > > On Fri, May 15, 2009 at 08:14:43AM -0400, Glauber Costa wrote:
> > > > This patch sets bits 1 in disabled processor's _STA.
> > > > According to the ACPI spec, this bit means:
> > > > "Set if the device is enabled and decoding its resources."
> > > >
> > > > Without it, Windows 2008 device manager shows the processors
> > > > as malfunctioning hardware.
> > > >
> > > If you uncheck "show hidden devices" option in View menu of the
> > > device manager you should see only enabled CPUs (bit 2 of _STA).
> > Yes, that is what happens. But then, by checking "show hidden devices",
> > the disabled processor appears, but are listed as malfunctioning.
> >
> > Because of this, SVVP tests break without this patch.
> >
> What kind of error?
Message 4/15/2009 4:07:04.635 AM Checking Intel Processor
Error 4/15/2009 4:07:04.635 AM ERROR: Device (QEMU Virtual CPU version 0.9.1)
is not currently enabled, or has some problem
File: Line: 0
Error Type: BOOL
Error Code: 0x1
Error Text: Error 0x00000001

Alternatively, if you go to the device manager, and "Show hidden processors",
you'll see the processors appear, but marked with a "!". Clicking into details,
there is a message saying that the device is malfunctioning.

>
> > > This patch breaks resume from hibernate on windows 2008/vista.
> > Oh god... do you have any idea why?
> >
> > which bits should we set for everything to work?
> Bit 1 should not be set :) What I think is happening windows finds more
> CPUs on resume then it had before hibernate.

It does not make sense to me at first. resume should not be a much different
use case than plain boot. If it does the right thing on bootup, why would it
mess up in case of resume?