Commit 2eb15b42 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
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()
parents 06697ca6 b5539eb5
Loading
Loading
Loading
Loading
+12 −6
Original line number Diff line number Diff line
@@ -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);
	}