Received: by 2002:a05:6a10:f347:0:0:0:0 with SMTP id d7csp422390pxu; Thu, 26 Nov 2020 02:04:44 -0800 (PST) X-Google-Smtp-Source: ABdhPJzl2kSkRo/pYVDLsQJW+nof/i2XuaRzpj/RiXdnZjAY9RVpEn0y3TAMKvd/fcpi6e3HkAls X-Received: by 2002:a17:906:b292:: with SMTP id q18mr1965511ejz.93.1606385084169; Thu, 26 Nov 2020 02:04:44 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1606385084; cv=none; d=google.com; s=arc-20160816; b=vfhYBiEq5fArUQY7+fw04j+skzmekcPFC02ALP9rZLVuVbxqlGvulp4jF+Z/H0VwIa ED8EqMLpg6NsqE3B+JGdWF0EBB/E9mdh1vbQubTnLBbJhpELYSI+dcindnmUK4LeMU70 2FJhLYu+gQ8ncM1YWlIjituDqjtaM/PAG3A2qarW3HD3g8BFUPfK55raySBwH4V4WbUg V0YzUGm9e5NAF6LIiqRFPHMR/bEWuW4zDgLBPLY50GSkezSO95l9QQVEdFOPtaaRTOsF snSoMbL/jpLauEM+al6FD72Z0WWURj7v2XKDPLlb6nx30a7lU00/qK+wDhZm4+Hsvves rU+w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:to:references:message-id :content-transfer-encoding:cc:date:in-reply-to:from:subject :mime-version; bh=92nlRM6zmrspMr8LLGLUOfmFJA8jcb7M7rsc+7QJEDI=; b=dnsV/xxtTfmtCrmjvWw3dT7K0b9gS85D31W7b5cfTeH0FN/+8UIfEssYyzpuq5T8LE mJgS841h6DI6ABm+S2ORoAHKWXVnGO5f/Cpjl38kf/kDwwki2Ry2nVc9MuOnwpMC47mO 5q7V6t50VA88TnqM499KHm99l3Pk+g4btwhX3BPDDGWBNiDBv++2kre0i9/Q3kibqStH mTJwsrtCBGnlTOi8JkmINo/VxOoGyUbUiAf69OQfkvj2nkCWsUWA7T4thkuF/D636jJ9 UGn0OJmbhpCXX5rSldQgiolPPSWYwXSDGtsN0/OEPA22s4iPmRxcAAik+ImOUgRoOrZy Nsig== 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=fail (p=NONE sp=NONE dis=NONE) header.from=canonical.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id hr21si1196129ejc.446.2020.11.26.02.04.21; Thu, 26 Nov 2020 02:04:44 -0800 (PST) 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=fail (p=NONE sp=NONE dis=NONE) header.from=canonical.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388221AbgKZGgw convert rfc822-to-8bit (ORCPT + 99 others); Thu, 26 Nov 2020 01:36:52 -0500 Received: from youngberry.canonical.com ([91.189.89.112]:34465 "EHLO youngberry.canonical.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388217AbgKZGgv (ORCPT ); Thu, 26 Nov 2020 01:36:51 -0500 Received: from mail-pl1-f197.google.com ([209.85.214.197]) by youngberry.canonical.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1kiAtc-0008IE-VW for linux-kernel@vger.kernel.org; Thu, 26 Nov 2020 06:36:49 +0000 Received: by mail-pl1-f197.google.com with SMTP id f21so910743plj.10 for ; Wed, 25 Nov 2020 22:36:48 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; bh=0TNrpxhz885n0vlqKPeUigEPpxte5fdCFowpmElQUl0=; b=tDlH6Jao35mqur0E6tnC6Vc0yv9mCfzBfXQHfCEUmLXy0t63q0jU8YYjfpNGgj00g4 3zbr5OB3aiImUyAeVmti9kkjD6PPCq0NNG/yvFT8XEytvNVmjIm6v8Py2wbkcwg0BYk8 SRt4B0hr81ErZxe0MxZpIA252c3PFesqdgwFU6Gtf2C2QQ8jxTnPWHo6Dc6b/ONlVqtU wIs3j6GV68cWwmqcmEdU5Hj8SjU3aJWQD2RiSjDgkZaYFUJpDosYcQyL1EQOUn6r7UCk TscucWGHC0UYfRu2UyV/jstxhFwRLGYI3vMENtx5nw5veiHpBviH1EVRFSOmbsssGrFG /c+g== X-Gm-Message-State: AOAM533oIb29exESU1styxQ8juW8gA+ZeyNEetAORIvuZG6JWKfq5few 4scgKNeIBpNoIDuZV+7e2tgXUKAfirQ/9LxFa247XgvXXTQE35niZhxsg3MzvMK2ZQTDWwsnfpZ vZnugRzho/zhBwoTjgBFS9yfgO+Tq/K6poZCSsxNeHA== X-Received: by 2002:a62:8c08:0:b029:197:491c:bab1 with SMTP id m8-20020a628c080000b0290197491cbab1mr1482968pfd.49.1606372607401; Wed, 25 Nov 2020 22:36:47 -0800 (PST) X-Received: by 2002:a62:8c08:0:b029:197:491c:bab1 with SMTP id m8-20020a628c080000b0290197491cbab1mr1482941pfd.49.1606372607020; Wed, 25 Nov 2020 22:36:47 -0800 (PST) Received: from [192.168.1.208] (220-133-187-190.HINET-IP.hinet.net. [220.133.187.190]) by smtp.gmail.com with ESMTPSA id w131sm3575352pfd.14.2020.11.25.22.36.44 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 25 Nov 2020 22:36:46 -0800 (PST) Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 14.0 \(3654.20.0.2.21\)) Subject: Re: [PATCH] e1000e: Assign DPM_FLAG_SMART_SUSPEND and DPM_FLAG_MAY_SKIP_RESUME to speed up s2ram From: Kai-Heng Feng In-Reply-To: <20201125103612.GA17700@chenyu-office.sh.intel.com> Date: Thu, 26 Nov 2020 14:36:42 +0800 Cc: "Rafael J. Wysocki" , Len Brown , Tony Nguyen , Jesse Brandeburg , "moderated list:INTEL ETHERNET DRIVERS" , Linux PM list , open list , Sasha Neftin , Jeff Kirsher Content-Transfer-Encoding: 8BIT Message-Id: References: <20201124153221.11265-1-yu.c.chen@intel.com> <8BA4D1E1-DACF-4E84-A5B8-75A7CEA65F98@canonical.com> <20201125103612.GA17700@chenyu-office.sh.intel.com> To: Chen Yu X-Mailer: Apple Mail (2.3654.20.0.2.21) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org > On Nov 25, 2020, at 18:36, Chen Yu wrote: > > Hi Kai-Heng, > On Wed, Nov 25, 2020 at 01:17:28AM +0800, Kai-Heng Feng wrote: >> Hi Yu, >> >>> On Nov 24, 2020, at 23:32, Chen Yu wrote: >>> >>> The NIC is put in runtime suspend status when there is no wire connected. >>> As a result, it is safe to keep this NIC in runtime suspended during s2ram >>> because the system does not rely on the NIC plug event nor WOL to wake up >>> the system. Unlike the s2idle, s2ram does not need to manipulate S0ix settings >>> during suspend. >> >> Please see below for the reason why I explicitly disable direct-complete in the driver. >> > Okay. >>> >>> This patch assigns DPM_FLAG_SMART_SUSPEND and DPM_FLAG_MAY_SKIP_RESUME >>> to the e1000e driver so that the s2ram could skip the .suspend_late(), >>> .suspend_noirq() and .resume_noirq() .resume_early() when possible. >>> Also skip .suspend() and .resume() if dev_pm_skip_suspend() and >>> dev_pm_skip_resume() return true, so as to speed up the s2ram. >> >> If we really want direct-complete here, maybe always set current WoL setting in runtime suspend routine? >> > Indeed, that would be a choice. >>> >>> Signed-off-by: Chen Yu >>> --- >>> drivers/base/power/main.c | 2 ++ >>> drivers/net/ethernet/intel/e1000e/netdev.c | 14 +++++++++++++- >>> 2 files changed, 15 insertions(+), 1 deletion(-) >>> >>> diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c >>> index c7ac49042cee..9cd8abba8612 100644 >>> --- a/drivers/base/power/main.c >>> +++ b/drivers/base/power/main.c >>> @@ -580,6 +580,7 @@ bool dev_pm_skip_resume(struct device *dev) >>> >>> return !dev->power.must_resume; >>> } >>> +EXPORT_SYMBOL_GPL(dev_pm_skip_resume); >> >> I don't think it's a good idea to use this predicate out side of PM core, must_resume may change during suspend process. >> > The dev_pm_skip_resume() is used during system resume, not during suspend, so > there would be no race condition I suppose? I think it's better to let PM core to decide. >>> >>> /** >>> * device_resume_noirq - Execute a "noirq resume" callback for given device. >>> @@ -2010,3 +2011,4 @@ bool dev_pm_skip_suspend(struct device *dev) >>> return dev_pm_test_driver_flags(dev, DPM_FLAG_SMART_SUSPEND) && >>> pm_runtime_status_suspended(dev); >>> } >>> +EXPORT_SYMBOL_GPL(dev_pm_skip_suspend); >>> diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c >>> index b30f00891c03..d79fddabc553 100644 >>> --- a/drivers/net/ethernet/intel/e1000e/netdev.c >>> +++ b/drivers/net/ethernet/intel/e1000e/netdev.c >>> @@ -6965,6 +6965,14 @@ static __maybe_unused int e1000e_pm_suspend(struct device *dev) >>> struct e1000_hw *hw = &adapter->hw; >>> int rc; >>> >>> + /* Runtime suspended means that there is no wired connection >>> + * and it has nothing to do with WOL that, we don't need to >>> + * adjust the WOL settings. So it is safe to put NIC in >>> + * runtime suspend while doing system suspend. >>> + */ >> >> What about plugging ethernet cable and using WoL after system is suspended? >> Commit "e1000e: Exclude device from suspend direct complete optimization" was to address that scenario. >> > Yes, this is what I concerned previously. So in order to support this case, > let's adjust this by checking > if (device_may_wakeup() && dev_pm_skip_suspend()) > > so that if the user has disabled WOL via sysfs then we do not fall > into this optimization > commit 6bf6be1127f7 ("e1000e: Do not wake up the system via WOL if > device wakeup is disabled") I don't think this is right. Isn't E1000_WUFC_LNKC already set for runtime suspend? What if WoL doesn't have it set? >>> + if (dev_pm_skip_suspend(dev)) >>> + return 0; >>> + >>> e1000e_flush_lpic(pdev); >>> >>> e1000e_pm_freeze(dev); >>> @@ -6989,6 +6997,9 @@ static __maybe_unused int e1000e_pm_resume(struct device *dev) >>> struct e1000_hw *hw = &adapter->hw; >>> int rc; >>> >>> + if (dev_pm_skip_resume(dev)) >>> + return 0; >>> + >>> /* Introduce S0ix implementation */ >>> if (hw->mac.type >= e1000_pch_cnp && >>> !e1000e_check_me(hw->adapter->pdev->device)) >>> @@ -7665,7 +7676,8 @@ static int e1000_probe(struct pci_dev *pdev, const struct pci_device_id *ent) >>> >>> e1000_print_device_info(adapter); >>> >>> - dev_pm_set_driver_flags(&pdev->dev, DPM_FLAG_NO_DIRECT_COMPLETE); >>> + dev_pm_set_driver_flags(&pdev->dev, DPM_FLAG_NO_DIRECT_COMPLETE | >>> + DPM_FLAG_SMART_SUSPEND | DPM_FLAG_MAY_SKIP_RESUME); >>> >>> if (pci_dev_run_wake(pdev) && hw->mac.type < e1000_pch_cnp) >>> pm_runtime_put_noidle(&pdev->dev); >> >> Also, most e1000e device on modern platforms doesn't runtime suspend at all after commit "e1000e: Disable runtime PM on CNP+". >> > Yes, I did some hack on this to make runtime suspend work. > As we do have more newer NICs to come, how about removing the > restriction of runtime suspend and let the user determine whether > to enable the runtime suspend via echo 'on' or 'auto' via > sysfs's control. There's a discussion on enable runtime PM by default for all PCI devices. So removing this workaround will expose the bug for users. Let me get the system with the bug (Latitude 5500) and see if latest ACPI code can fix the GPE bug. Kai-Heng > > thanks, > Chenyu >> Kai-Heng >> >>> -- >>> 2.25.1