From patchwork Wed Jan 10 20:32:13 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 187063 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:2411:b0:101:2151:f287 with SMTP id m17csp1039598dyi; Wed, 10 Jan 2024 12:33:05 -0800 (PST) X-Google-Smtp-Source: AGHT+IHNjDMJ/phR5EAb+6Ox4UFTGuaFDJY2JNT6uS+o/KKb1zMn3URnJoAgYwcDoZRbfWlVxFHL X-Received: by 2002:a05:6512:3f1f:b0:50e:5958:5045 with SMTP id y31-20020a0565123f1f00b0050e59585045mr5676lfa.22.1704918785270; Wed, 10 Jan 2024 12:33:05 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1704918785; cv=none; d=google.com; s=arc-20160816; b=KhV4IlOvxZvHofL8kGksfcp9sGiA7S/qBcJiuaJNehCCHJpVONmTiyrFFnwKuUE5Y9 IOji8gD842TZtHuHoqQpl18OkfHxFXhcK3h+UkOGPBAQXauJYgE4lV+93SowjNupGKl4 zjkWQsoUQXY4mtncLwO937B24e83QsThMB95jicnVmswWM/Ri61aBBRnJHPHmAHrhcJz aYq4S6T+zTHpNQVu24ylF6klfJKQSKLwo7jK95gwyIH9UOBlTx+7+VNUyn5RO0xTNS/b LqM7rpikEH7M2WpnXPBkrGN4aIP+qx/0HOEu8SqOxXveM8ay6rEKgT53BcU+mZkRzpLM dNvA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=S4/ezTEXd/AGBE5ik3GQsGbwKaC7ixzvP0QmPnIVxHs=; fh=4Et3A3d/CmPDQNXnDp/H49oAPo7NtW+P4dEA5HxfSA8=; b=zKf8MQFGWKK6swqvycVZvCNGGc0x2rnxd8CGQHncDsGYj9VaPKHogIEMXPV0bry7gv 824KwWt+arCl+lK3TN63Sx1Lk57TwHu16hB06Sgx5FgA1qdNZD+SD/K1+u35l2xUxpWY PzDDF9HUa1sotrgOT2il8hGHsGQw25pgwqeCzDriwHnW8lUCjRRWWLW14r2hSJqIOiHr ZCiE245JJ8i6rQZ+hA0rLBha6uKEfrNHVj0zkpHkI/RGZ6Jr5pHH7yzEgBItTIdMg1vb jwbj0xozHFjDq4dhR5BkAiVUgGhSJ/uFlHebbLsNFRfw4pEvZWF0B1RaBRpQSy4+mgye ltWA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@bgdev-pl.20230601.gappssmtp.com header.s=20230601 header.b="Vs9z/HE+"; spf=pass (google.com: domain of linux-kernel+bounces-22733-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-22733-ouuuleilei=gmail.com@vger.kernel.org" Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [147.75.80.249]) by mx.google.com with ESMTPS id z14-20020a50cd0e000000b0055368d170dasi2049994edi.296.2024.01.10.12.33.05 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Jan 2024 12:33:05 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-22733-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) client-ip=147.75.80.249; Authentication-Results: mx.google.com; dkim=pass header.i=@bgdev-pl.20230601.gappssmtp.com header.s=20230601 header.b="Vs9z/HE+"; spf=pass (google.com: domain of linux-kernel+bounces-22733-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-22733-ouuuleilei=gmail.com@vger.kernel.org" Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id D89881F230CA for ; Wed, 10 Jan 2024 20:33:04 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id CEF7D4F60B; Wed, 10 Jan 2024 20:32:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b="Vs9z/HE+" Received: from mail-wr1-f51.google.com (mail-wr1-f51.google.com [209.85.221.51]) (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 C80A84F1F8 for ; Wed, 10 Jan 2024 20:32:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=bgdev.pl Received: by mail-wr1-f51.google.com with SMTP id ffacd0b85a97d-33678156e27so4083817f8f.1 for ; Wed, 10 Jan 2024 12:32:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1704918750; x=1705523550; 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; bh=S4/ezTEXd/AGBE5ik3GQsGbwKaC7ixzvP0QmPnIVxHs=; b=Vs9z/HE+Iml7oygN16KpVcLUD5nh3xPNOH4zCK/oqxz+gbqVU9g1d2F/JZLszjYYet xiPC99nhFAcUDyq5M0+3zmH3LbTUDGkaZZPukzeWY+vcLskJxvC5b/YfX+3NXqOKLFBS JHk3jvW/XGam28Fz6YY0V9GCah8zB4QDBgCI/gqaBvwtlqVtgCAU3i8LinYCIBtdP3Gy L22NFuyW6CPCi/0mOwH92amTrcjiqQUq2IBzFxVQVpfn1yVrRJ9SsDPIcGThMI13qZZN +3ZWz6xNuz7N3ctV8xbOeAGJiL2nMLXBQbUpvjOLFxjYwvy08qt8BcYIwwWkqmOl5o4U zxwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1704918750; x=1705523550; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=S4/ezTEXd/AGBE5ik3GQsGbwKaC7ixzvP0QmPnIVxHs=; b=XOGbmdega2BizlWoqLi9R9FuwDNS8U1ZD2KU8+LsKj+lx6NWksIGOuEtlS3s1FNg/b kChsHQPx/duL4ngjA5SxJU+avpl279cV1oKupJPAUFAi/PmUfc2t0A/odxzac7dZ88Vo XJwQwmtvjZHVbwJAewc03b3jBSheXAahoEprCS96qLRRMGApy+6tYSTCEjSE+HUSs5Z0 8bgJCx/fgU0B0N1fPezZCMndjFZPDJuEFMFYY995uY/wV/Q7BQc5yCe+m+5/HiZ/2ULq vW602tGfDGHbtM64ZUBfVSI1sNgintl+O10Kw914yt8Fxbp8rfqezce1g0R6ehhvDgnO UN0A== X-Gm-Message-State: AOJu0YwWnVgxDr7Zqi4PoMlwOsLZ/5UZbXtfdwzVZXzYh3zVpRRXGWaO NwQgGHR0suR3OCoAVHZBlQrsbvlfDk0QWw== X-Received: by 2002:a05:6000:372:b0:337:4758:43ef with SMTP id f18-20020a056000037200b00337475843efmr29206wrf.66.1704918750199; Wed, 10 Jan 2024 12:32:30 -0800 (PST) Received: from brgl-uxlite.home ([2a01:cb1d:334:ac00:3342:1411:3dd8:cb70]) by smtp.gmail.com with ESMTPSA id z17-20020a5d44d1000000b003377e22ffdcsm2072172wrr.85.2024.01.10.12.32.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Jan 2024 12:32:29 -0800 (PST) From: Bartosz Golaszewski To: Linus Walleij , Peter Zijlstra , Ingo Molnar , Will Deacon , Waiman Long , Boqun Feng Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, Bartosz Golaszewski Subject: [PATCH 1/3] cleanup: provide DEFINE_LOCK_GUARD_ARGS() Date: Wed, 10 Jan 2024 21:32:13 +0100 Message-Id: <20240110203215.36396-2-brgl@bgdev.pl> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20240110203215.36396-1-brgl@bgdev.pl> References: <20240110203215.36396-1-brgl@bgdev.pl> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1787736920069316670 X-GMAIL-MSGID: 1787736920069316670 From: Bartosz Golaszewski This macro allows defining lock guard with additional arguments that can be passed to the locking function. This is useful for implementing guards for nested locking. Signed-off-by: Bartosz Golaszewski --- include/linux/cleanup.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/include/linux/cleanup.h b/include/linux/cleanup.h index c2d09bc4f976..921db45023bb 100644 --- a/include/linux/cleanup.h +++ b/include/linux/cleanup.h @@ -246,5 +246,11 @@ __DEFINE_LOCK_GUARD_0(_name, _lock) static inline void * class_##_name##_ext##_lock_ptr(class_##_name##_t *_T) \ { return class_##_name##_lock_ptr(_T); } +/* + * Helper for implementing guard locks with additional arguments passed to + * the locking function. + */ +#define DEFINE_LOCK_GUARD_ARGS(_name, _type, _lock, _unlock, _args...) \ +DEFINE_CLASS(_name, _type, _unlock, ({ _lock; _T; }), _type _T, _args) #endif /* __LINUX_GUARDS_H */ From patchwork Wed Jan 10 20:32:14 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 187064 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:2411:b0:101:2151:f287 with SMTP id m17csp1039771dyi; Wed, 10 Jan 2024 12:33:24 -0800 (PST) X-Google-Smtp-Source: AGHT+IFOHnHvJhQ8PBiWT2inpNMr9ro/x4zDCCH3k3+eRDClxQ6xpgy+o4Rm48US8179mE2rjqJO X-Received: by 2002:aa7:8a07:0:b0:6da:3f97:ff20 with SMTP id m7-20020aa78a07000000b006da3f97ff20mr167619pfa.25.1704918804509; Wed, 10 Jan 2024 12:33:24 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1704918804; cv=none; d=google.com; s=arc-20160816; b=m+fx7Zxo854RYoBO0ChZOWRopAfw7Pv1EjNgAdTcum8RUklDyOavt8au8qEuPpjd8e q4C1N2S+3v8uPR3B3j+LwZmTSvAueZ5OTWBV+OcSx3L9GQKms/0+oRCe6F7r+S5/+Zcw r2Plap54GXEdo9fTnwnFw4Z3UODgphZhJmqHk5RpEteSFG+pQE4ezlHx/yUI0ajZp2XB 0Y5nJ/RdyomP5DvcJmw+nGE6q53HecbBt2nswhZzcmLmWuupaPFdqQRtdtXbd4qrnvT0 AszgwXqadkFxg1Xwpwe49hZsNR9kD431vvuYFMVembqI76MWxEPhsaduiRz0/+w1kWcd Lrvw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=jEdTJOXkqBku2qR0TKwyio+JuDhgwS/A5uq4+eCSKZQ=; fh=4Et3A3d/CmPDQNXnDp/H49oAPo7NtW+P4dEA5HxfSA8=; b=uLukG3jbXVBa8K76klKPs9eJmh4DGEq4795w7pvQbejf/1SSrvRVXNBdrl0YHjbmTM Uvljw5mg7QpzsgjtyrXX5UlxBBdyF48DfzgyiVZRsx/x7NguZg1JZaim9OCf8KKsBkR0 /o+W7XBKLmd/gL+wvTjxA6pN/syYdaT8JKw9DcgL7eak75X+Ndzup5EkXRz9xWYUb+Mg ahYUGFfsTNTO1ftSt+4kL+eUPQnT295DlGqEC3iZ71k99WSR5Y68RqlmPtlnyQexBicC amXX6tqSKQW26QXzE5TM1bvCWGhHMdgaertExZf1dyGIstGPExFxbbkGsVWr8B9H0tAL ptEA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@bgdev-pl.20230601.gappssmtp.com header.s=20230601 header.b=bcCeQTBW; spf=pass (google.com: domain of linux-kernel+bounces-22735-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-22735-ouuuleilei=gmail.com@vger.kernel.org" Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [2604:1380:45e3:2400::1]) by mx.google.com with ESMTPS id f23-20020a635557000000b005cec84d3ac8si4284846pgm.638.2024.01.10.12.33.24 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Jan 2024 12:33:24 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-22735-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) client-ip=2604:1380:45e3:2400::1; Authentication-Results: mx.google.com; dkim=pass header.i=@bgdev-pl.20230601.gappssmtp.com header.s=20230601 header.b=bcCeQTBW; spf=pass (google.com: domain of linux-kernel+bounces-22735-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-22735-ouuuleilei=gmail.com@vger.kernel.org" Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id 6923E281D36 for ; Wed, 10 Jan 2024 20:33:22 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 1F7624F88E; Wed, 10 Jan 2024 20:32:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b="bcCeQTBW" Received: from mail-wm1-f51.google.com (mail-wm1-f51.google.com [209.85.128.51]) (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 05E814F1E0 for ; Wed, 10 Jan 2024 20:32:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=bgdev.pl Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-40e4d515c9aso33634135e9.0 for ; Wed, 10 Jan 2024 12:32:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1704918751; x=1705523551; 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; bh=jEdTJOXkqBku2qR0TKwyio+JuDhgwS/A5uq4+eCSKZQ=; b=bcCeQTBWfoKOlwG0FkwOzeULj1ZofP2hzqB7URHPeBIIsqPM5GO5XT37K125t9WWZl FCReJEQzF2BKe4bSGiZfXfq7dW2mU/q3SfCD2zGXDvs9VlzJraJG4Ft2DuilwEDnwzn/ j9g7NlzP2VDiCwT4tVl1NFgrvm7rHYJVsnMey0gJavvWgLt3yCcHEn4rPFU0i0FVYI3k rKcSmJrCZSrhS+TBER8HMpSMjDwz3TQuvln4IJee/sTmn71r4Vz5ZpGwkKt+Dc8+l2kY hysjRa0BH1KxRz9Vr6fbv0yWzbExCbYc0aodi1PugV1B6NvzVOw/tPNBxBs6USpSS2HI dcqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1704918751; x=1705523551; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=jEdTJOXkqBku2qR0TKwyio+JuDhgwS/A5uq4+eCSKZQ=; b=sZ2B1JrQiWjULZBZPijGzLGNdgtJgKPAleEMGSRin6/BjKtxVa1dKCQptRfMHya4eE gj9Ar6vKeInKrEEwF4hWhtZcfdpTpQ6fWo4UHS7czivZZtbmSsodm9uFFuna/1nh+Etm jvmNoB1z7AfZ9+3Pa7hYkJJAA3BRuOSNnEYNac8k5e82EAUT0k1eO9akbR3ylPGWnm6i kq+Tz93CIOTtTbFCG632xdYx/45VzsqO8+BGb/1pt6ncb0zJ2t813taUbKGS5PCruFDk /AqaKb03a0vMWvyY3hE7+xKycGLDoXgXDdA+NtH/Bsf3xkZxZk+N286myTdydJ7dWVcs DjhQ== X-Gm-Message-State: AOJu0YyxIihmCDwW0604SbAeH+fYmFm5scntR9KYIqHIrsGr7eCTKRrx PbRwC9c2bybaChWA6UUYxnJ/5gpuq+V1Fie0qqI8zjaUE58= X-Received: by 2002:a05:600c:6c7:b0:40d:9369:697f with SMTP id b7-20020a05600c06c700b0040d9369697fmr904262wmn.144.1704918751227; Wed, 10 Jan 2024 12:32:31 -0800 (PST) Received: from brgl-uxlite.home ([2a01:cb1d:334:ac00:3342:1411:3dd8:cb70]) by smtp.gmail.com with ESMTPSA id z17-20020a5d44d1000000b003377e22ffdcsm2072172wrr.85.2024.01.10.12.32.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Jan 2024 12:32:30 -0800 (PST) From: Bartosz Golaszewski To: Linus Walleij , Peter Zijlstra , Ingo Molnar , Will Deacon , Waiman Long , Boqun Feng Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, Bartosz Golaszewski Subject: [PATCH 2/3] locking/rwsem: provide a lock guard for down_read_nested() Date: Wed, 10 Jan 2024 21:32:14 +0100 Message-Id: <20240110203215.36396-3-brgl@bgdev.pl> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20240110203215.36396-1-brgl@bgdev.pl> References: <20240110203215.36396-1-brgl@bgdev.pl> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1787736940399807176 X-GMAIL-MSGID: 1787736940399807176 From: Bartosz Golaszewski This adds a lock guard for taking an RW semaphore for reading in nested context. It takes the nesting depth as a second argument. Signed-off-by: Bartosz Golaszewski --- include/linux/rwsem.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/include/linux/rwsem.h b/include/linux/rwsem.h index 9c29689ff505..298f5e60d30c 100644 --- a/include/linux/rwsem.h +++ b/include/linux/rwsem.h @@ -258,4 +258,10 @@ extern void up_read_non_owner(struct rw_semaphore *sem); # define up_read_non_owner(sem) up_read(sem) #endif +DEFINE_LOCK_GUARD_ARGS(rwsem_read_nested, + struct rw_semaphore *, + down_read_nested(_T, subclass), + up_read(_T), + int subclass); + #endif /* _LINUX_RWSEM_H */ From patchwork Wed Jan 10 20:32:15 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 187065 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:2411:b0:101:2151:f287 with SMTP id m17csp1039836dyi; Wed, 10 Jan 2024 12:33:31 -0800 (PST) X-Google-Smtp-Source: AGHT+IFKbW05rlMdlB221tw3dgBZcDCTLvTdjtP5CjBPRnM0rXg3hAnlsi0bh4mcO1ptIx8b7XsI X-Received: by 2002:a05:6358:52ca:b0:174:e3e2:4147 with SMTP id z10-20020a05635852ca00b00174e3e24147mr180549rwz.55.1704918811098; Wed, 10 Jan 2024 12:33:31 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1704918811; cv=none; d=google.com; s=arc-20160816; b=NIKKwp0JFQlYEO/cwx6XML4hnJq6SqrVla+LeypPNNc4J/dRdBc4xhrBbelctGnU0b P8YGoKrduFOaq1d6rwrQypjNCuKuwVHH0el8r4TR9OPrRBUaamm0OkHWQxtzJ/bUVAvd QM+aMC+wSMICItkVQmE3mertpd9MnizFnqJ1t9NJ1UrNpcG5S461onFEOcjlYn7bAp/K 7zJLKv/bsXDwbbtkJEGt1k++sgiwJEJiXDdsFUOcXcnGQHHFv+jURLc2BGBNfebI309n P4cNJ/iYm7J4+XQg3N0NB6McwuiinsKatE3hud0pgE7Z1nj58tgJDjjhhhmqhegffqSn uGmw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=xH5jTr5aU0xfloUoZ4e4ojWO1uQm4oQS8ylJSBoL6uQ=; fh=4Et3A3d/CmPDQNXnDp/H49oAPo7NtW+P4dEA5HxfSA8=; b=UtkD75WmwQKTJ2rGENM1SsITUNCzDxuYx/AV9VPvZDEQHg1LL1wYlovoWAMuqwL6A/ UUhm9Z39nCr0P9Vpt+AgFeP4xjqeWui29SG1n4EKh6JnERmDFvTUvf74Yg/IwDUgIc5x j5nQyB3swH3XrUY538Ia8idqgxDTLUOCdTOwfDLUYLqMOn85rpodGdt/8BhzuZJp6Xdm kmgzjTldI5oeBmNzsSkfBsrMFJBJ2cjU1ePJAKpXg1wRmR6fL8YgCdsE1BNMC2wzDIrV Vw1BSWCPyUBUrqIIeHRcIgDMvXaTa+r9pYWydyZ/rbxu/3ZmMLspf8wP7DUUrg7At3Ua Rk5Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@bgdev-pl.20230601.gappssmtp.com header.s=20230601 header.b=xbMqzXT6; spf=pass (google.com: domain of linux-kernel+bounces-22736-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-22736-ouuuleilei=gmail.com@vger.kernel.org" Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [2604:1380:45e3:2400::1]) by mx.google.com with ESMTPS id k65-20020a632444000000b005cf0abf334csi4375518pgk.257.2024.01.10.12.33.30 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Jan 2024 12:33:31 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-22736-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) client-ip=2604:1380:45e3:2400::1; Authentication-Results: mx.google.com; dkim=pass header.i=@bgdev-pl.20230601.gappssmtp.com header.s=20230601 header.b=xbMqzXT6; spf=pass (google.com: domain of linux-kernel+bounces-22736-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-22736-ouuuleilei=gmail.com@vger.kernel.org" Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id 2914A281388 for ; Wed, 10 Jan 2024 20:33:29 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 2F32539FF7; Wed, 10 Jan 2024 20:32:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b="xbMqzXT6" Received: from mail-wr1-f43.google.com (mail-wr1-f43.google.com [209.85.221.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 DA60F4EB34 for ; Wed, 10 Jan 2024 20:32:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=bgdev.pl Received: by mail-wr1-f43.google.com with SMTP id ffacd0b85a97d-33674f60184so4513333f8f.1 for ; Wed, 10 Jan 2024 12:32:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1704918752; x=1705523552; 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; bh=xH5jTr5aU0xfloUoZ4e4ojWO1uQm4oQS8ylJSBoL6uQ=; b=xbMqzXT6stNQwOSGEF4TKGCpRnQOd6QT1tOh6Ce9t9voyBgxAQbeqB/S8wJXSGRDJS RB/em+pZk4qULwl1Fuq6n2XPEo6DeZkIxYedQsL3gitV6Q/e9kdutei0vih14x4YRLyI lkVdN3YA55zyo02h/u1LhgswVYQpfStxRXARRys85opSjTU28T7M2aCq/LltUDH4LbGk 82h42UHGy/8OFOS/IJz3LNwYcda4w15NUaxnsvWAfSiQxZSIQXzLMEoiuwY/uAAcENTg n23XxLg7GqiirQ5qARDff/GNkFWT0byJ1N8BxyVhTpc7jr/v6E4Izgf/S7Mw3ktPbcLW KmHw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1704918752; x=1705523552; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=xH5jTr5aU0xfloUoZ4e4ojWO1uQm4oQS8ylJSBoL6uQ=; b=DUoch9ADfzdXb/5g/OUEwV1m426hk3x+NTJZcpCt5UfOHMFYf10dndpiq1eeSoOJ2s HmbMeegCS8GEK1ooGKh1pcluUMezrO5cFJK4S/iMSUvMjiT7dQuD3P44RwJzlddxndVd 1L/HePeiI0PSvqRQq1+qHwO5zg7ji5aspzQAXoGxbpfwtWgR1uk4qidRtgO00yb2z42W ePdgP/rnWbrGqtew4dqyJtBUGhFPptPyyVlydgDz0pS9VENdIXBLCpqsUiCxTZkCO68e B9vveZtTyESe5oqfnjj0zzOXz3ydQN6Z98CqocxOPU47pXPhQaSY9tgLPymMQ9GrQuVy 5MgQ== X-Gm-Message-State: AOJu0YyJLK684qjueW9v+mpoo+/BVNMqQzXA5+f//DnT9yCIJoYc+chB TUHcxPrw/rXWJocf2j1Yj75xoGwBOVNr2g== X-Received: by 2002:a5d:4f03:0:b0:336:7f45:bc0f with SMTP id c3-20020a5d4f03000000b003367f45bc0fmr29434wru.46.1704918752208; Wed, 10 Jan 2024 12:32:32 -0800 (PST) Received: from brgl-uxlite.home ([2a01:cb1d:334:ac00:3342:1411:3dd8:cb70]) by smtp.gmail.com with ESMTPSA id z17-20020a5d44d1000000b003377e22ffdcsm2072172wrr.85.2024.01.10.12.32.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Jan 2024 12:32:31 -0800 (PST) From: Bartosz Golaszewski To: Linus Walleij , Peter Zijlstra , Ingo Molnar , Will Deacon , Waiman Long , Boqun Feng Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, Bartosz Golaszewski Subject: [PATCH 3/3] gpiolib: pin GPIO devices in place during descriptor lookup Date: Wed, 10 Jan 2024 21:32:15 +0100 Message-Id: <20240110203215.36396-4-brgl@bgdev.pl> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20240110203215.36396-1-brgl@bgdev.pl> References: <20240110203215.36396-1-brgl@bgdev.pl> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1787736947257723538 X-GMAIL-MSGID: 1787736947257723538 From: Bartosz Golaszewski There's time between when we locate the relevant descriptor during lookup and when we actually take the reference to its parent GPIO device where - if the GPIO device in question is removed - we'll end up with a dangling pointer to freed memory. Make sure devices cannot be removed until we hold a new reference to the device. In order to not overcomplicate the code with locking and unlocking variants of the same functions, just use the nesting feature of RW semaphores in gpio_device_find(). Signed-off-by: Bartosz Golaszewski --- drivers/gpio/gpiolib.c | 42 ++++++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c index 4c93cf73a826..972f33bc1a72 100644 --- a/drivers/gpio/gpiolib.c +++ b/drivers/gpio/gpiolib.c @@ -1114,7 +1114,7 @@ struct gpio_device *gpio_device_find(void *data, */ might_sleep(); - guard(rwsem_read)(&gpio_devices_sem); + guard(rwsem_read_nested)(&gpio_devices_sem, SINGLE_DEPTH_NESTING); list_for_each_entry(gdev, &gpio_devices, list) { if (gdev->chip && match(gdev->chip, data)) @@ -4134,27 +4134,33 @@ static struct gpio_desc *gpiod_find_and_request(struct device *consumer, struct gpio_desc *desc; int ret; - desc = gpiod_find_by_fwnode(fwnode, consumer, con_id, idx, &flags, &lookupflags); - if (gpiod_not_found(desc) && platform_lookup_allowed) { + scoped_guard(rwsem_read, &gpio_devices_sem) { + desc = gpiod_find_by_fwnode(fwnode, consumer, con_id, idx, + &flags, &lookupflags); + if (gpiod_not_found(desc) && platform_lookup_allowed) { + /* + * Either we are not using DT or ACPI, or their lookup + * did not return a result. In that case, use platform + * lookup as a fallback. + */ + dev_dbg(consumer, + "using lookup tables for GPIO lookup\n"); + desc = gpiod_find(consumer, con_id, idx, &lookupflags); + } + + if (IS_ERR(desc)) { + dev_dbg(consumer, "No GPIO consumer %s found\n", + con_id); + return desc; + } + /* - * Either we are not using DT or ACPI, or their lookup did not - * return a result. In that case, use platform lookup as a - * fallback. + * If a connection label was passed use that, else attempt to + * use the device name as label */ - dev_dbg(consumer, "using lookup tables for GPIO lookup\n"); - desc = gpiod_find(consumer, con_id, idx, &lookupflags); + ret = gpiod_request(desc, label); } - if (IS_ERR(desc)) { - dev_dbg(consumer, "No GPIO consumer %s found\n", con_id); - return desc; - } - - /* - * If a connection label was passed use that, else attempt to use - * the device name as label - */ - ret = gpiod_request(desc, label); if (ret) { if (!(ret == -EBUSY && flags & GPIOD_FLAGS_BIT_NONEXCLUSIVE)) return ERR_PTR(ret);