From nobody Mon Feb 9 21:37:49 2026 Received: from smtp-relay-internal-1.canonical.com (smtp-relay-internal-1.canonical.com [185.125.188.123]) (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 C28D81FA8F8 for ; Fri, 3 Jan 2025 14:18:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.125.188.123 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1735913930; cv=none; b=H/qCjmqKaRLHIVUUxR8/pCnJDRLCVMLMI2bADGjHFg3S07ecO3nCwnjn8y2s5cdE0TTDPVP65wFqZ5+IWQkHT/8PkIuvcSfuIA4ers/9K3Ie7ZukceJeDI0V0Dyf4qGGwNOKdBJ2ognUiQo89LhK/o6pQJpQK9dZl49Rn+ayFGY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1735913930; c=relaxed/simple; bh=cMG1/1MMnZC5j0tafg83V1P3/epd9tHHHNaDsyBmqgw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=DrqLrBrx430liGjH1sU24e367D86OJwAnH7FH85VgRNRF+oYclUHg6S8pwr4NUYvtHo1AjGr9S7Uj/qIgU9SrywmdXRkam2U6v/qcK1/kWlWsWCaH/ul0kQfOze+q5EbxPvuUxTQa1R4J+xyQ1J6wQxBNe20we2yQ5cJhJQUhR4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=canonical.com; spf=pass smtp.mailfrom=canonical.com; dkim=pass (2048-bit key) header.d=canonical.com header.i=@canonical.com header.b=Uqq2ZuOX; arc=none smtp.client-ip=185.125.188.123 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=canonical.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=canonical.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=canonical.com header.i=@canonical.com header.b="Uqq2ZuOX" Received: from mail-pj1-f71.google.com (mail-pj1-f71.google.com [209.85.216.71]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by smtp-relay-internal-1.canonical.com (Postfix) with ESMTPS id 1D75B3F6A5 for ; Fri, 3 Jan 2025 14:18:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical.com; s=20210705; t=1735913927; bh=KnRRrmEz3ZlIIsMVIhLEqcdV5rbJka1OKmEC4NqPpMo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Uqq2ZuOXU3Rf5MmbXknU56Ny6z2JBFo6qfZVZ7AcXgl83ei1hWDmN06c+SaBxnVc5 PczNnRuI9jopJXiNWEO3FdvzuqZ8HDKIvMGgnSdM00Gr3a0FJThT14mg4f4NrgO2uP dADBuRyi5XutQJerCz8YoB4oS1ggOaf+t4PpPvLzXGHBwFDocUl/0lMxhVPGeeskIo IejPmn556fl9a70JN/DgNKYfZPbhDbVTjnn5yVRvVCd/NGV10bqYJEaR8429B396DU U+dA+m8t+bVjPfhj84HEO3nbc/l8yFqMN1iwn0A2+wzT8AeWDQ4RHhD2XA4Je80hVF jV3l+qLJ67IWA== Received: by mail-pj1-f71.google.com with SMTP id 98e67ed59e1d1-2ee6dccd3c9so16736077a91.3 for ; Fri, 03 Jan 2025 06:18:47 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1735913926; x=1736518726; 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=KnRRrmEz3ZlIIsMVIhLEqcdV5rbJka1OKmEC4NqPpMo=; b=ZHxarmVIT/sYzqvb1RQeHSVNfD0RZfWZkGbgnBkyD0ISRQ93LD6RxilZkaQTKdMzZU feY1S40HUGe/duIgVI5EYXUBd0WDUwMl2ux2+cGM24pyydklTM5CSvOM9sBch8nUuZmh 9/0T5CBwfkoO+HOuQbELUpu9vo4LRB/G3tflliRUKMzW8jmC2MMOZWfeyOfWTVTqwM+o iqXSeQKV6sn1AWUWZcfNkG2JnsSchKnberIUAcypFHJzY2W1XY9Aq0ZeNnq3KSVYuMMm xFjyupcsmiozOQa48gaw7+g/qdsSby+6xUHz9HOWM1k2OyBNHVU0UWlPP5oPWPDkmA9s QpMw== X-Forwarded-Encrypted: i=1; AJvYcCUv3RJsw07Fv0kXzPkBAI3L7fv8rQ4ozqZIQapVhfDwhYfgbB7D+jGNwXOpP5Mu4MF/KibtP3FU4FN2qSA=@vger.kernel.org X-Gm-Message-State: AOJu0YwmxTr+5aNC4roX0b3ILjKR4yB5VnVrDWj2eOw3z9tGKzdPGREI oEl/aC82BWDxTjBCvEesAVgBXY/quKl9svbwho/SRVN231ENSJcM20UEShR2eC1Bp/l9LHoJrvj gdICgqq7eNh9reqIBSoEJS0GZ5CPaoRmlEWmXHdjALLyxtl49fO4KxrD2R4i66WshIRhWD2ao64 +Cxg== X-Gm-Gg: ASbGncvwMUAmu5CSwinvd2SrmZWtZO8KEqRdYw63NWna+PcYqJ6ti8jXeLsqAonsbl2 UPgae74yeLnerG36dW9E4a8itXx9yAQ0jUJg/OJPSuAuxbcMDsC8xlFhEJnXP/9hli+IGohE3KI kEpL95Q3ozw8wDvetStXbfC44mvkVGXEvf6JmGMbc82JKEpmVqWorU4/pziVNSyYlDRFNn5N70g zAGuThsmCeaBKg4xLLzcoaSeNx1NiZC0MUex5cvR3ZOcouSVOF7Pl0+tw== X-Received: by 2002:a05:6a00:ac5:b0:726:41e:b310 with SMTP id d2e1a72fcca58-72abdec84b4mr60827624b3a.12.1735913925735; Fri, 03 Jan 2025 06:18:45 -0800 (PST) X-Google-Smtp-Source: AGHT+IFv7U382CtqgSsXMIMAYCsMVFfbR/QUYppP1lRrSvlMvPwHSv7X7/iZbJAG/Su+h6fW2JOd6g== X-Received: by 2002:a05:6a00:ac5:b0:726:41e:b310 with SMTP id d2e1a72fcca58-72abdec84b4mr60827591b3a.12.1735913925377; Fri, 03 Jan 2025 06:18:45 -0800 (PST) Received: from z790sl.. ([240f:74:7be:1:cb9e:69af:fb16:54f4]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-72aad8fd7b0sm15502908b3a.139.2025.01.03.06.18.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Jan 2025 06:18:45 -0800 (PST) From: Koichiro Den To: linux-gpio@vger.kernel.org Cc: linus.walleij@linaro.org, brgl@bgdev.pl, linux-kernel@vger.kernel.org Subject: [PATCH v3 4/4] gpio: sim: lock up configfs that an instantiated device depends on Date: Fri, 3 Jan 2025 23:18:29 +0900 Message-ID: <20250103141829.430662-5-koichiro.den@canonical.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250103141829.430662-1-koichiro.den@canonical.com> References: <20250103141829.430662-1-koichiro.den@canonical.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" Once a sim device is instantiated and actively used, allowing rmdir for its configfs serves no purpose and can be confusing. Effectively, arbitrary users start depending on its existence. Make the subsystem itself depend on the configfs entry for a sim device while it is in active use. Signed-off-by: Koichiro Den --- drivers/gpio/gpio-sim.c | 48 +++++++++++++++++++++++++++++++++++------ 1 file changed, 41 insertions(+), 7 deletions(-) diff --git a/drivers/gpio/gpio-sim.c b/drivers/gpio/gpio-sim.c index f387dad81f29..686ae3d11ba3 100644 --- a/drivers/gpio/gpio-sim.c +++ b/drivers/gpio/gpio-sim.c @@ -1027,6 +1027,30 @@ static void gpio_sim_device_deactivate(struct gpio_s= im_device *dev) dev->pdev =3D NULL; } =20 +static void +gpio_sim_device_lockup_configfs(struct gpio_sim_device *dev, bool lock) +{ + struct configfs_subsystem *subsys =3D dev->group.cg_subsys; + struct gpio_sim_bank *bank; + struct gpio_sim_line *line; + + /* + * The device only needs to depend on leaf line entries. This is + * sufficient to lock up all the configfs entries that the + * instantiated, alive device depends on. + */ + list_for_each_entry(bank, &dev->bank_list, siblings) { + list_for_each_entry(line, &bank->line_list, siblings) { + if (lock) + WARN_ON(configfs_depend_item_unlocked( + subsys, &line->group.cg_item)); + else + configfs_undepend_item_unlocked( + &line->group.cg_item); + } + } +} + static ssize_t gpio_sim_device_config_live_store(struct config_item *item, const char *page, size_t count) @@ -1039,14 +1063,24 @@ gpio_sim_device_config_live_store(struct config_ite= m *item, if (ret) return ret; =20 - guard(mutex)(&dev->lock); + if (live) + gpio_sim_device_lockup_configfs(dev, true); =20 - if (live =3D=3D gpio_sim_device_is_live(dev)) - ret =3D -EPERM; - else if (live) - ret =3D gpio_sim_device_activate(dev); - else - gpio_sim_device_deactivate(dev); + scoped_guard(mutex, &dev->lock) { + if (live =3D=3D gpio_sim_device_is_live(dev)) + ret =3D -EPERM; + else if (live) + ret =3D gpio_sim_device_activate(dev); + else + gpio_sim_device_deactivate(dev); + } + + /* + * Undepend is required only if device disablement (live =3D=3D 0) + * succeeds or if device enablement (live =3D=3D 1) fails. + */ + if (live =3D=3D !!ret) + gpio_sim_device_lockup_configfs(dev, false); =20 return ret ?: count; } --=20 2.43.0