Message ID | 26498770711bbb36ca2888b33b56a0a56dc29083.1499828705.git.lv.zheng@intel.com (mailing list archive) |
---|---|
State | Accepted, archived |
Delegated to: | Rafael Wysocki |
Headers | show |
On Wednesday, July 12, 2017 11:09:09 AM Lv Zheng wrote: > According to the bug report, though the busy polling mode can make noirq > stages executed faster, it causes abnormal fan blowing up after a system > resume (see link #1 for a video demonstration) on Lenovo ThinkPad X1 Carbon > - the 5th Generation. The problem can be fixed by an upgraded EC firmware. > > However many reporters can also confirm that the problem can be fixed by > stopping busy polling during suspend/resume. > > This patch drops noirq stage hooks so that the regression can be fixed > without upgrading the EC firmware. > > Fixes: c3a696b6e8f8 ("ACPI / EC: Use busy polling mode when GPE is not enabled") > Link: https://youtu.be/9NQ9x-Jm99Q [#1] > Link: https://bugzilla.kernel.org/show_bug.cgi?id=196129 > Reported-by: Andreas Lindhe <andreas@lindhe.io> > Tested-by: Gjorgji Jankovski <j.gjorgji@gmail.com> > Tested-by: Damjan Georgievski <gdamjan@gmail.com> > Tested-by: Fernando Chaves <nanochaves@gmail.com> > Tested-by: Tomislav Ivek <tomislav.ivek@gmail.com> > Tested-by: Denis P. <theoriginal.skullburner@gmail.com> > Signed-off-by: Lv Zheng <lv.zheng@intel.com> > Cc: Stable <stable@vger.kernel.org> # all applicable Both patches applied with some minor modifications in the changelogs. Thanks, Rafael -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c index 854d428..05e4eb5 100644 --- a/drivers/acpi/ec.c +++ b/drivers/acpi/ec.c @@ -1870,24 +1870,6 @@ int __init acpi_ec_ecdt_probe(void) } #ifdef CONFIG_PM_SLEEP -static int acpi_ec_suspend_noirq(struct device *dev) -{ - struct acpi_ec *ec = - acpi_driver_data(to_acpi_device(dev)); - - acpi_ec_enter_noirq(ec); - return 0; -} - -static int acpi_ec_resume_noirq(struct device *dev) -{ - struct acpi_ec *ec = - acpi_driver_data(to_acpi_device(dev)); - - acpi_ec_leave_noirq(ec); - return 0; -} - static int acpi_ec_suspend(struct device *dev) { struct acpi_ec *ec = @@ -1909,7 +1891,6 @@ static int acpi_ec_resume(struct device *dev) #endif static const struct dev_pm_ops acpi_ec_pm = { - SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(acpi_ec_suspend_noirq, acpi_ec_resume_noirq) SET_SYSTEM_SLEEP_PM_OPS(acpi_ec_suspend, acpi_ec_resume) };