Re: [PATCH] ACPI: Add the check of ADR flag in course of finding ACPI handle for PCI device

ykzhao
2010-07-21T02:19:34Z

On Tue, 2010-07-13 at 11:36 +0800, Zhao, Yakui wrote:
> From: Zhao Yakui <yakui.zhao@intel.com>
>
> The _ADR object is used to provide OSPM with the address of one device on its
> parent bus. In course of finding ACPI handle for the corresponding PCI device,
> we will firstly evaluate the _ADR object and then compare the two addresses to
> see whether it is the target ACPI device. But for one PCI device(0000:00:00.0)
> under the PCI root bridge, the corresponding address will be constructed as
> zero.In such case maybe the ACPI device without _ADR object will be misdetected
> and then be used to create the relationship between PCI device and ACPI device.

This patch is to fix the following bug:

https://bugzilla.kernel.org/show_bug.cgi?id=16422

>
> Signed-off-by: Zhao Yakui <yakui.zhao@intel.com>
> ---
> drivers/acpi/glue.c | 3 ++-
> 1 files changed, 2 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/acpi/glue.c b/drivers/acpi/glue.c
> index 4af6301..78b0164 100644
> --- a/drivers/acpi/glue.c
> +++ b/drivers/acpi/glue.c
> @@ -100,7 +100,8 @@ do_acpi_find_child(acpi_handle handle, u32 lvl, void *context, void **rv)
>
> status = acpi_get_object_info(handle, &info);
> if (ACPI_SUCCESS(status)) {
> - if (info->address == find->address)
> + if ((info->address == find->address)
> + && (info->valid & ACPI_VALID_ADR))
> find->handle = handle;
> kfree(info);
> }