Re: [PATCH 3/4] ACPI: Check for any matching CID when walking namespace.

Andrew Patterson
2008-01-23T19:48:50Z

On Wed, 2008-01-23 at 14:39 -0500, Len Brown wrote:
> Right Greg, this is not only an ACPI patch,
> but a patch that touches the ACPICA core.
> Lets get Bob to see if it applies to the latest upstream ACPICA code.
>
> Andrew,
> Do you give Intel permission to accept this patch under
> both licenses on the top of the file, such that we can
> re-distribute it in ACPICA to all the OSs that use ACPICA?
>

Yes, by all means.

Andrew Patterson
Hewlett-Packard

> (hey, and check out the spiffy new acpica home page: http://acpica.org/ )
>
> thanks,
> -Len
>
> On Tuesday 22 January 2008 19:18, Andrew Patterson wrote:
> > From: Andrew Patterson <andrew.patterson@hp.com>
> >
> > The callback function acpi_ns_get_device_callback called from
> > acpi_get_devices() will check CID's if the HID does not match. This code
> > has a bug where it requires that all CIDs match the HID. Changed the code
> > so that any CID match will do.
> >
> > Signed-off-by: Andrew Patterson <andrew.patterson@hp.com>
> > ---
> >
> > drivers/acpi/namespace/nsxfeval.c | 11 ++++++++---
> > 1 files changed, 8 insertions(+), 3 deletions(-)
> >
> > diff --git a/drivers/acpi/namespace/nsxfeval.c b/drivers/acpi/namespace/nsxfeval.c
> > index f39fbc6..e562b24 100644
> > --- a/drivers/acpi/namespace/nsxfeval.c
> > +++ b/drivers/acpi/namespace/nsxfeval.c
> > @@ -443,6 +443,7 @@ acpi_ns_get_device_callback(acpi_handle obj_handle,
> > struct acpica_device_id hid;
> > struct acpi_compatible_id_list *cid;
> > acpi_native_uint i;
> > + int found;
> >
> > status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
> > if (ACPI_FAILURE(status)) {
> > @@ -496,16 +497,20 @@ acpi_ns_get_device_callback(acpi_handle obj_handle,
> >
> > /* Walk the CID list */
> >
> > + found = 0;
> > for (i = 0; i < cid->count; i++) {
> > if (ACPI_STRNCMP(cid->id[i].value, info->hid,
> > sizeof(struct
> > - acpi_compatible_id)) !=
> > + acpi_compatible_id)) ==
> > 0) {
> > - ACPI_FREE(cid);
> > - return (AE_OK);
> > + found = 1;
> > + break;
> > }
> > }
> > ACPI_FREE(cid);
> > + if (!found) {
> > + return (AE_OK);
> > + }
> > }
> > }
> >
> >