Re: [PATCH v2] ACPI:add _STA evaluating at do_acpi_find_child()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



2013/5/28 Rafael J. Wysocki <rjw@xxxxxxx>:
> On Tuesday, May 28, 2013 11:22:17 AM jeff.wu@xxxxxxx wrote:
>> From: Jeff Wu <zlinuxkernel@xxxxxxxxx>
>>
>> v2:
>> 1).If it's only one matching device, whether the deivce status is enabled or disabled,
>>    do_acpi_find_child() return its' handle
>> 2).If it's more than one matching devices, do_acpi_find_child() return the first
>>    enabled device handle
>> The idea mail thread:
>> http://wwww.spinics.net/lists/linux-acpi/msg43481.html
>
> The information what's changed in v2 with respect to v1 is rather not
> interesting to the future readers of the changelog, so can you please rearrange
> it as one comprehensive description of the patch?
Ok, i will rearrange it and send out the patch.
Thanks
Jeff wu

>
> The patch itself looks good to me.
That‘s great.

>
> Thanks,
> Rafael
>
>
>> v1:
>> Once do_acpi_find_child() found the first matching handle, it makes the acpi_get_child()
>> loop stop and return the matching handle. But, at some of the platforms, a "_ADR" is
>> with the multiple devices, and if one is enabled, the others will be disabled.
>> Just like a case:
>> Address : 0x1FFFF ; handle : SB_PCI0.SATA.DEV0
>> Address : 0x1FFFF ; handle : SB_PCI0.SATA.DEV1
>> Address : 0x1FFFF ; handle : SB_PCI0.SATA.DEV2
>>
>> If DEV0 and DEV1 are disabled and DEV2 is enabled, the target is to get DEV2 handle, but
>> actually it always return the first disabled device DEV0 handle. So add a _STA evaluating
>> at do_acpi_find_child() to check the device status. If the object exists, but it is disabled,
>> acpi_get_child() will continue looping to get the correct handle that the object exists and
>> is enabled.
>>
>>
>> Signed-off-by: Jeff Wu <zlinuxkernel@xxxxxxxxx>
>> ---
>>  drivers/acpi/glue.c | 6 ++++--
>>  1 file changed, 4 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/acpi/glue.c b/drivers/acpi/glue.c
>> index 40a84cc..51ca764 100644
>> --- a/drivers/acpi/glue.c
>> +++ b/drivers/acpi/glue.c
>> @@ -81,13 +81,15 @@ static struct acpi_bus_type *acpi_get_bus_type(struct device *dev)
>>  static acpi_status do_acpi_find_child(acpi_handle handle, u32 lvl_not_used,
>>                                     void *addr_p, void **ret_p)
>>  {
>> -     unsigned long long addr;
>> +     unsigned long long addr, sta;
>>       acpi_status status;
>>
>>       status = acpi_evaluate_integer(handle, METHOD_NAME__ADR, NULL, &addr);
>>       if (ACPI_SUCCESS(status) && addr == *((u64 *)addr_p)) {
>>               *ret_p = handle;
>> -             return AE_CTRL_TERMINATE;
>> +             status = acpi_bus_get_status_handle(handle, &sta);
>> +             if (ACPI_SUCCESS(status) && (sta & ACPI_STA_DEVICE_ENABLED))
>> +                     return AE_CTRL_TERMINATE;
>>       }
>>       return AE_OK;
>>  }
>>
> --
> I speak only for myself.
> Rafael J. Wysocki, Intel Open Source Technology Center.
--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux