Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp1648476pxb; Mon, 8 Mar 2021 02:59:55 -0800 (PST) X-Google-Smtp-Source: ABdhPJwe7+mHE0jADn9lf3LAybocQalic0InfaLxQfAToUSNch7Z33F7I2OWFaShtjRj08nJW5bN X-Received: by 2002:a50:eb97:: with SMTP id y23mr21635294edr.170.1615201194862; Mon, 08 Mar 2021 02:59:54 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1615201194; cv=none; d=google.com; s=arc-20160816; b=JrC7QhHYZJafzrqyYJlvnkXp3ieERfqpOnX2xy1wm3Xl7SYotPQ15iLDZIUNLJ6VzT Aj9M9Uftq4UTJkVGsrhTOSMjFzkh0sLiBSFsHg/+98Y+HUYIm/CPYppyeTZv7ypFRQor lxiG7nenFs9jq+iOuBlwojvlN/Yb8J60TiG6AdBr8vQZD0cKNUE3/qifX8Fel4sp8/pa G978SrHmgMms7hd2a0aMrcZseNR5XrzABsHsK8Sd1iO0228Suxael+xi70C5FU/1NJ6a dkbx1JQGz8Zr0/nDVbCpb/gAHBmPFYaDuRO7Zjz4wNqceCUJAgFd5+P8x394CMat6ebW NpEg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=cakLU/eCVibA/iJUsPZ/Q2ABgxzfNfr1tJxKBYGIySk=; b=gs3gHYCGqVQ4K6wLNhq/Q0Hn1Cwhxx9XRGZDoRNUKYOTFYkbioAVxu5pwAHC2KQe1n DgWYBRIszPuBEDgk1Hi9pTRwlXPMht12338oqMxXbSVcJU0fJqoeo5rvGATAvI252hdC t+TVEPw8Oug2L0SHWE7Effv7MPKHAy9D7Bz9AKO5zY4u43vo0If7ki7NekzCS1luaow7 SvZP7Pn6nmUtS10arroE1cjd2SSOMfS0sacrkcmrzOn7rgFMKNoiZF/OoDngueODv9Rm ebJ0k2bDOy6rgtVlKyEY0HX06NL29MPfhZDx4t6tmti8/JzYAbURx26HOwsHlpNyNNLz R6eQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@bgdev-pl.20150623.gappssmtp.com header.s=20150623 header.b=BTBqBrUF; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id b25si7105241edx.341.2021.03.08.02.59.31; Mon, 08 Mar 2021 02:59:54 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@bgdev-pl.20150623.gappssmtp.com header.s=20150623 header.b=BTBqBrUF; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229671AbhCHK6h (ORCPT + 99 others); Mon, 8 Mar 2021 05:58:37 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39062 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229754AbhCHK6N (ORCPT ); Mon, 8 Mar 2021 05:58:13 -0500 Received: from mail-ej1-x632.google.com (mail-ej1-x632.google.com [IPv6:2a00:1450:4864:20::632]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9D41AC06175F for ; Mon, 8 Mar 2021 02:58:12 -0800 (PST) Received: by mail-ej1-x632.google.com with SMTP id dx17so19407087ejb.2 for ; Mon, 08 Mar 2021 02:58:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20150623.gappssmtp.com; s=20150623; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=cakLU/eCVibA/iJUsPZ/Q2ABgxzfNfr1tJxKBYGIySk=; b=BTBqBrUFxR1nwyCuWnwC6e1DEERyTpTbaHk6owBxXjbWU8CuECLmKi/NSs11fNl5Y3 AIl8cgQMkcD9RjzQdWnPRmKqiHZq3fRxJpmt622AOYG56b2bh0ANSFaWDHLCiy1mX0Wv uXvc7B+2HAr5i12uyVLydPXvt68rQ/I4AolZfgaJ0JoE0q4m6Pv8WYZCg1xahdh/7ndv QWI9fmOHAnEmFdHCE8FuWyhZpmI/HQIn3sHcRu+LXm6nxzspXtR6VYB65duFImKgDdzk 1BVaA2tOV8qZEonKP9+uuHoWLleK+dlHk+77+fER0jXob7Wm4To0+KkBfQiFKF/aif8F iicA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=cakLU/eCVibA/iJUsPZ/Q2ABgxzfNfr1tJxKBYGIySk=; b=NDhfPCaYRbJCeNEsNJfubzEDD51lUNn5Wla6ETA5y1KXWfpvp7+DLBW1Qd1sdGRzbD 3iYML+q0py2IRpVxhfLC1HwmCqGnV3wYZMwzaKlb3S2GxjJhUGvfE+0hORNBeRTE4KQu toRWjgr5Wmbst8mmKqdpZRn8uR3+7OXm+gLsAUM27DZlRum44zFVoXNfnv370Kmv77hF RWLyLG+XNHEEx3dtLJkNGtnzWVyMBzPQzA+VfrPmKVQLkuX4xPGb7zZ87RvoRLAIaNIb PnUzuICS73BGbvrTeSXsKoVDNrpbLDHugTzLemM7L+MC/TfDfmDxorDZF08hriVN/I// +nxA== X-Gm-Message-State: AOAM5312zZW+kq9bQmJJ4REup7kg2pJm+LwnJTR9qe66U4G9vkoarFqp Sd7MzSMEHTginiqZjsEhRbO7QlWTFbPaSXYk7uzPzNqVT/Q= X-Received: by 2002:a17:906:d938:: with SMTP id rn24mr15092670ejb.87.1615201091145; Mon, 08 Mar 2021 02:58:11 -0800 (PST) MIME-Version: 1.0 References: <20210304102452.21726-9-brgl@bgdev.pl> In-Reply-To: From: Bartosz Golaszewski Date: Mon, 8 Mar 2021 11:58:00 +0100 Message-ID: Subject: Re: [PATCH v2 08/12] drivers: export device_is_bound() To: Greg KH Cc: Geert Uytterhoeven , Joel Becker , Christoph Hellwig , Shuah Khan , Linus Walleij , Andy Shevchenko , =?UTF-8?Q?Uwe_Kleine=2DK=C3=B6nig?= , Kent Gibson , Jonathan Corbet , "open list:GPIO SUBSYSTEM" , Linux Kernel Mailing List , "open list:DOCUMENTATION" , Bartosz Golaszewski Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Mar 5, 2021 at 4:01 PM Greg KH wrote: > > On Fri, Mar 05, 2021 at 03:20:27PM +0100, Bartosz Golaszewski wrote: > > On Fri, Mar 5, 2021 at 12:27 PM Greg KH wrote: > > > > > > On Fri, Mar 05, 2021 at 11:58:18AM +0100, Bartosz Golaszewski wrote: > > > > On Fri, Mar 5, 2021 at 11:24 AM Greg KH wrote: > > > > > > > > > > On Fri, Mar 05, 2021 at 10:16:10AM +0100, Bartosz Golaszewski wrote: > > > > > > On Fri, Mar 5, 2021 at 9:55 AM Greg KH wrote: > > > > > > > > > > > > > > On Fri, Mar 05, 2021 at 09:45:41AM +0100, Bartosz Golaszewski wrote: > > > > > > > > On Fri, Mar 5, 2021 at 9:34 AM Greg KH wrote: > > > > > > > > > > > > > > > > > > On Fri, Mar 05, 2021 at 09:18:30AM +0100, Geert Uytterhoeven wrote: > > > > > > > > > > CC Greg > > > > > > > > > > > > > > > > > > > > On Thu, Mar 4, 2021 at 11:30 AM Bartosz Golaszewski wrote: > > > > > > > > > > > > > > > > > > > > > > From: Bartosz Golaszewski > > > > > > > > > > > > > > > > > > > > > > Export the symbol for device_is_bound() so that we can use it in gpio-sim > > > > > > > > > > > to check if the simulated GPIO chip is bound before fetching its driver > > > > > > > > > > > data from configfs callbacks in order to retrieve the name of the GPIO > > > > > > > > > > > chip device. > > > > > > > > > > > > > > > > > > > > > > Signed-off-by: Bartosz Golaszewski > > > > > > > > > > > --- > > > > > > > > > > > drivers/base/dd.c | 1 + > > > > > > > > > > > 1 file changed, 1 insertion(+) > > > > > > > > > > > > > > > > > > > > > > diff --git a/drivers/base/dd.c b/drivers/base/dd.c > > > > > > > > > > > index 9179825ff646..c62c02e3490a 100644 > > > > > > > > > > > --- a/drivers/base/dd.c > > > > > > > > > > > +++ b/drivers/base/dd.c > > > > > > > > > > > @@ -353,6 +353,7 @@ bool device_is_bound(struct device *dev) > > > > > > > > > > > { > > > > > > > > > > > return dev->p && klist_node_attached(&dev->p->knode_driver); > > > > > > > > > > > } > > > > > > > > > > > +EXPORT_SYMBOL_GPL(device_is_bound); > > > > > > > > > > > > > > > > > > No. Please no. Why is this needed? Feels like someone is doing > > > > > > > > > something really wrong... > > > > > > > > > > > > > > > > > > NACK. > > > > > > > > > > > > > > > > > > > > > > > > > I should have Cc'ed you the entire series, my bad. > > > > > > > > > > > > > > > > This is the patch that uses this change - it's a new, improved testing > > > > > > > > module for GPIO using configfs & sysfs as you (I think) suggested a > > > > > > > > while ago: > > > > > > > > > > > > > > > > https://lkml.org/lkml/2021/3/4/355 > > > > > > > > > > > > > > > > The story goes like this: committing the configfs item registers a > > > > > > > > platform device. > > > > > > > > > > > > > > Ick, no, stop there, that's not a "real" device, please do not abuse > > > > > > > platform devices like that, you all know I hate this :( > > > > > > > > > > > > > > Use the virtbus code instead perhaps? > > > > > > > > > > > > > > > > > > > I have no idea what virtbus is and grepping for it only returns three > > > > > > hits in: ./drivers/pci/iov.c and it's a function argument. > > > > > > > > > > > > If it stands for virtual bus then for sure it sounds like the right > > > > > > thing but I need to find more info on this. > > > > > > > > > > Sorry, wrong name, see Documentation/driver-api/auxiliary_bus.rst for > > > > > the details. "virtbus" was what I think about it as that was my > > > > > original name for it, but it eventually got merged with a different > > > > > name. > > > > > > > > > Unless I'm not seeing something - it completely doesn't look like the > > right solution. This auxiliary bus sounds like MFD with extra steps. > > Its aim seems to be to provide virtual devices for sub-modules of real > > devices. > > > > What I have here really is a dummy device for which no HW exists. > > Then just use a "normal" virtual device. We have loads of them. But if > you want to bind a "driver" to it, then use the aux bus please. Do NOT > abuse a platform device for this. > > > Also: while the preferred way is to use configfs to instantiate these > > simulated devices, then can still be registered from device-tree (this > > is a feature that was requested and eventually implemented in > > gpio-mockup which we want to phase out so we can't just drop it). > > AFAIK only platform devices can be populated from DT. > > If you really are using DT, then ok, a platform device can be used, but > you didn't say that :) > My bad. Yes we need to use DT. And platform device does sound like the best approach. > > I guess we could create something like a "virtual bus" that would be > > there for devices that don't exist on any physical bus but this would > > end up in big part being the same thing as platform devices. > > That's what the aux bus code is there for. So maybe you do need to use > it. > I'm fine with that if it can be instantiated from DT but it doesn't seem so. > > > > > > > > As far as I understand - there's no guarantee that > > > > > > > > the device will be bound to a driver before the commit callback (or > > > > > > > > more specifically platform_device_register_full() in this case) > > > > > > > > returns so the user may try to retrieve the name of the device > > > > > > > > immediately (normally user-space should wait for the associated uevent > > > > > > > > but nobody can force that) by doing: > > > > > > > > > > > > > > > > mv /sys/kernel/config/gpio-sim/pending/foo /sys/kernel/config/gpio-sim/live/ > > > > > > > > cat /sys/kernel/config/gpio-sim/live/foo/dev_name > > > > > > > > > > > > > > > > If the device is not bound at this point, we'll have a crash in the > > > > > > > > kernel as opposed to just returning -ENODEV. > > > > > > > > > > > > > > How will the kernel crash? What has created the dev_name sysfs file > > > > > > > before it is possible to be read from? That feels like the root > > > > > > > problem. > > > > > > > > > > > > > > > > > > > It's not sysfs - it's in configfs. Each chip has a read-only configfs > > > > > > attribute that returns the name of the device - I don't really have a > > > > > > better idea to map the configfs items to devices that committing > > > > > > creates. > > > > > > > > > > Same question, why are you exporting a configfs attribute that can not > > > > > be read from? Only export it when your driver is bound to the device. > > > > > > > > > > > > > The device doesn't know anything about configfs. Why would it? The > > > > configuration of a GPIO chip can't be changed after it's instantiated, > > > > this is why we have committable items. > > > > > > > > We export a directory in configfs: gpio-sim -> user creates a new > > > > directory (item) in gpio-sim/pending/foo and it's not tied to any > > > > device yet but exports attributes which we use to configure the device > > > > (label, number of lines, line names etc.), then we mv > > > > gpio-sim/pending/foo gpio-sim/live and this is when the device gets > > > > created and registered with the subsystem. We take all the configured > > > > attributes and put them into device properties for both the driver and > > > > gpiolib core (for standard properties) to read - just like we would > > > > with a regular GPIO driver because this is the goal: test the core > > > > code. > > > > > > Ok, but they why are you trying to have dev_name be an exported thing? > > > I don't understand an attribute here that is visable but can not be read > > > from. > > > > > > > Because once the associated configfs item is committed and the device > > created, it will become readable. The list of attributes is fixed in > > configfs. I'm not sure what the better approach would be - return > > "none" if the device handle is NULL? > > Sounds reasonable, I don't know how configfs works, it's been a decade > since I last touched it. > > > > And why not just use the default device name function: dev_name(), which > > > will always return a string that will work no matter if the device is > > > bound to a driver or not. > > > > > > > I can do this but then it's possible that user-space gets the name of > > the device which doesn't exist in sysfs. I guess we can mention that > > in the documentation. > > Device names can change over time, nothing new there. > Ok will change in v3. I'll Cc you next time. Bart