From: Bjorn Helgaas <bhelgaas@google.com>
To: Sebastian Ott <sebott@linux.vnet.ibm.com>
Cc: linux-pci@vger.kernel.org,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Michal Simek <monstr@monstr.eu>,
Benjamin Herrenschmidt <benh@kernel.crashing.org>,
Paul Mackerras <paulus@samba.org>
Subject: Re: [Resend] pcibios_add_platform_entries usage
Date: Tue, 29 Apr 2014 17:30:20 -0600 [thread overview]
Message-ID: <20140429233020.GA9912@google.com> (raw)
In-Reply-To: <alpine.LFD.2.11.1404171938190.1588@denkbrett>
On Thu, Apr 17, 2014 at 07:46:15PM +0200, Sebastian Ott wrote:
> On Mon, 14 Apr 2014, Sebastian Ott wrote:
> > On Mon, 14 Apr 2014, Bjorn Helgaas wrote:
> > > On Mon, Apr 14, 2014 at 11:03:42AM +0200, Sebastian Ott wrote:
> > > > for pci on s390 we currently use pcibios_add_platform_entries to add
> > > > some arch specific attributes to pdevs. This has 2 downsides - it will
> > > > race with userspace which is triggered by udev events and expecting
> > > > these attributes (but that's a theoretical issue). More important to
> > > > me is that one cannot use attribute_groups with this. Both issues could
> > > > be addressed by using pdev->dev.groups and let the driver core handle
> > > > attribute creation.
> > > >
> > > > So would it be ok if we set pdev->dev.groups in pcibios_add_device?
> > > > (It should be since it's not used by pci common code which uses bus_type,
> > > > dev_type, and class groups).
> > >
> > > Hi Sebastian,
> > >
> > > Sorry, I meant to respond to this earlier, but forgot. This sounds
> > > reasonable to me, but Greg can give you a much better answer than I can.
> > >
> > > Documentation/driver-model/device.txt says the dev->groups pointer
> > > should be set before calling device_register(). PCI calls
> > > device_initialize() and device_add() instead of using device_register(),
> > > and pcibios_add_device() looks like it happens at the right time:
> > >
> > > pci_scan_root_bus
> > > pci_scan_child_bus
> > > pci_scan_slot
> > > pci_scan_single_device
> > > pci_device_add
> > > device_initialize
> > > pcibios_add_device # <---
> > > device_add
> > > pci_bus_add_devices
> > > pci_bus_add_device
> > > pci_create_sysfs_dev_files
> > > pcibios_add_platform_entries # 8d4cd0833107 (benh)
> > > device_attach
> > >
> > > I'm not sure why pci_create_sysfs_dev_files() is done later. It seems
> > > like that should be done before device_add() as well. Maybe it's
> > > because BARs might not be valid yet (that doesn't seem like a very good
> > > excuse, but it's all I can think of).
> > >
> > > I assume that if you change s390, you'll also change microblaze and
> > > powerpc? They look structurally similar to s390.
> >
> > Yes, that sounds like a plan - this way we can get rid of
> > pcibios_add_platform_entries altogether. I'll send these patches soon.
>
> Hm, pcibios_add_platform_entries for microblaze and power is identical
> and this OF stuff seems not to be arch specific. How about the following
> patch?
>
>
> pci: move open fabric devspec attribute to pci common code
>
> Move the devspec OF attribute to pci common code's set of device
> attributes since it's not architecture dependent.
> As a side effect microblaze and powerpc no longer need to use
> pcibios_add_platform_entries.
>
> Link: https://lkml.kernel.org/r/alpine.LFD.2.11.1404141101500.1529@denkbrett
> Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com>
I applied this with Ben's ack to pci/misc for v3.16.
I don't see a corresponding s390 patch; did I miss it? I don't want to
apply the "Remove pcibios_add_platform_entries()" patch until s390 is
fixed up too.
Bjorn
> ---
> arch/microblaze/pci/pci-common.c | 20 --------------------
> arch/powerpc/kernel/pci-common.c | 20 --------------------
> drivers/pci/pci-sysfs.c | 17 +++++++++++++++++
> 3 files changed, 17 insertions(+), 40 deletions(-)
>
> --- a/arch/microblaze/pci/pci-common.c
> +++ b/arch/microblaze/pci/pci-common.c
> @@ -168,26 +168,6 @@ struct pci_controller *pci_find_hose_for
> return NULL;
> }
>
> -static ssize_t pci_show_devspec(struct device *dev,
> - struct device_attribute *attr, char *buf)
> -{
> - struct pci_dev *pdev;
> - struct device_node *np;
> -
> - pdev = to_pci_dev(dev);
> - np = pci_device_to_OF_node(pdev);
> - if (np == NULL || np->full_name == NULL)
> - return 0;
> - return sprintf(buf, "%s", np->full_name);
> -}
> -static DEVICE_ATTR(devspec, S_IRUGO, pci_show_devspec, NULL);
> -
> -/* Add sysfs properties */
> -int pcibios_add_platform_entries(struct pci_dev *pdev)
> -{
> - return device_create_file(&pdev->dev, &dev_attr_devspec);
> -}
> -
> void pcibios_set_master(struct pci_dev *dev)
> {
> /* No special bus mastering setup handling */
> --- a/arch/powerpc/kernel/pci-common.c
> +++ b/arch/powerpc/kernel/pci-common.c
> @@ -201,26 +201,6 @@ struct pci_controller* pci_find_hose_for
> return NULL;
> }
>
> -static ssize_t pci_show_devspec(struct device *dev,
> - struct device_attribute *attr, char *buf)
> -{
> - struct pci_dev *pdev;
> - struct device_node *np;
> -
> - pdev = to_pci_dev (dev);
> - np = pci_device_to_OF_node(pdev);
> - if (np == NULL || np->full_name == NULL)
> - return 0;
> - return sprintf(buf, "%s", np->full_name);
> -}
> -static DEVICE_ATTR(devspec, S_IRUGO, pci_show_devspec, NULL);
> -
> -/* Add sysfs properties */
> -int pcibios_add_platform_entries(struct pci_dev *pdev)
> -{
> - return device_create_file(&pdev->dev, &dev_attr_devspec);
> -}
> -
> /*
> * Reads the interrupt pin to determine if interrupt is use by card.
> * If the interrupt is used, then gets the interrupt line from the
> --- a/drivers/pci/pci-sysfs.c
> +++ b/drivers/pci/pci-sysfs.c
> @@ -416,6 +416,20 @@ static ssize_t d3cold_allowed_show(struc
> static DEVICE_ATTR_RW(d3cold_allowed);
> #endif
>
> +#ifdef CONFIG_OF
> +static ssize_t devspec_show(struct device *dev,
> + struct device_attribute *attr, char *buf)
> +{
> + struct pci_dev *pdev = to_pci_dev(dev);
> + struct device_node *np = pci_device_to_OF_node(pdev);
> +
> + if (np == NULL || np->full_name == NULL)
> + return 0;
> + return sprintf(buf, "%s", np->full_name);
> +}
> +static DEVICE_ATTR_RO(devspec);
> +#endif
> +
> #ifdef CONFIG_PCI_IOV
> static ssize_t sriov_totalvfs_show(struct device *dev,
> struct device_attribute *attr,
> @@ -521,6 +535,9 @@ static struct attribute *pci_dev_attrs[]
> #if defined(CONFIG_PM_RUNTIME) && defined(CONFIG_ACPI)
> &dev_attr_d3cold_allowed.attr,
> #endif
> +#ifdef CONFIG_OF
> + &dev_attr_devspec.attr,
> +#endif
> NULL,
> };
>
next prev parent reply other threads:[~2014-04-29 23:30 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-03-28 18:41 pcibios_add_platform_entries usage Sebastian Ott
2014-04-14 9:03 ` [Resend] " Sebastian Ott
2014-04-14 17:35 ` Bjorn Helgaas
2014-04-14 18:07 ` Sebastian Ott
2014-04-17 17:46 ` Sebastian Ott
2014-04-17 21:02 ` Benjamin Herrenschmidt
2014-04-18 10:10 ` Sebastian Ott
2014-04-18 21:31 ` Benjamin Herrenschmidt
2014-04-22 8:26 ` Sebastian Ott
2014-04-23 6:48 ` Michal Simek
2014-04-23 9:00 ` Sebastian Ott
2014-04-29 23:30 ` Bjorn Helgaas [this message]
2014-04-30 14:40 ` Sebastian Ott
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=20140429233020.GA9912@google.com \
--to=bhelgaas@google.com \
--cc=benh@kernel.crashing.org \
--cc=gregkh@linuxfoundation.org \
--cc=linux-pci@vger.kernel.org \
--cc=monstr@monstr.eu \
--cc=paulus@samba.org \
--cc=sebott@linux.vnet.ibm.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.