From nobody Mon May 25 00:55:10 2026 Received: from mail-wm1-f46.google.com (mail-wm1-f46.google.com [209.85.128.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 31BFF3D565D for ; Wed, 20 May 2026 10:12:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779271973; cv=none; b=k/oPkqHpljkEdNhCBvlPJn1ANbHhYofemk5GsAI1OAwGF1ugiDuB6hYhqOIuMLNnl/QJLF/VlId2sOU2QHN6klinvsA+czbMNnQNiHIastCQXw/ilkCC2ANiYita4iDCVE5SCPqbhba5E+q2wUNAd4S+cVDPz6f+2jx6il35yOQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779271973; c=relaxed/simple; bh=4xcArRGRq+w57d8yxnb8jHbKeYqbOIs3eRr21NBoj3Q=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=CZh7loJhp/+eKuulKJLLhpwpNPoWuNMC2oo23lZ8mV+AapHhMmETktqD4COMcSPhXadgfyWqGDHZNbCSvxL5Tk5IdHXnJ6/Z3JEAPt4it03qt1LVg+/CFKg9PHS1NHfYRZic2rBX9ouwVT3y3ziHqBxJhec079ezqr98f1nDbfA= 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=GBkGswgw; arc=none smtp.client-ip=209.85.128.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="GBkGswgw" Received: by mail-wm1-f46.google.com with SMTP id 5b1f17b1804b1-4891c0620bcso30027855e9.1 for ; Wed, 20 May 2026 03:12:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779271971; x=1779876771; 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=2jlKj3vqVybuLuT9iC3xNZJPcSjtJp50MyUrzENU6qY=; b=GBkGswgwfmqXf4ZEcQCDXyVBxH1sxqYhFQgMQh7WlzR6W31Tsy/bo2yJ1jb4Ysar9n Xiy6qIW+bevlJliaV82uhHnayQCvaoz1CuI5VOy7JlvrvuYCvyjJ2qXE/Cujog1jmAdy Ya0WrCTZwhiW3i5etGrhrt89eNIQeOs6O7TCYck+5okdYjaWa90mfH8NdTzcJBrvYyQm KyGPrymv7vJEZVWkNZ0+S/b871vduBiROsZqmuF4gMqZ/gP5S/Fps+VIA/vfLcpM5Gdg kjO20MRE7pEC22YDoP9zjCF3qvFXZrO/5PxQOJ6PTsC92DGxTZrSqTbTpl2M7UqzyoZr scuw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779271971; x=1779876771; 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=2jlKj3vqVybuLuT9iC3xNZJPcSjtJp50MyUrzENU6qY=; b=GCTaanzSozTfwqsHaQS3A58J8DtBrSjjh35m7z8R1runfnTdTB5aK6S4nzAHJcgjTj gJzzcSV1KZbGGb3GwBGAUgjF+T3zyIO4sW4GsL7/eDrbbCSv20NmgwGetv+Fnq+BlhZf F1QqX/pukiQE8ANr+2ZUPshLNe7/s9HCx7qu1jP/nbdaRQpQ9RqWl3uLv0ZNDLUllFxy 9QUItkeptDZ8goPPB+FAn4uhiWZNsQyYK46L+DB7+6YHd2PsJez6zv+UipHD2zK3+TF3 YUbKzeAXotCG3mXMSxA7dQKRtw1+CV3db6RBWqrzIuOmNe+8+s4PHRZ7kXW3FvO3YrP4 3TJw== X-Forwarded-Encrypted: i=1; AFNElJ+07mNeReVZUnlE1U4vLV6i1bP52mguBhFncQQps3IZ6aWyinJy+HMsMwB7+XQBMzbK8DqoaObHvgBrcZU=@vger.kernel.org X-Gm-Message-State: AOJu0YynLD6UjFZOjIC49JnWNeMlIpmX1e2z24uR4Ghqbkpl4/wk3R/X Gg9vj5zEXHXfekVRJOo9sbRkPr+DTBfvn1BrT/2kn7voPiTEstgAuW8M7ei9bB1hZug= X-Gm-Gg: Acq92OHWGmcOwHRq4fONffMqi8/05u1VMFUiMkc0dLhEngQEmReQYPMsELeWD+X/414 RF6CNa++IMkYqstYHfTI6bbZFvs9iijccTPf8n0NiJuD1Az/EsQDcjES0WhQvm5N9t+h9TjqkD6 /p/EoYjTRzM1eFNa4MwXWX27Ad5OC3qkIs9Os9YhpLH++b9pk6Dw39cWj2C4QpXVzhBnsZJM4dJ UBvM4Cjpb8jE8h3PzYxRaE6C0+4QUtFwgr75hct7CERfjJZauFLPTQsbfmglkfxX9nR1LyESQ74 1SeqvYPGu6r45lg6YF0W5g6duogtt4OPETt5+64OnHRN1cyENohBGK7JJy/6NeQjyWRWTlF5GSb oWkA5QJVb2PiQZuGUjG6Jju2jYgCphUUrLwNNDjxeOEafbhGWorunsqRsfjDH3HgSGf22FMqdTX vHnEcdCjexl6FqDVJeowgCAidxyZbtVBwD2Aekjf1z1YKZ7bHwMoFv X-Received: by 2002:a05:600c:3b0c:b0:48a:5821:5ff2 with SMTP id 5b1f17b1804b1-48fe60d55f9mr350093655e9.8.1779271970284; Wed, 20 May 2026 03:12:50 -0700 (PDT) Received: from localhost.localdomain ([2001:8a0:6c9b:a000:ed18:5665:257e:fff1]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48febe78aadsm124804255e9.29.2026.05.20.03.12.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 03:12:49 -0700 (PDT) From: Gabriel Rondon To: jic23@kernel.org Cc: linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, andy@kernel.org, nuno.sa@analog.com, dlechner@baylibre.com Subject: [PATCH v2] iio: accel: bmc150: use guard(mutex) for mutex handling Date: Wed, 20 May 2026 11:12:47 +0100 Message-Id: <20260520101247.64458-1-grondon@gmail.com> X-Mailer: git-send-email 2.33.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" Replace manual mutex_lock()/mutex_unlock() pairs with guard(mutex) and scoped_guard() from cleanup.h. This simplifies error paths by removing the need for explicit unlock calls before returning. Most converted functions hold the lock for their entire body, so guard(mutex) applies directly. bmc150_accel_trigger_handler() only holds the lock around a single register read, so scoped_guard() is used there to keep the lock scope unchanged. Signed-off-by: Gabriel Rondon Reviewed-by: Stepan Ionichev --- Changes since v1: - Drop the verbose list of converted functions from the commit message. - bmc150_accel_get_temp(): keep the original declaration order; no unrelated line movement. - bmc150_accel_get_axis(): convert to guard(mutex) as well, the only code outside the old lock scope was a trivial error check. - bmc150_accel_trigger_handler(): use scoped_guard() so that no manual mutex_lock()/mutex_unlock() pairs are left behind. - bmc150_accel_get_fifo_watermark() / bmc150_accel_get_fifo_state(): drop the intermediate variable and return directly. drivers/iio/accel/bmc150-accel-core.c | 68 ++++++++------------------- 1 file changed, 20 insertions(+), 48 deletions(-) diff --git a/drivers/iio/accel/bmc150-accel-core.c b/drivers/iio/accel/bmc1= 50-accel-core.c index 2398eb7e12cd..1e0bd5ab4298 100644 --- a/drivers/iio/accel/bmc150-accel-core.c +++ b/drivers/iio/accel/bmc150-accel-core.c @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include @@ -600,18 +601,15 @@ static int bmc150_accel_get_temp(struct bmc150_accel_= data *data, int *val) int ret; unsigned int value; =20 - mutex_lock(&data->mutex); + guard(mutex)(&data->mutex); =20 ret =3D regmap_read(data->regmap, BMC150_ACCEL_REG_TEMP, &value); if (ret < 0) { dev_err(dev, "Error reading reg_temp\n"); - mutex_unlock(&data->mutex); return ret; } *val =3D sign_extend32(value, 7); =20 - mutex_unlock(&data->mutex); - return IIO_VAL_INT; } =20 @@ -624,25 +622,21 @@ static int bmc150_accel_get_axis(struct bmc150_accel_= data *data, int axis =3D chan->scan_index; __le16 raw_val; =20 - mutex_lock(&data->mutex); + guard(mutex)(&data->mutex); ret =3D bmc150_accel_set_power_state(data, true); - if (ret < 0) { - mutex_unlock(&data->mutex); + if (ret < 0) return ret; - } =20 ret =3D regmap_bulk_read(data->regmap, BMC150_ACCEL_AXIS_TO_REG(axis), &raw_val, sizeof(raw_val)); if (ret < 0) { dev_err(dev, "Error reading axis %d\n", axis); bmc150_accel_set_power_state(data, false); - mutex_unlock(&data->mutex); return ret; } *val =3D sign_extend32(le16_to_cpu(raw_val) >> chan->scan_type.shift, chan->scan_type.realbits - 1); ret =3D bmc150_accel_set_power_state(data, false); - mutex_unlock(&data->mutex); if (ret < 0) return ret; =20 @@ -810,17 +804,14 @@ static int bmc150_accel_write_event_config(struct iio= _dev *indio_dev, if (state =3D=3D data->ev_enable_state) return 0; =20 - mutex_lock(&data->mutex); + guard(mutex)(&data->mutex); =20 ret =3D bmc150_accel_set_interrupt(data, BMC150_ACCEL_INT_ANY_MOTION, state); - if (ret < 0) { - mutex_unlock(&data->mutex); + if (ret < 0) return ret; - } =20 data->ev_enable_state =3D state; - mutex_unlock(&data->mutex); =20 return 0; } @@ -845,13 +836,10 @@ static ssize_t bmc150_accel_get_fifo_watermark(struct= device *dev, { struct iio_dev *indio_dev =3D dev_to_iio_dev(dev); struct bmc150_accel_data *data =3D iio_priv(indio_dev); - int wm; =20 - mutex_lock(&data->mutex); - wm =3D data->watermark; - mutex_unlock(&data->mutex); + guard(mutex)(&data->mutex); =20 - return sysfs_emit(buf, "%d\n", wm); + return sysfs_emit(buf, "%d\n", data->watermark); } =20 static ssize_t bmc150_accel_get_fifo_state(struct device *dev, @@ -860,13 +848,10 @@ static ssize_t bmc150_accel_get_fifo_state(struct dev= ice *dev, { struct iio_dev *indio_dev =3D dev_to_iio_dev(dev); struct bmc150_accel_data *data =3D iio_priv(indio_dev); - bool state; =20 - mutex_lock(&data->mutex); - state =3D data->fifo_mode; - mutex_unlock(&data->mutex); + guard(mutex)(&data->mutex); =20 - return sysfs_emit(buf, "%d\n", state); + return sysfs_emit(buf, "%d\n", data->fifo_mode); } =20 static const struct iio_mount_matrix * @@ -906,9 +891,8 @@ static int bmc150_accel_set_watermark(struct iio_dev *i= ndio_dev, unsigned val) if (val > BMC150_ACCEL_FIFO_LENGTH) val =3D BMC150_ACCEL_FIFO_LENGTH; =20 - mutex_lock(&data->mutex); + guard(mutex)(&data->mutex); data->watermark =3D val; - mutex_unlock(&data->mutex); =20 return 0; } @@ -1021,13 +1005,10 @@ static int __bmc150_accel_fifo_flush(struct iio_dev= *indio_dev, static int bmc150_accel_fifo_flush(struct iio_dev *indio_dev, unsigned sam= ples) { struct bmc150_accel_data *data =3D iio_priv(indio_dev); - int ret; =20 - mutex_lock(&data->mutex); - ret =3D __bmc150_accel_fifo_flush(indio_dev, samples, false); - mutex_unlock(&data->mutex); + guard(mutex)(&data->mutex); =20 - return ret; + return __bmc150_accel_fifo_flush(indio_dev, samples, false); } =20 static IIO_CONST_ATTR_SAMP_FREQ_AVAIL( @@ -1187,10 +1168,9 @@ static irqreturn_t bmc150_accel_trigger_handler(int = irq, void *p) struct bmc150_accel_data *data =3D iio_priv(indio_dev); int ret; =20 - mutex_lock(&data->mutex); - ret =3D regmap_bulk_read(data->regmap, BMC150_ACCEL_REG_XOUT_L, - data->buffer, AXIS_MAX * 2); - mutex_unlock(&data->mutex); + scoped_guard(mutex, &data->mutex) + ret =3D regmap_bulk_read(data->regmap, BMC150_ACCEL_REG_XOUT_L, + data->buffer, AXIS_MAX * 2); if (ret < 0) goto err_read; =20 @@ -1230,31 +1210,23 @@ static int bmc150_accel_trigger_set_state(struct ii= o_trigger *trig, struct bmc150_accel_data *data =3D t->data; int ret; =20 - mutex_lock(&data->mutex); + guard(mutex)(&data->mutex); =20 - if (t->enabled =3D=3D state) { - mutex_unlock(&data->mutex); + if (t->enabled =3D=3D state) return 0; - } =20 if (t->setup) { ret =3D t->setup(t, state); - if (ret < 0) { - mutex_unlock(&data->mutex); + if (ret < 0) return ret; - } } =20 ret =3D bmc150_accel_set_interrupt(data, t->intr, state); - if (ret < 0) { - mutex_unlock(&data->mutex); + if (ret < 0) return ret; - } =20 t->enabled =3D state; =20 - mutex_unlock(&data->mutex); - return ret; } =20 --=20 2.33.0