ACPI fix for 6.5-rc1

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.
 -----BEGIN PGP SIGNATURE-----
 
 iQJGBAABCAAwFiEE4fcc61cGeeHD/fCwgsRv/nhiVHEFAmScZ7ESHHJqd0Byand5
 c29ja2kubmV0AAoJEILEb/54YlRxkwkP/2tiWiib88wyfmf8Tam/vyC7vjL4ul6E
 G2yrewhTxT7btGzbkLyA+MNYtpFElHFVwpZHcrFYw56xvSHyGL4gh96GSRKlzZgA
 GhiexxOJhyeqOcNbpuQO/Krruv3AubozKjCPHLTrNKbrqK7bTm/efGuvn9BR/o/x
 UhCUv8TPuAJhcVT6HfHlKr1exrN9VPjByN6RENY7H9Mv7uns9Zcl0uiyvL32MM5x
 Qa+BOsSN+aCN3e4g2jWty3gC7kSqj/0IR2BA6CJu2vF2b6LNTATjnqcPW9upRP0Q
 eByhWt/+W5tN7s5ORG4sFgTCvymaeCEHn8N74cTuU8HOK5tbFgv3bbDMYTIsaxqv
 e9HoU5fhPWCbV2Hq75oltFcawX4VD4WM5//xiOfcMFyIbAjNrsa14TWreY0bEHxr
 Jkj2bz1+hejrYlHpi4+4HBRzRbJ1rDE0jkCEqnwHlxCzhglXLyIOpouwFDHaMM4W
 a8TltpyX1iufwNy/URjZxaFrkj88WSQT1Et4Vw92RjNLy5UiAlUd4QahW1EycOJu
 Kh++U4odvk/AELqxydq9/WYm4ZMci4ikQaqRlRiBNu+gskW0uRRlhpRZWHYDIoKI
 pfea9sDldMTEh6FNkJiNp3tHqbas5sBbPfQk2SvMZiu3pnGIo+JGop43X0Z13w99
 GDYQbbEdRsjP
 =k0Sg
 -----END PGP SIGNATURE-----

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:
Linus Torvalds 2023-06-29 17:32:59 -07:00
commit 2eb15b4248

View File

@ -1267,12 +1267,8 @@ static void acpi_ec_event_handler(struct work_struct *work)
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
* 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);
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);
}
@ -2083,7 +2089,7 @@ bool acpi_ec_dispatch_gpe(void)
if (acpi_ec_gpe_status_set(first_ec)) {
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);
}