From nobody Fri Oct 2 08:25:49 2026 Received: from mail-ed1-f42.google.com (mail-ed1-f42.google.com [209.85.208.42]) (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 E329638330F for ; Mon, 3 Aug 2026 12:15:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785759362; cv=none; b=I/AyAYc/s9Vr6q4/N/7R0ODfxtA/TnCM7bDTxwdxG6jVkYMqlehQOVMYWLge34PQ+G3Ysgc0HQWtX0Y1lPq4CKWomdw26uyZFJuXCAMiUfgRv+mli6hYaoXlf9AFIR8pU85boGcvnJ71ZMXmvbaqqvXVdsCzNHLXbmhkJfWX4aA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785759362; c=relaxed/simple; bh=YM8dfmlqxShxjvZGqRGiSNpTyF4I8DQHGxMXfAniN4Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=u1r51MMPEfYt4cBLwIi2IVgkxuMh+BRGZifJwp671Eo3aMm9X2OFY44pIGA+jIkeDe31z9wYNEwpmInIZTe+upYNMo9bv+Qcm1f0QgMfHcbY84WEyv+zFbXtnxj26t/vsInOcrd+Xje2Lf9RMI7XBHbVEhM7Sac2kHfk/WwpYFU= 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=JS6978ZK; arc=none smtp.client-ip=209.85.208.42 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="JS6978ZK" Received: by mail-ed1-f42.google.com with SMTP id 4fb4d7f45d1cf-6a0a0466d12so4461783a12.0 for ; Mon, 03 Aug 2026 05:15:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1785759358; x=1786364158; 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:content-type; bh=kDNUtFHnwjFHImwGnadLZYX2nGq1XShrI3jQKtCkmMY=; b=JS6978ZKztqR1vfVlEFeKvPCkbf1NMAN4/jSAUX0KpSh2U9v3aSJ2s5VfrcrzWjCUI ybIznLiZ4EnQ4lic8tnm0EOJB611cIvELsYGp/8RdZsw10cUqS0vbeJFUY18vwzNddgU vrDn4j4cqe3MFaxHijRor8v+gSP9vFWMGwo+T+bG1jxS7YlYA2OI+up1W+PqCDC+drQb 28yNsOgBGgsAhOGvxoIbEAzJ82iM3mXNWyeJ0JLIQ69T+wTThVm2dvGn7eH5TuGLm7z9 lo1Rp8USPCZbxWg+FTqZKGDZKbPvIw1D5G5SeaxRhQaJjKoqRG3S4mZQE6PfTXxqdUgj 2ygg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785759358; x=1786364158; 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:content-type; bh=kDNUtFHnwjFHImwGnadLZYX2nGq1XShrI3jQKtCkmMY=; b=Eq3x9FnmQzYJmlMuK9JvkNZEkOiBwXxdLLbYj9YNmFdoGxWr8EOzeN14H5q20XQY7C OFxMsyCEZtu23ELc/4nxwFzgEAM6cxv2e3xs97w+Zg/U8yLKYaC1BRFgygkaY+PXAevQ TaFZelNsnWa3/wiYwSkg2nKg5FtHJJQwnUUlCbGtLncrf7lhPbsFGq3r6j99VJ+1ozdE +Bu7lb2WQQei9Qfmc9m3AgherDBKWCk2RRfdvPZqa3huM8n5F8NnXsdX7gJ+J8Jk8smg 73tvQytkCCXvTBvgMF/DJ5Bzynz5gEZr/tW3qCp614Y/cyjrAIx9ps8OGM7+KuavpAr5 k6UQ== X-Forwarded-Encrypted: i=1; AHgh+Rrg3MeUZXkznNZhx7ynGookopjGNL+VqrdBopQLntH2IwNrtQo2vilepn+U09UsWBbWiD5Sw1oM84yFOik=@vger.kernel.org X-Gm-Message-State: AOJu0YxjIkGxusmFwQ+DfeFMpl4hpnrdS/dl/eKDvUWJoPg/z4edFod5 EhBG5GazCKv23kUGO79uAAEeHOGj0nrfNn7yV4at0nYOcFuMNTBAzsdG X-Gm-Gg: AR+sD11UC6tlXtgsqmb5cbCHqNGOTyj6lVOvpWOrcyYgIPtDL7OlgdMreI4Piu6RtGz QTCeXmPg9AYzDYkJ+nSI0jPmUB/LyVrGhW0dC4tJtacPyvzx8TD575TR4QlXfJ0gx2Le90kodKM I+1H7JjN5PlSrG7vrGCXXZRBmWBTVSr492PfmW4B3MX/1DmPMCkvPMx/N/VU+JfiHMPa5QSOBaZ 0yakYzksQwBYOj6ToTTsGOZQqdug3kdNf7x2y6uvNE5OdMDP4s544h52Erz4mRWHaffWm7S1P1w lgi/93/pmuePv78+FcdmM15ca9QE1Co21uo5xZQ5wEk89Wiep23Clq4owhyiWKT5iEIpz3Gr1fx Bv49tUrBs3fLg8bVUPvd/hyeksme3lyVfbLXbNvZRJ7LDgyHqaiAO2YiirHpebETyeGz5TCobGt 3ZSm0csP75MOyU6tBlnSaRmNffslDmv3AeJedG6+x5BSQW5OK5zpOBnJzRQhEFE+OIcWg/GVX+k 0Q3N/I4bw== X-Received: by 2002:a05:6402:569b:b0:695:4916:b97c with SMTP id 4fb4d7f45d1cf-6a09ae1328dmr6235483a12.8.1785759357696; Mon, 03 Aug 2026 05:15:57 -0700 (PDT) Received: from fedora ([154.182.126.98]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-6a09c655626sm6175963a12.22.2026.08.03.05.15.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Aug 2026 05:15:57 -0700 (PDT) From: Abdelnasser Hussein To: jic23@kernel.org Cc: nuno.sa@analog.com, Michael.Hennerich@analog.com, gregkh@linuxfoundation.org, linux-iio@vger.kernel.org, linux-staging@linux.dev, linux-kernel@vger.kernel.org, Abdelnasser Hussein Subject: [PATCH v2 1/2] staging: iio: ad7816: serialize ad7816_spi_read() with a mutex Date: Mon, 3 Aug 2026 15:15:19 +0300 Message-ID: <20260803121520.6274-2-abdelnasserhussein11@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260803121520.6274-1-abdelnasserhussein11@gmail.com> References: <0bde2343-8a70-44d4-9b27-8ce42c099309@baylibre.com> <20260803121520.6274-1-abdelnasserhussein11@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" The ad7816_spi_read() path performs a sequence of SPI transfers and GPIO state changes that must not be interleaved with another read operation. Without serialization, concurrent callers can interfere with each other, leading to inconsistent device state and incorrect data being returned. Add a mutex to struct ad7816_chip_info and hold it across the entire read sequence to ensure exclusive access to the device. Signed-off-by: Abdelnasser Hussein --- drivers/staging/iio/adc/ad7816.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/staging/iio/adc/ad7816.c b/drivers/staging/iio/adc/ad7= 816.c index 0e32a2295990..b5a0c2871e00 100644 --- a/drivers/staging/iio/adc/ad7816.c +++ b/drivers/staging/iio/adc/ad7816.c @@ -50,6 +50,7 @@ struct ad7816_chip_info { u8 oti_data[AD7816_CS_MAX + 1]; u8 channel_id; /* 0 always be temperature */ u8 mode; + struct mutex lock; /* protect device state during SPI transfers */ }; =20 enum ad7816_type { @@ -67,11 +68,14 @@ static int ad7816_spi_read(struct ad7816_chip_info *chi= p, u16 *data) int ret; __be16 buf; =20 + mutex_lock(&chip->lock); + gpiod_set_value(chip->rdwr_pin, 1); gpiod_set_value(chip->rdwr_pin, 0); ret =3D spi_write(spi_dev, &chip->channel_id, sizeof(chip->channel_id)); if (ret < 0) { dev_err(&spi_dev->dev, "SPI channel setting error\n"); + mutex_unlock(&chip->lock); return ret; } gpiod_set_value(chip->rdwr_pin, 1); @@ -94,11 +98,13 @@ static int ad7816_spi_read(struct ad7816_chip_info *chi= p, u16 *data) ret =3D spi_read(spi_dev, &buf, sizeof(*data)); if (ret < 0) { dev_err(&spi_dev->dev, "SPI data read error\n"); + mutex_unlock(&chip->lock); + return ret; } =20 *data =3D be16_to_cpu(buf); - + mutex_unlock(&chip->lock); return ret; } =20 @@ -359,7 +365,7 @@ static int ad7816_probe(struct spi_device *spi_dev) if (!indio_dev) return -ENOMEM; chip =3D iio_priv(indio_dev); - + mutex_init(&chip->lock); chip->spi_dev =3D spi_dev; for (i =3D 0; i <=3D AD7816_CS_MAX; i++) chip->oti_data[i] =3D 203; --=20 2.54.0 From nobody Fri Oct 2 08:25:49 2026 Received: from mail-ed1-f43.google.com (mail-ed1-f43.google.com [209.85.208.43]) (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 B3EB240861B for ; Mon, 3 Aug 2026 12:16:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785759368; cv=none; b=W0jdA4x37uJ/Gu8sCeD8Du9JkJ/rlg0fnSa3MnzXzmqIooJxjfOjlJTaPKmcyqntS+/jWoCnnw/LHFJkh56olsSK7yYW0WpbByVDB73iI0tJ1MtXen0M1ODPjXvZEAEHtJIeFcfswQEE/14ZjdaYNMosnz3edb0WKZvoEL2j+Fk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785759368; c=relaxed/simple; bh=KbuAVltrdpgoTAsog3bNgHW9HPKgi7jzMUcqoyvahh8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=lGxRbRna+6HaDl+XmYsjSulHBhuSYbK1Uxmb7QtL2PSapgdtkRH7gUcnzuFHKG9kLouaszIOMnJeWKp2fhbJbV7wiJiXSPJzTBtDu1iv91GXNdOn9N/d48cGi1iEZmC+tOsEL3st9Iz9cWwNHtgNyObDkwsOBXyDHLMnqmXmWSA= 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=W+b1GaYn; arc=none smtp.client-ip=209.85.208.43 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="W+b1GaYn" Received: by mail-ed1-f43.google.com with SMTP id 4fb4d7f45d1cf-6a0ddef4e35so1538868a12.2 for ; Mon, 03 Aug 2026 05:16:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1785759363; x=1786364163; 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:content-type; bh=0KbS3mbw078LtlagODYtZipKV9fmkHUKkmrW3T3OnxI=; b=W+b1GaYnznQL0V4rTJ0bA/FzRSVg8igJ3RLXAZElUC9TQm/anFo69jlGTdr4KIuQKb hSe7WlTEiiF6Ri0S//SabXU+1toDP7e1GyMrwV4f+xAbs1JTLfOGfPgKTRNSpJkasaAQ oseEg4TyXk911WclY6KPAobx5cBtMA9Xrmrns0/5xITern74ItG23HYffRJXkhF3XJuk yX3gbVxI2PWjZ7eFbwfhoVs3H615xGrKafOne2/IHtFQcssfC4MkQQCEVaGSX1m3N6SE +mvjcwYjoFHJBeqDz3dR54cmk4wTW10K3ldUMeAFu5xeSfwxbGBfgEY0WKOWSNozgMTR m9QA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785759363; x=1786364163; 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:content-type; bh=0KbS3mbw078LtlagODYtZipKV9fmkHUKkmrW3T3OnxI=; b=XhvEI5kbzprTSwvYrNyR9pi16dPtKhWm0h3NXjQpj92dMuGcHIovRUsYWKWdEc/+Xo wS4sdNCv4poQrsKIk9SFxS4zm9sGTSxTIb5kRm/NHtCM1+fownO9sJL2njgw0uQGt9OX bG5Vaa9C3fMSWq6zWOvVr3P20ARE5qVsOGUuMyMb3TJBxCHauqDjra12j1BvDIHLBi6V hVkDFJxLKRtLeJSpBpiZ7VQ6St2B23/pIIa8EQRMnbnaqLh4aNI5Yg4fGh8LQyC098CM KL6Vt8A2AMkjo3DduPr6P8XI7XnZRDri1RjfDULSOwxv54ygz5PK7pIUGlx6k1LfLh7B 5TYQ== X-Forwarded-Encrypted: i=1; AHgh+RoF/F24ev+tlYFF3vz0mIcDdju9NSS+Qj9RS9EVjIy6PuMvPo9lno4RwX2VKoB357kFhLXP0yXA+OBmqm8=@vger.kernel.org X-Gm-Message-State: AOJu0YzRSBKOXeS74sea7tj/1zsX+bCfAlY+KBeiUUzjlCL2sF68I0pK wdybe+Md5jIRc0FHmKUGokaifDCHZuGCoy3a3IqZtlcVDxciRaqfAeqJ X-Gm-Gg: AR+sD10JqkY8tl1r+vif+rlh4jPHqrkF8h23iKhKDjZnsecuNXexmzH2+GnP4wsDsZW 05Zxl+3QPQEWturDFdVykonBJGPWTnN+dBysEIXxN5Oyh7Vw2nwzj7zZO/Zt/VN/V/5ZRR5O43a LLhyvYxp1+p+yXF7KJfBuBMNzT3ZMkFRZcMDDfvdhvd60gebgqv7EkOO5WcZzQdyPdW5EEBEMQE YdX8TIAxBSZFr8qLO3Y60dTPdaBeBve5VUt2iu2PI5ZkaDKxmoUmdEu4Kujyt0Pi5xnGgxm7EMv eJf3pF7RHes/fhisV/lfLmOyBMEjnUQNhWdnlaUlXA5rYjVPeLzO3QSG5KvnRnxiobG3znKHpgx M6GpjTURxYQ3MtFKjgEP6J/kGERE2LCArkrCnt38qlS0jBCNtfOgUsMTroQ7J7fKH5ajwff1Jrp wFsl4OMnJurbq2SrcJOLnnqVO+Y2ZP5xUhwhUM1UVBxGn6D5bNlM5HT6917CzAry0Dp+vbOPX2p Kcqhcoz1IuQDLQ/nhLd X-Received: by 2002:a05:6402:378a:b0:69a:928:9405 with SMTP id 4fb4d7f45d1cf-6a0a7c60e9bmr7134857a12.1.1785759363194; Mon, 03 Aug 2026 05:16:03 -0700 (PDT) Received: from fedora ([154.182.126.98]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-6a09c655626sm6175963a12.22.2026.08.03.05.16.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Aug 2026 05:16:02 -0700 (PDT) From: Abdelnasser Hussein To: jic23@kernel.org Cc: nuno.sa@analog.com, Michael.Hennerich@analog.com, gregkh@linuxfoundation.org, linux-iio@vger.kernel.org, linux-staging@linux.dev, linux-kernel@vger.kernel.org, Abdelnasser Hussein Subject: [PATCH v2 2/2] staging: iio: ad7816: avoid DMA from stack in spi_read Date: Mon, 3 Aug 2026 15:15:20 +0300 Message-ID: <20260803121520.6274-3-abdelnasserhussein11@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260803121520.6274-1-abdelnasserhussein11@gmail.com> References: <0bde2343-8a70-44d4-9b27-8ce42c099309@baylibre.com> <20260803121520.6274-1-abdelnasserhussein11@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" The SPI transfer buffer is allocated on the stack, which is unsafe when the SPI core performs DMA transfers. With VMAP_STACK enabled, this can lead to DMA mapping failures because the stack is not guaranteed to be DMA-accessible. Move the buffer into struct ad7816_chip_info to provide storage with an appropriate lifetime for DMA, align it with __aligned(IIO_DMA_MINALIGN), and update the spi_read() sizeof() argument to reference the relocated buffer. Fixes: 7924425db04a ("staging: iio: adc: new driver for AD7816 devices") Signed-off-by: Abdelnasser Hussein --- drivers/staging/iio/adc/ad7816.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/staging/iio/adc/ad7816.c b/drivers/staging/iio/adc/ad7= 816.c index b5a0c2871e00..c58a6bf77020 100644 --- a/drivers/staging/iio/adc/ad7816.c +++ b/drivers/staging/iio/adc/ad7816.c @@ -51,6 +51,7 @@ struct ad7816_chip_info { u8 channel_id; /* 0 always be temperature */ u8 mode; struct mutex lock; /* protect device state during SPI transfers */ + __be16 rx_buf __aligned(IIO_DMA_MINALIGN); }; =20 enum ad7816_type { @@ -66,7 +67,6 @@ static int ad7816_spi_read(struct ad7816_chip_info *chip,= u16 *data) { struct spi_device *spi_dev =3D chip->spi_dev; int ret; - __be16 buf; =20 mutex_lock(&chip->lock); =20 @@ -95,7 +95,7 @@ static int ad7816_spi_read(struct ad7816_chip_info *chip,= u16 *data) =20 gpiod_set_value(chip->rdwr_pin, 0); gpiod_set_value(chip->rdwr_pin, 1); - ret =3D spi_read(spi_dev, &buf, sizeof(*data)); + ret =3D spi_read(spi_dev, &chip->rx_buf, sizeof(chip->rx_buf)); if (ret < 0) { dev_err(&spi_dev->dev, "SPI data read error\n"); mutex_unlock(&chip->lock); @@ -103,7 +103,7 @@ static int ad7816_spi_read(struct ad7816_chip_info *chi= p, u16 *data) return ret; } =20 - *data =3D be16_to_cpu(buf); + *data =3D be16_to_cpu(chip->rx_buf); mutex_unlock(&chip->lock); return ret; } --=20 2.54.0