From nobody Sun May 24 19:33:15 2026 Received: from mail-lj1-f180.google.com (mail-lj1-f180.google.com [209.85.208.180]) (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 64B9736C9EE for ; Sat, 23 May 2026 13:46:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.180 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779543990; cv=none; b=AAGxxlwPprohbzBlfdKulXQEsTr7xlhw2iw9jB6Xake17J1s3nq8M8VNueMYkZ708/oPjZB4Br0Z0mSDPAJ7hGi02UXhKBiweAmWPxKkXDEJddQpuOFykrgNE/WMLnRVOHIMylsRi6wmwqprT2FitCUe/MiKdSbDAf6z8pOErS0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779543990; c=relaxed/simple; bh=TuoRW0fk8BH8i19fTw4p2gVMYvDPYiQGDUZq51cBrFk=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=bdjdXWutW/s5WCSd7jPJz566Ba/m2q6Snmn0cm1qjaV1uJYNv6Ov7g0j+huzlmKjzAf2bDt467E0vSu6a5N2uYiX1JfrPmInfSwaBP9ReUPGr7cH5dLGvotLIdhqxjzKU36kpmAo0c+B1xF2RITt0sLqN3T97DK9jdMXjdyvU4s= 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=qSnC8s9P; arc=none smtp.client-ip=209.85.208.180 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="qSnC8s9P" Received: by mail-lj1-f180.google.com with SMTP id 38308e7fff4ca-38e7c6a2150so8340911fa.0 for ; Sat, 23 May 2026 06:46:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779543983; x=1780148783; 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=RpGSKCQuP+N7v0JoSz+WqN0/+2XSxcdCYc55wbyxyw4=; b=qSnC8s9PTUWd8vbTdoq+wRbz4TznyrNyOUNsbvPUHqWKUb56uqgXhJfF+3zztJDEgR oSE3IEo3N5cpjAFOT0Wnf50F+fhgFDA43DW0mnoq8enNfimx1/kppWRoJ8dIc/uqI4Og tJlHTJcjAZos6M+daSEgb3bM/otdy4GQgQSjVo7d8gQREPjg/WpgmF4ov44Sm0PMgh98 LS0Jj3cvTSF4D2rIoN9otnyQqbiybjIF0dk3PiLbnqtXmwsyC+ODFXuOZa6GYuVi/N8T Q0/4DYMX1j4I9W1HPJ2wNBJaVscrKZ2RjgBzhvzD/Hj0bwdQsRTxzDJZAfZI7x0xoGYH MbcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779543983; x=1780148783; 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=RpGSKCQuP+N7v0JoSz+WqN0/+2XSxcdCYc55wbyxyw4=; b=YtAHDNMUfmmFKpAgeVMtmEadatTGn6iJ5qmBbPo9IXqNRajvGqRvFOQ8Mg5aL6PiMw svTlzJhpnbQXG47AFtek/z9kQd0dqUc48T4XoGir0+H+/5UrRTLXf2kbUvMAT0hFmU5S 8dnuzcEz/y9+ptgWZWtCE1s5AUkHJftf7q8NrWfoCN+ewHA022l5LB3LMij2nraLoZNh wqnRYbc1oyqfYYQd5xJXfx39Vs0C5vakUx+JE8OpHec3L34FwBkLXlNWg8pPtxhsuAFD D0Fk0fCL52C9bAqPQqDZxlYojTYP2N3Fe3H4WijORtH3FhzMpgkIQ/oRoW7WXJp5ZpYv J/iA== X-Forwarded-Encrypted: i=1; AFNElJ9lRIX4kBbZTK8oA8hmM/eLM+TybpMXjVQ+sBjdyF51X78iv16/QU6iLQsfBBBt4D5263Z0HSOU9FxxHU4=@vger.kernel.org X-Gm-Message-State: AOJu0YzBwJxGZu6YVIJT2BT2d0X4mQXp/stRSGxthul1uCIQvLhlEI6w xIsLsnmvq6zm1QZpz7jDX4xi6xiYc3MBExNvcdKX7Y5QzThTvvnF5IIm X-Gm-Gg: Acq92OHL9soTGVEmNf3cGzwD5WoisBVLoyFBsqyno2CkPiwxcBUr12rMtKj0eqIZRtg vX/aHM/JDP9/Nt8hKu69txdrbf444jPPoVcdIeJ4QFrz3w5Lx1pJIMVMEZbAhp9cRHJg7THp/sf w6HLdZQclvJ6LU48RrUeSRiUFEOlCMkjmHN9DMopRnJUee+cNjzuwF7Ts65vBiwpOyyGKcDPlRG Kx3mkGM3eFvs0VepQihQDK4xtFFKbpXPpsnCzYyceLMICaZc3gJqRD4fccXBU+zQ6CE9geLZLem ANMmPb4n3WdFmDhxRcqN0jWCocWTHzvAfKsJHOIDr5l91+zn0WIZPTzhgtLyZml/FCXO975+wFY 2wvHY6b9kTZtndOuwlq6dvoFHykp0ZMiEpcP2xlYeAfLMNq/5LmbqJr0H2Pu4Dwkzonu7DhzXvi iL2Q6U6VMQyNhO0TTt55q4n/fuiySzioyGwjBmeuTGvFQnuKWMsAzVz5h5NQ== X-Received: by 2002:a2e:b895:0:b0:38d:ed1a:a135 with SMTP id 38308e7fff4ca-395d8d0a36cmr12185891fa.3.1779543982936; Sat, 23 May 2026 06:46:22 -0700 (PDT) Received: from localhost.localdomain ([213.230.112.147]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-395dcc2d61fsm9624941fa.33.2026.05.23.06.46.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 23 May 2026 06:46:21 -0700 (PDT) From: Stepan Ionichev To: jic23@kernel.org Cc: dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, hcazarim@yahoo.com, linux-iio@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, sozdayvek@gmail.com Subject: [PATCH v2] iio: adc: qcom-spmi-iadc: balance enable_irq_wake() on driver unbind Date: Sat, 23 May 2026 18:46:13 +0500 Message-Id: <20260523134613.4930-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" iadc_probe() calls enable_irq_wake() after a successful devm_request_irq(), but the driver has no remove callback or matching disable_irq_wake(), so the wake reference count on the IRQ is leaked on module unload or driver unbind. Check the IRQ request error first, then register a devm action that calls disable_irq_wake() so the wake reference is released in the same scope as the enable. While here, drop the inverted "if (!ret) ... else return ret" in favour of the standard "if (ret) return ret;" pattern. Signed-off-by: Stepan Ionichev --- v2: - Use (long) instead of (unsigned long) for the int<->void* casts (Jonathan) v1: https://lore.kernel.org/all/20260520190924.12774-1-sozdayvek@gmail.com/ drivers/iio/adc/qcom-spmi-iadc.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/drivers/iio/adc/qcom-spmi-iadc.c b/drivers/iio/adc/qcom-spmi-i= adc.c index b64a8a407..88f6be210 100644 --- a/drivers/iio/adc/qcom-spmi-iadc.c +++ b/drivers/iio/adc/qcom-spmi-iadc.c @@ -481,6 +481,11 @@ static const struct iio_chan_spec iadc_channels[] =3D { }, }; =20 +static void iadc_disable_irq_wake(void *data) +{ + disable_irq_wake((long)data); +} + static int iadc_probe(struct platform_device *pdev) { struct device_node *node =3D pdev->dev.of_node; @@ -538,9 +543,16 @@ static int iadc_probe(struct platform_device *pdev) if (!iadc->poll_eoc) { ret =3D devm_request_irq(dev, irq_eoc, iadc_isr, 0, "spmi-iadc", iadc); - if (!ret) - enable_irq_wake(irq_eoc); - else + if (ret) + return ret; + + ret =3D enable_irq_wake(irq_eoc); + if (ret) + return ret; + + ret =3D devm_add_action_or_reset(dev, iadc_disable_irq_wake, + (void *)(long)irq_eoc); + if (ret) return ret; } else { ret =3D devm_device_init_wakeup(iadc->dev); --=20 2.43.0