From nobody Mon May 25 04:33:58 2026 Received: from mail-wr1-f53.google.com (mail-wr1-f53.google.com [209.85.221.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 5515338239B for ; Mon, 18 May 2026 18:11:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779127889; cv=none; b=CCyKaDOSu98KaXZ5lJMIJpqsbnbhCBx5AVY/F/SjCSTUXCBhBzQkfmwDIjX8Q+Kjnf7B+rpKPu2K2vhmIctePa01u/NDOVHchBlmPGNdMpYpJkuPQg/btcVGv6AWWI4yz07iZhd1kheqWYhObYUCee0MVY4Ljah8IwtflGIZ8Us= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779127889; c=relaxed/simple; bh=zKR+EqacPdt0290Iim3CCXYJMGml3J82UJUJ42S9aQc=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=ihsxikWRAA+pP1yLgfdHlOVb0Yfm0NWgEB2QocQz6Mvjo3IZ1svjnG6T919jeu2C23c/7chltOXFI1gqG52QFlSizfc51PskBKER6cxaa+WEnWTw4T9ORqHe046hYCj71FIn0uq4ETLtQcgSIlHL0RrbrGpTPrJA/qeEHV9nuaU= 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=sjC9ed6m; arc=none smtp.client-ip=209.85.221.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="sjC9ed6m" Received: by mail-wr1-f53.google.com with SMTP id ffacd0b85a97d-43d7828221bso122949f8f.3 for ; Mon, 18 May 2026 11:11:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779127887; x=1779732687; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=FGsfs0DFjcY+v4OH19XWVNeh3rO+tmY7PUU6YnQMlAY=; b=sjC9ed6ms88Z6rqmg2wBu4CpF2p7xInZRZrMsoRnGI2Zmjxkkcy1AxCCC0gE5dPERh wQ39uBhDwEEVs5Gn+HbwYI1HyV/wjtZj1GNwRokT77miIVtO5gYfB5IylCJACF+i6LZQ 9ae7IyHwmatGy6y12cnIfVjvf7n36ad1y5RA/40InLiSimk+eGOge4RTngbIjgmHSHTp VKvSSiX9sgJx80u5zEkJkC2zKE302cDq1Vm5WfQI/AVQ/JwI/MLfl0houaxdj6KY9ly+ HDQDrbXLGjz4OG3X7Merq5gWbmDNvhf/LlAq0lg3vJP9lh0JCqilyWBMZox1vTcOGEym eiOg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779127887; x=1779732687; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=FGsfs0DFjcY+v4OH19XWVNeh3rO+tmY7PUU6YnQMlAY=; b=S8pLjG/h9zulLBmC2W3zdoOXOjlvGaWptxSTLW36psoluWJl8GPcaIOWLdbCzAyQzL G5Bn7AyxC/N0QMAhjmfAsowLx2XSNC1GHU5OyNaMtUHR9ZjzCOpKLPkekm1oqGkOFaOW zNJsssRiKAbdaIHcjSGeb6zZCDhPR8nmaq590AHMTlgBVo8tQ/bX9jR5rqExf6nvzJ0m YNfxdxiikizTYeqhQ3p8JQzeO9VEhHBQEz/Ke5htKblcIK0F4Olmwib2Q4suhGi7reaD 6I2yhw8gNpnbedBiL/tuDt+jvA0wuu3pSK5tlz0SH6tSqHKXMzhQ2hcDv+qxlEXnthc1 oa4g== X-Forwarded-Encrypted: i=1; AFNElJ+alDBxaCITbzBjcUH5wwIfZHZ5jm7H+0l7XOS88YW+PMc3/dWbnM2BZAQg39h+xe/obG/XXu5NrfnMxIg=@vger.kernel.org X-Gm-Message-State: AOJu0YzVdaKF+RtDEAgtFq8utXm/nG3NW7curEP0mRJwxD/y6RA5JP9Y 4/8fVUp0HS1PLOonQX5yIJAjFMcb9pW/I5Y12glGa1w+JrRLL+kXGcHb X-Gm-Gg: Acq92OGAPdAxe/+ytyVJUfn8ISiOszLXQ6qxlf/vr6RmuXApX7O8OvAcM4G7k9fQSaR NUNZu5F3FHt+OYDVm3+JIIxI2Jn1ZRfS54cVVCCibP1UNWYgrzQWiTAJ7OPWABVH44OHbjSZqGN lZeVhvMcu9NkD5lVPcU1qW/+BH3NCHZ7st+eaxpbEdQh16wWboExVuA/eAou9ho/eWH+8C4q9/C ddPqmEUWucQNqB1h0NVlI5GVGN7cCl+5OrSJMr8WZPgC0YbllDbbmxyRUqj4H/UledOODbMrdOj J1isuNa8hE2qvAj5nKE4gFxwLVaFNq0yJt1+/qfNXy22l8XFL7NwanmIyVFZ1liodO64aoFXTVv zMYfSMfOcP7tbyozerliQCKZsCpbvozmD+6SKTbUvH3BR2D68tPv41Sf8jcnPsKE2Kh99kgd3xA 4qdR3Nv4HbtQKxP6157NyUUXTeE+V+icD+GShExsUxl6as X-Received: by 2002:a05:600c:1f8c:b0:488:abe9:86 with SMTP id 5b1f17b1804b1-48fe631817cmr115722685e9.7.1779127886455; Mon, 18 May 2026 11:11:26 -0700 (PDT) Received: from localhost.localdomain ([82.215.118.79]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48fe5cab7c5sm284281335e9.12.2026.05.18.11.11.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 May 2026 11:11:26 -0700 (PDT) From: Stepan Ionichev To: jic23@kernel.org Cc: mazziesaccount@gmail.com, dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, sozdayvek@gmail.com Subject: [PATCH v3] iio: pressure: rohm-bm1390: harden trigger handler against transient errors Date: Mon, 18 May 2026 23:11:10 +0500 Message-Id: <20260518181110.1467-1-sozdayvek@gmail.com> X-Mailer: git-send-email 2.33.0.windows.2 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" bm1390_trigger_handler() returns from three error paths without calling iio_trigger_notify_done(). The success path at the end does, so on a transient regmap or read failure the trigger's use_count is never decremented and iio_trigger_poll_chained() drops subsequent dispatches until the trigger is reattached. This is not a fix for a reported bug, only hardening against hardware or bus glitches; if a glitch is persistent the device is wedged and needs an unbind anyway, which is left to the user. Split the function so the inner helper returns bool with the data-read outcome, and the outer IRQ handler calls iio_trigger_notify_done() once and reports the result via IRQ_RETVAL(). Signed-off-by: Stepan Ionichev Reviewed-by: Matti Vaittinen --- v3: - Split into bm1390_handle_trigger() helper returning bool, with the IRQ wrapper calling iio_trigger_notify_done() once (Andy) - Drop Fixes: and Cc: stable@; this is hardware-failure hardening, not a user-visible bug fix (Jonathan) - Reframe the commit message accordingly v1: https://lore.kernel.org/all/20260517160801.269-1-sozdayvek@gmail.com/ v2: https://lore.kernel.org/all/20260518094238.1986-1-sozdayvek@gmail.com/ drivers/iio/pressure/rohm-bm1390.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/drivers/iio/pressure/rohm-bm1390.c b/drivers/iio/pressure/rohm= -bm1390.c index 08146ca0f..007c1559f 100644 --- a/drivers/iio/pressure/rohm-bm1390.c +++ b/drivers/iio/pressure/rohm-bm1390.c @@ -621,17 +621,15 @@ static const struct iio_buffer_setup_ops bm1390_buffe= r_ops =3D { .predisable =3D bm1390_buffer_predisable, }; =20 -static irqreturn_t bm1390_trigger_handler(int irq, void *p) +static bool bm1390_handle_trigger(struct iio_dev *idev) { - struct iio_poll_func *pf =3D p; - struct iio_dev *idev =3D pf->indio_dev; struct bm1390_data *data =3D iio_priv(idev); int ret, status; =20 /* DRDY is acked by reading status reg */ ret =3D regmap_read(data->regmap, BM1390_REG_STATUS, &status); if (ret || !status) - return IRQ_NONE; + return false; =20 dev_dbg(data->dev, "DRDY trig status 0x%x\n", status); =20 @@ -639,7 +637,7 @@ static irqreturn_t bm1390_trigger_handler(int irq, void= *p) ret =3D bm1390_pressure_read(data, &data->buf.pressure); if (ret) { dev_warn(data->dev, "sample read failed %d\n", ret); - return IRQ_NONE; + return false; } } =20 @@ -648,15 +646,26 @@ static irqreturn_t bm1390_trigger_handler(int irq, vo= id *p) &data->buf.temp, sizeof(data->buf.temp)); if (ret) { dev_warn(data->dev, "temp read failed %d\n", ret); - return IRQ_HANDLED; + return true; } } =20 iio_push_to_buffers_with_ts(idev, &data->buf, sizeof(data->buf), data->timestamp); + + return true; +} + +static irqreturn_t bm1390_trigger_handler(int irq, void *p) +{ + struct iio_poll_func *pf =3D p; + struct iio_dev *idev =3D pf->indio_dev; + bool result; + + result =3D bm1390_handle_trigger(idev); iio_trigger_notify_done(idev->trig); =20 - return IRQ_HANDLED; + return IRQ_RETVAL(result); } =20 /* Get timestamps and wake the thread if we need to read data */ --=20 2.43.0