From nobody Sun May 24 19:34:25 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B6A9A358360 for ; Fri, 22 May 2026 07:49:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779436189; cv=none; b=qNIKI+vtKQd8PrS6ITXmZxX/8u3yYVje9hJ3ltzoKq/+1wuqwxrZIvIFEi8eYWunYxPfql6dBs1h6cdfzYtWmNhPQgCJFeD6751P1EcIEfwSBmqjcFpU0vOZoo9v+xLJpyuylcr2/qQ5H5IqFqthf9tP0ywUga500eP9bsOe+SY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779436189; c=relaxed/simple; bh=l7kaeS3mGOoVOEW2iiK5UOwTHGrPoGsOER+L3RPvz+Y=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:To:Cc; b=LdptXnEs0vcf4RKsuYMb7Yp0U0Dw1Kc+t6wyPLHpwg4LorbCswfJyzJQ546yqy2S+6J7sg3nq/TrJFueAc1YBCGj9T1qwV63un9jfXoUB8pUumcJu83xk7hs7TIE3D56hyvW+Q7PCHxzLygfYPl+vmEX8JUzqzR5UHeasgdXPxI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=e3jYpOTL; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=iXga7tUA; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="e3jYpOTL"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="iXga7tUA" Received: from pps.filterd (m0279864.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 64M76H7L1297965 for ; Fri, 22 May 2026 07:49:47 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:message-id :mime-version:subject:to; s=qcppdkim1; bh=lwQPfvnXgWv/+L4IojXmsU UfCKlKS4NCtApexlElfgE=; b=e3jYpOTLlk4/VbhffE7bxWctpQVC5yUkGeNhlJ 8CvaHWWHUyUJXU9AbYD8ZXUxfTqnFxZmOU03foesFYlvfZ04w83eMbs/fZ72gTpQ Ehk7sYGv7OZDijC2/fMqcPj7OiCr1RntIW9XEh3rDEOfPihlp5AmU5x5/qaArPTl igKCOzi3XkhPQDwo4sc+jM9xdtjy7U2lkhUop08BqfECu8lyIchFD+RmO4EcLBUJ eAgZ83AiiV2YLTipfkE3jD2wXs5idjWHC9f5IY72SzqIPyVRcRNx1wUkKT7UsTe/ oy7FS9u9gQFBynWKLgzWl+y/bDEQyJ0Q4wfA4l7NmuN4+j9g== Received: from mail-qt1-f200.google.com (mail-qt1-f200.google.com [209.85.160.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4eaah09qfw-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 22 May 2026 07:49:46 +0000 (GMT) Received: by mail-qt1-f200.google.com with SMTP id d75a77b69052e-516d19f68acso21107961cf.2 for ; Fri, 22 May 2026 00:49:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1779436186; x=1780040986; darn=vger.kernel.org; h=cc:to:message-id:content-transfer-encoding:mime-version:subject :date:from:from:to:cc:subject:date:message-id:reply-to; bh=lwQPfvnXgWv/+L4IojXmsUUfCKlKS4NCtApexlElfgE=; b=iXga7tUAWVBTZaqewqfU9bBxVyt65fUjke27xZVz2S0wBfKEWSh1Nkz3rwEO5MdBKc COyP312gJlADwl5cp0UhPrX0Jyv5dToFKHAg6ZyMtM98vc8DuWljRXF8wAELh9Gq4nNR iA3kV3+I6eYu7LbeChqBD1X9NZlvMZqCzX4BgNEKR+RDZFiyULDSFUiREcOuyDHvSb5E 73sPHV6SWDV6rKxh3lm21IDb3adLAJK238lTbO4Un3sLBQi6MwHnBeZy6BpT0ChJw8CU 1wmHMquCEO4cb5hfhE6RE08mQ3umdimKy/dhSadM3SXjZZ3cBdT+hBJJ1jzMs4IoB8vu 6naA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779436186; x=1780040986; h=cc:to: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=lwQPfvnXgWv/+L4IojXmsUUfCKlKS4NCtApexlElfgE=; b=FvSB0hSlImKfpRIM1Tae/Z1dEmGWWWlmTgxJQv3hp+ar+V5b8xCoKbTozREWVrrzOn ANQmcV+zEp4zuuKxmy7FQ5OBytY8uC43aI618nRza/+gyYRGM8UNrzI+KOHqPd180CWs Okd7uB75ofAO5hDHqqhXZEUFFv7TlNjsSYzdedAOXj6pBsgIzQ6LR6djZxjG1srehUkG Ze0dKdbW0RuWigbKNK7TaMTZEuqgA8jxDq80Bboe7o2ayjbMTIGBxMzioXRZsvAwhGiq AeQr5T13OoYlmO6xUuW/MnJ3iQkZVlRntJdwMMNTjkydFsFBDpMEPNY4qHgVB7AXIGAf 1NLA== X-Forwarded-Encrypted: i=1; AFNElJ+5DdsFhcdBdmBeiaQh1zCa9E+FuUcJOO2m5VFHshx/0RuD4VbpYpmMyXw3J64ZIO4Mk3h5+lExdyGYUXc=@vger.kernel.org X-Gm-Message-State: AOJu0Yx6X0m/ixMOisWspsDzEp9tcQP8PWHWX77Z5K+UdsQa0sRB4GlM bmA2vTcuHPnxoqev3DL0SbgEQPEJtrkHUGsN6bmxtY08Pdt8QkhM8lPrV4jzgAz99KFY0tcTeMG HW4O39pbR2C7l/yNDbolZ5XdRN/S+CRsHHktM5pnhq345zdVMvQhuw0hRO6V4U5p4pbfzVxr5wT k= X-Gm-Gg: Acq92OGgt4StdeI0egXjNsIaBhd3q+o1TgVujAvo0gO7VVp3MnjLkdjPg93eVnKq7ZA rw7ZPwxPSnWzKCjA8gBl+I7xzEllmShYglHOkqPJS8r1y/OSPlRGKToVL3ATcKycmGinv3EVp7I jJS04h6i6YOfH2MlIVq8kVbwACp3CK+nvdox1KPB9pwyg1YbPvafJtuZDJNUbpzv/i2os5w8NLF hNoInGK0DYp+kzcWYgZGgG8O+9depyFDmmdx9SsTjZO8YE6NWP/F2mH2MF943uQkUwFVnvpCSlK wo8/rwuSltNe8x8AynBGG826QD5RN8S4M+GVlhqthGJJrEv5/YMuPXsCa2cGZqHss9pp8oBAkdH oMXEJTvj95Jf3bNlOYrd/tpj7ia1m7FSyjbwef5Cah+gXdk69Ew== X-Received: by 2002:a05:622a:110f:b0:516:d781:589a with SMTP id d75a77b69052e-516d7815f68mr17380381cf.22.1779436186005; Fri, 22 May 2026 00:49:46 -0700 (PDT) X-Received: by 2002:a05:622a:110f:b0:516:d781:589a with SMTP id d75a77b69052e-516d7815f68mr17380101cf.22.1779436185501; Fri, 22 May 2026 00:49:45 -0700 (PDT) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:2fa:6280:a48f:fb37]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490424aa561sm13175235e9.5.2026.05.22.00.49.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 May 2026 00:49:44 -0700 (PDT) From: Bartosz Golaszewski Date: Fri, 22 May 2026 09:49:35 +0200 Subject: [PATCH v3] gpio: shared: undo the vote of the proxy on GPIO free 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: <20260522-gpio-shared-free-vote-v3-1-8a4fddc6bedb@oss.qualcomm.com> X-B4-Tracking: v=1; b=H4sIAI4KEGoC/4XNSw6CMBCA4auQrh1CH1Rw5T2Mi0Kn0EQotthoC He3sHKhcTPJP8l8s5CA3mIgp2whHqMN1o0p+CEjba/GDsHq1IQVTBYlK6CbrIPQK48ajEeE6GY EIxnnXDXCGEPS7eTR2OfuXq6pextm51/7m0i37T8xUqAg21LUUpYVR3Z2IeT3h7q1bhjyNMgGR /aJ0V8YS9hR16JCbXSj8Qu2rusbkvpaIw4BAAA= X-Change-ID: 20260520-gpio-shared-free-vote-f62333ab4fff To: Linus Walleij , Bartosz Golaszewski , Marek Vasut Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, stable@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2467; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=l7kaeS3mGOoVOEW2iiK5UOwTHGrPoGsOER+L3RPvz+Y=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBqEAqTRG1HZxmaYm7q4oMDavypQFhPok6AjTC/P iRg7XuPSSqJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCahAKkwAKCRAFnS7L/zaE w2v4D/9oop94b2Vz+NG97q040GCmVqo5BqJ23a8ZrkIvDqK5b7krJP8CrfXXdM9cziInNqDkDRc pJkj1kZ9fK4C84rM3Sp4G4O1O+sRbFXA0sYHMCScaF6MaA7hbwAGU5TmbdgvNfkTaFmhmw0acTz Q6j8fNvU412S77ryeQSf4iagD7N7gZngAsNHaSzqDZ1bPqAj23DFC3HbptXY3nn00hgiVA3xk3K C1HpS0ckD1HtvJwXGUzPDSKyTC6qd89jK0ovoWSDT2dOOLaGeaz7XBZO8drArNdB/QHp+DvK/wJ NJHBFyYXiHpG5VWxqeMD8qCF2fEL2AFxU/heJ56ptzys12MQvjIsdPmgpX7Z+ApmZ7RT/CbLHv5 OVc6IrxON4M2QLS4sKNu1ghA2cK3bsq7z+z4HtVyZEh/6JNRl90tWmRCpRPqVd7vo8rqvQ8mmx6 L1mO61cLXPSEKy5Hz92CHULxv/7S0KwWEfK5/b09IKnjaFC4IcUxyQPu3CZ3DiGHY12SOLETxvE cvW57YkiLl+wBMjy+TWIJGaVcuDZq9OGNBVv/GqwiQ9hOEQIrZpCKH05GoFKVY4uMhha/wiWLKp t2YTAd7KU1Z3cZa1gwrKS0vTI3C25giA/uD/94OYOaRguj6wpOEty3i+73aXo5q7mGYHFY9hpUQ erGkJV2FK7Mdfvw== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTIyMDA3NiBTYWx0ZWRfXxqDbA4S+wA7P u6slYqLtKiayV5eJXBDrtB2ZYTmRKsWFhO7ApSxlZrLBQ1HaKh2KA7o0mg2mI9C2vAc5AC5Np7t T2rTrRRyuwW4l4Rf3/FLPkmsnwGSo45wXGANBFLGAZdD47t1nw6vpl4SndUEN3JPTFJF9W3iW99 1WjDEf86BdjikfQ+1AK6ZyQz2X8+gZZnYgDBwVWGLWSEvj0LIJXWWXalzvqI+Cy8WOycyztJlDz l1a5rwzVFE67w0mErAAJFUA7FRQvHEueSWNhPapQCc5w8bgBvese3eGDu/q+6polohLNoyDhliO TVXW1RKox75UhKW8SWU+EIvlVRKI5IZPSrzaGnBE8L1VwRFgmhYJLK3VMr2U74nPnbD7Xt+EowM FSQdRQjqvYYEqABTDIC9ms6t+V4Hj6+w+ihRDGv1/42FprHL0vY8g/0V0XkNZIHLXrTHWOYEVtP r3od9mU/IOc1lmktpAQ== X-Proofpoint-GUID: Cl0AnC2Ur0fIFSYM-0AcB_bdYxL87oEc X-Authority-Analysis: v=2.4 cv=LNdWhpW9 c=1 sm=1 tr=0 ts=6a100a9b cx=c_pps a=JbAStetqSzwMeJznSMzCyw==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=NGcC8JguVDcA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=DJpcGTmdVt4CTyJn9g5Z:22 a=c92rfblmAAAA:8 a=EUspDBNiAAAA:8 a=bC-a23v3AAAA:8 a=VwQbUJbxAAAA:8 a=C00im2qEfLC3rBLg9RsA:9 a=QEXdDO2ut3YA:10 a=uxP6HrT_eTzRwkO_Te1X:22 a=GvGzcOZaWPEFPQC_NcjD:22 a=FO4_E8m0qiDe52t0p3_H:22 X-Proofpoint-ORIG-GUID: Cl0AnC2Ur0fIFSYM-0AcB_bdYxL87oEc X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-05-22_01,2026-05-18_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 clxscore=1015 malwarescore=0 lowpriorityscore=0 priorityscore=1501 bulkscore=0 impostorscore=0 phishscore=0 spamscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605130000 definitions=main-2605220076 When the user of a shared GPIO managed by gpio-shared-proxy calls gpiod_put() to release it, we never undo the potential "vote" for driving the shared line "high". In the free() callback, check if this proxy voted for "high" and - if so - decrease the number of votes and potentially revert the value to low if this is the last user. Cc: stable@vger.kernel.org Fixes: e992d54c6f97 ("gpio: shared-proxy: implement the shared GPIO proxy d= river") Closes: https://sashiko.dev/#/patchset/20260513-gpio-shared-dynamic-voting-= v1-1-8e1c49961b7d%40oss.qualcomm.com Signed-off-by: Bartosz Golaszewski --- Sashiko commented on this pre-existing issue under my patch changing the voting heuristic. --- Changes in v3: - Don't call the sleeping variant of gpiod_set_value() for proxies using spinlocks for synchronization (sashiko) - Link to v2: https://patch.msgid.link/20260521-gpio-shared-free-vote-v2-1-= 7d948edfdbde@oss.qualcomm.com Changes in v2: - When releasing the shared GPIO, restore the value to the "default" low using the existing interface to keep track of the votes correctly - Link to v1: https://patch.msgid.link/20260520-gpio-shared-free-vote-v1-1-= 6c54966583e2@oss.qualcomm.com --- drivers/gpio/gpio-shared-proxy.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/drivers/gpio/gpio-shared-proxy.c b/drivers/gpio/gpio-shared-pr= oxy.c index 29d7d2e4dfc02c34fb3f2abc343ee30b61579b66..6941e4be6cf1871b134c55c0587= 7c9793de52ac3 100644 --- a/drivers/gpio/gpio-shared-proxy.c +++ b/drivers/gpio/gpio-shared-proxy.c @@ -103,9 +103,18 @@ static void gpio_shared_proxy_free(struct gpio_chip *g= c, unsigned int offset) { struct gpio_shared_proxy_data *proxy =3D gpiochip_get_data(gc); struct gpio_shared_desc *shared_desc =3D proxy->shared_desc; + int ret; =20 guard(gpio_shared_desc_lock)(shared_desc); =20 + if (proxy->voted_high) { + ret =3D gpio_shared_proxy_set_unlocked(proxy, + shared_desc->can_sleep ? gpiod_set_value_cansleep : gpiod_set_value, 0); + if (ret) + dev_err(proxy->dev, + "Failed to unset the shared GPIO value on release: %d\n", ret); + } + proxy->shared_desc->usecnt--; =20 dev_dbg(proxy->dev, "Shared GPIO freed, number of users: %u\n", --- base-commit: 687da68900cd1a46549f7d9430c7d40346cb86a0 change-id: 20260520-gpio-shared-free-vote-f62333ab4fff Best regards, --=20 Bartosz Golaszewski