* pcibios_add_platform_entries usage
@ 2014-03-28 18:41 Sebastian Ott
2014-04-14 9:03 ` [Resend] " Sebastian Ott
0 siblings, 1 reply; 13+ messages in thread
From: Sebastian Ott @ 2014-03-28 18:41 UTC (permalink / raw)
To: Bjorn Helgaas; +Cc: linux-pci
Hello Bjorn,
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).
Regards,
Sebastian
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Resend] pcibios_add_platform_entries usage
2014-03-28 18:41 pcibios_add_platform_entries usage Sebastian Ott
@ 2014-04-14 9:03 ` Sebastian Ott
2014-04-14 17:35 ` Bjorn Helgaas
0 siblings, 1 reply; 13+ messages in thread
From: Sebastian Ott @ 2014-04-14 9:03 UTC (permalink / raw)
To: Bjorn Helgaas; +Cc: linux-pci
Hello Bjorn,
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).
Regards,
Sebastian
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Resend] pcibios_add_platform_entries usage
2014-04-14 9:03 ` [Resend] " Sebastian Ott
@ 2014-04-14 17:35 ` Bjorn Helgaas
2014-04-14 18:07 ` Sebastian Ott
0 siblings, 1 reply; 13+ messages in thread
From: Bjorn Helgaas @ 2014-04-14 17:35 UTC (permalink / raw)
To: Sebastian Ott; +Cc: linux-pci, Greg Kroah-Hartman
[+cc Greg]
On Mon, Apr 14, 2014 at 11:03:42AM +0200, Sebastian Ott wrote:
> Hello Bjorn,
>
> 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.
Bjorn
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Resend] pcibios_add_platform_entries usage
2014-04-14 17:35 ` Bjorn Helgaas
@ 2014-04-14 18:07 ` Sebastian Ott
2014-04-17 17:46 ` Sebastian Ott
0 siblings, 1 reply; 13+ messages in thread
From: Sebastian Ott @ 2014-04-14 18:07 UTC (permalink / raw)
To: Bjorn Helgaas; +Cc: linux-pci, Greg Kroah-Hartman
[-- Attachment #1: Type: TEXT/PLAIN, Size: 2243 bytes --]
Hello Bjorn,
On Mon, 14 Apr 2014, Bjorn Helgaas wrote:
> [+cc Greg]
>
> On Mon, Apr 14, 2014 at 11:03:42AM +0200, Sebastian Ott wrote:
> > Hello Bjorn,
> >
> > 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.
Regards,
Sebastian
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Resend] pcibios_add_platform_entries usage
2014-04-14 18:07 ` Sebastian Ott
@ 2014-04-17 17:46 ` Sebastian Ott
2014-04-17 21:02 ` Benjamin Herrenschmidt
2014-04-29 23:30 ` Bjorn Helgaas
0 siblings, 2 replies; 13+ messages in thread
From: Sebastian Ott @ 2014-04-17 17:46 UTC (permalink / raw)
To: Bjorn Helgaas
Cc: linux-pci, Greg Kroah-Hartman, Michal Simek,
Benjamin Herrenschmidt, Paul Mackerras
[-- Attachment #1: Type: TEXT/PLAIN, Size: 5615 bytes --]
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>
---
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,
};
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Resend] pcibios_add_platform_entries usage
2014-04-17 17:46 ` Sebastian Ott
@ 2014-04-17 21:02 ` Benjamin Herrenschmidt
2014-04-18 10:10 ` Sebastian Ott
2014-04-29 23:30 ` Bjorn Helgaas
1 sibling, 1 reply; 13+ messages in thread
From: Benjamin Herrenschmidt @ 2014-04-17 21:02 UTC (permalink / raw)
To: Sebastian Ott
Cc: Bjorn Helgaas, linux-pci, Greg Kroah-Hartman, Michal Simek,
Paul Mackerras
On Thu, 2014-04-17 at 19:46 +0200, Sebastian Ott wrote:
> 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>
Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
(Pending you've compile tested it on powerpc, I'm on vacation and
haven't done it :)
> ---
> 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,
> };
>
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Resend] pcibios_add_platform_entries usage
2014-04-17 21:02 ` Benjamin Herrenschmidt
@ 2014-04-18 10:10 ` Sebastian Ott
2014-04-18 21:31 ` Benjamin Herrenschmidt
0 siblings, 1 reply; 13+ messages in thread
From: Sebastian Ott @ 2014-04-18 10:10 UTC (permalink / raw)
To: Benjamin Herrenschmidt
Cc: Bjorn Helgaas, linux-pci, Greg Kroah-Hartman, Michal Simek,
Paul Mackerras
[-- Attachment #1: Type: TEXT/PLAIN, Size: 4510 bytes --]
On Fri, 18 Apr 2014, Benjamin Herrenschmidt wrote:
> On Thu, 2014-04-17 at 19:46 +0200, Sebastian Ott wrote:
>
> > 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>
>
> Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
>
> (Pending you've compile tested it on powerpc, I'm on vacation and
> haven't done it :)
I did:
make ARCH=powerpc CROSS_COMPILE=powerpc64-4.3.2- g5_defconfig
make ARCH=powerpc CROSS_COMPILE=powerpc64-4.3.2-
and failed with:
CC arch/powerpc/lib/xor_vmx.o
In file included from include/linux/list.h:4,
from include/linux/preempt.h:10,
from arch/powerpc/lib/xor_vmx.c:22:
include/linux/types.h:29: error: both ‘unsigned’ and ‘_Bool’ in declaration specifiers
cc1: warnings being treated as errors
include/linux/types.h:29: error: useless type name in empty declaration
make ARCH=powerpc CROSS_COMPILE=powerpc64-4.3.2- arch/powerpc/kernel/ drivers/pci/
worked just fine.
Regards,
Sebastian
>
> > ---
> > 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,
> > };
> >
>
>
>
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Resend] pcibios_add_platform_entries usage
2014-04-18 10:10 ` Sebastian Ott
@ 2014-04-18 21:31 ` Benjamin Herrenschmidt
2014-04-22 8:26 ` Sebastian Ott
0 siblings, 1 reply; 13+ messages in thread
From: Benjamin Herrenschmidt @ 2014-04-18 21:31 UTC (permalink / raw)
To: Sebastian Ott
Cc: Bjorn Helgaas, linux-pci, Greg Kroah-Hartman, Michal Simek,
Paul Mackerras
On Fri, 2014-04-18 at 12:10 +0200, Sebastian Ott wrote:
> On Fri, 18 Apr 2014, Benjamin Herrenschmidt wrote:
> > On Thu, 2014-04-17 at 19:46 +0200, Sebastian Ott wrote:
> >
> > > 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>
> >
> > Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
> >
> > (Pending you've compile tested it on powerpc, I'm on vacation and
> > haven't done it :)
>
> I did:
> make ARCH=powerpc CROSS_COMPILE=powerpc64-4.3.2- g5_defconfig
> make ARCH=powerpc CROSS_COMPILE=powerpc64-4.3.2-
>
> and failed with:
> CC arch/powerpc/lib/xor_vmx.o
> In file included from include/linux/list.h:4,
> from include/linux/preempt.h:10,
> from arch/powerpc/lib/xor_vmx.c:22:
> include/linux/types.h:29: error: both ‘unsigned’ and ‘_Bool’ in declaration specifiers
> cc1: warnings being treated as errors
> include/linux/types.h:29: error: useless type name in empty declaration
Not sure what's up here, did you try with a more recent compiler ? 4.3
is pretty ancient by kernel standards.
You can find cross compilers there:
https://www.kernel.org/pub/tools/crosstool/
They aren't the newest either but they should work.
Ben.
>
> make ARCH=powerpc CROSS_COMPILE=powerpc64-4.3.2- arch/powerpc/kernel/ drivers/pci/
>
> worked just fine.
>
> Regards,
> Sebastian
>
> >
> > > ---
> > > 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,
> > > };
> > >
> >
> >
> >
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Resend] pcibios_add_platform_entries usage
2014-04-18 21:31 ` Benjamin Herrenschmidt
@ 2014-04-22 8:26 ` Sebastian Ott
2014-04-23 6:48 ` Michal Simek
0 siblings, 1 reply; 13+ messages in thread
From: Sebastian Ott @ 2014-04-22 8:26 UTC (permalink / raw)
To: Benjamin Herrenschmidt
Cc: Bjorn Helgaas, linux-pci, Greg Kroah-Hartman, Michal Simek,
Paul Mackerras
[-- Attachment #1: Type: TEXT/PLAIN, Size: 5492 bytes --]
On Sat, 19 Apr 2014, Benjamin Herrenschmidt wrote:
> On Fri, 2014-04-18 at 12:10 +0200, Sebastian Ott wrote:
> > On Fri, 18 Apr 2014, Benjamin Herrenschmidt wrote:
> > > On Thu, 2014-04-17 at 19:46 +0200, Sebastian Ott wrote:
> > >
> > > > 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>
> > >
> > > Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
> > >
> > > (Pending you've compile tested it on powerpc, I'm on vacation and
> > > haven't done it :)
> >
> > I did:
> > make ARCH=powerpc CROSS_COMPILE=powerpc64-4.3.2- g5_defconfig
> > make ARCH=powerpc CROSS_COMPILE=powerpc64-4.3.2-
> >
> > and failed with:
> > CC arch/powerpc/lib/xor_vmx.o
> > In file included from include/linux/list.h:4,
> > from include/linux/preempt.h:10,
> > from arch/powerpc/lib/xor_vmx.c:22:
> > include/linux/types.h:29: error: both ‘unsigned’ and ‘_Bool’ in declaration specifiers
> > cc1: warnings being treated as errors
> > include/linux/types.h:29: error: useless type name in empty declaration
>
> Not sure what's up here, did you try with a more recent compiler ? 4.3
> is pretty ancient by kernel standards.
>
> You can find cross compilers there:
>
> https://www.kernel.org/pub/tools/crosstool/
>
> They aren't the newest either but they should work.
Yes. That did the trick.
Thanks,
Sebastian
> >
> > make ARCH=powerpc CROSS_COMPILE=powerpc64-4.3.2- arch/powerpc/kernel/ drivers/pci/
> >
> > worked just fine.
> >
> > Regards,
> > Sebastian
> >
> > >
> > > > ---
> > > > 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,
> > > > };
> > > >
> > >
> > >
> > >
>
>
>
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Resend] pcibios_add_platform_entries usage
2014-04-22 8:26 ` Sebastian Ott
@ 2014-04-23 6:48 ` Michal Simek
2014-04-23 9:00 ` Sebastian Ott
0 siblings, 1 reply; 13+ messages in thread
From: Michal Simek @ 2014-04-23 6:48 UTC (permalink / raw)
To: Sebastian Ott
Cc: Benjamin Herrenschmidt, Bjorn Helgaas, linux-pci,
Greg Kroah-Hartman, Paul Mackerras
[-- Attachment #1: Type: text/plain, Size: 2300 bytes --]
On 04/22/2014 10:26 AM, Sebastian Ott wrote:
> On Sat, 19 Apr 2014, Benjamin Herrenschmidt wrote:
>> On Fri, 2014-04-18 at 12:10 +0200, Sebastian Ott wrote:
>>> On Fri, 18 Apr 2014, Benjamin Herrenschmidt wrote:
>>>> On Thu, 2014-04-17 at 19:46 +0200, Sebastian Ott wrote:
>>>>
>>>>> 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>
>>>>
>>>> Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
>>>>
>>>> (Pending you've compile tested it on powerpc, I'm on vacation and
>>>> haven't done it :)
>>>
>>> I did:
>>> make ARCH=powerpc CROSS_COMPILE=powerpc64-4.3.2- g5_defconfig
>>> make ARCH=powerpc CROSS_COMPILE=powerpc64-4.3.2-
>>>
>>> and failed with:
>>> CC arch/powerpc/lib/xor_vmx.o
>>> In file included from include/linux/list.h:4,
>>> from include/linux/preempt.h:10,
>>> from arch/powerpc/lib/xor_vmx.c:22:
>>> include/linux/types.h:29: error: both ‘unsigned’ and ‘_Bool’ in declaration specifiers
>>> cc1: warnings being treated as errors
>>> include/linux/types.h:29: error: useless type name in empty declaration
>>
>> Not sure what's up here, did you try with a more recent compiler ? 4.3
>> is pretty ancient by kernel standards.
>>
>> You can find cross compilers there:
>>
>> https://www.kernel.org/pub/tools/crosstool/
>>
>> They aren't the newest either but they should work.
>
> Yes. That did the trick.
Hope that you did the same for microblaze or just push the repo/branch with these
patches to zero-day testing system and you got the results.
Thanks,
Michal
--
Michal Simek, Ing. (M.Eng), OpenPGP -> KeyID: FE3D1F91
w: www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel - Microblaze cpu - http://www.monstr.eu/fdt/
Maintainer of Linux kernel - Xilinx Zynq ARM architecture
Microblaze U-BOOT custodian and responsible for u-boot arm zynq platform
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 263 bytes --]
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Resend] pcibios_add_platform_entries usage
2014-04-23 6:48 ` Michal Simek
@ 2014-04-23 9:00 ` Sebastian Ott
0 siblings, 0 replies; 13+ messages in thread
From: Sebastian Ott @ 2014-04-23 9:00 UTC (permalink / raw)
To: Michal Simek
Cc: Benjamin Herrenschmidt, Bjorn Helgaas, linux-pci,
Greg Kroah-Hartman, Paul Mackerras
[-- Attachment #1: Type: TEXT/PLAIN, Size: 2465 bytes --]
On Wed, 23 Apr 2014, Michal Simek wrote:
> On 04/22/2014 10:26 AM, Sebastian Ott wrote:
> > On Sat, 19 Apr 2014, Benjamin Herrenschmidt wrote:
> >> On Fri, 2014-04-18 at 12:10 +0200, Sebastian Ott wrote:
> >>> On Fri, 18 Apr 2014, Benjamin Herrenschmidt wrote:
> >>>> On Thu, 2014-04-17 at 19:46 +0200, Sebastian Ott wrote:
> >>>>
> >>>>> 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>
> >>>>
> >>>> Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
> >>>>
> >>>> (Pending you've compile tested it on powerpc, I'm on vacation and
> >>>> haven't done it :)
> >>>
> >>> I did:
> >>> make ARCH=powerpc CROSS_COMPILE=powerpc64-4.3.2- g5_defconfig
> >>> make ARCH=powerpc CROSS_COMPILE=powerpc64-4.3.2-
> >>>
> >>> and failed with:
> >>> CC arch/powerpc/lib/xor_vmx.o
> >>> In file included from include/linux/list.h:4,
> >>> from include/linux/preempt.h:10,
> >>> from arch/powerpc/lib/xor_vmx.c:22:
> >>> include/linux/types.h:29: error: both ‘unsigned’ and ‘_Bool’ in declaration specifiers
> >>> cc1: warnings being treated as errors
> >>> include/linux/types.h:29: error: useless type name in empty declaration
> >>
> >> Not sure what's up here, did you try with a more recent compiler ? 4.3
> >> is pretty ancient by kernel standards.
> >>
> >> You can find cross compilers there:
> >>
> >> https://www.kernel.org/pub/tools/crosstool/
> >>
> >> They aren't the newest either but they should work.
> >
> > Yes. That did the trick.
>
> Hope that you did the same for microblaze or just push the repo/branch with these
> patches to zero-day testing system and you got the results.
Yes, I compile-tested microblaze too.
Regards,
Sebastian
>
> Thanks,
> Michal
>
>
> --
> Michal Simek, Ing. (M.Eng), OpenPGP -> KeyID: FE3D1F91
> w: www.monstr.eu p: +42-0-721842854
> Maintainer of Linux kernel - Microblaze cpu - http://www.monstr.eu/fdt/
> Maintainer of Linux kernel - Xilinx Zynq ARM architecture
> Microblaze U-BOOT custodian and responsible for u-boot arm zynq platform
>
>
>
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Resend] pcibios_add_platform_entries usage
2014-04-17 17:46 ` Sebastian Ott
2014-04-17 21:02 ` Benjamin Herrenschmidt
@ 2014-04-29 23:30 ` Bjorn Helgaas
2014-04-30 14:40 ` Sebastian Ott
1 sibling, 1 reply; 13+ messages in thread
From: Bjorn Helgaas @ 2014-04-29 23:30 UTC (permalink / raw)
To: Sebastian Ott
Cc: linux-pci, Greg Kroah-Hartman, Michal Simek,
Benjamin Herrenschmidt, Paul Mackerras
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,
> };
>
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Resend] pcibios_add_platform_entries usage
2014-04-29 23:30 ` Bjorn Helgaas
@ 2014-04-30 14:40 ` Sebastian Ott
0 siblings, 0 replies; 13+ messages in thread
From: Sebastian Ott @ 2014-04-30 14:40 UTC (permalink / raw)
To: Bjorn Helgaas
Cc: linux-pci, Greg Kroah-Hartman, Michal Simek,
Benjamin Herrenschmidt, Paul Mackerras
[-- Attachment #1: Type: TEXT/PLAIN, Size: 7273 bytes --]
On Tue, 29 Apr 2014, Bjorn Helgaas wrote:
> 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.
My bad. It's in the feature branch of Martin's s390 tree:
https://git.kernel.org/cgit/linux/kernel/git/s390/linux.git/commit/?h=features&id=8e209e424f8b816f9d957b99ac8d514dc1402f38
>From 8e209e424f8b816f9d957b99ac8d514dc1402f38 Mon Sep 17 00:00:00 2001
From: Sebastian Ott <sebott@linux.vnet.ibm.com>
Date: Wed, 16 Apr 2014 16:11:00 +0200
Subject: [PATCH] s390/pci: use pdev->dev.groups for attribute creation
Let the driver core handle attribute creation by putting all s390
specific pci attributes in an attribute group which is referenced
by pdev->dev.groups in pcibios_add_device.
Link: https://lkml.kernel.org/r/alpine.LFD.2.11.1404141101500.1529@denkbrett
Reviewed-by: Gerald Schaefer <gerald.schaefer@de.ibm.com>
Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
---
arch/s390/include/asm/pci.h | 6 ++----
arch/s390/pci/pci.c | 6 +-----
arch/s390/pci/pci_sysfs.c | 44 +++++++++++++-------------------------------
3 files changed, 16 insertions(+), 40 deletions(-)
diff --git a/arch/s390/include/asm/pci.h b/arch/s390/include/asm/pci.h
index 2583466..79b5f07 100644
--- a/arch/s390/include/asm/pci.h
+++ b/arch/s390/include/asm/pci.h
@@ -120,6 +120,8 @@ static inline bool zdev_enabled(struct zpci_dev *zdev)
return (zdev->fh & (1UL << 31)) ? true : false;
}
+extern const struct attribute_group *zpci_attr_groups[];
+
/* -----------------------------------------------------------------------------
Prototypes
----------------------------------------------------------------------------- */
@@ -166,10 +168,6 @@ static inline void zpci_exit_slot(struct zpci_dev *zdev) {}
struct zpci_dev *get_zdev(struct pci_dev *);
struct zpci_dev *get_zdev_by_fid(u32);
-/* sysfs */
-int zpci_sysfs_add_device(struct device *);
-void zpci_sysfs_remove_device(struct device *);
-
/* DMA */
int zpci_dma_init(void);
void zpci_dma_exit(void);
diff --git a/arch/s390/pci/pci.c b/arch/s390/pci/pci.c
index 1df1d29..bdf0257 100644
--- a/arch/s390/pci/pci.c
+++ b/arch/s390/pci/pci.c
@@ -530,11 +530,6 @@ static void zpci_unmap_resources(struct zpci_dev *zdev)
}
}
-int pcibios_add_platform_entries(struct pci_dev *pdev)
-{
- return zpci_sysfs_add_device(&pdev->dev);
-}
-
static int __init zpci_irq_init(void)
{
int rc;
@@ -671,6 +666,7 @@ int pcibios_add_device(struct pci_dev *pdev)
int i;
zdev->pdev = pdev;
+ pdev->dev.groups = zpci_attr_groups;
zpci_map_resources(zdev);
for (i = 0; i < PCI_BAR_COUNT; i++) {
diff --git a/arch/s390/pci/pci_sysfs.c b/arch/s390/pci/pci_sysfs.c
index ebe2c16..f23da1c 100644
--- a/arch/s390/pci/pci_sysfs.c
+++ b/arch/s390/pci/pci_sysfs.c
@@ -51,36 +51,18 @@ static ssize_t recover_store(struct device *dev, struct device_attribute *attr,
}
static DEVICE_ATTR_WO(recover);
-static struct device_attribute *zpci_dev_attrs[] = {
- &dev_attr_function_id,
- &dev_attr_function_handle,
- &dev_attr_pchid,
- &dev_attr_pfgid,
- &dev_attr_recover,
+static struct attribute *zpci_dev_attrs[] = {
+ &dev_attr_function_id.attr,
+ &dev_attr_function_handle.attr,
+ &dev_attr_pchid.attr,
+ &dev_attr_pfgid.attr,
+ &dev_attr_recover.attr,
+ NULL,
+};
+static struct attribute_group zpci_attr_group = {
+ .attrs = zpci_dev_attrs,
+};
+const struct attribute_group *zpci_attr_groups[] = {
+ &zpci_attr_group,
NULL,
};
-
-int zpci_sysfs_add_device(struct device *dev)
-{
- int i, rc = 0;
-
- for (i = 0; zpci_dev_attrs[i]; i++) {
- rc = device_create_file(dev, zpci_dev_attrs[i]);
- if (rc)
- goto error;
- }
- return 0;
-
-error:
- while (--i >= 0)
- device_remove_file(dev, zpci_dev_attrs[i]);
- return rc;
-}
-
-void zpci_sysfs_remove_device(struct device *dev)
-{
- int i;
-
- for (i = 0; zpci_dev_attrs[i]; i++)
- device_remove_file(dev, zpci_dev_attrs[i]);
-}
--
1.8.5.5
^ permalink raw reply related [flat|nested] 13+ messages in thread
end of thread, other threads:[~2014-04-30 14:41 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
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
2014-04-30 14:40 ` Sebastian Ott
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).