public inbox for linux-acpi@vger.kernel.org
 help / color / mirror / Atom feed
From: "Rafael J. Wysocki" <rafael.j.wysocki@intel.com>
To: "Kaneda, Erik" <erik.kaneda@intel.com>
Cc: Maximilian Luz <luzmaximilian@gmail.com>,
	Hans de Goede <hdegoede@redhat.com>,
	"Moore, Robert" <robert.moore@intel.com>,
	Mattia Dongili <malattia@linux.it>,
	William Bader <williambader@hotmail.com>,
	Dominik Mierzejewski <dominik@greysector.net>,
	linux-acpi <linux-acpi@vger.kernel.org>,
	Darren Hart <dvhart@infradead.org>,
	Andy Shevchenko <andy@infradead.org>,
	"platform-driver-x86@vger.kernel.org" 
	<platform-driver-x86@vger.kernel.org>
Subject: Re: 5.6 regression caused by "ACPICA: Dispatcher: always generate buffer objects for ASL create_field() operator"
Date: Wed, 6 May 2020 19:21:50 +0200	[thread overview]
Message-ID: <7fb8757c-41e7-3be0-5552-80696559bdfe@intel.com> (raw)
In-Reply-To: <BYAPR11MB3096868FE8523B2F94A50F9DF0A70@BYAPR11MB3096.namprd11.prod.outlook.com>

On 5/6/2020 12:11 AM, Kaneda, Erik wrote:
>
>> -----Original Message-----
>> From: linux-acpi-owner@vger.kernel.org <linux-acpi-
>> owner@vger.kernel.org> On Behalf Of Maximilian Luz
>> Sent: Tuesday, May 5, 2020 6:50 AM
>> To: Hans de Goede <hdegoede@redhat.com>; Wysocki, Rafael J
>> <rafael.j.wysocki@intel.com>; Moore, Robert <robert.moore@intel.com>;
>> Kaneda, Erik <erik.kaneda@intel.com>; Mattia Dongili <malattia@linux.it>;
>> William Bader <williambader@hotmail.com>; Dominik Mierzejewski
>> <dominik@greysector.net>
>> Cc: linux-acpi <linux-acpi@vger.kernel.org>; Darren Hart
>> <dvhart@infradead.org>; Andy Shevchenko <andy@infradead.org>;
>> platform-driver-x86@vger.kernel.org
>> Subject: Re: 5.6 regression caused by "ACPICA: Dispatcher: always generate
>> buffer objects for ASL create_field() operator"
>>
>> On 5/5/20 2:55 PM, Hans de Goede wrote:
>>> Hi All,
>>>
>>> Commit 6d232b29cfce ("ACPICA: Dispatcher: always generate buffer
>>> objects for ASL create_field() operator") has dropped the automatic
>>> conversion of small buffers into integers.
>>>
>>> But some drivers relied on this automatic conversion, these drivers
>>> have checks like this:
>>>
>>>           if (object->type != ACPI_TYPE_INTEGER) {
>>>                   pr_warn("Invalid acpi_object: expected 0x%x got 0x%x\n",
>>>                                   ACPI_TYPE_INTEGER, object->type);
>>>                   kfree(object);
>>>                   return -EINVAL;
>>>           }
>>>
>>> This specific bit comes from the sony-laptop (platform/x86) code, the
>>> ACPICA change has broken this code, causing systems using this driver
>>> to hang on resume from suspend.
>>>
>>> We have multiple bug-reports open for this already:
>>>
>>> https://bugzilla.kernel.org/show_bug.cgi?id=207491
>>> https://bugzilla.redhat.com/show_bug.cgi?id=1829096
>>> https://bugzilla.redhat.com/show_bug.cgi?id=1830150
>>>
>>> Mattia Dongili, the sony-laptop driver has already submitted a fix for
>>> this upstream, adjusting the sony-laptop driver to deal with the
>>> returned object type now being a BUFFER.
>>>
>>> The goal of this email is to:
>>>
>>> 1. Make everyone involved aware of this breakage as we may see similar
>>> breakage elsewhere.
>>>
>>> 2. Discuss if we should maybe revert the ACPICA change.
>>>
>>> If you are reading this then 1. has been accomplished :)
>>>
>>> Which leaves us with 2. I'm tending towards keeping the change, since
>>> it seems the right thing to do and dealing with the fallout. But since
>>> there is fallout we should also at least consider reverting the ACPICA
>>> change.
>>>
>>> So ACPI maintainers what is you take on this ?
> What a mess. Several thoughts...
>
> I think we should keep the internal AML interpreter behavior as is because it solves a problem.

