Received: by 2002:a05:7412:f589:b0:e2:908c:2ebd with SMTP id eh9csp122606rdb; Tue, 31 Oct 2023 02:41:32 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFtIc788JS77D7+UpOghADButiFc6ILwgB/0JQgPueD8DXdx/PVsw/4YxOYZOkbLl6bBzBB X-Received: by 2002:a17:902:da8d:b0:1cc:548d:423b with SMTP id j13-20020a170902da8d00b001cc548d423bmr4481421plx.60.1698745291872; Tue, 31 Oct 2023 02:41:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698745291; cv=none; d=google.com; s=arc-20160816; b=v6dbWYjmuVdWZJlYkBtAKJwaS30BsHtQiOgj7/I55csaW8mpRr6aPTjg/fq4S7E1cl dWSqaNsZtHSKHDRpfljLdOHsshQhPi+AmvXdJ9qhnZqjBCUAdQkxH8VRQtg8py/sVVdU qojAW1I0LfkRVkXRf+TU8NN2gVkqO7Ux4dMt6Pivwkd4MHQmyH1mH/6Q5to7dTF10Vfb sDTPAgpIqtfa43baZzvLtSdAwoTE+tSRieC5+rZc7wPM4cZzkRC9pANoffk2TRfwV87p 1m+wXqO+TyhcmHyPkGWUBIAwntBYgTLgTtv/GVoM77oNcpqOsrekSUGeBIDwhS5US97p IjLg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:mime-version:date :dkim-signature; bh=AAE8DZ37OcIWWcnHaRuH9NBD5aoBnldXmYIwxjbhOaA=; fh=Ko59WlNiCEgeoijRLOiMUqrjLRsUnqipeDEj6zduCyY=; b=wq5mdlbPgqKWsMedR4gHnLeJZPKht70btgprVEBbLDPEapV+WCWaJScB8lJOqP/4k3 rMirKYyRJaklkTqcP2651zoxHQBYjm3BVWu6IkCuaSJywh8wWMkn/u3np5jrRjlXUoKC rExiG4SRrrbs2HbHQCwz2Kii1ZteYF3TgHcYY+EAPtqi95irqxetIY8H4GQ0pwbAcPTE 6fLa2q6S5dprohrsqKW+ggpemw82ZsKLpteyJ7RdHc4s/aAwiHrF/dRkflwgKjbx3wP5 MXy/8ob+Hr5X3OJMWLmE/5JSWbWTTxViPYauF+Hl0UvWN3/XuQ+73YwsyoKxPjP3pYKI wLGQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=KH2KR+sd; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from lipwig.vger.email (lipwig.vger.email. [23.128.96.33]) by mx.google.com with ESMTPS id c17-20020a170902d49100b001bbad1883d5si805503plg.293.2023.10.31.02.41.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 31 Oct 2023 02:41:31 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) client-ip=23.128.96.33; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=KH2KR+sd; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by lipwig.vger.email (Postfix) with ESMTP id 8FEC18032EF8; Tue, 31 Oct 2023 02:41:29 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at lipwig.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229656AbjJaJlU (ORCPT + 99 others); Tue, 31 Oct 2023 05:41:20 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41510 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229436AbjJaJlU (ORCPT ); Tue, 31 Oct 2023 05:41:20 -0400 Received: from mail-yb1-xb49.google.com (mail-yb1-xb49.google.com [IPv6:2607:f8b0:4864:20::b49]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B5D7ADA for ; Tue, 31 Oct 2023 02:41:16 -0700 (PDT) Received: by mail-yb1-xb49.google.com with SMTP id 3f1490d57ef6-d9a5a16fa94so4661359276.0 for ; Tue, 31 Oct 2023 02:41:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1698745276; x=1699350076; darn=vger.kernel.org; h=cc:to:from:subject:message-id:mime-version:date:from:to:cc:subject :date:message-id:reply-to; bh=AAE8DZ37OcIWWcnHaRuH9NBD5aoBnldXmYIwxjbhOaA=; b=KH2KR+sdtQpHU8T/m8rxtdxeszlvRfGg+jb91Qu68O6LhKppAx7PNRzkEkw8cv3c/g yuCxfpA6s5qeX1lLHpWKuHd15lSS3LsKxjTvv8YqBpbMWnHmnY2C85S9sw9sCGS4eb0I Yuuk5uZYcnpD9nqgsWBfCmxl7YP1eojF790tprUlWJnsXksraEs3FNQtL7ZamSirA9vU V47lLjttRby5nA+UBLHXv7dQt54Gx1LgzfGCllcaZKbFYkCv4azgEf2Q+bEAmXfKIQau NQE47hMS2+lW9gW38E01pCfZzbEp0r8oFMp/iC3mMcJBDhl9YOtQGzjeIzmRz/bV8cr2 WF4w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1698745276; x=1699350076; h=cc:to:from:subject:message-id:mime-version:date:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=AAE8DZ37OcIWWcnHaRuH9NBD5aoBnldXmYIwxjbhOaA=; b=X5c9OP6TzEev/YT5iIGKuIiJ3MWVNQUjAwtRR4+fRysAl9/lWXMkyjRnuNWyrIZjeh J2QwYv9Xad3GFPoWlK0U6GVIXNqrirkATgusYMNx6lc/79kusV0Xj5Opic5eQRcBDVBt TPoS1GiKYI7jYva4gM91FoeaxMHOi4Q//0LHDdyD+Y5Wuwu7HAsUC+KH3kEBrZY2+WG/ E2K1G1TigOLBcUouWQRpP399/y3zovRquX8jnRDjlozVQywEX5+DOhTbI5WGQDOUoCOO a2WErTRpUBGDisSAWjeaPlx0AS2YdtSYUMap9D5FePPj9oSXjdBHmc+/4oFeJXnSCjXW qSrQ== X-Gm-Message-State: AOJu0YxxDL2wycRWbKW0uO8LudMAABiEepvPCHI7xu58hSMUOp+dpEfk NAXJI9RPnQu4ISzPhOl16uBLtq8aUdQra8o= X-Received: from guanyulin-p620linsp01.ntc.corp.google.com ([2401:fa00:fc:202:a5e:4630:6c4b:b198]) (user=guanyulin job=sendgmr) by 2002:a25:a526:0:b0:da0:c924:4fdc with SMTP id h35-20020a25a526000000b00da0c9244fdcmr44590ybi.6.1698745275891; Tue, 31 Oct 2023 02:41:15 -0700 (PDT) Date: Tue, 31 Oct 2023 17:38:55 +0800 Mime-Version: 1.0 X-Mailer: git-send-email 2.42.0.820.g83a721a137-goog Message-ID: <20231031093921.755204-1-guanyulin@google.com> Subject: [PATCH] rpm: pm: enable PM_RPM_EXCEPTION config flag From: Guan-Yu Lin To: gregkh@linuxfoundation.org, rafael@kernel.org, len.brown@intel.com, pavel@ucw.cz, stern@rowland.harvard.edu, heikki.krogerus@linux.intel.com, mkl@pengutronix.de, hadess@hadess.net, mailhol.vincent@wanadoo.fr, ivan.orlov0322@gmail.com Cc: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, pumahsu@google.com, raychi@google.com, albertccwang@google.com, Guan-Yu Lin Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-8.4 required=5.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE, USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lipwig.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (lipwig.vger.email [0.0.0.0]); Tue, 31 Oct 2023 02:41:29 -0700 (PDT) Introducing PM_RPM_EXCEPTION config flag, which may alter the priority between system power management and runtime power management. In suspend-to-idle flow, PM core will suspend all devices to avoid device interact with the system. However, chances are devices might be used by other systems rather than a single system. In this case, PM core shouldn't suspend the devices. One may use PM_RPM_EXCEPTION config flag to mark such exception, and determine the power state of a device with runtime power management rather than system power management. Signed-off-by: Guan-Yu Lin --- drivers/usb/core/generic.c | 6 ++++++ drivers/usb/core/usb.h | 16 ++++++++++++++++ kernel/power/Kconfig | 8 ++++++++ 3 files changed, 30 insertions(+) diff --git a/drivers/usb/core/generic.c b/drivers/usb/core/generic.c index 740342a2812a..bb0dfcfc9764 100644 --- a/drivers/usb/core/generic.c +++ b/drivers/usb/core/generic.c @@ -266,6 +266,9 @@ int usb_generic_driver_suspend(struct usb_device *udev, pm_message_t msg) { int rc; + if (usb_runtime_pm_exception(udev)) + return 0; + /* Normal USB devices suspend through their upstream port. * Root hubs don't have upstream ports to suspend, * so we have to shut down their downstream HC-to-USB @@ -294,6 +297,9 @@ int usb_generic_driver_resume(struct usb_device *udev, pm_message_t msg) { int rc; + if (usb_runtime_pm_exception(udev)) + return 0; + /* Normal USB devices resume/reset through their upstream port. * Root hubs don't have upstream ports to resume or reset, * so we have to start up their downstream HC-to-USB diff --git a/drivers/usb/core/usb.h b/drivers/usb/core/usb.h index 60363153fc3f..14a054f814a2 100644 --- a/drivers/usb/core/usb.h +++ b/drivers/usb/core/usb.h @@ -90,6 +90,22 @@ extern void usb_major_cleanup(void); extern int usb_device_supports_lpm(struct usb_device *udev); extern int usb_port_disable(struct usb_device *udev); +#ifdef CONFIG_PM_RPM_EXCEPTION + +static inline int usb_runtime_pm_exception(struct usb_device *udev) +{ + return atomic_read(&udev->dev.power.usage_count); +} + +#else + +static inline int usb_runtime_pm_exception(struct usb_device *udev) +{ + return 0; +} + +#endif + #ifdef CONFIG_PM extern int usb_suspend(struct device *dev, pm_message_t msg); diff --git a/kernel/power/Kconfig b/kernel/power/Kconfig index 4b31629c5be4..beba7a0f3947 100644 --- a/kernel/power/Kconfig +++ b/kernel/power/Kconfig @@ -193,6 +193,14 @@ config PM responsible for the actual handling of device suspend requests and wake-up events. +config PM_RPM_EXCEPTION + bool "Prioritize Runtime Power Management more than Power Management" + default n + help + Provides a way to prioritize Runtime Power Management more than Power + Management. This way system can suspnd with maintaining specific + components in operation. + config PM_DEBUG bool "Power Management Debug Support" depends on PM -- 2.42.0.820.g83a721a137-goog