Messages in this thread | | | Date | Tue, 25 Jun 2013 21:15:47 +0300 | Subject | Re: [PATCH 5/6] PCI: acpiphp: look _RMV method a bit deeper in the hierarhcy | From | Andy Shevchenko <> |
| |
On Tue, Jun 25, 2013 at 7:22 PM, Mika Westerberg <mika.westerberg@linux.intel.com> wrote:
> The acpiphp driver finds out whether the device is hotpluggable by checking > whether it has _RMV method behind it (and if it returns 1). However, at > least Acer Aspire S5 with Thunderbolt host router has this method placed > behind device called EPUP (endpoint upstream port?) and not directly behind > the root port as can be seen from the ASL code below:
[]
> +static acpi_status pcihp_evaluate_rmv(acpi_handle handle, u32 lvl, > + void *context, void **return_not_used) > +{ > + unsigned long long *removable = context; > + unsigned long long value; > + acpi_status status; > + > + status = acpi_evaluate_integer(handle, "_RMV", NULL, &value); > + if (ACPI_SUCCESS(status) && value) {
So, there is a chance the caller gets back uninitialized *context. Let's assume that is by design.
> + *removable = value; > + return AE_CTRL_TERMINATE; > + } > + return AE_OK; > +}
> +static bool pcihp_is_removable(acpi_handle handle, size_t depth) > +{ > + unsigned long long removable = 0; > + acpi_status status; > + > + status = pcihp_evaluate_rmv(handle, 0, &removable, NULL); > + if ((status == AE_CTRL_TERMINATE) && removable)
Here you already have removable not equal zero.
Internal braces could be removed, but it's up top you.
> + return true; > + > + acpi_walk_namespace(ACPI_TYPE_DEVICE, handle, depth, pcihp_evaluate_rmv, > + NULL, &removable, NULL); > + return !!removable; > +}
-- With Best Regards, Andy Shevchenko
| |