Li, Aubrey wrote:
>> I went ahead and created CR 6605212 SpeedStep can't find _PSS for
>> Processor declared by Alias.
>>
>> As I mention in the evaluation, we have a possible fix. But until we
>> get a little more information, I'm not convinced it's the right
>> one. Aubrey,
>> did you get any feedback from Bob?
>>
>>
> Mark - I think the fix I suggested it's right.
> The first object should be mapped as the ACPI handler.
>
I'm sure that your assertion that the source object will be precede the
alias object in the namespace is true because the ACPI spec says the
following about an Alias:
AliasObject is created as an alias of SourceObject in the namespace. The
SourceObject name must already exist in the namespace. If the alias is
to a name within the same definition block, the SourceObject name must
be logically ahead of this definition in the block.
But it also says:
Creates a new object named AliasObject that refers to and acts
exactly the same as SourceObject.
Your fix relies on the first part, but ignores the second part.
I have no doubt that evaluating the _PSD using the source object works.
However, I'd like an explanation as to why we can't evaluate the _PSD
using the Alias. Integrating the suggested fix without fully
understanding the broken behavior would be inappropriate.
> Since the object is alias, it should be declared after the source
> object.
> That means the Alias object must always be behind of the source object.
> So, IMHO, this fix is correct.
>
> diff -r b6d0b03690de usr/src/uts/intel/io/acpica/osl.c
> --- a/usr/src/uts/intel/io/acpica/osl.c Mon Aug 20 17:45:19 2007 -0700
> +++ b/usr/src/uts/intel/io/acpica/osl.c Fri Sep 07 05:54:09 2007 +0800
> @@ -1337,7 +1337,8 @@ acpica_add_processor_to_map(UINT32 acpi_
> continue;
>
> if (cpu_map[cpu_id]->mpa->ProcessorId == acpi_id) {
> - cpu_map[cpu_id]->obj = obj;
> + if (cpu_map[cpu_id]->obj == NULL)
> + cpu_map[cpu_id]->obj = obj;
> break;
> }
> }
>
> Does this make sense?
>
Yes, I understand the fix. I just don't understand why it is necessary.
Mark