Received: by 2002:a25:868d:0:0:0:0:0 with SMTP id z13csp2957456ybk; Mon, 18 May 2020 12:04:18 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzBOkOmW6XqbK2Ajz0aTnaX40Jz1rxcnpJL5x3lX0ZpCOyg91yyzS8RcGagGWkQRemO6LEO X-Received: by 2002:a17:906:34c4:: with SMTP id h4mr16630166ejb.167.1589828658465; Mon, 18 May 2020 12:04:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1589828658; cv=none; d=google.com; s=arc-20160816; b=UbfLAtlEMA3RWBuzrIn09I7+U0/l46xna+eMHR7Xws9WzU0Q+GRvNQAMI6kIMPI9rS cat6QRfQiSRolkV35qmG6/piHf5hUmJJ/TMjFciIsIrDOjOBVpEHvzxm/JxRmk2+ZsDy pazTVzymAodR/ZxVc/UYWncDm61Znugc5fhgqo++3jUz87ll4txFo5UenfmH1k62u7i6 JPoAOkrB9YWhpfcBPyiGwzGTmSg5a4yI9PsdnYPNlwgNEfXNZOrBjPx/v6LNaDVEOd1U 01k1iMIi8AhM4ru6o/YFNxgGpYmIPyD4IVKSkorVgXvC+0OgbIc2mh2W525ySn5i7ivI gNLg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version; bh=HcC5d0dkGCVtIC0H6I2J3H5klgnWGhpsgSC2d3NhmtY=; b=e11c8bEUWqDMsfP6s6bj6gUj0XS9m9b/GV4CqYsbX33GXH5damACMYYjYIKRELAQKJ PkITlLrHgGXKLuSvM/6f10tTw7Fe3gJHvY8mAsn0a4pPHYR76yKNCuudkCvxRezTTVzy lwO8xHHgWclvomXXOMoJRYeKfw3hQ1zCedYUmJOs6JlydtMRUshibkMAzt8Iseql98uU R6/9mZJh12rinl70bKkoa9PktGN9erMQPBUROvvecQ3+33v2fSIPZUmoWkcGcKygXTet z8JfG/yOeMc+aN5FTPqvo7l8jZzx9f//h0CN4vF+HXKN75Rtf8rRDTdorhIbU8cPJWJH fV5Q== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id q23si7590951edg.550.2020.05.18.12.03.53; Mon, 18 May 2020 12:04:18 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726803AbgERI7e (ORCPT + 99 others); Mon, 18 May 2020 04:59:34 -0400 Received: from mail-ot1-f65.google.com ([209.85.210.65]:42602 "EHLO mail-ot1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726180AbgERI7d (ORCPT ); Mon, 18 May 2020 04:59:33 -0400 Received: by mail-ot1-f65.google.com with SMTP id z3so5745900otp.9; Mon, 18 May 2020 01:59:33 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=HcC5d0dkGCVtIC0H6I2J3H5klgnWGhpsgSC2d3NhmtY=; b=dSe7x6Xn0/BmroqGeGszSIzWEqOWDMRGKr5R6+cSXqDzT9w5YGci0RMxs8wZhgU/Ww U+lWGTkdPWeHqcvV9ZwSsgSuG2gT1kuvxKyqcWGuMMmkuYmxX5etXrS0p8IduyJYp8db fTEaD7dZq5C2VCjLoyY4cv1WPSYOfyzn1hZtaG9YwZ18oXDXFvb8OWd+BAcJJCOm4PdK kwd/NPCvsraafwYZTyT+NTIG+Uwc/tGy0CcO8s5Q6rSbAiPvMUzJ3aNW9QN6JOpQL/3N G989r1evWT1lwwxyv0wbLCCXhVgGl2Yz05qmxD4yJAxg8IxQnRb+mxmgQ+cl5J5hJDcJ DNJw== X-Gm-Message-State: AOAM531p+VO33VxRkjTBDKtNH1mwgiLV48J3GELhUOA6iW3moefGdXWO rPRh5oezuxvqMw+7+6gvIJ0tmPRsO4EptcNB7Gg= X-Received: by 2002:a9d:3d05:: with SMTP id a5mr426572otc.262.1589792372469; Mon, 18 May 2020 01:59:32 -0700 (PDT) MIME-Version: 1.0 References: <4502272.pByIgeXik9@kreacher> In-Reply-To: <4502272.pByIgeXik9@kreacher> From: "Rafael J. Wysocki" Date: Mon, 18 May 2020 10:59:17 +0200 Message-ID: Subject: Re: [PATCH[RFT]] ACPI: EC: s2idle: Avoid flushing EC work when EC GPE is inactive To: Chris Chiu Cc: Linux ACPI , Linux PM , LKML , "Rafael J. Wysocki" Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, May 14, 2020 at 12:10 PM Rafael J. Wysocki wrote: > > From: Rafael J. Wysocki > > Flushing the EC work while suspended to idle when the EC GPE status > is not set causes some EC wakeup events (notably power button and > lid ones) to be missed after a series of spurious wakeups on the Dell > XPS13 9360 in my office. > > If that happens, the machine cannot be woken up from suspend-to-idle > by a power button press or lid status change and it needs to be woken > up in some other way (eg. by a key press). > > Flushing the EC work only after successful dispatching the EC GPE, > which means that its status has been set, avoids the issue, so change > the code in question accordingly. > > Signed-off-by: Rafael J. Wysocki > --- > > Hi Chris, > > Please check if the key press wakeup still works on your system with this patch > applied (on top of https://patchwork.kernel.org/patch/11538065/). Hi Chris, Since I haven't heard back from you and the problem at hand is a regression on the machine where it happens, I'm going to push this patch for merging. If it causes the key press wakeup issue to reappear on your machine, I'm afraid that we'll need to quirk it in the EC driver. Thanks! > --- > drivers/acpi/ec.c | 6 +++++- > drivers/acpi/sleep.c | 15 ++++----------- > 2 files changed, 9 insertions(+), 12 deletions(-) > > Index: linux-pm/drivers/acpi/ec.c > =================================================================== > --- linux-pm.orig/drivers/acpi/ec.c > +++ linux-pm/drivers/acpi/ec.c > @@ -2020,9 +2020,13 @@ bool acpi_ec_dispatch_gpe(void) > * to allow the caller to process events properly after that. > */ > ret = acpi_dispatch_gpe(NULL, first_ec->gpe); > - if (ret == ACPI_INTERRUPT_HANDLED) > + if (ret == ACPI_INTERRUPT_HANDLED) { > pm_pr_dbg("EC GPE dispatched\n"); > > + /* Flush the event and query workqueues. */ > + acpi_ec_flush_work(); > + } > + > return false; > } > #endif /* CONFIG_PM_SLEEP */ > Index: linux-pm/drivers/acpi/sleep.c > =================================================================== > --- linux-pm.orig/drivers/acpi/sleep.c > +++ linux-pm/drivers/acpi/sleep.c > @@ -980,13 +980,6 @@ static int acpi_s2idle_prepare_late(void > return 0; > } > > -static void acpi_s2idle_sync(void) > -{ > - /* The EC driver uses special workqueues that need to be flushed. */ > - acpi_ec_flush_work(); > - acpi_os_wait_events_complete(); /* synchronize Notify handling */ > -} > - > static bool acpi_s2idle_wake(void) > { > if (!acpi_sci_irq_valid()) > @@ -1018,7 +1011,7 @@ static bool acpi_s2idle_wake(void) > return true; > > /* > - * Cancel the wakeup and process all pending events in case > + * Cancel the SCI wakeup and process all pending events in case > * there are any wakeup ones in there. > * > * Note that if any non-EC GPEs are active at this point, the > @@ -1026,8 +1019,7 @@ static bool acpi_s2idle_wake(void) > * should be missed by canceling the wakeup here. > */ > pm_system_cancel_wakeup(); > - > - acpi_s2idle_sync(); > + acpi_os_wait_events_complete(); > > /* > * The SCI is in the "suspended" state now and it cannot produce > @@ -1060,7 +1052,8 @@ static void acpi_s2idle_restore(void) > * of GPEs. > */ > acpi_os_wait_events_complete(); /* synchronize GPE processing */ > - acpi_s2idle_sync(); > + acpi_ec_flush_work(); /* flush the EC driver's workqueues */ > + acpi_os_wait_events_complete(); /* synchronize Notify handling */ > > s2idle_wakeup = false; > > > >