Received: by 2002:a05:6a10:1287:0:0:0:0 with SMTP id d7csp6157902pxv; Thu, 29 Jul 2021 07:51:40 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzmUJdSWfgIJxeDxUoTQBK6A9ypN/rEJDFr6K+yxU9rRsN3RmwO71eZU1z61UMPsA4HlUte X-Received: by 2002:a05:6402:524b:: with SMTP id t11mr6359544edd.361.1627570300464; Thu, 29 Jul 2021 07:51:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1627570300; cv=none; d=google.com; s=arc-20160816; b=v7bBOtNHv9R8u10RgRmsk4c3qCRLmUTJ/Bdft/YZ5IRDlMbzpndVXOM7ve8pHgAiG3 ETBwQLgXLyjW+v3dGZFIUFW/XJI++il8eW6NI5S78n2VMn3T7DClC8eUhpZ0vqZ2Dsmn qSsBQ9Kx88kFPOv3bz0THlzuiQ0ze4Ts1gMEDepMLa5Q6w8WweDN7VXfAmMgaw3nhdHA 3ZKMvGbfbyaWmNRlTmvmmp67BU4wLNKffNFPsl4vkPhiVTO6Y8a4xTPkeIAVi9Q5iPn1 vDq0Ofacnpw4gQ9RbgoiQOIWCi9nUsec9jfrksGjOWV+tfnfsq7xTq93xq8ojqQ46dAh E2fg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=r95iE8EsnbJxOwyMYzvEno+X5mqIZ6ALfcwMOKBhnnI=; b=H+LgMaebhpIBhJsX0lmc7yu9BPqiL6/zyyaz3/A/O5CmIOan49bd8r6sJCUB5vFNrW UPvsAKPTw7xRy3XIGMk/4U+mYl+cxV8V1CE9wDCSHnPl/DlMn9sDopqwq+GgOJOziLLg ZNP/KeJPnmz6TxkC34AMIZiXyz3MRZ5a69/wcDt78EFlMqValpERKmKrcnY1MwvGQFSU hKuRNC0WSKySgUZMyhVbEedjX+802mLb0mpvAIMOjEnPajk1xo85Bq7bN9g/69hE4zk6 LLdSnOe5TkcotYpv6wejLp8RD9k+qamHXw4KDgfJXU5bk/9rnjuxixBIYmDh+SrUQURB 0veQ== 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id s18si3378999eji.59.2021.07.29.07.51.17; Thu, 29 Jul 2021 07:51:40 -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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237404AbhG2Otu (ORCPT + 99 others); Thu, 29 Jul 2021 10:49:50 -0400 Received: from cloudserver094114.home.pl ([79.96.170.134]:62028 "EHLO cloudserver094114.home.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237035AbhG2Ots (ORCPT ); Thu, 29 Jul 2021 10:49:48 -0400 Received: from localhost (127.0.0.1) (HELO v370.home.net.pl) by /usr/run/smtp (/usr/run/postfix/private/idea_relay_lmtp) via UNIX with SMTP (IdeaSmtpServer 3.0.0) id ea65d9331c9fcd7d; Thu, 29 Jul 2021 16:49:43 +0200 Received: from kreacher.localnet (89-64-80-223.dynamic.chello.pl [89.64.80.223]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by v370.home.net.pl (Postfix) with ESMTPSA id 6AC1F669F44; Thu, 29 Jul 2021 16:49:42 +0200 (CEST) From: "Rafael J. Wysocki" To: Linux PCI , Mika Westerberg Cc: Linux ACPI , Linux PM , LKML , Bjorn Helgaas , Kai-Heng Feng , Utkarsh H Patel , Koba Ko Subject: [PATCH v1 1/2] PCI: PM: Add special case handling for PCIe device wakeup Date: Thu, 29 Jul 2021 16:48:14 +0200 Message-ID: <2207145.ElGaqSPkdT@kreacher> In-Reply-To: <4668274.31r3eYUQgx@kreacher> References: <4668274.31r3eYUQgx@kreacher> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="UTF-8" X-CLIENT-IP: 89.64.80.223 X-CLIENT-HOSTNAME: 89-64-80-223.dynamic.chello.pl X-VADE-SPAMSTATE: clean X-VADE-SPAMCAUSE: gggruggvucftvghtrhhoucdtuddrgedvtddrheefgdegtdcutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfjqffogffrnfdpggftiffpkfenuceurghilhhouhhtmecuudehtdenucesvcftvggtihhpihgvnhhtshculddquddttddmnecujfgurhephffvufffkfgjfhgggfgtsehtufertddttdejnecuhfhrohhmpedftfgrfhgrvghlucflrdcuhgihshhotghkihdfuceorhhjfiesrhhjfiihshhotghkihdrnhgvtheqnecuggftrfgrthhtvghrnhepteeggfelteegudehueegieekveduleeuledvueefjeefffegfeejudfgteefhefhnecuffhomhgrihhnpehkvghrnhgvlhdrohhrghenucfkphepkeelrdeigedrkedtrddvvdefnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehinhgvthepkeelrdeigedrkedtrddvvdefpdhhvghlohepkhhrvggrtghhvghrrdhlohgtrghlnhgvthdpmhgrihhlfhhrohhmpedftfgrfhgrvghlucflrdcuhgihshhotghkihdfuceorhhjfiesrhhjfiihshhotghkihdrnhgvtheqpdhrtghpthhtoheplhhinhhugidqphgtihesvhhgvghrrdhkvghrnhgvlhdrohhrghdprhgtphhtthhopehmihhkrgdrfigvshhtvghrsggvrhhgsehlihhnuhigrdhinhhtvghlrdgtohhmpdhrtghpthhtoheplhhinhhugidqrggtphhisehvghgvrhdrkhgvrhhnvghlrdhorhhgpdhrtghpthhtoheplhhinhhugidqphhmsehvghgvrhdrkhgvrhhnvghlrdho rhhgpdhrtghpthhtoheplhhinhhugidqkhgvrhhnvghlsehvghgvrhdrkhgvrhhnvghlrdhorhhgpdhrtghpthhtohephhgvlhhgrggrsheskhgvrhhnvghlrdhorhhgpdhrtghpthhtohepkhgrihdrhhgvnhhgrdhfvghnghestggrnhhonhhitggrlhdrtghomhdprhgtphhtthhopehuthhkrghrshhhrdhhrdhprghtvghlsehinhhtvghlrdgtohhmpdhrtghpthhtohepkhhosggrrdhkohestggrnhhonhhitggrlhdrtghomh X-DCC--Metrics: v370.home.net.pl 1024; Body=9 Fuz1=9 Fuz2=9 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Rafael J. Wysocki It is inconsistent to return PCI_D0 from pci_target_state() instead of the original target state if 'wakeup' is true and the device cannot signal PME from D0. This only happens when the device cannot signal PME from the original target state and any shallower power states (including D0) and that case is effectively equivalent to the one in which PME signaling is not supported at all. Since the original target state is returned in the latter case, make the function do that in the former one too. Link: https://lore.kernel.org/linux-pm/3149540.aeNJFYEL58@kreacher/ Fixes: 666ff6f83e1d ("PCI/PM: Avoid using device_may_wakeup() for runtime PM") Reported-by: Mika Westerberg Reported-by: Utkarsh H Patel Reported-by: Koba Ko Signed-off-by: Rafael J. Wysocki --- drivers/pci/pci.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) Index: linux-pm/drivers/pci/pci.c =================================================================== --- linux-pm.orig/drivers/pci/pci.c +++ linux-pm/drivers/pci/pci.c @@ -2595,16 +2595,20 @@ static pci_power_t pci_target_state(stru if (dev->current_state == PCI_D3cold) target_state = PCI_D3cold; - if (wakeup) { + if (wakeup && dev->pme_support) { + pci_power_t state = target_state; + /* * Find the deepest state from which the device can generate * PME#. */ - if (dev->pme_support) { - while (target_state - && !(dev->pme_support & (1 << target_state))) - target_state--; - } + while (state && !(dev->pme_support & (1 << state))) + state--; + + if (state) + return state; + else if (dev->pme_support & 1) + return PCI_D0; } return target_state;