From patchwork Thu Nov 30 19:53:04 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Rafael J. Wysocki" X-Patchwork-Id: 172087 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:bcd1:0:b0:403:3b70:6f57 with SMTP id r17csp644048vqy; Thu, 30 Nov 2023 11:53:14 -0800 (PST) X-Google-Smtp-Source: AGHT+IHR9EBMO2Blz4049voZ+Jm+RSz2XZnpgzxy+R1Q6mC6VUGUPF6vND+HhKLzZVAQkxzbTS94 X-Received: by 2002:a05:6a00:a0c:b0:6bd:b7c5:f776 with SMTP id p12-20020a056a000a0c00b006bdb7c5f776mr24973029pfh.8.1701373993994; Thu, 30 Nov 2023 11:53:13 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1701373993; cv=none; d=google.com; s=arc-20160816; b=IZ+m8aMqZ63Wwnkrlfn1DiNEA2pR9BNP+2aG4ApcjrI6o68kOE8vnMQv+n/tJbKJtt +D2p/RVITa7Zaf6SJObXUBvNDkbzfJeGIdmtvtDgUXJnbFEFByMu2tVniuW0eaLoyou3 ElZC4Z1oAQpK0erew3WUpjTlXAK6yTSZpjbHFxBDxhMCar2XJr2a7LAPepTcS7L9aK63 djsgPj3FCGxoq0Em4pq1SKVvWX/fJSG8byQloxpnyNzAEKRJgvjiGfHwtlFJi8X340nI kRUW5lS7MqvPfCUTkFej22n8cPF2dof/sC2qSR0LpFqJw2ulVqkkxSpRpxCpl9N38oH2 vmFA== 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=aXKZkwtwR5LAqyR5zl3WBPA/Qwelx2QquNJHeNzoGso=; fh=nLypB3rvk504GacFIka1NRIrs+dxk/mQtlixTJ9Bzjw=; b=Z7sT2mFFguUKVBW9ojt7sgSVNVO6rKKZgE5z0A5PAfpecRmbGzcpFo6Rjpy4xirIaG Z+F3hZVrfu68S6NQRVGVRjGEd/jxSeQYco6rCkoiO8NYYjxbt9XwC5numvd3IK962rTI 2/jNBRcIKhnGhC19u/Q5655iE+BufvHdbFmhJQbEonBmm5/AB9f4X3hebXsrlftCN7+J zvPFnHKnbIzuO9LA20ntrWgPPdxZvrTzIbhZ6Cz85J7B7C4xwGS+7rqt5Ro8VNWBFD+8 uyVY7dkQeAP5nzhIyFfEEYFooTJkkF3zKPb53Eo0CON1/J60LvB/zru1hg1Kb07ndUN1 z5cA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:4 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from howler.vger.email (howler.vger.email. [2620:137:e000::3:4]) by mx.google.com with ESMTPS id h10-20020a056a00218a00b006cb64902ef3si1920572pfi.153.2023.11.30.11.53.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Nov 2023 11:53:13 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:4 as permitted sender) client-ip=2620:137:e000::3:4; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:4 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by howler.vger.email (Postfix) with ESMTP id CCB3C80966E5; Thu, 30 Nov 2023 11:53:09 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at howler.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1376562AbjK3TxB (ORCPT + 99 others); Thu, 30 Nov 2023 14:53:01 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49212 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1376470AbjK3TxA (ORCPT ); Thu, 30 Nov 2023 14:53:00 -0500 Received: from cloudserver094114.home.pl (cloudserver094114.home.pl [79.96.170.134]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 34B0110EF; Thu, 30 Nov 2023 11:53:06 -0800 (PST) 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 5.4.0) id 9f11c825c878c901; Thu, 30 Nov 2023 20:53:04 +0100 Received: from kreacher.localnet (unknown [195.136.19.94]) (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 cloudserver094114.home.pl (Postfix) with ESMTPSA id 3732D668637; Thu, 30 Nov 2023 20:53:04 +0100 (CET) From: "Rafael J. Wysocki" To: Daniel Lezcano , Lukasz Luba Cc: Linux PM , LKML , Srinivas Pandruvada , Zhang Rui Subject: [PATCH v1.1 2/2] thermal: sysfs: Eliminate unnecessary zone locking Date: Thu, 30 Nov 2023 20:53:04 +0100 Message-ID: <2732721.mvXUDI8C0e@kreacher> In-Reply-To: <5754079.DvuYhMxLoT@kreacher> References: <5754079.DvuYhMxLoT@kreacher> MIME-Version: 1.0 X-CLIENT-IP: 195.136.19.94 X-CLIENT-HOSTNAME: 195.136.19.94 X-VADE-SPAMSTATE: clean X-VADE-SPAMCAUSE: gggruggvucftvghtrhhoucdtuddrgedvkedrudeijedguddvlecutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfjqffogffrnfdpggftiffpkfenuceurghilhhouhhtmecuudehtdenucesvcftvggtihhpihgvnhhtshculddquddttddmnecujfgurhephffvvefufffkjghfggfgtgesthfuredttddtjeenucfhrhhomhepfdftrghfrggvlhculfdrucghhihsohgtkhhifdcuoehrjhifsehrjhifhihsohgtkhhirdhnvghtqeenucggtffrrghtthgvrhhnpedvffeuiedtgfdvtddugeeujedtffetteegfeekffdvfedttddtuefhgeefvdejhfenucfkphepudelhedrudefiedrudelrdelgeenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepihhnvghtpeduleehrddufeeirdduledrleegpdhhvghlohepkhhrvggrtghhvghrrdhlohgtrghlnhgvthdpmhgrihhlfhhrohhmpedftfgrfhgrvghlucflrdcuhgihshhotghkihdfuceorhhjfiesrhhjfiihshhotghkihdrnhgvtheqpdhnsggprhgtphhtthhopeeipdhrtghpthhtohepuggrnhhivghlrdhlvgiitggrnhhosehlihhnrghrohdrohhrghdprhgtphhtthhopehluhhkrghsiidrlhhusggrsegrrhhmrdgtohhmpdhrtghpthhtoheplhhinhhugidqphhmsehvghgvrhdrkhgvrhhnvghlrdhorhhgpdhrtghpthhtoheplhhinhhugidqkhgvrhhnvghlsehvghgvrhdrkhgvrhhnvghlrdhorhhgpdhrtghpthhtohepshhr ihhnihhvrghsrdhprghnughruhhvrggurgeslhhinhhugidrihhnthgvlhdrtghomhdprhgtphhtthhopehruhhirdiihhgrnhhgsehinhhtvghlrdgtohhm X-DCC--Metrics: v370.home.net.pl 1024; Body=13 Fuz1=13 Fuz2=13 X-Spam-Status: No, score=-0.8 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on howler.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 (howler.vger.email [0.0.0.0]); Thu, 30 Nov 2023 11:53:09 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1784015231086776226 X-GMAIL-MSGID: 1784019937074448036 From: Rafael J. Wysocki The _show() callback functions of the trip point sysfs attributes, temperature, hysteresis and type, need not use thermal zone locking, because the layout of the data structures they access does not change after the thermal zone registration. Namely, they all need to access a specific entry in the thermal zone's trips[] table that is always present for non-tripless thermal zones and its size cannot change after the thermal zone has been registered. Thus it is always safe to access the trips[] table of a registered thermal zone from each of the sysfs attributes in question. Moreover, the type of a trip point does not change after registering its thermal zone, and while its temperature and hysteresis can change, for example due to a firmware-induced thermal zone update, holding the zone lock around reading them is pointless, because it does not prevent stale values from being returned to user space. For example, a trip point temperature can always change ater trip_point_temp_show() has read it and before the function's return statement is executed, regardless of whether or not zone locking is used. For this reason, drop the zone locking from trip_point_type_show(), trip_point_temp_show(), and trip_point_hyst_show(). Signed-off-by: Rafael J. Wysocki --- v1 -> v1.1: Use >= instead of > (which was incorrect) in 3 places. --- drivers/thermal/thermal_sysfs.c | 60 ++++++++++++++-------------------------- 1 file changed, 21 insertions(+), 39 deletions(-) Index: linux-pm/drivers/thermal/thermal_sysfs.c =================================================================== --- linux-pm.orig/drivers/thermal/thermal_sysfs.c +++ linux-pm/drivers/thermal/thermal_sysfs.c @@ -83,25 +83,18 @@ trip_point_type_show(struct device *dev, char *buf) { struct thermal_zone_device *tz = to_thermal_zone(dev); - struct thermal_trip trip; - int trip_id, result; + int trip_id; + + if (!device_is_registered(dev)) + return -ENODEV; if (sscanf(attr->attr.name, "trip_point_%d_type", &trip_id) != 1) return -EINVAL; - mutex_lock(&tz->lock); - - if (device_is_registered(dev)) - result = __thermal_zone_get_trip(tz, trip_id, &trip); - else - result = -ENODEV; - - mutex_unlock(&tz->lock); - - if (result) - return result; + if (trip_id < 0 || trip_id >= tz->num_trips) + return -EINVAL; - switch (trip.type) { + switch (tz->trips[trip_id].type) { case THERMAL_TRIP_CRITICAL: return sprintf(buf, "critical\n"); case THERMAL_TRIP_HOT: @@ -164,25 +157,18 @@ trip_point_temp_show(struct device *dev, char *buf) { struct thermal_zone_device *tz = to_thermal_zone(dev); - struct thermal_trip trip; - int trip_id, ret; + int trip_id; + + if (!device_is_registered(dev)) + return -ENODEV; if (sscanf(attr->attr.name, "trip_point_%d_temp", &trip_id) != 1) return -EINVAL; - mutex_lock(&tz->lock); - - if (device_is_registered(dev)) - ret = __thermal_zone_get_trip(tz, trip_id, &trip); - else - ret = -ENODEV; - - mutex_unlock(&tz->lock); - - if (ret) - return ret; + if (trip_id < 0 || trip_id >= tz->num_trips) + return -EINVAL; - return sprintf(buf, "%d\n", trip.temperature); + return sprintf(buf, "%d\n", tz->trips[trip_id].temperature); } static ssize_t @@ -234,22 +220,18 @@ trip_point_hyst_show(struct device *dev, char *buf) { struct thermal_zone_device *tz = to_thermal_zone(dev); - struct thermal_trip trip; - int trip_id, ret; + int trip_id; + + if (!device_is_registered(dev)) + return -ENODEV; if (sscanf(attr->attr.name, "trip_point_%d_hyst", &trip_id) != 1) return -EINVAL; - mutex_lock(&tz->lock); - - if (device_is_registered(dev)) - ret = __thermal_zone_get_trip(tz, trip_id, &trip); - else - ret = -ENODEV; - - mutex_unlock(&tz->lock); + if (trip_id < 0 || trip_id >= tz->num_trips) + return -EINVAL; - return ret ? ret : sprintf(buf, "%d\n", trip.hysteresis); + return sprintf(buf, "%d\n", tz->trips[trip_id].hysteresis); } static ssize_t