From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-oo1-f44.google.com (mail-oo1-f44.google.com [209.85.161.44]) (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 269F9387369 for ; Sat, 9 May 2026 21:22:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.161.44 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778361741; cv=none; b=Hx1mg6X246T2HXIMKBFLqVRsGIY7YSatA99K7pQL6lnQ+w+px5YTe/VwlU1qqQhLUTo0udUod0uPRNztC8+K+xr7U8QOwoV5+JacEtxyCoQvclkghkyqk067PTiv7HvlZ4YHV7OP0H/mzD+m1UB7u6FUqG59zh/mg1JA3gniHuo= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778361741; c=relaxed/simple; bh=xxKXojjZuZ8EA+mrvFSZyEAl7uuHiZwlg9zD2NgYMkU=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=XyLYLNI0cRK++7Tjvk4UdeAGWER6r/ZCL9Q94e1TohdfBhYPTL5Vwe5y7nWsu+q06l9KSs+kUn0ov9rxF4CyM6p7XtaQHwlrlHwpKTfAVSuRUbD07bZ2fG39BCAJ6rX6ok20DOOQ5GKwHuHL82DA74SOfnCWhAQGY3d2b9pL01s= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre-com.20251104.gappssmtp.com header.i=@baylibre-com.20251104.gappssmtp.com header.b=Buchvfx8; arc=none smtp.client-ip=209.85.161.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre-com.20251104.gappssmtp.com header.i=@baylibre-com.20251104.gappssmtp.com header.b="Buchvfx8" Received: by mail-oo1-f44.google.com with SMTP id 006d021491bc7-6948da50eb5so1670610eaf.1 for ; Sat, 09 May 2026 14:22:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20251104.gappssmtp.com; s=20251104; t=1778361737; x=1778966537; darn=vger.kernel.org; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=SJXKceU5ZhqPrIiFJjCPJBk20KBKY+Up01lGKB3v0/g=; b=Buchvfx8Y6F3bhKjTeN3LflL/1bULYsJ5wOQJnDbIfJyalLffwUwkRnMJQfytp92Gg yi9LOG1EZtxq/3k3U5qxc4L/mvBvDBFgfYtkqjtuI43mM2YQ3jmD95fXfPYak3vLsS9s P7GhqUaIQyvBjdW0NXRzT+pBlJGdt0EMFn5r8dpSr7EqA4YDfz4QGSCgPNbQVGiKX315 hs4NhgpI9GnWdmxxgDGaL9CD03VRdlsSPsAAnerJDucsLv3xXcNso3okylao1N5bcPXC CFdlxL+M5iYoHme/G2lpPaWL7/4wlTSDk4vaDYNFNtMin8rGX0yEpxths73RlusTetoo hGrw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778361737; x=1778966537; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=SJXKceU5ZhqPrIiFJjCPJBk20KBKY+Up01lGKB3v0/g=; b=rpx4/kgzjdqUfytCilqCZ3FejDl1eZomYZbYVYM7/fRDf10sXbri8F7E42eEg3tZUz 8JDj6060GRvVeIZfFG7rQsn0j6kmDGnz2fRoXA6/7bGGMsx9S22VGtht+sLbVekuq1Ia eL9T54O2sytA+RiwuGem8xvK4JQbgqkGPVYEvnwxfAgJXslZNdUYwqL2PpJT5m+4HQ/k 0lC63xaHPrCqjqhDXwgrDX2pgO6kDc+iwNVWoLoTE1swjla4LqzI5LVCN3Jv+yJPdL/z DavFqJSb1zHXl1s6qvL1b3rA00qnO/tZpXiwLECOcRlj6sbTtcQ2QA56+sqTdsl3vaDY 8ywA== X-Forwarded-Encrypted: i=1; AFNElJ8IBnhYx1Q/JBuOyg3eaKl+lZa5M154GM0jR54W9fQ+30jKACTCvhoAq2r1MQaWYPCz8SnqMMUK94j5GnM=@vger.kernel.org X-Gm-Message-State: AOJu0Yx/9S3tK6dpyjebLpLX4j8Cp+FxlILn/U4K5jLV+ShxvAqOpcCw JYzYY+4qTax48RJIidpTPMppSnbrBDyWJVxhF/ERu25g3AYFAjgIfMQ+MzyJxM0ezZs= X-Gm-Gg: Acq92OHmJBGySZflCGlmJc+vPqUAS27+39zKecdBCjjHdYWWJHiZEtxrXorWXAlV27R ExmJXJ/02uDeD2e4NlD0vOlOL7qty5Rq7w/g4zU8VE0c820xSEi0iZc+S1kw9rO62UJo9voMKam EtJzXH6ByIIFlHTJFJF9Jr/P+OLhpVk0s6BQC5Ozw92AbjcicF+JZoSEZfzN8SC4+cVUn3j4tAm RyuK2VW2eqtyFvND/3cTKjdDBLZsTNtHXEEVjElXcp/QBRrETXuhyV+TI763kbNXHRjGyfg46Sr Tn0nWquNl2IEpYHLXZQJTFCwW21xhpH1BiQV5LcOytyL2P4e9pAw19JnouYPZNg3oAe7a/7W72z 3/HeK23p8BDQVsubXgqttQnD7wAkLHXPvfFO7qmoSqtDL2tO/BmSrp6K8oPVUwZzEHNX/d3v5tR u8UbfHwWI9GXT6p1g7d9TgQRGn+ZWX7wxxYykadbRUcetnGmE8Ex2moeVLVuExr3gwQcF0t/jKx g== X-Received: by 2002:a05:6820:290e:b0:696:1b18:18f3 with SMTP id 006d021491bc7-699ab661cb5mr6120843eaf.24.1778361737046; Sat, 09 May 2026 14:22:17 -0700 (PDT) Received: from ?IPV6:2600:8803:e7e4:500:3548:c22e:ea52:dbc7? ([2600:8803:e7e4:500:3548:c22e:ea52:dbc7]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-69b25c75d08sm3260276eaf.4.2026.05.09.14.22.14 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 09 May 2026 14:22:15 -0700 (PDT) Message-ID: Date: Sat, 9 May 2026 16:22:13 -0500 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH] iio: chemical: sps30: Replace manual locking with RAII locking To: Maxwell Doose , tduszyns@gmail.com, jic23@kernel.org Cc: =?UTF-8?Q?Nuno_S=C3=A1?= , Andy Shevchenko , "open list:IIO SUBSYSTEM AND DRIVERS" , open list References: <20260509125201.29872-1-m32285159@gmail.com> Content-Language: en-US From: David Lechner In-Reply-To: <20260509125201.29872-1-m32285159@gmail.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 5/9/26 7:52 AM, Maxwell Doose wrote: > Replace manual mutex_lock() and mutex_unlock() calls with the much newer > guard(mutex)() and scoped_guard() macros to enable RAII patterns, > modernize the driver, and to increase readability. > > Signed-off-by: Maxwell Doose > --- > drivers/iio/chemical/sps30.c | 60 +++++++++++++++++------------------- > 1 file changed, 29 insertions(+), 31 deletions(-) > > diff --git a/drivers/iio/chemical/sps30.c b/drivers/iio/chemical/sps30.c > index a934bf0298dd..186dec4cfd78 100644 > --- a/drivers/iio/chemical/sps30.c > +++ b/drivers/iio/chemical/sps30.c > @@ -5,6 +5,7 @@ > * Copyright (c) Tomasz Duszynski > */ > > +#include > #include > #include > #include > @@ -111,9 +112,9 @@ static irqreturn_t sps30_trigger_handler(int irq, void *p) > aligned_s64 ts; > } scan; > > - mutex_lock(&state->lock); > - ret = sps30_do_meas(state, scan.data, ARRAY_SIZE(scan.data)); > - mutex_unlock(&state->lock); > + scoped_guard(mutex, &state->lock) > + ret = sps30_do_meas(state, scan.data, ARRAY_SIZE(scan.data)); > + > if (ret) > goto err; > > @@ -136,23 +137,23 @@ static int sps30_read_raw(struct iio_dev *indio_dev, > case IIO_CHAN_INFO_PROCESSED: > switch (chan->type) { > case IIO_MASSCONCENTRATION: > - mutex_lock(&state->lock); > - /* read up to the number of bytes actually needed */ > - switch (chan->channel2) { > - case IIO_MOD_PM1: > - ret = sps30_do_meas(state, data, 1); > - break; > - case IIO_MOD_PM2P5: > - ret = sps30_do_meas(state, data, 2); > - break; > - case IIO_MOD_PM4: > - ret = sps30_do_meas(state, data, 3); > - break; > - case IIO_MOD_PM10: > - ret = sps30_do_meas(state, data, 4); > - break; We can do it like this: case IIO_MASSCONCENTRATION: { guard(mutex)(&state->lock); /* read up to the number of bytes actually needed */ switch (chan->channel2) { case IIO_MOD_PM1: ret = sps30_do_meas(state, data, 1); break; case IIO_MOD_PM2P5: ret = sps30_do_meas(state, data, 2); break; case IIO_MOD_PM4: ret = sps30_do_meas(state, data, 3); break; case IIO_MOD_PM10: ret = sps30_do_meas(state, data, 4); break; default: return -EINVAL; } if (ret) return ret; *val = data[chan->address] / 100; *val2 = (data[chan->address] % 100) * 10000; return IIO_VAL_INT_PLUS_MICRO; } default: return -EINVAL; Make less indent and we don't have to initialize ret at the start of the function anymore. > + scoped_guard(mutex, &state->lock) { > + /* read up to the number of bytes actually needed */ > + switch (chan->channel2) { > + case IIO_MOD_PM1: > + ret = sps30_do_meas(state, data, 1); > + break; > + case IIO_MOD_PM2P5: > + ret = sps30_do_meas(state, data, 2); > + break; > + case IIO_MOD_PM4: > + ret = sps30_do_meas(state, data, 3); > + break; > + case IIO_MOD_PM10: > + ret = sps30_do_meas(state, data, 4); > + break; > + } > } > - mutex_unlock(&state->lock); > if (ret) > return ret; > > @@ -197,9 +198,9 @@ static ssize_t start_cleaning_store(struct device *dev, > if (kstrtoint(buf, 0, &val) || val != 1) > return -EINVAL; > > - mutex_lock(&state->lock); > - ret = state->ops->clean_fan(state); > - mutex_unlock(&state->lock); > + scoped_guard(mutex, &state->lock) Doesn't need to be scoped. there is just return after this. > + ret = state->ops->clean_fan(state); > + > if (ret) > return ret; > > @@ -215,9 +216,9 @@ static ssize_t cleaning_period_show(struct device *dev, > __be32 val; > int ret; > > - mutex_lock(&state->lock); > - ret = state->ops->read_cleaning_period(state, &val); > - mutex_unlock(&state->lock); > + scoped_guard(mutex, &state->lock) > + ret = state->ops->read_cleaning_period(state, &val); > + IMHO, this one just make the code uglier, not really an improvement. > if (ret) > return ret; >