Re: [RFT][PATCH] ACPI: EC: Look for ECDT EC after calling acpi_load_tables()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Jan 10, 2019 at 10:43 AM Zhang Rui <rui.zhang@xxxxxxxxx> wrote:
>
> On 三, 2019-01-09 at 00:34 +0100, Rafael J. Wysocki wrote:
> > From: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx>
> >
> > Some systems have had functional issues since commit 5a8361f7ecce
> > (ACPICA: Integrate package handling with module-level code) that,
> > among other things, changed the initial values of the
> > acpi_gbl_group_module_level_code and
> > acpi_gbl_parse_table_as_term_list
> > global flags in ACPICA which implicitly caused acpi_ec_ecdt_probe()
> > to
> > be called before acpi_load_tables() on the vast majority of
> > platforms.
> >
> > Namely, before commit 5a8361f7ecce, acpi_load_tables() was called
> > from
> > acpi_early_init() if acpi_gbl_parse_table_as_term_list was FALSE and
> > acpi_gbl_group_module_level_code was TRUE, which almost always was
> > the case as FALSE and TRUE were their initial values, respectively.
> > The acpi_gbl_parse_table_as_term_list value would be changed to TRUE
> > for a couple of platforms in acpi_quirks_dmi_table[], but it remained
> > FALSE in the vast majority of cases.
> >
> > After commit 5a8361f7ecce, the initial values of the two flags have
> > been reversed, so in effect acpi_load_tables() has not been called
> > from acpi_early_init() any more.  That, in turn, affects
> > acpi_ec_ecdt_probe() which is invoked before acpi_load_tables() now
> > and it is not possible to evaluate the _REG method for the EC address
> > space handler installed by it.  That effectively causes the EC
> > address
> > space to be inaccessible to AML on platforms with an ECDT matching
> > the
> > EC device definition in the DSDT and functional problems ensue in
> > there.
> >
> > Because the default behavior before commit 5a8361f7ecce was to call
> > acpi_ec_ecdt_probe() after acpi_load_tables(), it should be safe to
> > do that again.  Moreover, the EC address space handler installed by
> > acpi_ec_ecdt_probe() is only needed for AML to be able to access the
> > EC address space and the only AML that can run during
> > acpi_load_tables()
> > is module-level code which only is allowed to access address spaces
> > with default handlers (memory, I/O and PCI config space).
> >
> > For this reason, move the acpi_ec_ecdt_probe() invocation back to
> > acpi_bus_init(), from where it was taken away by commit d737f333b211
> > (ACPI: probe ECDT before loading AML tables regardless of module-
> > level
> > code flag), and put it after the invocation of acpi_load_tables() to
> > restore the original code ordering from before commit 5a8361f7ecce.
> >
> > Fixes: 5a8361f7ecce (ACPICA: Integrate package handling with module-
> > level code)
> > Link: https://bugzilla.kernel.org/show_bug.cgi?id=199981
> > Reported-by: step-ali <sunmooon15@xxxxxxxxx>
> > Reported-by: Charles Stanhope <charles.stanhope@xxxxxxxxx>
> > Reported-by: Paulo Nascimento <paulo.ulusu@xxxxxxxxxxxxxx>
> > Reported-by: David Purton <dcpurton@xxxxxxxxxxxxxxx>
> > Reported-by: Adam Harvey <adam@xxxxxxxxxxxxxxx>
> > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx>
>
> I have tested this on a Lenovo laptops with ECDT, on top of 5.0-rc1,
> and confirms that EC _REG is evaluated with the patch, and is not
> evaluated without the patch.
>
> Let me update the patch link to the bugzilla to get more test.

Thank you!



[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux