From nobody Tue Jun 16 08:59:06 2026 Received: from mail-lj1-f182.google.com (mail-lj1-f182.google.com [209.85.208.182]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4B0033A9D93 for ; Fri, 17 Apr 2026 11:13:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776424436; cv=none; b=nPDrLadS5QyxULACXYXBvaYEGRidndSskaleAbOB4fUTGeSZ0rrIekNnW2nLpciJ90SpGXb8QXwC5gohf+aGbLxgqAo68WbLPX0gBwmXsrx103tN7D8oqf/VzmYNRMKLKBPVM7+cKk1lNh40Xh/7udqAJpDzhFUhRWHoClYsQic= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776424436; c=relaxed/simple; bh=ZFA0J21UavqemBdX61tkeeGyEAB0nt+X9PKTYKjXLbM=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=RU/1rb6TEObwHmUC1nTpg+XG38lb1tnTjGgPkUG/E4++fh2K4Di0lObTcl/CLWQ7C3ESKIO5MlfO+8CxxxB8jn/oLyEsexqDagSNf694VC1orZ5W6dDil5Csv6qVlXvEgZWuMnJtCdw02dHjuaPFIQR71tFVXbkDSqFeXqTB0bI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=Z/l9SPQ8; arc=none smtp.client-ip=209.85.208.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="Z/l9SPQ8" Received: by mail-lj1-f182.google.com with SMTP id 38308e7fff4ca-386b553c70eso4626901fa.0 for ; Fri, 17 Apr 2026 04:13:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1776424432; x=1777029232; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=bH6jMbcTJb5ej+R0a9MCxG7qrcx/3nMs2OEMFRxEA/Y=; b=Z/l9SPQ8kJdhqWcAzMFMcxoerc3yTGtrOIoqCNeEW9iQnZYnGHk7RpipjltxaNApst a+HACIh9BidMH0Smrn/TedVd36B2Agkh449OOeeeTIeXa3ka1f1jGB2gb1haJLJjXuWt fu7uxOxm3WU6iizqX9LNCBS2iEyDC1IzVgO98yW96o0pulSe7fxJCPV3iegVEJwBW2Mx TSo2hBR2qpi4OlpQGehkdYMwX7bzCopWuTp5NQ2OaOGyqklYMUYJHwVgtcNghyAsBMjr iinFGDD4Z6PjT4yn2xef3q95X4waMB7f8GsvG+y2yIsbh0BegkQe5hk3DbQDo/QbIt4Z x2wg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776424432; x=1777029232; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=bH6jMbcTJb5ej+R0a9MCxG7qrcx/3nMs2OEMFRxEA/Y=; b=X0Rt8iDOPJx2s5EslzUQJzHFdYYjN/JriBuvgyPMs0M9Dmcc3L0BIPAMcVZugxLbtW OGOcptZBMfizIdB5W1PpQY+2h+kjfTrfI6nbriQbgcrBnnjO1WgERRHUWECq4DimeW42 oHp+df/XHVlzptB+DM/xCeBELufHJHVrzAfg/ibchqvjEEg//r4JK/63/ol/LjSV8ZSk dnf52tAqrWOGos8Mg93U/tu72f6Nu7vLPhaaYXGrbyZ634sbc7zY2bWHo0AhnikLkWMg qGBg0KUzevzqkUPC1Y7zAVNA5DLj67DT4VvmXYc4eNmMiIaNWQpXtLlT8ZxmHPitUEp0 Hh1w== X-Forwarded-Encrypted: i=1; AFNElJ/UtuFZzLuOONkscPrXSbDb/fSoBPAj0v4dQ6TPCS4L3SMhEO1kVZFaZ8U1du12flUOL4tAZ5q0guhU8mY=@vger.kernel.org X-Gm-Message-State: AOJu0YxcA0CTbPG687akfsclSDH818nnqTHpj5PyaWjMR5V+FootAoKb zp9hrU8b9XpK34jIPAdnDafSNfWTI1Aa7FPAW2RxLhSbK0B8ooIO2cVm95JEyYHaAdU= X-Gm-Gg: AeBDievoy97eUuBDr9Io/xNKa9VuC/CVkZLfI28RL617LJn1Yv/s36ydH2be+ijXOJ/ HKwj29WkQja5BUfe/m38cAdAu9rHFtGmk24dEUPCtYgydF9RU/Wbc9H425vffz4X0zwCak8Y11Y CSjDwrJjrk+TPUIvrnPLkRy27utVdXwqsTr3QW3NxxfR4gG1mU3T/rN7zuNYdCIKB/H9+JC9GB2 38bp29ZhMGdk4Tc2WX3wZE8PL2BekiUdgD/y9qQiRaRI3DrDYeX8vz4h1evHdS8+H45vzQ1T1Zo UNrO/gheWnVCEiJDjkwa5RNY0bGJkJqYcC8vRQqV47kluDQflZE43MRcZjRtPZ8A8k2BpH0BMpk YnfIdr3TO0bZylGDTdJVTMKWnxkeNsPJ2HaA0t5RbzkGGgqdg6o4UgCwAem539/KAiy7lY+39+J 3A8aZkeQS+sj15Bop6S1XdALUis21ml6c457sve8KU8SdbcRCPJ/eF25oAzgbnn3COna7chJ4ea /7BSwTIYgQ= X-Received: by 2002:a2e:bc26:0:b0:38e:58f1:99f7 with SMTP id 38308e7fff4ca-38ec7b61afcmr6554131fa.33.1776424432285; Fri, 17 Apr 2026 04:13:52 -0700 (PDT) Received: from uffe-tuxpro14.. (h-178-174-189-39.A498.priv.bahnhof.se. [178.174.189.39]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-38ecb733847sm3086691fa.34.2026.04.17.04.13.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Apr 2026 04:13:51 -0700 (PDT) From: Ulf Hansson To: Geert Uytterhoeven , Ulf Hansson , linux-pm@vger.kernel.org Cc: Geert Uytterhoeven , Frank Binns , Matt Coster , Marek Vasut , "Rafael J . Wysocki" , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Ulf Hansson , stable@vger.kernel.org Subject: [PATCH] pmdomain: core: Fix detach procedure for virtual devices in genpd Date: Fri, 17 Apr 2026 13:13:31 +0200 Message-ID: <20260417111331.158190-1-ulf.hansson@linaro.org> X-Mailer: git-send-email 2.43.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" If a device is attached to a PM domain through genpd_dev_pm_attach_by_id(), genpd calls pm_runtime_enable() for the corresponding virtual device that it registers. While this avoids boilerplate code in drivers, there is no corresponding call to pm_runtime_disable() in genpd_dev_pm_detach(). This means these virtual devices are typically detached from its genpd, while runtime PM remains enabled for them, which is not how things are designed to work. In worst cases it may lead to critical errors, like a NULL pointer dereference bug in genpd_runtime_suspend(), which was recently reported. For another case, we may end up keeping an unnecessary vote for a performance state for the device. To fix these problems, let's add this missing call to pm_runtime_disable() in genpd_dev_pm_detach(). Reported-by: Geert Uytterhoeven Fixes: 3c095f32a92b ("PM / Domains: Add support for multi PM domains per de= vice to genpd") Cc: stable@vger.kernel.org Closes: https://lore.kernel.org/all/CAMuHMdWapT40hV3c+CSBqFOW05aWcV1a6v_NiJ= YgoYi0i9_PDQ@mail.gmail.com/ Signed-off-by: Ulf Hansson Tested-by: Geert Uytterhoeven --- drivers/pmdomain/core.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/drivers/pmdomain/core.c b/drivers/pmdomain/core.c index 4d32fc676aaf..71e930e80178 100644 --- a/drivers/pmdomain/core.c +++ b/drivers/pmdomain/core.c @@ -3089,6 +3089,7 @@ static const struct bus_type genpd_bus_type =3D { static void genpd_dev_pm_detach(struct device *dev, bool power_off) { struct generic_pm_domain *pd; + bool is_virt_dev; unsigned int i; int ret =3D 0; =20 @@ -3098,6 +3099,13 @@ static void genpd_dev_pm_detach(struct device *dev, = bool power_off) =20 dev_dbg(dev, "removing from PM domain %s\n", pd->name); =20 + /* Check if the device was created by genpd at attach. */ + is_virt_dev =3D dev->bus =3D=3D &genpd_bus_type; + + /* Disable runtime PM if we enabled it at attach. */ + if (is_virt_dev) + pm_runtime_disable(dev); + /* Drop the default performance state */ if (dev_gpd_data(dev)->default_pstate) { dev_pm_genpd_set_performance_state(dev, 0); @@ -3123,7 +3131,7 @@ static void genpd_dev_pm_detach(struct device *dev, b= ool power_off) genpd_queue_power_off_work(pd); =20 /* Unregister the device if it was created by genpd. */ - if (dev->bus =3D=3D &genpd_bus_type) + if (is_virt_dev) device_unregister(dev); } =20 --=20 2.43.0