Merge tag 'acpi-6.5-rc1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
Pull ACPI fix from Rafael Wysocki: "Fix suspend-to-idle breakage on multiple systems introduced by one of the recent commits that may cause the affected systems to overheat while suspended" * tag 'acpi-6.5-rc1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: ACPI: EC: Fix acpi_ec_dispatch_gpe()
This commit is contained in:
@ -1267,12 +1267,8 @@ static void acpi_ec_event_handler(struct work_struct *work)
|
|||||||
spin_unlock_irq(&ec->lock);
|
spin_unlock_irq(&ec->lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void acpi_ec_handle_interrupt(struct acpi_ec *ec)
|
static void clear_gpe_and_advance_transaction(struct acpi_ec *ec, bool interrupt)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
|
||||||
|
|
||||||
spin_lock_irqsave(&ec->lock, flags);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Clear GPE_STS upfront to allow subsequent hardware GPE_STS 0->1
|
* Clear GPE_STS upfront to allow subsequent hardware GPE_STS 0->1
|
||||||
* changes to always trigger a GPE interrupt.
|
* changes to always trigger a GPE interrupt.
|
||||||
@ -1289,6 +1285,16 @@ static void acpi_ec_handle_interrupt(struct acpi_ec *ec)
|
|||||||
acpi_clear_gpe(NULL, ec->gpe);
|
acpi_clear_gpe(NULL, ec->gpe);
|
||||||
|
|
||||||
advance_transaction(ec, true);
|
advance_transaction(ec, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void acpi_ec_handle_interrupt(struct acpi_ec *ec)
|
||||||
|
{
|
||||||
|
unsigned long flags;
|
||||||
|
|
||||||
|
spin_lock_irqsave(&ec->lock, flags);
|
||||||
|
|
||||||
|
clear_gpe_and_advance_transaction(ec, true);
|
||||||
|
|
||||||
spin_unlock_irqrestore(&ec->lock, flags);
|
spin_unlock_irqrestore(&ec->lock, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2083,7 +2089,7 @@ bool acpi_ec_dispatch_gpe(void)
|
|||||||
if (acpi_ec_gpe_status_set(first_ec)) {
|
if (acpi_ec_gpe_status_set(first_ec)) {
|
||||||
pm_pr_dbg("ACPI EC GPE status set\n");
|
pm_pr_dbg("ACPI EC GPE status set\n");
|
||||||
|
|
||||||
advance_transaction(first_ec, false);
|
clear_gpe_and_advance_transaction(first_ec, false);
|
||||||
work_in_progress = acpi_ec_work_in_progress(first_ec);
|
work_in_progress = acpi_ec_work_in_progress(first_ec);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user