From nobody Sun Feb 8 17:36:17 2026 Received: from mail-vs1-f44.google.com (mail-vs1-f44.google.com [209.85.217.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 DB67F3176F8 for ; Tue, 6 Jan 2026 08:07:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.217.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767686836; cv=none; b=YI1IEsevzkuHIfYNBsflNpcyx+YZqz/Ab8upDImHa6nQc2xMvDcVipWTumQxqZxnbJ1AtfIjgDEPTzCMkCS2gF+zY1O7r245pW90b+jyhZ3/hs1Fuhcb1kXP8DMUyYjlYchW39HNT+LJ+ixg8rX7bj8E+Fi7FAj+tucmi/JBBRQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767686836; c=relaxed/simple; bh=e8dx5+Y9ZmFmdYVxk3+rCPDes2YyZRYOQmPuTiqxJtU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=VReHtLx4mveAFFLegihlLQg/dUdNQZkSlwP8QQRX6UcF1rVoY1DvPjqXaA76MP8GgkkzKiq/qoJaPMcUk5T7KNVzI2PKIwpo+/NawLFscxENbdtDseE1+o67D5HN5xtowbiz6iVsKWr+L+WkrPneUWE5smw4cfFdDrWgJbLont4= 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=jSZ2NtGm; arc=none smtp.client-ip=209.85.217.44 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="jSZ2NtGm" Received: by mail-vs1-f44.google.com with SMTP id ada2fe7eead31-5dfaceec8deso441551137.0 for ; Tue, 06 Jan 2026 00:07:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1767686832; x=1768291632; 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=0eBw/siTkOPKNQywL34hEvRzPDZoJwcT16i1sK8KTFc=; b=jSZ2NtGmvHscxoqven2T0jhQKtYYAUh3i7OcEmuH/dWL6XcDDKFJkSaq2aRdReVGv7 7uwfbRZVZVZuIGIwBaLFJ1OnzxQ2Jo3D68sCNXOgZGBgvqpj4LGIY5M2zBIzu7v0kAh2 KHPkSovbjLHHM7Hc/MmHyGNp/lLU5IFbZ3z8G5T6Nc/MKa99Cn3lwa1C8j7Awx0JYI+X UaP04ICZ54oB06VuL11GGSqhcidT02VRZbab2zaMTmcge1/sEiJKjGKppwIudy4Ph4sR NDTQ0n8ZODrgd+CD6VpEbjzVzeNNRhKiLD5mwOQ5/yXb5Pqy8tLJpNhgNB8FaSoQ1inn yq+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767686832; x=1768291632; 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=0eBw/siTkOPKNQywL34hEvRzPDZoJwcT16i1sK8KTFc=; b=jYV3R+vy3Fi+/QQXkxebq1D42DLCOwHrLyu8mBl+UtI4xVl7U2iiks/9CqtRMcd499 MDnfms65fv4qmcZ2u5iRrS31zjqGAX3f2WQ5FDNJKhsko4f0r7uoOaVF3FMUE9ynU6dy INIJ8bvVH5H1bOzE//2IBkON6WG43EDFGnHf+k+5O0tPIZRzFWGYG3B8yHQP9muYc1GC 5ufbSh+/VDoTfkvNGXwHhjfdWlNrtJ/l4O3lVh486udMO9rRad4TRSf73f3+3GzueKN1 tPGKZfDFrE4DYud7rb8htVS8Lv+vNaZoq1KMnfWoaiv0usr0Q+mrOysHM2i6DO9GVwBB PBWw== X-Forwarded-Encrypted: i=1; AJvYcCU4A1NUFTTVQv8tsN1mdYohfoMevRVhYq/FVR6vVUzT0BoyoNKftuo1cZFVTGOg3VHGHmokiBoB7qOT/tI=@vger.kernel.org X-Gm-Message-State: AOJu0Ywsn7Ls9nNpJFQKFsQRaEZaONxlQYQ1mPd7Aqiw1EDMr2G3cWPP zWwVgp4u8WpAzC7OJQNsrMhqeqW12RKYPRQHsdbiYUT/w5FF9gphHXnw X-Gm-Gg: AY/fxX4ka7Dhk9uguGWxsf52PUF4O2P9SgUIYxvZVF0zpjKxwsrOa8YGS2TVp3l+rJ5 uf3F2EV8m9Sfp3pgjysrftAMNaJl6LapGZowd28fA+2P9MoQ9EMKS97s/K3IGP+lYUFumllQImV 4G0vb+Z/bNSzmTe+vXsCkZBn3XLP1YAmzxwgwU/toWDvXLblG9he/r2cxjuWl1ZVCQfeNOEKeei 3NyVCqKgWirhZJy1HOaz8AZS/E7AD5h1BUFaixAw457cJi9/Qmp6kqDfkFsGsr4IiIPq9NXfeDt k/b695wkoBJ101xgcxzPz6BXGg+5pHaOdzH72W29q4yik5G5t24Apr7oaeomHXABz1Qtp04+QiI zh1Hhzc9ao+nWaQVoUP2YTSD8tnbaGE9NClGFYyUPY5uTn+iGduX1xgoed3xPmMCFq7LmgmewAU tbxrUu6qk2JRDJ X-Google-Smtp-Source: AGHT+IHHKonWi1vsrR/n1XZBjsbDP55NV5Xe9+c0ckwEjkAwo2rnLjn1/pCor3jNViJDrOIb50kazQ== X-Received: by 2002:a05:6102:2b92:b0:5dd:a0bf:8c89 with SMTP id ada2fe7eead31-5ec755c2d49mr614154137.7.1767686831757; Tue, 06 Jan 2026 00:07:11 -0800 (PST) Received: from [192.168.100.253] ([2800:bf0:82:11a2:7ac4:1f2:947b:2b6]) by smtp.gmail.com with ESMTPSA id a1e0cc1a2514c-944124a3386sm457615241.11.2026.01.06.00.07.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 06 Jan 2026 00:07:11 -0800 (PST) From: Kurt Borja Date: Tue, 06 Jan 2026 03:06:56 -0500 Subject: [PATCH v3 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: <20260106-lock-impr-v3-1-1db909b192c0@gmail.com> References: <20260106-lock-impr-v3-0-1db909b192c0@gmail.com> In-Reply-To: <20260106-lock-impr-v3-0-1db909b192c0@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=2778; i=kuurtb@gmail.com; h=from:subject:message-id; bh=e8dx5+Y9ZmFmdYVxk3+rCPDes2YyZRYOQmPuTiqxJtU=; b=kA0DAAoWFmBDOPSf1GYByyZiAGlcwqqjZwbxqPT+UWyr0W5p1s4jwhOEeBscxXhqeG+P1mNAp Ih1BAAWCgAdFiEEh2Ci9uJabu1OwFXfFmBDOPSf1GYFAmlcwqoACgkQFmBDOPSf1GahEgEAlT9h g6slgdmAiTQIy6zdPTsuhWstAvX3SBgp6nErrG4A/3neXrHJ00Sk5c0p56ySv4ZOG1G6UmX6SPl lz5t/JBUG X-Developer-Key: i=kuurtb@gmail.com; a=openpgp; fpr=54D3BE170AEF777983C3C63B57E3B6585920A69A Add unconditional 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..34867a860a84 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 the curr= ent + * mode unconditionally. It's recommended to use iio_device_claim_direct()= or + * iio_device_claim_buffer_mode() pairs or related helpers instead. + */ +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