From nobody Wed Feb 11 08:57:33 2026 Received: from mail-qv1-f49.google.com (mail-qv1-f49.google.com [209.85.219.49]) (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 F2847339844 for ; Tue, 10 Feb 2026 23:39:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770766795; cv=none; b=TvP3wKJF4VrgJyqU/7xfuHp6F9lhMW3347tXAMhOzBJRWQq2J2Ft/Q7cF6z4KqCeD0UCize1wIdhzdfUfAH49xyvooARJew/sxY9wsoNw7LeD9m+p8dBaPQY4NjNIdfd2R6TWAEhELMCYNaOG1iHj572U8P6G5xVMcjuwCO+Zxs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770766795; c=relaxed/simple; bh=oN1PmeqnJcYZ+K6CeMFEVz3TMZG4CcujIBzbSF8qGn4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=j2GZe1aqIYm7cXEt6uxIbdo/+umYZV749BkJeqA6wunRpYB1ZA+SYb5RYHylpQMjNQA8UjisdZ/ClF/TFcUVv1qbdfEbKOLvKWRcU/StMFuJXjm10buwMEmFI+50JzT3hzNlCNDAfB75jK1vYV77nnV37e/dqiIm5AQatoyHx5Q= 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=S35lZXrK; arc=none smtp.client-ip=209.85.219.49 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="S35lZXrK" Received: by mail-qv1-f49.google.com with SMTP id 6a1803df08f44-89549b2f538so29311246d6.2 for ; Tue, 10 Feb 2026 15:39:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770766793; x=1771371593; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=yar4GAzxasIOJH8BAQ12LR2P5MS8WSAHcu1zPRwg9lk=; b=S35lZXrKTaLe5Rlp59GDaYQvNUJYdOG2b4e9kILpVXc+vQdLAxNvAvHkALtK2SFAf/ lGBBD6b85XyG+gIIA4tOPI5MWNo1JW1UygS45Hj4o+iaQtUqDuSPgodwCaHg+tVXlkPS NJMXS0Eu7gXlXfDALDlZ9KjmNZv+qewDRXjPhbA37aOw2j0nKYNno8M080KC8EhezHxQ ValsrS92ewWf8X90TwjVj94cCySGBfzCqjF0L0UOy6zvKO1XjUhe8oikNMks3Xi4ycIS 8f5YUwL2HO6NR2SfWgYiRtm3EHW4CWYFBVZQ7ffVJTzzpudoTwcNbAx8pwfsEPW+3VZB Bwag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770766793; x=1771371593; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=yar4GAzxasIOJH8BAQ12LR2P5MS8WSAHcu1zPRwg9lk=; b=hPe2WSVeSdXF6hsqYbbWZ3rMrS1FaFIlWs4BRraWEYgkVi3UEiCcIrlihD5Pvc7rbk 0rVmTfcXwYxjYiqLnz8Ge9+eIvFj3KJW5xYvdpI2rrR1UeFJA4HU+PEKq8PvGohsJQfv LqASyJxAUxydsa78oL2nQRMNKz295ge9ZQUELuWVOMoy9NQ28ockFL4TJLKLS+sLPH7f 77TxlDEYCa2sZmLtJq5Rcfvmx6LnrCCZKiMTnSE/dGJc6rEKka0KFkUnsyfROJkMSdGY T1xhIEEITUgtlhZQQ7vAwwAWTnsE/QFNKYLTR0TJdHP1o19QfZOeVNYr4fKS/XnP+S3U vCYw== X-Forwarded-Encrypted: i=1; AJvYcCWJ4HEOiAH20ZUwtdg/2RzE0CmviYbu+k1KMyrumhexZapqUKCP44ZjAyx1+w7LXOonPIOfTqqvLqhTnag=@vger.kernel.org X-Gm-Message-State: AOJu0YzrDGb/REuY48SgtOTFH7diDaGgQqRZj89JQDGsBprPjpiT6+Ow lHpJjedQSryHBfVNaVE4CDj21w4QXRFf5O7IO0kwgaxq6bDaeANqkJvI X-Gm-Gg: AZuq6aLKuomNYVo5BDvt8PMFOo9Y8PTW76DBg2+fKZ80H4KTN9gm0Sf3EjWJx+apZdt alLvip1EOnwAhCsvmokS6R+Php4xKrBwMXywSCKEKL5xeIKnCe5ybI+qeytPlwgOa+zvZK8Pc9k iYI4n8tNhdeDXw+yctqx30NvRKJDpNjyJBm5DIbM882kMKgYisGzR9I7OV+uYqKtv1LsBXTGgSt +xPAJ/RaiM2ucoSEXHjtnE8wanY4Hlf2ZJM7QlkPxVTMdbOOG34yMQf4DLxcyiFbY4Tf4aAAW4y 76OpwqJ3XCTlmsu68L6GKs4d5qPFDRMTYLCeVKJ6v+E6W20Q6KmBl1vujpLv4182K7NjlCgjeVQ Sd6YViakkZvbQiUS7YZD0dWzO/dBVjY7J0GwQLlyn9KK+ri/oadOIKphZuRAdS+5GxsmSotR+iJ iPZWp/S9EAx37y6j1impK6nS7INqf5ekvgpgJ7+N17U0e0q4QwbGzC X-Received: by 2002:a05:622a:1981:b0:4ed:2164:5018 with SMTP id d75a77b69052e-5068128d805mr14605521cf.80.1770766792761; Tue, 10 Feb 2026 15:39:52 -0800 (PST) Received: from localhost.localdomain ([50.21.71.60]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-50682f13f20sm1850561cf.14.2026.02.10.15.39.51 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Tue, 10 Feb 2026 15:39:52 -0800 (PST) From: Neel Bullywon To: jic23@kernel.org Cc: dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, Neel Bullywon Subject: [PATCH v6 1/3] iio: magnetometer: bmc150_magn: use automated cleanup for mutex Date: Tue, 10 Feb 2026 18:39:43 -0500 Message-ID: <20260210233945.40975-2-neelb2403@gmail.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20260210233945.40975-1-neelb2403@gmail.com> References: <20260210233945.40975-1-neelb2403@gmail.com> 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" Use guard() and scoped_guard() to replace manual mutex lock/unlock calls. This simplifies error handling and ensures RAII-style cleanup. scoped_guard() is used in read_raw IIO_CHAN_INFO_RAW case for a multi-statement mutex-protected block, as well as in remove, runtime_suspend, and suspend where a short mutex-protected scope is needed for a single function call. guard() is used in write_raw and trig_reen where the mutex scope extends to the end of the function or case block. Case blocks in write_raw are wrapped in braces to ensure clear scope for the cleanup guards. The trigger_handler function is left unchanged as mixing guard() with goto error paths can be fragile. Signed-off-by: Neel Bullywon --- drivers/iio/magnetometer/bmc150_magn.c | 130 ++++++++++--------------- 1 file changed, 52 insertions(+), 78 deletions(-) diff --git a/drivers/iio/magnetometer/bmc150_magn.c b/drivers/iio/magnetome= ter/bmc150_magn.c index 6a73f6e2f1f0..5eb710eb020d 100644 --- a/drivers/iio/magnetometer/bmc150_magn.c +++ b/drivers/iio/magnetometer/bmc150_magn.c @@ -11,6 +11,7 @@ =20 #include #include +#include #include #include #include @@ -456,29 +457,22 @@ static int bmc150_magn_read_raw(struct iio_dev *indio= _dev, case IIO_CHAN_INFO_RAW: if (iio_buffer_enabled(indio_dev)) return -EBUSY; - mutex_lock(&data->mutex); - - ret =3D bmc150_magn_set_power_state(data, true); - if (ret < 0) { - mutex_unlock(&data->mutex); - return ret; - } + scoped_guard(mutex, &data->mutex) { + ret =3D bmc150_magn_set_power_state(data, true); + if (ret < 0) + return ret; =20 - ret =3D bmc150_magn_read_xyz(data, values); - if (ret < 0) { - bmc150_magn_set_power_state(data, false); - mutex_unlock(&data->mutex); - return ret; - } - *val =3D values[chan->scan_index]; + ret =3D bmc150_magn_read_xyz(data, values); + if (ret < 0) { + bmc150_magn_set_power_state(data, false); + return ret; + } + *val =3D values[chan->scan_index]; =20 - ret =3D bmc150_magn_set_power_state(data, false); - if (ret < 0) { - mutex_unlock(&data->mutex); - return ret; + ret =3D bmc150_magn_set_power_state(data, false); + if (ret < 0) + return ret; } - - mutex_unlock(&data->mutex); return IIO_VAL_INT; case IIO_CHAN_INFO_SCALE: /* @@ -530,45 +524,37 @@ static int bmc150_magn_write_raw(struct iio_dev *indi= o_dev, case IIO_CHAN_INFO_SAMP_FREQ: if (val > data->max_odr) return -EINVAL; - mutex_lock(&data->mutex); - ret =3D bmc150_magn_set_odr(data, val); - mutex_unlock(&data->mutex); - return ret; + guard(mutex)(&data->mutex); + return bmc150_magn_set_odr(data, val); case IIO_CHAN_INFO_OVERSAMPLING_RATIO: switch (chan->channel2) { case IIO_MOD_X: case IIO_MOD_Y: if (val < 1 || val > 511) return -EINVAL; - mutex_lock(&data->mutex); - ret =3D bmc150_magn_set_max_odr(data, val, 0, 0); - if (ret < 0) { - mutex_unlock(&data->mutex); - return ret; + { + guard(mutex)(&data->mutex); + ret =3D bmc150_magn_set_max_odr(data, val, 0, 0); + if (ret < 0) + return ret; + return regmap_update_bits(data->regmap, + BMC150_MAGN_REG_REP_XY, + BMC150_MAGN_REG_REP_DATAMASK, + BMC150_MAGN_REPXY_TO_REGVAL(val)); } - ret =3D regmap_update_bits(data->regmap, - BMC150_MAGN_REG_REP_XY, - BMC150_MAGN_REG_REP_DATAMASK, - BMC150_MAGN_REPXY_TO_REGVAL - (val)); - mutex_unlock(&data->mutex); - return ret; case IIO_MOD_Z: if (val < 1 || val > 256) return -EINVAL; - mutex_lock(&data->mutex); - ret =3D bmc150_magn_set_max_odr(data, 0, val, 0); - if (ret < 0) { - mutex_unlock(&data->mutex); - return ret; + { + guard(mutex)(&data->mutex); + ret =3D bmc150_magn_set_max_odr(data, 0, val, 0); + if (ret < 0) + return ret; + return regmap_update_bits(data->regmap, + BMC150_MAGN_REG_REP_Z, + BMC150_MAGN_REG_REP_DATAMASK, + BMC150_MAGN_REPZ_TO_REGVAL(val)); } - ret =3D regmap_update_bits(data->regmap, - BMC150_MAGN_REG_REP_Z, - BMC150_MAGN_REG_REP_DATAMASK, - BMC150_MAGN_REPZ_TO_REGVAL - (val)); - mutex_unlock(&data->mutex); - return ret; default: return -EINVAL; } @@ -782,9 +768,8 @@ static void bmc150_magn_trig_reen(struct iio_trigger *t= rig) if (!data->dready_trigger_on) return; =20 - mutex_lock(&data->mutex); + guard(mutex)(&data->mutex); ret =3D bmc150_magn_reset_intr(data); - mutex_unlock(&data->mutex); if (ret) dev_err(data->dev, "Failed to reset interrupt\n"); } @@ -794,32 +779,28 @@ static int bmc150_magn_data_rdy_trigger_set_state(str= uct iio_trigger *trig, { struct iio_dev *indio_dev =3D iio_trigger_get_drvdata(trig); struct bmc150_magn_data *data =3D iio_priv(indio_dev); - int ret =3D 0; + int ret; + + guard(mutex)(&data->mutex); =20 - mutex_lock(&data->mutex); if (state =3D=3D data->dready_trigger_on) - goto err_unlock; + return 0; =20 ret =3D regmap_update_bits(data->regmap, BMC150_MAGN_REG_INT_DRDY, BMC150_MAGN_MASK_DRDY_EN, state << BMC150_MAGN_SHIFT_DRDY_EN); if (ret < 0) - goto err_unlock; + return ret; =20 data->dready_trigger_on =3D state; =20 if (state) { ret =3D bmc150_magn_reset_intr(data); if (ret < 0) - goto err_unlock; + return ret; } - mutex_unlock(&data->mutex); =20 return 0; - -err_unlock: - mutex_unlock(&data->mutex); - return ret; } =20 static const struct iio_trigger_ops bmc150_magn_trigger_ops =3D { @@ -980,9 +961,8 @@ void bmc150_magn_remove(struct device *dev) if (data->dready_trig) iio_trigger_unregister(data->dready_trig); =20 - mutex_lock(&data->mutex); - bmc150_magn_set_power_mode(data, BMC150_MAGN_POWER_MODE_SUSPEND, true); - mutex_unlock(&data->mutex); + scoped_guard(mutex, &data->mutex) + bmc150_magn_set_power_mode(data, BMC150_MAGN_POWER_MODE_SUSPEND, true); =20 regulator_bulk_disable(ARRAY_SIZE(data->regulators), data->regulators); } @@ -995,10 +975,9 @@ static int bmc150_magn_runtime_suspend(struct device *= dev) struct bmc150_magn_data *data =3D iio_priv(indio_dev); int ret; =20 - mutex_lock(&data->mutex); - ret =3D bmc150_magn_set_power_mode(data, BMC150_MAGN_POWER_MODE_SLEEP, - true); - mutex_unlock(&data->mutex); + scoped_guard(mutex, &data->mutex) + ret =3D bmc150_magn_set_power_mode(data, BMC150_MAGN_POWER_MODE_SLEEP, + true); if (ret < 0) { dev_err(dev, "powering off device failed\n"); return ret; @@ -1026,10 +1005,9 @@ static int bmc150_magn_suspend(struct device *dev) struct bmc150_magn_data *data =3D iio_priv(indio_dev); int ret; =20 - mutex_lock(&data->mutex); - ret =3D bmc150_magn_set_power_mode(data, BMC150_MAGN_POWER_MODE_SLEEP, - true); - mutex_unlock(&data->mutex); + scoped_guard(mutex, &data->mutex) + ret =3D bmc150_magn_set_power_mode(data, BMC150_MAGN_POWER_MODE_SLEEP, + true); =20 return ret; } @@ -1038,14 +1016,10 @@ static int bmc150_magn_resume(struct device *dev) { struct iio_dev *indio_dev =3D dev_get_drvdata(dev); struct bmc150_magn_data *data =3D iio_priv(indio_dev); - int ret; - - mutex_lock(&data->mutex); - ret =3D bmc150_magn_set_power_mode(data, BMC150_MAGN_POWER_MODE_NORMAL, - true); - mutex_unlock(&data->mutex); =20 - return ret; + guard(mutex)(&data->mutex); + return bmc150_magn_set_power_mode(data, BMC150_MAGN_POWER_MODE_NORMAL, + true); } #endif =20 --=20 2.44.0