From: Herve Codina <herve.codina@bootlin.com>
To: Bjorn Helgaas <helgaas@kernel.org>
Cc: "Rob Herring" <robh@kernel.org>,
"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
"Rafael J. Wysocki" <rafael@kernel.org>,
"Bjorn Helgaas" <bhelgaas@google.com>,
"Lizhi Hou" <lizhi.hou@amd.com>, "Max Zhen" <max.zhen@amd.com>,
"Sonal Santan" <sonal.santan@amd.com>,
"Stefano Stabellini" <stefano.stabellini@xilinx.com>,
"Jonathan Cameron" <Jonathan.Cameron@huawei.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
PCI <linux-pci@vger.kernel.org>,
"Allan Nielsen" <allan.nielsen@microchip.com>,
"Horatiu Vultur" <horatiu.vultur@microchip.com>,
"Steen Hegelund" <steen.hegelund@microchip.com>,
"Thomas Petazzoni" <thomas.petazzoni@bootlin.com>,
"Krzysztof Wilczyński" <kwilczynski@kernel.org>
Subject: Re: [PATCH v2 0/2] Attach DT nodes to existing PCI devices
Date: Tue, 19 Mar 2024 17:34:04 +0100 [thread overview]
Message-ID: <20240319173404.019b424a@bootlin.com> (raw)
In-Reply-To: <20240319152513.GA1227721@bhelgaas>
Hi Bjorn,
On Tue, 19 Mar 2024 10:25:13 -0500
Bjorn Helgaas <helgaas@kernel.org> wrote:
> [+cc Krzysztof]
>
> On Fri, Dec 15, 2023 at 02:52:07PM +0100, Herve Codina wrote:
> > On Mon, 4 Dec 2023 07:59:09 -0600
> > Rob Herring <robh@kernel.org> wrote:
> > > On Mon, Dec 4, 2023 at 6:43 AM Herve Codina <herve.codina@bootlin.com> wrote:
> > > > On Fri, 1 Dec 2023 16:26:45 -0600
> > > > Rob Herring <robh@kernel.org> wrote:
> > > > > On Thu, Nov 30, 2023 at 10:57 AM Herve Codina <herve.codina@bootlin.com> wrote:
> > > > > ...
>
> > > > > --- a/drivers/pci/of.c
> > > > > +++ b/drivers/pci/of.c
> > > > > @@ -31,6 +31,8 @@ int pci_set_of_node(struct pci_dev *dev)
> > > > > return 0;
> > > > >
> > > > > node = of_pci_find_child_device(dev->bus->dev.of_node, dev->devfn);
> > > > > + if (!node && pci_is_bridge(dev))
> > > > > + of_pci_make_dev_node(dev);
> > > > > if (!node)
> > > > > return 0;
> > > >
> > > > Maybe it is too early.
> > > > of_pci_make_dev_node() creates a node and fills some properties based on
> > > > some already set values available in the PCI device such as its struct resource
> > > > values.
> > > > We need to have some values set by the PCI infra in order to create our DT node
> > > > with correct values.
> > >
> > > Indeed, that's probably the issue I'm having. In that case,
> > > DECLARE_PCI_FIXUP_HEADER should work. That's later, but still before
> > > device_add().
> > >
> > > I think modifying sysfs after device_add() is going to race with
> > > userspace. Userspace is notified of a new device, and then the of_node
> > > link may or may not be there when it reads sysfs. Also, not sure if
> > > we'll need DT modaliases with PCI devices, but they won't work if the
> > > DT node is not set before device_add().
> >
> > DECLARE_PCI_FIXUP_HEADER is too early as well as doing the DT node creation
> > just before the device_add() call.
> > Indeed, in order to fill the DT properties, resources need to be assigned
> > (needed for the 'ranges' property used for addresses translation).
> > The resources assignment is done after the call to device_add().
>
> Do we need to know the actual address *value* before creating the
> sysfs file, or is it enough to know that the file should *exist*, even
> if the value may be changed later?
I think, the problematic file is 'of_node'.
This file is a symlink present in the device directory pointing to the
node in a device-tree subdir.
How can we create this of_node symlink without having the device-tree
subdir available ?
>
> > Some PCI sysfs files are already created after adding the device by the
> > pci_create_sysfs_dev_files() call:
> > https://elixir.bootlin.com/linux/v6.6/source/drivers/pci/bus.c#L347
> >
> > Is it really an issue to add the of_node link to sysfs on an already
> > present device ?
>
> Yes, I think this would be an issue. We've been trying to get rid of
> pci_create_sysfs_dev_files() altogether because there's a long history
> of race issues related to it:
>
> https://lore.kernel.org/r/1271099285.9831.13.camel@localhost/ WARNING: at fs/sysfs/dir.c:451 sysfs_add_one: sysfs: cannot create duplicate filename '/devices/pci0000:00/0000:00:01.0/slot'
> https://lore.kernel.org/r/19461.26166.427857.612983@pilspetsen.it.uu.se/ [2.6.35-rc1 regression] sysfs: cannot create duplicate filename ... XVR-600 related?
> https://lore.kernel.org/r/20200716110423.xtfyb3n6tn5ixedh@pali/ PCI: Race condition in pci_create_sysfs_dev_files
> https://lore.kernel.org/r/m3eebg9puj.fsf@t19.piap.pl/ PCI: Race condition in pci_create_sysfs_dev_files (can't boot)
> https://bugzilla.kernel.org/show_bug.cgi?id=215515 sysfs: cannot create duplicate filename '.../0000:e0'
>
> And several previous attempts to fix them:
>
> https://lore.kernel.org/r/4469eba2-188b-aab7-07d1-5c77313fc42f@gmail.com/ Guard pci_create_sysfs_dev_files with atomic value
> https://lore.kernel.org/r/20230316103036.1837869-1-alexander.stein@ew.tq-group.com PCI/sysfs: get rid of pci_sysfs_init late_initcall
> https://lore.kernel.org/r/1702093576-30405-1-git-send-email-ssengar@linux.microsoft.com/ PCI/sysfs: Fix race in pci sysfs creation
>
I am not sure we are facing in the same kind of issues.
The ones you mentioned are related to some sysfs duplication.
In the of_node case, the issue (if any) is that the symlink will be created
after the other device's file. Not sure that it can lead to some file
duplication.
Best regards,
Hervé
--
Hervé Codina, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
next prev parent reply other threads:[~2024-03-19 16:34 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-11-30 16:56 [PATCH v2 0/2] Attach DT nodes to existing PCI devices Herve Codina
2023-11-30 16:56 ` [PATCH v2 1/2] driver core: Introduce device_{add,remove}_of_node() Herve Codina
2023-11-30 16:56 ` [PATCH v2 2/2] PCI: of: Attach created of_node to existing device Herve Codina
2023-12-01 22:49 ` Bjorn Helgaas
2023-12-01 22:26 ` [PATCH v2 0/2] Attach DT nodes to existing PCI devices Rob Herring
2023-12-01 22:45 ` Bjorn Helgaas
2023-12-04 16:48 ` Lizhi Hou
2023-12-04 12:43 ` Herve Codina
2023-12-04 13:59 ` Rob Herring
2023-12-04 15:30 ` Herve Codina
2023-12-04 23:03 ` Rob Herring
2023-12-05 8:04 ` Herve Codina
2023-12-07 22:51 ` Rob Herring
2023-12-08 8:48 ` Herve Codina
2023-12-14 14:31 ` Herve Codina
2024-03-19 14:41 ` Herve Codina
2023-12-05 18:53 ` Lizhi Hou
2023-12-15 13:52 ` Herve Codina
2024-03-19 15:25 ` Bjorn Helgaas
2024-03-19 16:34 ` Herve Codina [this message]
2024-03-19 16:54 ` Bjorn Helgaas
2024-04-10 21:41 ` Rob Herring
2024-04-11 14:05 ` Herve Codina
2024-04-11 20:57 ` Bjorn Helgaas
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240319173404.019b424a@bootlin.com \
--to=herve.codina@bootlin.com \
--cc=Jonathan.Cameron@huawei.com \
--cc=allan.nielsen@microchip.com \
--cc=bhelgaas@google.com \
--cc=gregkh@linuxfoundation.org \
--cc=helgaas@kernel.org \
--cc=horatiu.vultur@microchip.com \
--cc=kwilczynski@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=lizhi.hou@amd.com \
--cc=max.zhen@amd.com \
--cc=rafael@kernel.org \
--cc=robh@kernel.org \
--cc=sonal.santan@amd.com \
--cc=steen.hegelund@microchip.com \
--cc=stefano.stabellini@xilinx.com \
--cc=thomas.petazzoni@bootlin.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).