Re: [PATCH 4.19 082/321] ACPI / LPSS: Ignore acpi_device_fix_up_power() return value

Rafael J. Wysocki
2019-12-04T23:02:37Z

On 12/4/2019 10:27 PM, Pavel Machek wrote:
> Hi!
>
>> From: Hans de Goede <hdegoede@redhat.com>
>>
>> [ Upstream commit 1a2fa02f7489dc4d746f2a15fb77b3ce1affade8 ]
>>
>> Ignore acpi_device_fix_up_power() return value. If we return an error
>> we end up with acpi_default_enumeration() still creating a platform-
>> device for the device and we end up with the device still being used
>> but without the special LPSS related handling which is not useful.
>>
>> Specicifically ignoring the error fixes the touchscreen no longer
>> working after a suspend/resume on a Prowise PT301 tablet.
> I'm pretty sure it does, but:
>
> a) do you believe this is right patch for -stable?

Yes.

> Should it get lot more testing in mainline

It's been in the mainline since 5.0 and I'm not aware of any bug reports
against it.

> as it.... may change things in a wrong way
> for someone else?
>
> b) if we are ignoring errors now, should we at least printk() to let
> the user know that something is wrong with the ACPI tables?

The question whether or not to print a message is orthogonal to this
patch.   Perhaps it would be useful to print a message on an error
regardless of whether or not the error is ignored, but then users would
need to know what to do about that error message.

>> diff --git a/drivers/acpi/acpi_lpss.c b/drivers/acpi/acpi_lpss.c
>> index b21c241aaab9f..30ccd94f87d24 100644
>> --- a/drivers/acpi/acpi_lpss.c
>> +++ b/drivers/acpi/acpi_lpss.c
>> @@ -665,12 +665,7 @@ static int acpi_lpss_create_device(struct acpi_device *adev,
>> * have _PS0 and _PS3 without _PSC (and no power resources), so
>> * acpi_bus_init_power() will assume that the BIOS has put them into D0.
>> */
>> - ret = acpi_device_fix_up_power(adev);
>> - if (ret) {
>> - /* Skip the device, but continue the namespace scan. */
>> - ret = 0;
>> - goto err_out;
>> - }
>> + acpi_device_fix_up_power(adev);
>
>
>> adev->driver_data = pdata;
>> pdev = acpi_create_platform_device(adev, dev_desc->properties);