From nobody Sat Feb 7 14:14:47 2026 Received: from mail-ua1-f47.google.com (mail-ua1-f47.google.com [209.85.222.47]) (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 27DBF22D792 for ; Fri, 12 Dec 2025 02:45:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765507537; cv=none; b=Y2Vto6kjMsDnxdVSrvL5xDn6pl/1Nkx3uhDyDd3mTDOvHKFifVy605gpKVxC0pSo1whZAJx5TVDWtN49hqjvPnzgZjaJn6yLJyg6qnBLJgnDh9K6ydk580xJqvTuIG9IjnkenTbwAqnZyuDl9DkNxP2bpW9D8v7G8kFJ3kJvcTI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765507537; c=relaxed/simple; bh=ZyZf8TO7PzHx7g5RugMBOmjIDzgzIBX1y6ZRU4DbrOU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=h38t0iPMR+MQtRcuPxNrTNxZqWYr5jTg2ID6cQ8tIbqpJsrqNqs1Af43QYAbercjBblbJF3Ab8g3xvdq2RwXRTijbTFY+A106BwbkXMuBrq7JBub95z1YRcqsch3GktdEgfNFFFATOeb2s+cKOamfmVBLcDQerQhjiDGiVU87LE= 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=Nwk4UEco; arc=none smtp.client-ip=209.85.222.47 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="Nwk4UEco" Received: by mail-ua1-f47.google.com with SMTP id a1e0cc1a2514c-93f56804894so453838241.3 for ; Thu, 11 Dec 2025 18:45:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1765507535; x=1766112335; 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=FinWiyCFvPunbe27vbfgs550CHQE+u+zy2oBmwPsfB4=; b=Nwk4UEcoYXC5Rzb6m220G8R8FHDJILcEAZs0bfqws75jSE15rZFvIudEVdoVphWKE7 nK4vVMFeHDD/XTv8Yguk2qoIKhSjP21EDLhMqV7I2jlWB2WPwO1KpT7hB2TsQORxF/ta DdYO3L6RopgRHU4p7RCK3jV0oF3pm484iS/2a8flFXNHGVUYFGX+jN3Jd0QiZK3sm2bd ChAeCxE2N44tlOAG3zPpmJrbN3ZPyPKbvZb4NL6XiyeCs8wz7BY2YPxfzs3JmGnYr7DI rsiFOJl4udFTzk38nnmmf0fEgqEQ/+YLV63DfsnLBZbw5ZjeMY4iJvoWu6xnHwrDF0pG XjUg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765507535; x=1766112335; 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=FinWiyCFvPunbe27vbfgs550CHQE+u+zy2oBmwPsfB4=; b=e6Xc/iGSjrcppASIfzC3qROPAbkYFtBZCD47PKgmtnN7PMC1ZnarhX7vdoGI8PVMEF hjCqXER5DCKJwwkWPv3QaLTxIPoCyLyDbfJdJLEawSNmerNHdYV5mfJaEpI8ydTefxBZ JWh/aARdGsnCnvA3BEuvKDt//8A11yJFMQCcUsuIwGKRzf3xzmrFVMPmZUOoB1QEUJW3 RZnClXVLa9xNMHJXrppmJO2ap5D1FfAHizsgQt/2euWCVJvdu7CI1VYWbJWfutFOTRC/ manjhTsCkrE7eB8pFns5olHLLlnv8m9dsqVlfZaVLiH1D8auxd58Nvsg29CKcUmKUNMj Nu+g== X-Forwarded-Encrypted: i=1; AJvYcCWeef4iMQtt5f1uc8WFi1n1CnZmvwhKz/Q+yE6leFGn/ENodGz+Gg6l/Nebffruv1SuIOZ8yxI3PU7iTAI=@vger.kernel.org X-Gm-Message-State: AOJu0Yzvwr8FZLcqWqmt4lzY6i+Wc9tP6VJzw1n419nrP8xPj6O3IBLE dlWYVEToAciO+OjLrFaBZCwfH+We8HkPnw1FysY7usj4Ij1WxtAdy/xbWoa4tA== X-Gm-Gg: AY/fxX7B3y5idWI4wNOLzEih0XHOx36ZHxlMhcPAcPfEGQGl568SfLlesd65gXR6A8a 2CneCmQb6GZmY3IEchxhdSJMvuXd4ATxU5kGQUBUbHnhpoKSdFliV7mBAfIRLejLpoU46/F3+T7 PDG0GjBs+cVsocXQEFYAkEv8XD9GyaUaIZfSbhmhfnyXq9+vTSbA4iXTC2CKZ3uhWcXM1wqr7sZ +8kpgE7uvk7fyQWyC8XcpHsJ73leizhqsFyJza0KG5b6nq29aX6LDGOosOSWOQciSbJUQh90+8u 84hAlP4fFgh3H64m3zmPfXRD9RiXXFhjZ3t8XsRhOG9hzTsOibcUNrWtiPZS9YQMSlO0nlk9fxB mBRL6htuY4IO+ZMXZ964DhdRPIMhJR2BhV35VpNlh9+k2mZKewplKyv4+bbvbQDggmd6iITv3KM oCXcEu1RSk7vZFbkVjN2uSzME= X-Google-Smtp-Source: AGHT+IF+ceBiyFMTLRWeRyVASsqKEDmZHzPSVx4bpNR94n9cZQdZ6LN/jPJOWf4xmhRScVw1fNAzfQ== X-Received: by 2002:a05:6102:e0b:b0:5e5:6221:c5a5 with SMTP id ada2fe7eead31-5e827471559mr131690137.9.1765507534762; Thu, 11 Dec 2025 18:45:34 -0800 (PST) Received: from [192.168.100.70] ([2800:bf0:82:3d2:875c:6c76:e06b:3095]) by smtp.gmail.com with ESMTPSA id ada2fe7eead31-5e7d0f25ce2sm1693762137.8.2025.12.11.18.45.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Dec 2025 18:45:34 -0800 (PST) From: Kurt Borja Date: Thu, 11 Dec 2025 21:45:19 -0500 Subject: [PATCH v2 1/7] iio: core: Add and export __iio_dev_mode_lock() 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: quoted-printable Message-Id: <20251211-lock-impr-v2-1-6fb47bdaaf24@gmail.com> References: <20251211-lock-impr-v2-0-6fb47bdaaf24@gmail.com> In-Reply-To: <20251211-lock-impr-v2-0-6fb47bdaaf24@gmail.com> To: Andy Shevchenko , Lars-Peter Clausen , Michael Hennerich , Jonathan Cameron , Benson Leung , Antoniu Miclaus , Gwendal Grignou , Shrikant Raskar , Per-Daniel Olsson Cc: David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Guenter Roeck , Jonathan Cameron , linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, chrome-platform@lists.linux.dev, Kurt Borja X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2754; i=kuurtb@gmail.com; h=from:subject:message-id; bh=ZyZf8TO7PzHx7g5RugMBOmjIDzgzIBX1y6ZRU4DbrOU=; b=owGbwMvMwCUmluBs8WX+lTTG02pJDJnWjSeFLp+8w63AfWhP4Hkhj+5bBwSPez6VkFLr9zx46 tPMyhqJjlIWBjEuBlkxRZb2hEXfHkXlvfU7EHofZg4rE8gQBi5OAZhImhEjwwcRkZBgpfYy4eIt UjV3Fr5cftz0nBKD44SJ58KDw5f2pTMynGpay1dok3bNxvpoQLqt0fTqopYP3Y7XTvtePduxZLY dMwA= X-Developer-Key: i=kuurtb@gmail.com; a=openpgp; fpr=54D3BE170AEF777983C3C63B57E3B6585920A69A Add infallible wrappers around the internal IIO mode lock. As mentioned in the documentation, this is not meant to be used by drivers, instead this will aid in the eventual addition of cleanup classes around conditional locks. Signed-off-by: Kurt Borja --- drivers/iio/industrialio-core.c | 30 ++++++++++++++++++++++++++++++ include/linux/iio/iio.h | 3 +++ 2 files changed, 33 insertions(+) diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-cor= e.c index f69deefcfb6f..1cce2d1ecef1 100644 --- a/drivers/iio/industrialio-core.c +++ b/drivers/iio/industrialio-core.c @@ -2171,6 +2171,36 @@ int __devm_iio_device_register(struct device *dev, s= truct iio_dev *indio_dev, } EXPORT_SYMBOL_GPL(__devm_iio_device_register); =20 +/** + * __iio_dev_mode_lock - Locks the current IIO device mode + * @indio_dev: the iio_dev associated with the device + * + * If the device is either in direct or buffer mode, it's guaranteed to st= ay + * that way until __iio_dev_mode_unlock() is called. + * + * This function is not meant to be used directly by drivers to protect in= ternal + * state, a driver should have it's own mechanisms for that matter. + * + * There are very few cases where a driver actually needs to lock any mode= . It's + * *strongly* recommended to use iio_device_claim_direct() or + * iio_device_claim_buffer_mode() pairs or related helpers. + */ +void __iio_dev_mode_lock(struct iio_dev *indio_dev) +{ + mutex_lock(&to_iio_dev_opaque(indio_dev)->mlock); +} +EXPORT_SYMBOL_GPL(__iio_dev_mode_lock); + +/** + * __iio_dev_mode_unlock - Unlocks the current IIO device mode + * @indio_dev: the iio_dev associated with the device + */ +void __iio_dev_mode_unlock(struct iio_dev *indio_dev) +{ + mutex_unlock(&to_iio_dev_opaque(indio_dev)->mlock); +} +EXPORT_SYMBOL_GPL(__iio_dev_mode_unlock); + /** * __iio_device_claim_direct - Keep device in direct mode * @indio_dev: the iio_dev associated with the device diff --git a/include/linux/iio/iio.h b/include/linux/iio/iio.h index 872ebdf0dd77..aecda887d833 100644 --- a/include/linux/iio/iio.h +++ b/include/linux/iio/iio.h @@ -661,6 +661,9 @@ void iio_device_unregister(struct iio_dev *indio_dev); int __devm_iio_device_register(struct device *dev, struct iio_dev *indio_d= ev, struct module *this_mod); int iio_push_event(struct iio_dev *indio_dev, u64 ev_code, s64 timestamp); + +void __iio_dev_mode_lock(struct iio_dev *indio_dev) __acquires(indio_dev); +void __iio_dev_mode_unlock(struct iio_dev *indio_dev) __releases(indio_dev= ); bool __iio_device_claim_direct(struct iio_dev *indio_dev); void __iio_device_release_direct(struct iio_dev *indio_dev); =20 --=20 2.52.0 From nobody Sat Feb 7 14:14:47 2026 Received: from mail-ua1-f45.google.com (mail-ua1-f45.google.com [209.85.222.45]) (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 5755213D503 for ; Fri, 12 Dec 2025 02:45:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765507540; cv=none; b=gpwxL9ESzdwKzUNWGFJpTxW6al+uYuZt4gkUpKfO15IByzbPWiy7Ne53vhIkK4N8+s1wOB+crcvoo4F+FMsDflhJ7fGh5CbrSDGNIp2U0reXUeyPLF9w/q51jDr1j8dVzIsU9yBdPu5dFtF8KNl7byGqTm035oY4vohVYwtczHA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765507540; c=relaxed/simple; bh=7SnGSJpibYGFAnb6vZa0zbW6Dvi4kjS30WQhK+aIQYo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=rUcha02+Iu+MGdh3SO4D7BqxZ/klO5fhw8I1CzZ3lP0FLrA2jwb7dRsTokrnhdU6yyMaOBLCkIk7svMYfvfCh3CyTuTxWu/iMAz5smWbU4EghF2Ds1wQ2oK4S2PuxaAPKeda8UYdHDWkOGNP2kL5sClSnkS1PP9tuXoDjxz9HE0= 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=ewxfOphw; arc=none smtp.client-ip=209.85.222.45 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="ewxfOphw" Received: by mail-ua1-f45.google.com with SMTP id a1e0cc1a2514c-93526e2842dso213923241.0 for ; Thu, 11 Dec 2025 18:45:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1765507537; x=1766112337; 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=tqUfOJ2MpnpIg6I6R6ObmosGG7cC8tkknkU/CWzIndk=; b=ewxfOphwqXGQUuI2Ldiu2a0ar3sCr0rS0GclqZM+abNY7IOP0ifxUdN7kMJ1aBj7nv eSsokWvdNm1j7yx2Jwxg7Q2KY1F9mI6jMWS/cMYKgUmBUlv6gGlKTAHRnRNPlvt6MQ5v stlDYklr2ckzLPc0UqXU03ALus4IMHy+1hs+XkI7dr2Ot5+LrfWaQWylm98qO3CcCyoz J6bgbx6pYHdNKflgvWCgDfEeCjPdPY5g2VKZe4dosATuCmhtgiAFz7rxIdrV8K7xt+Jj kUCDA7ryURY1/pWXoauV8g7j7jolxaIsYBMn2Zz/qkPhWhWSo/dn6FD14pKlqBU5VGle xb3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765507537; x=1766112337; 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=tqUfOJ2MpnpIg6I6R6ObmosGG7cC8tkknkU/CWzIndk=; b=smm4icyic4R1Whex7DoIR0+tCi8rHrCY8V3O2xYzoL8eEgaBeeTvxhRpPJd0fBKB57 Yj8o8Wyrr6yPrLFzcOK+4dp3dRW67VZyMQ3LSyrlWO7DfFV3EwsISPIh7FVNKqS8oKKF 2d/DWKJF/izGFxQIha/VnnyHcayJvFtRKWOI3Dld8kPTVyOn6xHjIA74k8I+GA2KldlP /EU3vcpBbpNx/F82Bnj63J2mnIf3Yv067L3J0ZayI0d9xBVJBlgYsvMhbOzLFtM+POfd bkvHB0/xZT6gzDK6Ym+ykJF860FVnCP/EmkqQ5uCI+x4FcqYhZIyHlsnJQM/oWZKqKcs QBkg== X-Forwarded-Encrypted: i=1; AJvYcCUgBy97YJOISj3aCsHwraQnSZfcK/5eF/o9C+bcxsdNqAT035GzcCrwHdZoxB6l9UwZf2m4uzEjDHQ4c6I=@vger.kernel.org X-Gm-Message-State: AOJu0YyfvbnJzHwqDKNWgVLSJz5BHZc+iQ786FQjKfufH6kU3goyi0qW oRdY8bQTeX4LPHxeDVhgkOejhQEvYw7Y4orzpguSnzLojINyTxyy4Rt33QX8tA== X-Gm-Gg: AY/fxX7LigF23Ml7SrCJh3oNzTK0An97q/hAB6bGCu6d3uCb2r4lYEsGs8+niyksEux bbgz/UK4IcufQrG0MGtp6bL1ulStLKgfAXt4ubR4RdLOfFUDeDKgn/Iw6SXQTpUawub7JfWzSrF xSZN58IN8nDD3DWDUMJlbzlqOtR3kKxEjvSz8lukQVTseVg/pjn8K2UdAup3UFV0ah63WLI1ZBL pPVPhFZqtb0FX5VALc//jZbsasb4hjILElQCXN+OJM9bXDc/btm8gc+2l7/By+eZQiqchc8kVKt NqxyBmWG1H4rAY7cZk0RGR4RMUWJx0IgKkxum2HtV9KEhsBOXNFGuk6KGqBhqLMhz6jbxVTN0hD SOsaONjcsth022+9H+uoJMPgJdHhm0pYaRkwQPGzNuB9DzmT4N5XYwF5pVc8i9SnorOoXs1Rx2Z u3kZszx/S8UVLO X-Google-Smtp-Source: AGHT+IFq+nI0XTsFckma+Yfl9/xt3eH3T2uKqEet5T2xPP0xd+PyXmltY17WCUkxWPvw7Z4FXNZveQ== X-Received: by 2002:a05:6102:3907:b0:522:86ea:42c with SMTP id ada2fe7eead31-5e82768ad0fmr132282137.11.1765507537060; Thu, 11 Dec 2025 18:45:37 -0800 (PST) Received: from [192.168.100.70] ([2800:bf0:82:3d2:875c:6c76:e06b:3095]) by smtp.gmail.com with ESMTPSA id ada2fe7eead31-5e7d0f25ce2sm1693762137.8.2025.12.11.18.45.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Dec 2025 18:45:36 -0800 (PST) From: Kurt Borja Date: Thu, 11 Dec 2025 21:45:20 -0500 Subject: [PATCH v2 2/7] iio: core: Refactor iio_device_claim_direct() implementation 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: quoted-printable Message-Id: <20251211-lock-impr-v2-2-6fb47bdaaf24@gmail.com> References: <20251211-lock-impr-v2-0-6fb47bdaaf24@gmail.com> In-Reply-To: <20251211-lock-impr-v2-0-6fb47bdaaf24@gmail.com> To: Andy Shevchenko , Lars-Peter Clausen , Michael Hennerich , Jonathan Cameron , Benson Leung , Antoniu Miclaus , Gwendal Grignou , Shrikant Raskar , Per-Daniel Olsson Cc: David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Guenter Roeck , Jonathan Cameron , linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, chrome-platform@lists.linux.dev, Kurt Borja X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=4257; i=kuurtb@gmail.com; h=from:subject:message-id; bh=7SnGSJpibYGFAnb6vZa0zbW6Dvi4kjS30WQhK+aIQYo=; b=owGbwMvMwCUmluBs8WX+lTTG02pJDJnWjSetWbfOjdFlur12gmM0s1v3+7939z+f9dHU6vDWB 258Ua52HSUsDGJcDLJiiiztCYu+PYrKe+t3IPQ+zBxWJpAhDFycAjCR9HMMfyUsO1blLNA5danH V623R/xY41n2og9z/K9e07J+KPDi7SqGrwI3PxyYWO7HdutF+fOdMbxu54zce/izrb5/mJ54fXM yKwA= X-Developer-Key: i=kuurtb@gmail.com; a=openpgp; fpr=54D3BE170AEF777983C3C63B57E3B6585920A69A In order to eventually unify the locking API, implement iio_device_claim_direct() fully inline, with the use of __iio_dev_mode_lock(), which takes care of sparse annotations. Signed-off-by: Kurt Borja --- drivers/iio/industrialio-core.c | 44 -------------------------------------= ---- include/linux/iio/iio.h | 38 +++++++++++++++++++++++------------ 2 files changed, 25 insertions(+), 57 deletions(-) diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-cor= e.c index 1cce2d1ecef1..cffc6efb6617 100644 --- a/drivers/iio/industrialio-core.c +++ b/drivers/iio/industrialio-core.c @@ -2201,50 +2201,6 @@ void __iio_dev_mode_unlock(struct iio_dev *indio_dev) } EXPORT_SYMBOL_GPL(__iio_dev_mode_unlock); =20 -/** - * __iio_device_claim_direct - Keep device in direct mode - * @indio_dev: the iio_dev associated with the device - * - * If the device is in direct mode it is guaranteed to stay - * that way until __iio_device_release_direct() is called. - * - * Use with __iio_device_release_direct(). - * - * Drivers should only call iio_device_claim_direct(). - * - * Returns: true on success, false on failure. - */ -bool __iio_device_claim_direct(struct iio_dev *indio_dev) -{ - struct iio_dev_opaque *iio_dev_opaque =3D to_iio_dev_opaque(indio_dev); - - mutex_lock(&iio_dev_opaque->mlock); - - if (iio_buffer_enabled(indio_dev)) { - mutex_unlock(&iio_dev_opaque->mlock); - return false; - } - return true; -} -EXPORT_SYMBOL_GPL(__iio_device_claim_direct); - -/** - * __iio_device_release_direct - releases claim on direct mode - * @indio_dev: the iio_dev associated with the device - * - * Release the claim. Device is no longer guaranteed to stay - * in direct mode. - * - * Drivers should only call iio_device_release_direct(). - * - * Use with __iio_device_claim_direct() - */ -void __iio_device_release_direct(struct iio_dev *indio_dev) -{ - mutex_unlock(&to_iio_dev_opaque(indio_dev)->mlock); -} -EXPORT_SYMBOL_GPL(__iio_device_release_direct); - /** * iio_device_claim_buffer_mode - Keep device in buffer mode * @indio_dev: the iio_dev associated with the device diff --git a/include/linux/iio/iio.h b/include/linux/iio/iio.h index aecda887d833..76398dbfa5ca 100644 --- a/include/linux/iio/iio.h +++ b/include/linux/iio/iio.h @@ -664,30 +664,42 @@ int iio_push_event(struct iio_dev *indio_dev, u64 ev_= code, s64 timestamp); =20 void __iio_dev_mode_lock(struct iio_dev *indio_dev) __acquires(indio_dev); void __iio_dev_mode_unlock(struct iio_dev *indio_dev) __releases(indio_dev= ); -bool __iio_device_claim_direct(struct iio_dev *indio_dev); -void __iio_device_release_direct(struct iio_dev *indio_dev); =20 -/* - * Helper functions that allow claim and release of direct mode - * in a fashion that doesn't generate many false positives from sparse. - * Note this must remain static inline in the header so that sparse - * can see the __acquire() marking. Revisit when sparse supports - * __cond_acquires() +/** + * iio_device_claim_direct - Keep device in direct mode + * @indio_dev: the iio_dev associated with the device + * + * If the device is in direct mode it is guaranteed to stay + * that way until iio_device_release_direct() is called. + * + * Use with iio_device_release_direct(). + * + * Returns: true on success, false on failure. */ static inline bool iio_device_claim_direct(struct iio_dev *indio_dev) { - if (!__iio_device_claim_direct(indio_dev)) - return false; + __iio_dev_mode_lock(indio_dev); =20 - __acquire(iio_dev); + if (iio_buffer_enabled(indio_dev)) { + __iio_dev_mode_unlock(indio_dev); + return false; + } =20 return true; } =20 +/** + * iio_device_release_direct - Releases claim on direct mode + * @indio_dev: the iio_dev associated with the device + * + * Release the claim. Device is no longer guaranteed to stay + * in direct mode. + * + * Use with iio_device_claim_direct() + */ static inline void iio_device_release_direct(struct iio_dev *indio_dev) { - __iio_device_release_direct(indio_dev); - __release(indio_dev); + __iio_dev_mode_unlock(indio_dev); } =20 int iio_device_claim_buffer_mode(struct iio_dev *indio_dev); --=20 2.52.0 From nobody Sat Feb 7 14:14:47 2026 Received: from mail-ua1-f54.google.com (mail-ua1-f54.google.com [209.85.222.54]) (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 B419881AA8 for ; Fri, 12 Dec 2025 02:45:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765507542; cv=none; b=c4Uqe9yenY9jm4YL3ya0QjWHULHIi8QP1eVX9lcX9jwy4tpi21jGMz8cIYxNjlzHMxJCTwN6qsL+dqpUpVopYgDa9I7zwEVlNrynDZXHQ2xiU+evTISZfiXH1WZGRywQp5232vyQfm/IGXGxlFMC32iE1m3cLwMd0WPpiTlum5M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765507542; c=relaxed/simple; bh=xuoFXNcX9352+zDpLuF2INoY/VIUhah2IZAk6lwdq+8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=f9HvcCEFLQxCq6cyptRMfIxsFEcaGYd5IcmcYDuQWXUERxcUVlpMYqcrjpMZMQ2dxFaqUrsA2d6gtu0zmemUpuyvJ2pvyVXvcDddb5oUTgu17IA6cD9kwX68KC2t8vf+BNi5GRQnxEj0KJFmoNzC+dFQYqhkgBHVXdbOuAc3a6M= 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=NG0Kw3f8; arc=none smtp.client-ip=209.85.222.54 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="NG0Kw3f8" Received: by mail-ua1-f54.google.com with SMTP id a1e0cc1a2514c-940c539de8fso218737241.0 for ; Thu, 11 Dec 2025 18:45:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1765507539; x=1766112339; 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=9jQ9+TRZtERAxrcgbRGbta7XSR16A+/nWPnuc93YP1Y=; b=NG0Kw3f8RvaT4agKnNx7dAAEKfmtRlFqSDxg4bEk67QQPUQn8XTEXagufLBw6dxZpI HfZOxzqiCD3xkeTrAgw8QOrajhFyxN1bBQmxxsl+rlRm2HGdvnltqpF45/x6jDCZ1lwK yHoQ5EDSghtfHemM+0hWYZcATBvUY95QGunQqOjhXlPTaf4t7ImxYLzAtRLdVE5TsN3I srYvgjx32URvykRGeYdJNl2Q1rL0KZlnYesbEmA+o+r/YaxQXlCKbY0CUKiKbgWCn0+K jqA7Nndj4fUhCe55REObEgR9qIu+LBze/vq/vi8xklFOmPfjham159UdvWlCWheU1UTn j4KA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765507539; x=1766112339; 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=9jQ9+TRZtERAxrcgbRGbta7XSR16A+/nWPnuc93YP1Y=; b=Fso4dAfyKhlMs1TQO4P/ZfjW5LCndMklDADpNmKwuwR/Xn/L34yu73Ys10gMt2nGCy rY7LAEsqCVPSBBnUgtMukW5S+GrSD9i+yVjqcOV7qPuhDCyvKbza2djeqKw0FTZ2Dnm2 nKeHxx4p9bkF4AHJjuJo6xgj1AHNCUzcdXWmzGltfjN2QOLXSkJ8M9ICrxpqnA2oNhVo QAb7IWp4OmHYVNEhAaJDtVHz3/fW5afFEqcrc/L80ZtGjpUkLVBaA871Ps/Aq+O07/Ce A853k01JfauptOmMrDCZvBEApjs7vjQQ0QHCFcHmQbABSvpt6zV85topdkXopZPvD4A0 EiKg== X-Forwarded-Encrypted: i=1; AJvYcCVp1G7rJdxDmzEYgBcUysGK83eJ37crOnYLUeBH4Yty3LyK0PfMkF9XL0f8PxpEiHcIE3yBLDDmFM8EjYs=@vger.kernel.org X-Gm-Message-State: AOJu0YytiqakMCjyVFJXSu+g3iktpX92e9ZolfNgnkbt4/RBW2WrR+54 O5FXc26Y6wjge11Kf605V7rG+jUrUUnSyAnH8iMICqPCt7TfrT5yseWWOaIEyQ== X-Gm-Gg: AY/fxX5i94VDHqxBV2/yWmLIziZENF0OgxRbMcIDIpsjxiMGy/HDvhqiMTp4yMPMo9B 81uXiCoIlUPl+MiTW2FXKvcZ6qe5ESumuLc3m5DupGJRGSzyaxxXWroXZBphArRhK6a25/7tXl8 G94M0F36wlurDS+UnLWNoBdqfL7aC03towqbzCFnubEHsrELzADkThZa/gtTvv8nhKmO/Do37Ad nsFF15hNz65PjUcGFBsaAGhy+5OIjQzbFbk8B0SXLtZlcUZl4xOSs6Y/f8WuYTTLRmh02xZLT+H U6ubDhpxHWN0XV7Y5/y1FRPJL/rswFy8eQbDCxqgL6bQJMSQkB05bYnkMYyOyQxN4zPhpxZR9f2 nrUm3b27iuHcnG13sQvtBe3SQN6xV7EB/IbqCBMMyrn7hJs9dqrD0e/QPDWVkDpw0Yubqp5cS0B HL1YrpF6t2PABB X-Google-Smtp-Source: AGHT+IFvijIh/JBzdNfBl3mEo+Gb8lgHDN+9CYOvDdFsaG5gcfvOjev6Lzz7YJQv5lA1d4e2C4rvSw== X-Received: by 2002:a05:6102:2c85:b0:5db:34b5:318c with SMTP id ada2fe7eead31-5e827868cf6mr130137137.45.1765507539396; Thu, 11 Dec 2025 18:45:39 -0800 (PST) Received: from [192.168.100.70] ([2800:bf0:82:3d2:875c:6c76:e06b:3095]) by smtp.gmail.com with ESMTPSA id ada2fe7eead31-5e7d0f25ce2sm1693762137.8.2025.12.11.18.45.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Dec 2025 18:45:39 -0800 (PST) From: Kurt Borja Date: Thu, 11 Dec 2025 21:45:21 -0500 Subject: [PATCH v2 3/7] iio: core: Match iio_device_claim_*() semantics and implementation 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: quoted-printable Message-Id: <20251211-lock-impr-v2-3-6fb47bdaaf24@gmail.com> References: <20251211-lock-impr-v2-0-6fb47bdaaf24@gmail.com> In-Reply-To: <20251211-lock-impr-v2-0-6fb47bdaaf24@gmail.com> To: Andy Shevchenko , Lars-Peter Clausen , Michael Hennerich , Jonathan Cameron , Benson Leung , Antoniu Miclaus , Gwendal Grignou , Shrikant Raskar , Per-Daniel Olsson Cc: David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Guenter Roeck , Jonathan Cameron , linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, chrome-platform@lists.linux.dev, Kurt Borja X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=7102; i=kuurtb@gmail.com; h=from:subject:message-id; bh=xuoFXNcX9352+zDpLuF2INoY/VIUhah2IZAk6lwdq+8=; b=owGbwMvMwCUmluBs8WX+lTTG02pJDJnWjSdj9b+aVi+ynfyiyiVyOu+RQ6vCTFl6and0mmfeZ 3p5MbSio5SFQYyLQVZMkaU9YdG3R1F5b/0OhN6HmcPKBDKEgYtTACbS3cbIsO1bfIo0m2TnifD4 W4uPnZK9UfN/aU1ADHc6/2q3uQsnizMyXPFrcFabw7/ril7hLevZbowqn8+ynJSf3lxuPemBw35 LVgA= X-Developer-Key: i=kuurtb@gmail.com; a=openpgp; fpr=54D3BE170AEF777983C3C63B57E3B6585920A69A Implement iio_device_claim_buffer_mode() fully inline with the use of __iio_dev_mode_lock(), which takes care of sparse annotations. To completely match iio_device_claim_direct() semantics, we need to also change iio_device_claim_buffer_mode() return semantics to usual true/false conditional lock semantics. Signed-off-by: Kurt Borja --- drivers/iio/adc/ade9000.c | 2 +- .../common/cros_ec_sensors/cros_ec_sensors_core.c | 5 +-- drivers/iio/health/max30100.c | 2 +- drivers/iio/health/max30102.c | 2 +- drivers/iio/industrialio-core.c | 40 ------------------= ---- drivers/iio/light/opt4060.c | 2 +- include/linux/iio/iio.h | 38 ++++++++++++++++++= -- 7 files changed, 41 insertions(+), 50 deletions(-) diff --git a/drivers/iio/adc/ade9000.c b/drivers/iio/adc/ade9000.c index 2de8a718d62a..b345c4d1ef24 100644 --- a/drivers/iio/adc/ade9000.c +++ b/drivers/iio/adc/ade9000.c @@ -964,7 +964,7 @@ static irqreturn_t ade9000_dready_thread(int irq, void = *data) struct iio_dev *indio_dev =3D data; =20 /* Handle data ready interrupt from C4/EVENT/DREADY pin */ - if (!iio_device_claim_buffer_mode(indio_dev)) { + if (iio_device_claim_buffer_mode(indio_dev)) { ade9000_iio_push_buffer(indio_dev); iio_device_release_buffer_mode(indio_dev); } diff --git a/drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core.c b/dr= ivers/iio/common/cros_ec_sensors/cros_ec_sensors_core.c index 9ac80e4b7d75..8ed4b2e410c8 100644 --- a/drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core.c +++ b/drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core.c @@ -188,11 +188,8 @@ int cros_ec_sensors_push_data(struct iio_dev *indio_de= v, /* * Ignore samples if the buffer is not set: it is needed if the ODR is * set but the buffer is not enabled yet. - * - * Note: iio_device_claim_buffer_mode() returns -EBUSY if the buffer - * is not enabled. */ - if (iio_device_claim_buffer_mode(indio_dev) < 0) + if (!iio_device_claim_buffer_mode(indio_dev)) return 0; =20 out =3D (s16 *)st->samples; diff --git a/drivers/iio/health/max30100.c b/drivers/iio/health/max30100.c index 3d441013893c..3f3680c4b42f 100644 --- a/drivers/iio/health/max30100.c +++ b/drivers/iio/health/max30100.c @@ -417,7 +417,7 @@ static int max30100_read_raw(struct iio_dev *indio_dev, * Temperature reading can only be acquired while engine * is running */ - if (iio_device_claim_buffer_mode(indio_dev)) { + if (!iio_device_claim_buffer_mode(indio_dev)) { /* * Replacing -EBUSY or other error code * returned by iio_device_claim_buffer_mode() diff --git a/drivers/iio/health/max30102.c b/drivers/iio/health/max30102.c index a48c0881a4c7..288c2f37a4a2 100644 --- a/drivers/iio/health/max30102.c +++ b/drivers/iio/health/max30102.c @@ -476,7 +476,7 @@ static int max30102_read_raw(struct iio_dev *indio_dev, * shutdown; leave shutdown briefly when buffer not running */ any_mode_retry: - if (iio_device_claim_buffer_mode(indio_dev)) { + if (!iio_device_claim_buffer_mode(indio_dev)) { /* * This one is a *bit* hacky. If we cannot claim buffer * mode, then try direct mode so that we make sure diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-cor= e.c index cffc6efb6617..46e336bff64c 100644 --- a/drivers/iio/industrialio-core.c +++ b/drivers/iio/industrialio-core.c @@ -2201,46 +2201,6 @@ void __iio_dev_mode_unlock(struct iio_dev *indio_dev) } EXPORT_SYMBOL_GPL(__iio_dev_mode_unlock); =20 -/** - * iio_device_claim_buffer_mode - Keep device in buffer mode - * @indio_dev: the iio_dev associated with the device - * - * If the device is in buffer mode it is guaranteed to stay - * that way until iio_device_release_buffer_mode() is called. - * - * Use with iio_device_release_buffer_mode(). - * - * Returns: 0 on success, -EBUSY on failure. - */ -int iio_device_claim_buffer_mode(struct iio_dev *indio_dev) -{ - struct iio_dev_opaque *iio_dev_opaque =3D to_iio_dev_opaque(indio_dev); - - mutex_lock(&iio_dev_opaque->mlock); - - if (iio_buffer_enabled(indio_dev)) - return 0; - - mutex_unlock(&iio_dev_opaque->mlock); - return -EBUSY; -} -EXPORT_SYMBOL_GPL(iio_device_claim_buffer_mode); - -/** - * iio_device_release_buffer_mode - releases claim on buffer mode - * @indio_dev: the iio_dev associated with the device - * - * Release the claim. Device is no longer guaranteed to stay - * in buffer mode. - * - * Use with iio_device_claim_buffer_mode(). - */ -void iio_device_release_buffer_mode(struct iio_dev *indio_dev) -{ - mutex_unlock(&to_iio_dev_opaque(indio_dev)->mlock); -} -EXPORT_SYMBOL_GPL(iio_device_release_buffer_mode); - /** * iio_device_get_current_mode() - helper function providing read-only acc= ess to * the opaque @currentmode variable diff --git a/drivers/iio/light/opt4060.c b/drivers/iio/light/opt4060.c index 981c704e7df5..8cb3fa38077e 100644 --- a/drivers/iio/light/opt4060.c +++ b/drivers/iio/light/opt4060.c @@ -304,7 +304,7 @@ static int opt4060_set_driver_state(struct iio_dev *ind= io_dev, struct opt4060_chip *chip =3D iio_priv(indio_dev); int ret =3D 0; any_mode_retry: - if (iio_device_claim_buffer_mode(indio_dev)) { + if (!iio_device_claim_buffer_mode(indio_dev)) { /* * This one is a *bit* hacky. If we cannot claim buffer mode, * then try direct mode so that we make sure things cannot diff --git a/include/linux/iio/iio.h b/include/linux/iio/iio.h index 76398dbfa5ca..f8a7ef709210 100644 --- a/include/linux/iio/iio.h +++ b/include/linux/iio/iio.h @@ -702,8 +702,42 @@ static inline void iio_device_release_direct(struct ii= o_dev *indio_dev) __iio_dev_mode_unlock(indio_dev); } =20 -int iio_device_claim_buffer_mode(struct iio_dev *indio_dev); -void iio_device_release_buffer_mode(struct iio_dev *indio_dev); +/** + * iio_device_claim_buffer_mode - Keep device in buffer mode + * @indio_dev: the iio_dev associated with the device + * + * If the device is in buffer mode it is guaranteed to stay + * that way until iio_device_release_buffer_mode() is called. + * + * Use with iio_device_release_buffer_mode(). + * + * Returns: true on success, false on failure. + */ +static inline bool iio_device_claim_buffer_mode(struct iio_dev *indio_dev) +{ + __iio_dev_mode_lock(indio_dev); + + if (!iio_buffer_enabled(indio_dev)) { + __iio_dev_mode_unlock(indio_dev); + return false; + } + + return true; +} + +/** + * iio_device_release_buffer_mode - releases claim on buffer mode + * @indio_dev: the iio_dev associated with the device + * + * Release the claim. Device is no longer guaranteed to stay + * in buffer mode. + * + * Use with iio_device_claim_buffer_mode(). + */ +static inline void iio_device_release_buffer_mode(struct iio_dev *indio_de= v) +{ + __iio_dev_mode_unlock(indio_dev); +} =20 extern const struct bus_type iio_bus_type; =20 --=20 2.52.0 From nobody Sat Feb 7 14:14:47 2026 Received: from mail-vs1-f53.google.com (mail-vs1-f53.google.com [209.85.217.53]) (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 B88F729B793 for ; Fri, 12 Dec 2025 02:45:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.217.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765507546; cv=none; b=JUjnjYUVblgCKWi5b1/bxcQeORwzivcAjQODl+eSfOoWIZb03F1aA8RrG8wXGuW3LyVpURgMrVRVLtefAKjtrAteNPqi/g+xajZ7SBRlPkBjGfQnvrD9duoC1ldZh7SSx26tnVvcRDfpQh8PgeHpDc5asEnRTDM1zjuuFhw49i8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765507546; c=relaxed/simple; bh=6RuhgjKQZQBu1gVOM1UJ1b8RuzOWlkNhUsVE6an3+VI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=DIx6N9/uhgdRlmTSzBpuSj2lvzy+JWoDE8mh8hiu3pcTsXL6yTsiPV5Cr/HelE0VbyBjeDWvtw2GGm3RnKkCRJRWr+BFdvVkX5TwLvWTWV4c4KsU1bo2l1vgWJf2osYxaQid1rzTcYS8KyLOD4zyJAO81Tn6dR+gKc9QLd3qwm0= 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=Iz9eQ6Ft; arc=none smtp.client-ip=209.85.217.53 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="Iz9eQ6Ft" Received: by mail-vs1-f53.google.com with SMTP id ada2fe7eead31-5dbe6be1ac5so325368137.1 for ; Thu, 11 Dec 2025 18:45:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1765507542; x=1766112342; 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=7teUlQNakpyBekbyBa3L6SiOmkc3TRpBucnHceeLxnk=; b=Iz9eQ6FtGkzEi4SWvsGCSS8oq+1MRfMrm04dUqbrlggExKoGM2GcPGFWdo/J0lDDo6 ZQ+H7OwNaRKvE/izDQgvU3G0bmgl0bRIOZ12d2YL4y6eRgw4DcFN7sTdyn/sZ1fe+Qbu tfU9uRRCmbqeBtNB2JzH+a7Mjv081nwoCLNU9kRWICcl7+12tUTP7h1Knz9DpDSR3V0O wPIfvdl6Y57mdMesyHi7LyPM03XRw8Jf2ewnc4RqSVAH9CAokjfpxv3pAvio/T4mJRhM uTNd3krzNapcvU8mGVu9KVLfbdV/jfAps2cdnM3qcL6Y3zckfA6I4LEGALY85z7c4fwg 61+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765507542; x=1766112342; 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=7teUlQNakpyBekbyBa3L6SiOmkc3TRpBucnHceeLxnk=; b=UQT7ZWBbXlmwFVmDkQCBmAr2+aoNH2MwsTWCys0Dd7IHFr9dJfJdzJQuMvWXgLJzgY Sb39tnhv87HNcw+KAde0DOEDCpHsTbpX3ATMGg6u/hzl6425iOmtNIS60wP/c5jl8mVS PtM8r6XfIoMGLpbqmr3D+n2KcdKzSZ2+B5jy0ZQRS3QwdIYFJjqyXB592TH9qPA3vQ9y 9OKibGca1e/PoDYrXsemdOHT+OhtovChjtq+xwVGcKUZ19VuVTwpwYn5VlwDzFUV9xvH rqHYj7u3h5KClEslaRa+9PnYv0ePf0PZxlQ/YaC0rQAdvPmy31+zN4EfxV9/4h/qmc2o SxcQ== X-Forwarded-Encrypted: i=1; AJvYcCVDvUB30few3XsDG+2THn3Bp+KS3JYzIWwOAOQTi8D6cy2v/sMBMaMoP8+YxGeUgc125kgxKMoRynGavNs=@vger.kernel.org X-Gm-Message-State: AOJu0YycAuOZOk17H3NTIJlRKzdEQa949BYKRQYZhsd3A+hSPcxg7edd bU0m4p0UXsID0B6/Kt4IPhXHrPNMbR7z7rhSmWGv2hNNcIi93B0o5AT3jfjxAQ== X-Gm-Gg: AY/fxX5NO8ElyNM+uHiG6oYKxug2zK7W8XnkERgXWIAYMlsabERiQXi2xyUhBKfaEnp 93K1WrUpjLATRUD8EFYnUuStIX3xKcCbG9nkRElxhlGSQJoICpQLcKsa882BFlg6JKo3586lDSx fPCbAyCMWI4OCEq0CD8NtIDWv4U3NkozptHSJO5JQRRNJLxOEwrJqcPHnKTZGTQyDiCLUWVhqXi GaHLtpJdWTtMJxPRRXJtqjcHauKqa92xzBpVvP2uUYijuMV5uUbcsv58rQydZlx8gqC32J89hIk eeZmA+dywBLCGcTn+DzVwl/amKwC2OOwqYlmGz8YS3Yohg/roIL6wkRkjs9d+2picCUKV2fLUOB BrDKa5vdTNdTII2ggGuhqbMNGZlbbp3iWp5OCWAo45j8lu5lTEg72kY7MFfvVxZzd6oWWvPwsky Bb2DpV3EnhkB7b X-Google-Smtp-Source: AGHT+IFCbSwjQx+j26I4gFkKKi2c2VWed7wiEapgwj8ZJoFsVfh4kg25ChAQAYsyJ44hwmfrSbsVtw== X-Received: by 2002:a05:6102:94d:b0:5db:3cda:cc3b with SMTP id ada2fe7eead31-5e827835ad9mr109640137.34.1765507541686; Thu, 11 Dec 2025 18:45:41 -0800 (PST) Received: from [192.168.100.70] ([2800:bf0:82:3d2:875c:6c76:e06b:3095]) by smtp.gmail.com with ESMTPSA id ada2fe7eead31-5e7d0f25ce2sm1693762137.8.2025.12.11.18.45.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Dec 2025 18:45:41 -0800 (PST) From: Kurt Borja Date: Thu, 11 Dec 2025 21:45:22 -0500 Subject: [PATCH v2 4/7] iio: core: Add cleanup.h support for iio_device_claim_*() 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: quoted-printable Message-Id: <20251211-lock-impr-v2-4-6fb47bdaaf24@gmail.com> References: <20251211-lock-impr-v2-0-6fb47bdaaf24@gmail.com> In-Reply-To: <20251211-lock-impr-v2-0-6fb47bdaaf24@gmail.com> To: Andy Shevchenko , Lars-Peter Clausen , Michael Hennerich , Jonathan Cameron , Benson Leung , Antoniu Miclaus , Gwendal Grignou , Shrikant Raskar , Per-Daniel Olsson Cc: David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Guenter Roeck , Jonathan Cameron , linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, chrome-platform@lists.linux.dev, Kurt Borja X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=4071; i=kuurtb@gmail.com; h=from:subject:message-id; bh=6RuhgjKQZQBu1gVOM1UJ1b8RuzOWlkNhUsVE6an3+VI=; b=owGbwMvMwCUmluBs8WX+lTTG02pJDJnWjSc/Hl3I+GE9k2n2i5kNa865/P+6+/tGXw6FlycLw jQLr7bydZSyMIhxMciKKbK0Jyz69igq763fgdD7MHNYmUCGMHBxCsBEJnxjZNixR9ri+uLDqi0N LAdafz789yXIbGnsF9nHl3sDpNiYjQIYGY6cbI257HOhf+2N1YdvT3Zi1Gz7z3LD/Q33evbQ7F6 B6ywA X-Developer-Key: i=kuurtb@gmail.com; a=openpgp; fpr=54D3BE170AEF777983C3C63B57E3B6585920A69A Add guard classes for iio_device_claim_*() conditional locks. This will aid drivers write safer and cleaner code when dealing with some common patterns. These classes are not meant to be used directly by drivers (hence the __priv__ prefix). Instead, documented wrapper macros are provided to enforce the use of ACQUIRE() or guard() semantics and avoid the problematic scoped guard. Suggested-by: Andy Shevchenko Signed-off-by: Kurt Borja --- include/linux/iio/iio.h | 83 +++++++++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 83 insertions(+) diff --git a/include/linux/iio/iio.h b/include/linux/iio/iio.h index f8a7ef709210..c84853c7a37f 100644 --- a/include/linux/iio/iio.h +++ b/include/linux/iio/iio.h @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -739,6 +740,88 @@ static inline void iio_device_release_buffer_mode(stru= ct iio_dev *indio_dev) __iio_dev_mode_unlock(indio_dev); } =20 +DEFINE_GUARD(__priv__iio_dev_mode_lock, struct iio_dev *, + __iio_dev_mode_lock(_T), __iio_dev_mode_unlock(_T)); +DEFINE_GUARD_COND(__priv__iio_dev_mode_lock, _try_buffer, + iio_device_claim_buffer_mode(_T)); +DEFINE_GUARD_COND(__priv__iio_dev_mode_lock, _try_direct, + iio_device_claim_direct(_T)); + +/** + * IIO_DEV_ACQUIRE_DIRECT_MODE(_dev, _var) - Tries to acquire the direct m= ode + * lock with automatic release + * @_dev: IIO device instance + * @_var: Dummy variable identifier to store acquire result + * + * Tries to acquire the direct mode lock with cleanup ACQUIRE() semantics = and + * automatically releases it at the end of the scope. It most be always pa= ired + * with IIO_DEV_ACQUIRE_ERR(), for example:: + * + * IIO_DEV_ACQUIRE_DIRECT_MODE(indio_dev, claim); + * if (IIO_DEV_ACQUIRE_ERR(&claim)) + * return -EBUSY; + * + * ...or a more common scenario (notice scope the braces):: + * + * switch() { + * case IIO_CHAN_INFO_RAW: { + * IIO_DEV_ACQUIRE_DIRECT_MODE(indio_dev, claim); + * if (IIO_DEV_ACQUIRE_ERR(&claim)) + * return -EBUSY; + * + * ... + * } + * case IIO_CHAN_INFO_SCALE: + * ... + * ... + * } + * + * Context: Can sleep + */ +#define IIO_DEV_ACQUIRE_DIRECT_MODE(_dev, _var) \ + ACQUIRE(__priv__iio_dev_mode_lock_try_direct, _var)(_dev) + +/** + * IIO_DEV_ACQUIRE_BUFFER_MODE(_dev, _var) - Tries to acquire the buffer m= ode + * lock with automatic release + * @_dev: IIO device instance + * @_var: Dummy variable identifier to store acquire result + * + * Tries to acquire the direct mode lock and automatically releases it at = the + * end of the scope. It most be paired with IIO_DEV_ACQUIRE_ERR(), for exa= mple:: + * + * IIO_DEV_ACQUIRE_BUFFER_MODE(indio_dev, claim); + * if (IIO_DEV_ACQUIRE_ERR(&claim)) + * return IRQ_HANDLED; + * + * Context: Can sleep + */ +#define IIO_DEV_ACQUIRE_BUFFER_MODE(_dev, _var) \ + ACQUIRE(__priv__iio_dev_mode_lock_try_buffer, _var)(_dev) + +/** + * IIO_DEV_ACQUIRE_ERR() - ACQUIRE_ERR() wrapper + * @_var: Dummy variable passed to IIO_DEV_ACQUIRE_*_MODE() + * + * Return: true on success, false on error + */ +#define IIO_DEV_ACQUIRE_ERR(_var_ptr) \ + ACQUIRE_ERR(__priv__iio_dev_mode_lock_try_buffer, _var_ptr) + +/** + * IIO_DEV_GUARD_ANY_MODE - Acquires the mode lock with automatic release + * @_dev: IIO device instance + * + * Acquires the mode lock with cleanup guard() semantics. It is usually pa= ired + * with iio_buffer_enabled(). + * + * This should *not* be used to protect internal driver state and it's use= in + * general is *strongly* discouraged. Use any of the IIO_DEV_ACQUIRE_*_MOD= E() + * variants. + */ +#define IIO_DEV_GUARD_ANY_MODE(_dev) \ + guard(__priv__iio_dev_mode_lock)(_dev) + extern const struct bus_type iio_bus_type; =20 /** --=20 2.52.0 From nobody Sat Feb 7 14:14:47 2026 Received: from mail-ua1-f48.google.com (mail-ua1-f48.google.com [209.85.222.48]) (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 DB6092868A9 for ; Fri, 12 Dec 2025 02:45:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765507548; cv=none; b=cvEVzIoDvcroYcwTdi1RsI/efn3HTbY7WVZ9VOE4bR9SiZipoCYaQfy03vQ1sM2PxD8qADSNm0QCZISEI/6At2EALYofkqRgWm0gKWAvhK4A4TYxJr2HRF57PYtrftv1a+rg4BgPUx+DDFghXaJ649mTpsXbs/YKb4aU1DzRMAo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765507548; c=relaxed/simple; bh=q6gZRxmz6cKGnQKSSxqxXmYWJF1PKw60AF3Tc6GXjyU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=OmcN6IlVjJM+hPjiJy6Qu+zZdCAgplJatWj6ITzWGvfuaUeCnTWogJyc+86BJdOvqC3KF8WmEFBWudT0DWM1wEn6UQp65EvAM/kvEDtfIl7XdnkKmeXHP5fE7z69mb73euPFVjGoVaQMX5hO17yCMp3YB4eCSpgwWoiyCy9TP1U= 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=Eeox+jI8; arc=none smtp.client-ip=209.85.222.48 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="Eeox+jI8" Received: by mail-ua1-f48.google.com with SMTP id a1e0cc1a2514c-93f69720a7cso480519241.1 for ; Thu, 11 Dec 2025 18:45:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1765507544; x=1766112344; 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=2wlEL307B3m+aaEYqQkKNwT5MYGrgAWckQlDU+pQY6Q=; b=Eeox+jI8BVgYj0ocaM/sv2Pmo7rIzRsgKWxKGmvfoxWWz+IUzb8oDXp0LGyKEIzTDu sTDuxEKTAPDO98qUrbB6Mg7cV+QkeYyk2+il+RQorZHkxoccR+DcP9Ft4DmbRm0FjIol nLV3caqqUt4Yeohip9qFo+RkCC3nJLirlivunOpcD1tZq12SKATFRqbEfkrDBj1mAFd5 Q4hIZK07gse1ARkFaZ6yh40cVrTp4t6MUOXifMXtpCS+uRBx8gpjkTPjQcmEGOMk7/C/ vserRBdSt5Hrwecu579NFLr7vPudTHd+BX/BhXKPZkHmVQ1dAjN7oLdSYeNQwSAxB4vJ r5xg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765507544; x=1766112344; 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=2wlEL307B3m+aaEYqQkKNwT5MYGrgAWckQlDU+pQY6Q=; b=lJemfgZFtGJb5MYNzqOxO4b92ZaNi7zszdZVPxjpXt1I5Icxv/OHql3l0nOqeVwsm4 i7oXYPKGBrbd9CflMgnoPRGAukydw3RwVUm/M7nIH83eT+9AO8vqRJI1h6kGBjC57NEp XL3+nF5pL4ztdMw6+fjRNn9037rEDOe/faz/sOIJpfVJSKuWY/dVgjfnFcTkx/jAWpxl Wzl0gABJ93vXinwlEvUCHYrw1dX+ZFrS8RZ65W1EcPy3OaScHQl8JGvQO/QVDDdwKuB+ UCWRASkiJHCiNbiCDmyzkyaVvSCUf/lTfK6h2xnb1xHnKYkCk2pXPcbFi+wQKDnuxSsI IfRg== X-Forwarded-Encrypted: i=1; AJvYcCUv2ZwQLsGXC0Ds1/IIuVMbw33IBf9jDUknNfLL6qam1Z+aYhyETlEmXjN/jfYw4CKminBN8zGfuVElTxI=@vger.kernel.org X-Gm-Message-State: AOJu0YyuHOAE/yuhcaRJOnCc4IinYE2c7k1Gc9yC2gI/aWGcC/rPfEkN 5AwKA6E6uWySy8e4jG7DLSGJxi8qzKGPqlOKXPKK2GVw5cyawU+SVAvDqUCjlg== X-Gm-Gg: AY/fxX6skxyK/QMpfbcIjfG1SLri3FpGEyuTnG6nav0xf4esiJVfoDmC9zNKfJ2GhSY w4KNezEbL0h3K9dM0ho/4n6rG6MU/P2/hc6M2tbTJJxGhO3jCwx+95cWk34/YXXqf4/cUFeH5zZ cf1kwU8oTETtCizYWMS3ykwIYG2JfH4DvGJvdJkJtIznPt+fUYtFKZLoUC8agiHun2KTJ20KDii M7FeZ4RAF3XibjaMnCgrFC89/RGL4IAveJcEqL8LoqqmOT3X8lnCg078U4AtGqE7WW4PLV3AftN Tvvo/f9n/dxlnfAJIDJI/MFpHJLR6L0ZoPe61vNbqt+SKJ1lTm1IVNk0qcT7/NT0HjVN2i9PIlg +09kAj+pRbxP3wSYXLQVd18jbNFcdelAJtUM8y+fh8PwQ1vK9+XQ4rCUnroE0dufk2abebKsTEB SGNweIJa36obWWL38EuAUX9zo= X-Google-Smtp-Source: AGHT+IG0wdLgjzf9Ktth3/5kZmD0HDcUqwfLcmvB1VHLyGx97sarm2rz4f/F64/HbgrAXqumKQeOKg== X-Received: by 2002:a05:6102:945:b0:5db:f615:1821 with SMTP id ada2fe7eead31-5e8276b6fecmr140118137.10.1765507543991; Thu, 11 Dec 2025 18:45:43 -0800 (PST) Received: from [192.168.100.70] ([2800:bf0:82:3d2:875c:6c76:e06b:3095]) by smtp.gmail.com with ESMTPSA id ada2fe7eead31-5e7d0f25ce2sm1693762137.8.2025.12.11.18.45.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Dec 2025 18:45:43 -0800 (PST) From: Kurt Borja Date: Thu, 11 Dec 2025 21:45:23 -0500 Subject: [PATCH v2 5/7] iio: light: vcnl4000: Use IIO cleanup helpers 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: quoted-printable Message-Id: <20251211-lock-impr-v2-5-6fb47bdaaf24@gmail.com> References: <20251211-lock-impr-v2-0-6fb47bdaaf24@gmail.com> In-Reply-To: <20251211-lock-impr-v2-0-6fb47bdaaf24@gmail.com> To: Andy Shevchenko , Lars-Peter Clausen , Michael Hennerich , Jonathan Cameron , Benson Leung , Antoniu Miclaus , Gwendal Grignou , Shrikant Raskar , Per-Daniel Olsson Cc: David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Guenter Roeck , Jonathan Cameron , linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, chrome-platform@lists.linux.dev, Kurt Borja X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=3034; i=kuurtb@gmail.com; h=from:subject:message-id; bh=q6gZRxmz6cKGnQKSSxqxXmYWJF1PKw60AF3Tc6GXjyU=; b=owGbwMvMwCUmluBs8WX+lTTG02pJDJnWjSdTFecdzhNMZ5e0WlEw07Hnq8fE7OMHH9+5uOVkb czi+ZMkOkpZGMS4GGTFFFnaExZ9exSV99bvQOh9mDmsTCBDGLg4BWAi9xoZGS4HJzyYUb40KfdQ 0MacMHGmjX8yPY2vWaXsTn6bldDZ/Jbhr/Cx/rqAJafilN97XlsRo+Wy3PizUvI+2e3PNbVTz9x 05wEA X-Developer-Key: i=kuurtb@gmail.com; a=openpgp; fpr=54D3BE170AEF777983C3C63B57E3B6585920A69A Use IIO_DEV_ACQUIRE_DIRECT_MODE() helper to automatically release direct mode. Signed-off-by: Kurt Borja --- drivers/iio/light/vcnl4000.c | 49 ++++++++++++++++------------------------= ---- 1 file changed, 18 insertions(+), 31 deletions(-) diff --git a/drivers/iio/light/vcnl4000.c b/drivers/iio/light/vcnl4000.c index 4dbb2294a843..4184104ac8f2 100644 --- a/drivers/iio/light/vcnl4000.c +++ b/drivers/iio/light/vcnl4000.c @@ -1078,20 +1078,17 @@ static int vcnl4010_read_raw(struct iio_dev *indio_= dev, =20 switch (mask) { case IIO_CHAN_INFO_RAW: - case IIO_CHAN_INFO_SCALE: - if (!iio_device_claim_direct(indio_dev)) + case IIO_CHAN_INFO_SCALE: { + IIO_DEV_ACQUIRE_DIRECT_MODE(indio_dev, claim); + if (IIO_DEV_ACQUIRE_ERR(&claim)) return -EBUSY; =20 /* Protect against event capture. */ - if (vcnl4010_is_in_periodic_mode(data)) { - ret =3D -EBUSY; - } else { - ret =3D vcnl4000_read_raw(indio_dev, chan, val, val2, - mask); - } + if (vcnl4010_is_in_periodic_mode(data)) + return -EBUSY; =20 - iio_device_release_direct(indio_dev); - return ret; + return vcnl4000_read_raw(indio_dev, chan, val, val2, mask); + } case IIO_CHAN_INFO_SAMP_FREQ: switch (chan->type) { case IIO_PROXIMITY: @@ -1148,36 +1145,27 @@ static int vcnl4010_write_raw(struct iio_dev *indio= _dev, struct iio_chan_spec const *chan, int val, int val2, long mask) { - int ret; struct vcnl4000_data *data =3D iio_priv(indio_dev); =20 - if (!iio_device_claim_direct(indio_dev)) + IIO_DEV_ACQUIRE_DIRECT_MODE(indio_dev, claim); + if (IIO_DEV_ACQUIRE_ERR(&claim)) return -EBUSY; =20 /* Protect against event capture. */ - if (vcnl4010_is_in_periodic_mode(data)) { - ret =3D -EBUSY; - goto end; - } + if (vcnl4010_is_in_periodic_mode(data)) + return -EBUSY; =20 switch (mask) { case IIO_CHAN_INFO_SAMP_FREQ: switch (chan->type) { case IIO_PROXIMITY: - ret =3D vcnl4010_write_proxy_samp_freq(data, val, val2); - goto end; + return vcnl4010_write_proxy_samp_freq(data, val, val2); default: - ret =3D -EINVAL; - goto end; + return -EINVAL; } default: - ret =3D -EINVAL; - goto end; + return -EINVAL; } - -end: - iio_device_release_direct(indio_dev); - return ret; } =20 static int vcnl4010_read_event(struct iio_dev *indio_dev, @@ -1438,14 +1426,13 @@ static int vcnl4010_config_threshold_disable(struct= vcnl4000_data *data) static int vcnl4010_config_threshold(struct iio_dev *indio_dev, bool state) { struct vcnl4000_data *data =3D iio_priv(indio_dev); - int ret; =20 if (state) { - if (!iio_device_claim_direct(indio_dev)) + IIO_DEV_ACQUIRE_DIRECT_MODE(indio_dev, claim); + if (IIO_DEV_ACQUIRE_ERR(&claim)) return -EBUSY; - ret =3D vcnl4010_config_threshold_enable(data); - iio_device_release_direct(indio_dev); - return ret; + + return vcnl4010_config_threshold_enable(data); } else { return vcnl4010_config_threshold_disable(data); } --=20 2.52.0 From nobody Sat Feb 7 14:14:47 2026 Received: from mail-vk1-f179.google.com (mail-vk1-f179.google.com [209.85.221.179]) (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 EB2B7145B3F for ; Fri, 12 Dec 2025 02:45:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765507550; cv=none; b=QHHql7u/7+58zz0h6LQdWkidgQlhaHQYkc1wyhUrtqYPx8gr97Y5nhEAZVizYT7834IEFd6AiyxpwcxLBdSNVriQ1jRFpYq+Y2/OCXGAWJ04xZLEBW0e9QzdeViix53d1qCk1TSXuabwuB9ex4XmYc5SE9Px4HlF56gH+/yDW7E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765507550; c=relaxed/simple; bh=m4docKzSN6U3IisnQGU0vDNlqcdF+sgdQ/746l+2whQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=p0ejSK5Eu9fijzZsxfJnXnqlBQELd9UGDIBa1KCbhCtZ7J2XdRJIQZFKCkvqwMGaZCyFsNqOALGbbl/r0eQ2DiMZyBLS9OfEuCIXBmRzPwUZXxVZ1/K+HPsFpGYnccBpVdm6hbzEVzSsdB/hlsTBol/3Tb3GoEmereOuDUNVCxA= 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=SaoAKfpK; arc=none smtp.client-ip=209.85.221.179 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="SaoAKfpK" Received: by mail-vk1-f179.google.com with SMTP id 71dfb90a1353d-55b26461e78so236934e0c.3 for ; Thu, 11 Dec 2025 18:45:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1765507546; x=1766112346; 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=SZxE86UOpBkEr43S5oO3m/muydq3y/4ppHxIwZHfNzc=; b=SaoAKfpKRDp+Pf5nRlOYCPsBb7uyOwpVe/VI0nsJxnOuf0MDhieXaKaoR2djWH/j13 m4qPp2GzDxJ2W6qMy2+rWzfE8EAsnpJjhNET5mdt68Gykh/SBTafbDkhyZ8kpc8wFE5L nxdxVz63trEvcAyOgyj4CTGJEu8WLq6liXe/hXbA/g5zZO+a7wunqoTctT4NNX6UdhPJ DFuVtvmi+eHYQ0jgdt6kv3rGPUPD/jycAoCkAjvy8OmRYgE0+lmH9hExB81vfsJJXbZa rvIiZsrKJ+ZkqTKJO29VLGZDyYLRfe/WQ+TDRZXp0tsLMNWqtSE5mv3UNJC6lT/60Xh6 8+sw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765507546; x=1766112346; 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=SZxE86UOpBkEr43S5oO3m/muydq3y/4ppHxIwZHfNzc=; b=b9Jq0VJQUp8hJciw2Ak8fBT521IUP+J9356Mdsdy7+h/lP8ASYpuUTtMYGI0prOnVT 1ZTBXVQu8Ms2nv3+74E7VhNZJMQ+cEFbNDJzAsgKGpNEijaNkKCo4sVCZfllxKvFOO15 ypUvL4dws3ytagPSzK4mIL07IhYCtXMh80zDWHH24ZZEQ1pAdIL65ZwIdUf5IIq4IYnK lwha8yN+lW+uck48NPdFlEUNHMhVHGzgKQX4sCdm4g/GiHX4tTpFN7IoSqzjjeyoKoqb 97UOmQVMEnCrfpu2Iw+GEet/btGIMxP+RX3PAoD9PbCEsXGqkAnF86FpNegrOClaRcuP 2q/A== X-Forwarded-Encrypted: i=1; AJvYcCWel/hHSOKSluNI8sOcRguU4MPAk/39fxM7qfwlB5y4KJAn4aWF3gPu7EIB/g2dEblYeItUha9qYziY7MY=@vger.kernel.org X-Gm-Message-State: AOJu0YxN+nYpdHMBOtBGFO/yWlwCh4f2648O1kcFd6x2h5m1NZTlOFq3 XEo8MUD7CTzszXHOocGPZU6XFavNwdu3Co/tFHqkYRY9X+MTRiIDIMbATgqynA== X-Gm-Gg: AY/fxX55NMf8tRGlK/4n+BXEiwMLApvYddEB+AOMuD+nsnDUcicokOgVSdnlSgzMouX HRxtOdGKfnVnweOySwuhPQEszfHgWs2fkK8UCTsOyn44qENKu/wBd+nWkp4RpNP6Q0aHcHfLNmd 3rpQsUc29HapYhTJPCujpPY2hK7FiDbbTyAx407sZtFpTWFjLbdq1QaOyp3coxT7mFgjwOMLSQf lN+szH2B649CkiIq0ZoIf3oAwhrRrd4CLvWQ3SKiMRxCd1k5pJTrNtkHSSggSqueWK3YxMMqNpC rG0RhHK/36nl0UA6BKOO5oRs06musWZdaOkgNae+eMaYJJ40oBRei9W0fctnNJvAJ58qpZ/LpL2 d+97emm5YNtsyc6GscHe6/wx6AFCjUIJcNyv/zeuph/mgBZ+WeAFjCo8HkIfezTurVfyD6lvQAt GPQxVVEAg/E9cb X-Google-Smtp-Source: AGHT+IE6R1SPTPYAVrVVaJYQAbRBZp7N0gNjOqqIWn71FlnxAZHPp5xMi1+R7KzVuAZ/J+ZqU/BtQg== X-Received: by 2002:a05:6102:5a9a:b0:5dd:84f1:b51a with SMTP id ada2fe7eead31-5e82788200bmr94910137.43.1765507546232; Thu, 11 Dec 2025 18:45:46 -0800 (PST) Received: from [192.168.100.70] ([2800:bf0:82:3d2:875c:6c76:e06b:3095]) by smtp.gmail.com with ESMTPSA id ada2fe7eead31-5e7d0f25ce2sm1693762137.8.2025.12.11.18.45.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Dec 2025 18:45:45 -0800 (PST) From: Kurt Borja Date: Thu, 11 Dec 2025 21:45:24 -0500 Subject: [PATCH v2 6/7] iio: health: max30102: Use IIO cleanup helpers 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: quoted-printable Message-Id: <20251211-lock-impr-v2-6-6fb47bdaaf24@gmail.com> References: <20251211-lock-impr-v2-0-6fb47bdaaf24@gmail.com> In-Reply-To: <20251211-lock-impr-v2-0-6fb47bdaaf24@gmail.com> To: Andy Shevchenko , Lars-Peter Clausen , Michael Hennerich , Jonathan Cameron , Benson Leung , Antoniu Miclaus , Gwendal Grignou , Shrikant Raskar , Per-Daniel Olsson Cc: David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Guenter Roeck , Jonathan Cameron , linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, chrome-platform@lists.linux.dev, Kurt Borja X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1978; i=kuurtb@gmail.com; h=from:subject:message-id; bh=m4docKzSN6U3IisnQGU0vDNlqcdF+sgdQ/746l+2whQ=; b=owGbwMvMwCUmluBs8WX+lTTG02pJDJnWjSf782TM12mtP8/XLVE3/SujM+vX+E7D3v0PsgoT4 7rSlvN2lLIwiHExyIopsrQnLPr2KCrvrd+B0Pswc1iZQIYwcHEKwEQO8TEyXOz/F91xtu8Zq0IN k7oqW+9J0QJmwWzmaWVZK+Sm75UqYmSYWfog54KZl+KBeV8agr+f2KM/yclxx5tNi3Y3TJomx2f MBQA= X-Developer-Key: i=kuurtb@gmail.com; a=openpgp; fpr=54D3BE170AEF777983C3C63B57E3B6585920A69A Use IIO_DEV_GUARD_ANY_MODE() cleanup helper to simplify and drop busy-waiting code in max30102_read_raw(). Signed-off-by: Kurt Borja --- drivers/iio/health/max30102.c | 33 +++++++++------------------------ 1 file changed, 9 insertions(+), 24 deletions(-) diff --git a/drivers/iio/health/max30102.c b/drivers/iio/health/max30102.c index 288c2f37a4a2..94e15598ffe7 100644 --- a/drivers/iio/health/max30102.c +++ b/drivers/iio/health/max30102.c @@ -467,44 +467,29 @@ static int max30102_read_raw(struct iio_dev *indio_de= v, int *val, int *val2, long mask) { struct max30102_data *data =3D iio_priv(indio_dev); - int ret =3D -EINVAL; + int ret; =20 switch (mask) { - case IIO_CHAN_INFO_RAW: + case IIO_CHAN_INFO_RAW: { /* * Temperature reading can only be acquired when not in * shutdown; leave shutdown briefly when buffer not running */ -any_mode_retry: - if (!iio_device_claim_buffer_mode(indio_dev)) { - /* - * This one is a *bit* hacky. If we cannot claim buffer - * mode, then try direct mode so that we make sure - * things cannot concurrently change. And we just keep - * trying until we get one of the modes... - */ - if (!iio_device_claim_direct(indio_dev)) - goto any_mode_retry; + IIO_DEV_GUARD_ANY_MODE(indio_dev); =20 - ret =3D max30102_get_temp(data, val, true); - iio_device_release_direct(indio_dev); - } else { - ret =3D max30102_get_temp(data, val, false); - iio_device_release_buffer_mode(indio_dev); - } + ret =3D max30102_get_temp(data, val, !iio_buffer_enabled(indio_dev)); if (ret) return ret; =20 - ret =3D IIO_VAL_INT; - break; + return IIO_VAL_INT; + } case IIO_CHAN_INFO_SCALE: *val =3D 1000; /* 62.5 */ *val2 =3D 16; - ret =3D IIO_VAL_FRACTIONAL; - break; + return IIO_VAL_FRACTIONAL; + default: + return -EINVAL; } - - return ret; } =20 static const struct iio_info max30102_info =3D { --=20 2.52.0 From nobody Sat Feb 7 14:14:47 2026 Received: from mail-vs1-f41.google.com (mail-vs1-f41.google.com [209.85.217.41]) (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 D397C29A9E9 for ; Fri, 12 Dec 2025 02:45:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.217.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765507552; cv=none; b=XvL3DuAkEwcDvsyc9mFzibslKiSURTFiQ2djkFDMIc4eneaNtVtBisCtLtJMB/uUXYrbnD92liegSHI5RwJ1RvNXM5/SdAZ3AlOJ2ZR8kodUjjKJSFnn3Q3r4r4k/T+8bf+lDVeFAt+KI8IJHLnOxtl7KwCZj5MfrnXxH7nG/nc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765507552; c=relaxed/simple; bh=ROdGE9UYn9t3GKB795F+w4NovlxCcnGyj52uJR8yT5g=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=YVU0hCY8aiJ6ZT2lrKTMFCUeN+kT+WCiaTKiOD/L+tS+jrMuB+Vt1Utl7K3YOYbPEu7c2kATgq7oQdMSVNDuGSmxVoIeL279puivUqp5VkT+5ne05CEx81IlwB0dTbyd46lB2dzk9nG/s0wwnbZVZFsudMBR5PxRZDu9K5WIsik= 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=KRohjAg9; arc=none smtp.client-ip=209.85.217.41 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="KRohjAg9" Received: by mail-vs1-f41.google.com with SMTP id ada2fe7eead31-5dfae681ff8so485041137.1 for ; Thu, 11 Dec 2025 18:45:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1765507548; x=1766112348; 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=iYZRIuaNXC2L9F0wrej4K4cGwCXMfBa56Esw3K/nF6w=; b=KRohjAg9pi+ViCK3zzHXWnMXcvkwZP/iDMOdPEiQBEvZmIy9FLLlAQG095/jimVBkT WWTOvTNA/IdaovkqNwRV6FrFa/+AFQd6VXS3CvwTfHMkRjmiVF6Jal0jeHAcC5+8WWrt nPq/JXJVeNV+NL0k1defaXVdON9Q3yxoO9YiESfXbQtgizjRtEXJH0eqsUtBX/+cgEZc Ph/V0zrKykgUYCKcY4y1gLLogIwA2QHAVWkmFlhIsob3SNNV+UN6F9fAEdCPYh8LsLsx J99osHEdEd1wg+C7NWkBxARlYA6xh5Igw50Y3JIWRXrADJ4JIgmywtfTDce6HMefjgD1 X1bw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765507548; x=1766112348; 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=iYZRIuaNXC2L9F0wrej4K4cGwCXMfBa56Esw3K/nF6w=; b=V7wT2Jgw+V3rmEQb2Y0hA47IyJv6jADtvo45yhW4CtWgo2Hrh0Lxiqx9NLdeWM2ebG Mee6pDfnpK08lUTHorRhup5EypqrPUo8gV8OZfIUyaaMCkBRbunJIe41CYDOTGYGrn0Y P7GUgpr4ZRFBIeCjU4D4azCdreES2FBKQ5cRfMQEiIuFiOItY+P51a3+hFSDUrlgiGox dF7Crs13+KdxFmzRoC20gugMYFB7TyTHTfHf8oy6hT5Cy0XcEbYGsu2BgvrXv3nlf8k5 9SihPr+pTLyD8wUx+kFyj3k74KHlQggyLk8jfgaFVL9tZFP1K38sCMwq31roHeHaKA6p 6ncA== X-Forwarded-Encrypted: i=1; AJvYcCXTF+3xzTVyFiYAgxRc8xRQwQFmu0fkBqaedel/YMsBYY6y7wAr3LLz0qm08CPro1KiCMS9QxRZ8rntxig=@vger.kernel.org X-Gm-Message-State: AOJu0YxyP08XJO/Q/QvWYaUWSZPjg+1/dGdSGIIQZWDZF2fynR2942bT f4Y/SzrwA7y3WYhD5Oysxy8PpsBpZq2l/zE0k9hIKvpz7nfQ1PR7F8uIgLm4vg== X-Gm-Gg: AY/fxX5vGOf6mflGzwb+d6lacZ2KD9bekV/e3Yr2lBpt/8Z4QWw+NYcq/WULDOANPHL CqtTjFNp7g2IkdJQsZSG7WJ1fbr4Kwe1BBUT5qW9RCMrqeZPFu9jHbpudEWpIMhJxTooJbvUZJK 0Ib73F0VeKGIDrAwgHGlzqNFmBdcb3Rtt6+d4bH3Kekp7yv/6v+8DijtNb88ZNWfVIb9YjG2pbi ElhKtNr0+JRog2wY7P/OY0jcIJXVfk66f5R4GHzar8c88m++oII31V7sV2C5OwYTJC8goaciChj IyZGLwf03URpFImzyyCjD1kPaeQeaNMkn3CPwKB9cnmlw2HWmalCXYeR3G0pmf9P1CiXfemm0H0 f86tu4tJjWrQXhVXaPgumhHzCnoODFGunfCc2PG1TRVUL25i4ZNZMxD0FPT3ZGx9zah5stLX5lw BsFqOIT64hdOD9zaLJj4Crl9Y= X-Google-Smtp-Source: AGHT+IH5i7dtBfVcr5pIDPh38IKpcxO7iBsFvqjyiDMjJP75f9PBiuTE5pSrUZG3ggjTiJvDMCDRxw== X-Received: by 2002:a05:6102:54a2:b0:5dd:c568:d30d with SMTP id ada2fe7eead31-5e82783585dmr129533137.30.1765507548500; Thu, 11 Dec 2025 18:45:48 -0800 (PST) Received: from [192.168.100.70] ([2800:bf0:82:3d2:875c:6c76:e06b:3095]) by smtp.gmail.com with ESMTPSA id ada2fe7eead31-5e7d0f25ce2sm1693762137.8.2025.12.11.18.45.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Dec 2025 18:45:48 -0800 (PST) From: Kurt Borja Date: Thu, 11 Dec 2025 21:45:25 -0500 Subject: [PATCH v2 7/7] iio: light: opt4060: Use IIO cleanup helpers 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: quoted-printable Message-Id: <20251211-lock-impr-v2-7-6fb47bdaaf24@gmail.com> References: <20251211-lock-impr-v2-0-6fb47bdaaf24@gmail.com> In-Reply-To: <20251211-lock-impr-v2-0-6fb47bdaaf24@gmail.com> To: Andy Shevchenko , Lars-Peter Clausen , Michael Hennerich , Jonathan Cameron , Benson Leung , Antoniu Miclaus , Gwendal Grignou , Shrikant Raskar , Per-Daniel Olsson Cc: David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Guenter Roeck , Jonathan Cameron , linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, chrome-platform@lists.linux.dev, Kurt Borja X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2580; i=kuurtb@gmail.com; h=from:subject:message-id; bh=ROdGE9UYn9t3GKB795F+w4NovlxCcnGyj52uJR8yT5g=; b=owGbwMvMwCUmluBs8WX+lTTG02pJDJnWjSeZoj/PfmBy4cD3SRt/BpS75GZkG51a/1Wv7M4Rx w1behXWdJSyMIhxMciKKbK0Jyz69igq763fgdD7MHNYmUCGMHBxCsBEXrYyMrSsPeb+OkilQE3R dts/rp81J080b85Kv6J0cPaRT25H7jYxMiysck6yNzwq+1b2Vs9Snvy5DCqSH+etDbdJ+12cmu8 wiwMA X-Developer-Key: i=kuurtb@gmail.com; a=openpgp; fpr=54D3BE170AEF777983C3C63B57E3B6585920A69A Use IIO_DEV_GUARD_ANY_MODE() cleanup helper to simplify and drop busy-waiting code in opt4060_set_driver_state(). Signed-off-by: Kurt Borja --- drivers/iio/light/opt4060.c | 52 +++++++++++++++--------------------------= ---- 1 file changed, 17 insertions(+), 35 deletions(-) diff --git a/drivers/iio/light/opt4060.c b/drivers/iio/light/opt4060.c index 8cb3fa38077e..943e5963d568 100644 --- a/drivers/iio/light/opt4060.c +++ b/drivers/iio/light/opt4060.c @@ -302,41 +302,23 @@ static int opt4060_set_driver_state(struct iio_dev *i= ndio_dev, bool continuous_irq) { struct opt4060_chip *chip =3D iio_priv(indio_dev); - int ret =3D 0; -any_mode_retry: - if (!iio_device_claim_buffer_mode(indio_dev)) { - /* - * This one is a *bit* hacky. If we cannot claim buffer mode, - * then try direct mode so that we make sure things cannot - * concurrently change. And we just keep trying until we get one - * of the modes... - */ - if (!iio_device_claim_direct(indio_dev)) - goto any_mode_retry; - /* - * This path means that we managed to claim direct mode. In - * this case the buffer isn't enabled and it's okay to leave - * continuous mode for sampling and/or irq. - */ - ret =3D opt4060_set_state_common(chip, continuous_sampling, - continuous_irq); - iio_device_release_direct(indio_dev); - return ret; - } else { - /* - * This path means that we managed to claim buffer mode. In - * this case the buffer is enabled and irq and sampling must go - * to or remain continuous, but only if the trigger is from this - * device. - */ - if (!iio_trigger_validate_own_device(indio_dev->trig, indio_dev)) - ret =3D opt4060_set_state_common(chip, true, true); - else - ret =3D opt4060_set_state_common(chip, continuous_sampling, - continuous_irq); - iio_device_release_buffer_mode(indio_dev); - } - return ret; + + IIO_DEV_GUARD_ANY_MODE(indio_dev); + + /* + * If we manage to claim buffer mode and we are using our own trigger, + * IRQ and sampling must go to or remain continuous. + */ + if (iio_buffer_enabled(indio_dev) && + iio_trigger_validate_own_device(indio_dev->trig, indio_dev)) + return opt4060_set_state_common(chip, true, true); + + /* + * This path means that we managed to claim direct mode. In this case + * the buffer isn't enabled and it's okay to leave continuous mode for + * sampling and/or irq. + */ + return opt4060_set_state_common(chip, continuous_sampling, continuous_irq= ); } =20 /* --=20 2.52.0