From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pj1-f46.google.com (mail-pj1-f46.google.com [209.85.216.46]) (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 F3FF93939D6 for ; Wed, 15 Apr 2026 13:10:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.46 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776258638; cv=none; b=tlZQluTrqIvh3oQsUaQfbabiHM1h20kE5N3AKh/k+pkULqpRpj2JzzlVhj1KpxT8cgwNQkpwQIy3qh6JyDhhLawSzruUCS9Dh1jcxsEaCm/Lv07Kqlkvh1zm3H0ZprQ8EAXTNVtOVzWvKbHnPpRZwgVS2YGu8O1JNHK580o2S9M= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776258638; c=relaxed/simple; bh=ev3ap9xj2ci77Th4eddDfPYYKx/SundD/E1tF85e9Oo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=SMpD0vO9FWrfQSV0BDSVMuB9Y5LweZsGXEPzVxEdxIDuu4afyEygVhpVF760R1iE4zvaZiUBBtIbSsFSyy6p5J4zFzJcnuZfFiqAr3PoXWEnKsqSbcQIuLJ8KC8nobxCl5NVZWOk14BdYwEgzWnavfrMEk9bck0aIWeSB7LE/Sg= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=AlanPEGL; arc=none smtp.client-ip=209.85.216.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="AlanPEGL" Received: by mail-pj1-f46.google.com with SMTP id 98e67ed59e1d1-35fb7c1a455so1386943a91.3 for ; Wed, 15 Apr 2026 06:10:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1776258636; x=1776863436; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=kUJELJUz1O9IxhGCscm3K2eyC5/sipvwiOllk5WFaS8=; b=AlanPEGLGZmaPvsQhEwps0KaBL9Db4FNgEZmyH6P/7m8gX+wFhOObbrMQ5EFUZyarg XT+Eg1eIlgtbjq4VEzYNOt5zV89NVnZgpr60uBpIIgZ0OwDeoI2Bx1GFEZtXAXOVdyhf PPCicyICcUJWMS+bqc/5uQFhWBYZ0hsP8W35D3JjgoGrodcXiG0MmKUQQRHEjUDOvube 627mJACtfpMPej2P1Q1F5Mrf8QUgEmht/o141JJAv1NqXZ/MW6moYL1URg3YRQ/WdQW9 Q6oXo7zVWQ1vT5RXsC2sPP+Lmog10Yzw0lam1BhgtOoQ+/1gcmP/d/bmPE5qtmpd6mAq WTug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776258636; x=1776863436; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=kUJELJUz1O9IxhGCscm3K2eyC5/sipvwiOllk5WFaS8=; b=N7uYiFJ/g7ofCFI9GLAkKgBPDA5PmLz91nYXAfdM7/y9OUAOfw0rsgdbmu2k29m6jd HfWo6Jcih2+0gzUr7VFuZRrAIKih1Mf0wHt0tGZhD19Sh2LmealZ3HO86+Ua67ECBFau 3fbkOaWZpvSrrh+CDKPK1CbdlnERHgfLliRZJyfs/y8beXHO2FVkCOt8w5/e7U2V+BKL JkCOQbLfJUN5NhCebW0Ncsa+LPeZ+N+ab3eJyJuoaqXmO0g4PVs/TED9iynDsx4ZchBI E38YcewYUpo57PMugrd/m35ZprTEED6ImRLVHsp0M4XF9uSNZIzI6KFisVa/4t5zRMr5 APzw== X-Forwarded-Encrypted: i=1; AFNElJ+7PxfLpHPl0C3I2Fp7k0ICxw8qS36mJLuO0ECoVwtyyQNR0d9zI54vZwh58PQSqvY7rU2ly/VNHvd6Lgo=@vger.kernel.org X-Gm-Message-State: AOJu0Yyrg0I83T/j+2/md+33cl9o6zn6kuyiPrrVszsYEDWddg1geLtu zG39qladHoAe4K5otktOKIw9ADqzXBj6du/VmFZFTuUhwhy5lCHzhmGa X-Gm-Gg: AeBDietsWRyohaMoSnI42vfZv4gSG77jEIjzx6XzlQCkGmEvfKsRFkV0GH8ugP1fpCO tKdXNXAtlB4Ag/XU3DrjyGtZpXpeR/RZo5PgJfEAfT0jXR+UZJdnyeVsAw2hBgaj49K0TrlNYDM kHA6Eiucb4VdWXBBgL3boFCeKLd0m8XdwebZJwhkewk9mV7UxTO4bHorhzRYnVYVnnoGKoi1huv CGVpm4+uskEORot9o5y3Xu2nvmTcoqgzFogyJwfWI1PFswvGnay2TTHgxejMhC2NaQS7WPfs6qu hTR0/vngyEoXVSXSbnmvdBuirSx5yCjJEdlxun6/Ij6RcFeULXgl0K4Uxg/SDDTVuNISbb3OhWA pFyUIu8y6b0Gs/PqTQtwp77FZpwdIAfKQRdqQ6Adpjj5xUYJeRyMxIYqoajv4jZwp1UqZbUGRxL V1pIs5ULCzd0SMd/Koa7PQZBcnn+O/w0c5FjLaKvnlVg/f3YKK4clqd7ViFV+HLs2T2JC3rj9cW 44vgCsQ6v/Y+35BYA6HkpdUdP9Y4WM= X-Received: by 2002:a17:903:bc5:b0:2b2:53f5:463c with SMTP id d9443c01a7336-2b2d5937375mr153330845ad.4.1776258636118; Wed, 15 Apr 2026 06:10:36 -0700 (PDT) Received: from junjungu-PC.localdomain ([223.167.147.125]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b478292053sm28062555ad.56.2026.04.15.06.10.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Apr 2026 06:10:35 -0700 (PDT) From: Felix Gu Date: Wed, 15 Apr 2026 21:10:27 +0800 Subject: [PATCH v2 1/2] thermal/drivers/imx: Fix thermal zone leak on probe error path Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20260415-imx-v2-1-aeacff9e72b2@gmail.com> References: <20260415-imx-v2-0-aeacff9e72b2@gmail.com> In-Reply-To: <20260415-imx-v2-0-aeacff9e72b2@gmail.com> To: "Rafael J. Wysocki" , Daniel Lezcano , Zhang Rui , Lukasz Luba , Frank Li , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Oleksij Rempel Cc: linux-pm@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Felix Gu X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1776258629; l=3218; i=ustc.gu@gmail.com; h=from:subject:message-id; bh=ev3ap9xj2ci77Th4eddDfPYYKx/SundD/E1tF85e9Oo=; b=+vxBo9PAJKnT8BuHhNDuig2ER/6eWGBvDO1I7LbnUtizgMe1i5F9cQOBcODm9AJnTg1aAWUwq 1H8DhhjRN6hCirqBg5cpRelvYwP9LNh1nY3fBnXUMla33YhJyXSfRaB X-Developer-Key: i=ustc.gu@gmail.com; a=ed25519; pk=fjUXwmjchVN7Ja6KGP55IXOzFeCl9edaHoQIEUA+/hw= If pm_runtime_resume_and_get() fails after the thermal zone has been registered, the probe error path cleans up runtime PM but skips thermal_zone_device_unregister(), leaking the thermal zone device. Switch to use devm_thermal_of_zone_register() to fix the problem. Fixes: 4cf2ddf16e17 ("thermal/drivers/imx: Implement runtime PM support") Signed-off-by: Felix Gu --- drivers/thermal/imx_thermal.c | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/drivers/thermal/imx_thermal.c b/drivers/thermal/imx_thermal.c index 38c993d1bcb3..3729c3eac748 100644 --- a/drivers/thermal/imx_thermal.c +++ b/drivers/thermal/imx_thermal.c @@ -216,6 +216,20 @@ struct imx_thermal_data { const char *temp_grade; }; +static int imx_thermal_sync_zone_trip(struct thermal_trip *trip, void *arg) +{ + struct imx_thermal_data *data = arg; + int temp; + + if (trip->type != THERMAL_TRIP_PASSIVE && trip->type != THERMAL_TRIP_CRITICAL) + return 0; + + temp = trips[trip->type].temperature; + thermal_zone_set_trip_temp(data->tz, trip, temp); + + return 0; +} + static void imx_set_panic_temp(struct imx_thermal_data *data, int panic_temp) { @@ -679,13 +693,8 @@ static int imx_thermal_probe(struct platform_device *pdev) goto legacy_cleanup; } - data->tz = thermal_zone_device_register_with_trips("imx_thermal_zone", - trips, - ARRAY_SIZE(trips), - data, - &imx_tz_ops, NULL, - IMX_PASSIVE_DELAY, - IMX_POLLING_DELAY); + data->irq_enabled = true; + data->tz = devm_thermal_of_zone_register(dev, 0, data, &imx_tz_ops); if (IS_ERR(data->tz)) { ret = PTR_ERR(data->tz); dev_err(dev, "failed to register thermal zone device %d\n", @@ -693,6 +702,8 @@ static int imx_thermal_probe(struct platform_device *pdev) goto clk_disable; } + thermal_zone_for_each_trip(data->tz, imx_thermal_sync_zone_trip, data); + dev_info(dev, "%s CPU temperature grade - max:%dC" " critical:%dC passive:%dC\n", data->temp_grade, data->temp_max / 1000, trips[IMX_TRIP_CRITICAL].temperature / 1000, @@ -724,25 +735,18 @@ static int imx_thermal_probe(struct platform_device *pdev) if (ret < 0) goto disable_runtime_pm; - data->irq_enabled = true; - ret = thermal_zone_device_enable(data->tz); - if (ret) - goto thermal_zone_unregister; - ret = devm_request_threaded_irq(dev, data->irq, imx_thermal_alarm_irq, imx_thermal_alarm_irq_thread, 0, "imx_thermal", data); if (ret < 0) { dev_err(dev, "failed to request alarm irq: %d\n", ret); - goto thermal_zone_unregister; + goto disable_runtime_pm; } pm_runtime_put(data->dev); return 0; -thermal_zone_unregister: - thermal_zone_device_unregister(data->tz); disable_runtime_pm: pm_runtime_put_noidle(data->dev); pm_runtime_disable(data->dev); @@ -761,7 +765,6 @@ static void imx_thermal_remove(struct platform_device *pdev) pm_runtime_put_noidle(data->dev); pm_runtime_disable(data->dev); - thermal_zone_device_unregister(data->tz); imx_thermal_unregister_legacy_cooling(data); } -- 2.43.0