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

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

 



On Monday, June 03, 2013 11:08:33 PM Jeff Wu wrote:
> Hi Rafael,
> 
> How about the patch ?Thanks.

It's in my linux-next branch.  I modified the changelog slightly, though.

Thanks,
Rafael


> On Wed, May 29, 2013 at 2:31 PM,  <jeff.wu@xxxxxxx> wrote:
> > From: Jeff Wu <zlinuxkernel@xxxxxxxxx>
> >
> > v2:
> > To make do_acpi_find_child() return the disabled device if it's only one matching device.
> > Rafael suggested that it had better to make do_acpi_find_child() return the disabled device
> > if it's only one matching or the first enabled matching deivce otherwise.
> > 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>
> > ---
> > Changes from v2:
> > * Rearrange the changelog description.
> >
> > ---
> >  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;
> >  }
> > --
> > 1.8.1.2
> >
> >
-- 
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