I also would prefer to deal with the fallout rather than to revert the fix.

I think that the potential damage is limited and the affected driver 
code should be fixed anyway which may not happen if the change in 
question is reverted.


> The ACPI spec says that buffers that are small enough to fit inside of integers should be treated as
> integers. However, we found that this is not the case for CreateField operators. The internal
> representation of this needs to be a buffer to match MS AML interpreter.
>
> SNC is not a pre-defined method so we actually don't know what the return type is supposed
> to be. At some point during the development of this driver, it's likely that someone made an observation
> about what "SNC" returned at some point in time and continued to assume that it will use the same
> type.
>
> For methods that are not a part of the ACPI specification, buffers less than or equal to 8 bytes and
> integers could be used interchangeably. I don't see a reason why the data inside the buffer should be
> invalid.
>
> Erik
>>> Regards,
>>>
>>> Hans
>> Hi,
>>
>> I'd like to advise against reverting the commit. Quite honestly, I don't think
>> reverting the commit is a good idea. This will break things for devices that
>> assume Microsoft-like AML interpreter behavior _inside_ the DSDT. Such as
>> the MS Surface devices for example, which, as stated in the commit message,
>> depend on the type being Buffer via a check on ObjectType(...). There is no
>> fix for those devices other than a) accepting MS behavior in ACPICA, b)
>> introducing a quirk in ACPICA which switches between behaviors on a device
>> basis, or c) patching the DSDT of those devices specifically for Linux.
>>
>> I'd also argue that since this is MS behavior, this is the behavior that almost all
>> consumer electronics devices with ACPI will expect. Case in point, the DSDT
>> of one of the affected Sony laptops, which contains the following code:
>>
>>           CreateField (SNBF, Zero, 0x20, SNBD)
>>           CreateWordField (SNBF, 0x02, CPW0)
>>           CreateWordField (SNBF, 0x04, CPW1)
>>           CreateWordField (SNBF, Zero, RCW0)
>>           CreateWordField (SNBF, 0x02, RCW1)
>>
>> They explicitly create a Buffer field of 32 bits via CreateField and not a 32 bit
>> Integer field via CreateDWordField. I'd argue that if they wanted this field to
>> be an Integer, CreateDWordField would be the straight-forward approach.
>>
>> Unfortunately, I also don't see a way to identify all affected calls to ACPI
>> functions automatically or easily, as this requires to look at the DSDTs and the
>> code behind those calls. If you have DSDTs, here's a way to identify if that
>> particular DSDT/driver combo is affected:
>>
>> If a call to an ACPI function expects an Integer and the ACPI function returns
>> a field created with CreateField(...) and the field is smaller than 64 bits (on
>> 64bit machines), then this call is affected.
>>
>> The only semi-reasonable way, as far as I can see, to identify this on a broad
>> scale is to get this information out to the respective maintainers of drivers
>> with apci_evaluate_{integer,object,dsm,..?} calls and ask them to check
>> those calls against DSDTs. Also maybe help them by introducing a function
>> which does Buffer-to-Integer conversion.
>>
>> Regards,
>> Maximilian
>>


  reply	other threads:[~2020-05-06 17:21 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-05 12:55 5.6 regression caused by "ACPICA: Dispatcher: always generate buffer objects for ASL create_field() operator" Hans de Goede
2020-05-05 13:50 ` Maximilian Luz
2020-05-05 22:11   ` Kaneda, Erik
2020-05-06 17:21     ` Rafael J. Wysocki [this message]
2020-05-07  7:34       ` Hans de Goede

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=7fb8757c-41e7-3be0-5552-80696559bdfe@intel.com \
    --to=rafael.j.wysocki@intel.com \
    --cc=andy@infradead.org \
    --cc=dominik@greysector.net \
    --cc=dvhart@infradead.org \
    --cc=erik.kaneda@intel.com \
    --cc=hdegoede@redhat.com \
    --cc=linux-acpi@vger.kernel.org \
    --cc=luzmaximilian@gmail.com \
    --cc=malattia@linux.it \
    --cc=platform-driver-x86@vger.kernel.org \
    --cc=robert.moore@intel.com \
    --cc=williambader@hotmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox