diff mbox

[01/11] pci: convert bus code to use dev_groups

Message ID 1381128950-28125-2-git-send-email-gregkh@linuxfoundation.org (mailing list archive)
State New, archived
Delegated to: Bjorn Helgaas
Headers show

Commit Message

Greg Kroah-Hartman Oct. 7, 2013, 6:55 a.m. UTC
The dev_attrs field of struct bus_type is going away soon, dev_groups
should be used instead.  This converts the PCI bus code to use the
correct field.

Cc: Bjorn Helgaas <bhelgaas@google.com>
Cc: <linux-pci@vger.kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---

Bjorn, I can take this through my driver-core tree if you like, just let
me know what would be the easiest for you.

 drivers/pci/pci-driver.c |  2 +-
 drivers/pci/pci-sysfs.c  | 73 ++++++++++++++++++++++++++++++------------------
 drivers/pci/pci.h        |  2 +-
 3 files changed, 48 insertions(+), 29 deletions(-)

Comments

Bjorn Helgaas Oct. 7, 2013, 6:21 p.m. UTC | #1
[+cc Sachin]

On Mon, Oct 7, 2013 at 12:55 AM, Greg Kroah-Hartman
<gregkh@linuxfoundation.org> wrote:
> The dev_attrs field of struct bus_type is going away soon, dev_groups
> should be used instead.  This converts the PCI bus code to use the
> correct field.
>
> Cc: Bjorn Helgaas <bhelgaas@google.com>
> Cc: <linux-pci@vger.kernel.org>
> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> ---
>
> Bjorn, I can take this through my driver-core tree if you like, just let
> me know what would be the easiest for you.

Let me take it, if I can figure out how to do it.  I already tripped
over a conflict where Sachin made pci_bus_attrs static, which is fine
in linux-next (with your 244afeca ("PCI: convert bus code to
use bus_groups") commit), but not fine in pci/next, which didn't have that.

I should be able to "git merge --no-ff --log gregkh/driver-core-next"
into my "next" branch, then apply your patch as usual, right?

Bjorn
--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Greg Kroah-Hartman Oct. 7, 2013, 8:41 p.m. UTC | #2
On Mon, Oct 07, 2013 at 12:21:36PM -0600, Bjorn Helgaas wrote:
> [+cc Sachin]
> 
> On Mon, Oct 7, 2013 at 12:55 AM, Greg Kroah-Hartman
> <gregkh@linuxfoundation.org> wrote:
> > The dev_attrs field of struct bus_type is going away soon, dev_groups
> > should be used instead.  This converts the PCI bus code to use the
> > correct field.
> >
> > Cc: Bjorn Helgaas <bhelgaas@google.com>
> > Cc: <linux-pci@vger.kernel.org>
> > Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> > ---
> >
> > Bjorn, I can take this through my driver-core tree if you like, just let
> > me know what would be the easiest for you.
> 
> Let me take it, if I can figure out how to do it.  I already tripped
> over a conflict where Sachin made pci_bus_attrs static, which is fine
> in linux-next (with your 244afeca ("PCI: convert bus code to
> use bus_groups") commit), but not fine in pci/next, which didn't have that.

Ah, yeah, that will conflict, sorry.

> I should be able to "git merge --no-ff --log gregkh/driver-core-next"
> into my "next" branch, then apply your patch as usual, right?

You can, but do you really want all of my driver-core changes in there?
I can just send you the one pci change and you can then apply both of
them.  Then when we merge with Linus, there will not be any conflicts as
the same patches just showed up in two different trees, which should be
fine.

thanks,

greg k-h
--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Bjorn Helgaas Oct. 7, 2013, 8:47 p.m. UTC | #3
On Mon, Oct 7, 2013 at 2:41 PM, Greg Kroah-Hartman
<gregkh@linuxfoundation.org> wrote:
> On Mon, Oct 07, 2013 at 12:21:36PM -0600, Bjorn Helgaas wrote:
>> [+cc Sachin]
>>
>> On Mon, Oct 7, 2013 at 12:55 AM, Greg Kroah-Hartman
>> <gregkh@linuxfoundation.org> wrote:
>> > The dev_attrs field of struct bus_type is going away soon, dev_groups
>> > should be used instead.  This converts the PCI bus code to use the
>> > correct field.
>> >
>> > Cc: Bjorn Helgaas <bhelgaas@google.com>
>> > Cc: <linux-pci@vger.kernel.org>
>> > Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
>> > ---
>> >
>> > Bjorn, I can take this through my driver-core tree if you like, just let
>> > me know what would be the easiest for you.
>>
>> Let me take it, if I can figure out how to do it.  I already tripped
>> over a conflict where Sachin made pci_bus_attrs static, which is fine
>> in linux-next (with your 244afeca ("PCI: convert bus code to
>> use bus_groups") commit), but not fine in pci/next, which didn't have that.
>
> Ah, yeah, that will conflict, sorry.
>
>> I should be able to "git merge --no-ff --log gregkh/driver-core-next"
>> into my "next" branch, then apply your patch as usual, right?
>
> You can, but do you really want all of my driver-core changes in there?
> I can just send you the one pci change and you can then apply both of
> them.  Then when we merge with Linus, there will not be any conflicts as
> the same patches just showed up in two different trees, which should be
> fine.

Yes, putting just the PCI changes in my tree sounds much better.  I'll
try to work out what I need, and I'll poke you again if I need help :)

Bjorn
--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Bjorn Helgaas Oct. 7, 2013, 9:18 p.m. UTC | #4
On Mon, Oct 7, 2013 at 12:55 AM, Greg Kroah-Hartman
<gregkh@linuxfoundation.org> wrote:
> The dev_attrs field of struct bus_type is going away soon, dev_groups
> should be used instead.  This converts the PCI bus code to use the
> correct field.
>
> Cc: Bjorn Helgaas <bhelgaas@google.com>
> Cc: <linux-pci@vger.kernel.org>
> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> ---
>
> Bjorn, I can take this through my driver-core tree if you like, just let
> me know what would be the easiest for you.

I merged this to my pci/gregkh-driver-core branch for v3.13.  Thanks!

Bjorn

>  drivers/pci/pci-driver.c |  2 +-
>  drivers/pci/pci-sysfs.c  | 73 ++++++++++++++++++++++++++++++------------------
>  drivers/pci/pci.h        |  2 +-
>  3 files changed, 48 insertions(+), 29 deletions(-)
>
> diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
> index 38f3c01..9f85960 100644
> --- a/drivers/pci/pci-driver.c
> +++ b/drivers/pci/pci-driver.c
> @@ -1319,7 +1319,7 @@ struct bus_type pci_bus_type = {
>         .probe          = pci_device_probe,
>         .remove         = pci_device_remove,
>         .shutdown       = pci_device_shutdown,
> -       .dev_attrs      = pci_dev_attrs,
> +       .dev_groups     = pci_dev_groups,
>         .bus_groups     = pci_bus_groups,
>         .drv_groups     = pci_drv_groups,
>         .pm             = PCI_PM_OPS_PTR,
> diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c
> index d8eb880..618c060 100644
> --- a/drivers/pci/pci-sysfs.c
> +++ b/drivers/pci/pci-sysfs.c
> @@ -42,7 +42,8 @@ field##_show(struct device *dev, struct device_attribute *attr, char *buf)                            \
>                                                                         \
>         pdev = to_pci_dev (dev);                                        \
>         return sprintf (buf, format_string, pdev->field);               \
> -}
> +}                                                                      \
> +static DEVICE_ATTR_RO(field)
>
>  pci_config_attr(vendor, "0x%04x\n");
>  pci_config_attr(device, "0x%04x\n");
> @@ -73,6 +74,7 @@ static ssize_t broken_parity_status_store(struct device *dev,
>
>         return count;
>  }
> +static DEVICE_ATTR_RW(broken_parity_status);
>
>  static ssize_t local_cpus_show(struct device *dev,
>                         struct device_attribute *attr, char *buf)
> @@ -91,7 +93,7 @@ static ssize_t local_cpus_show(struct device *dev,
>         buf[len] = '\0';
>         return len;
>  }
> -
> +static DEVICE_ATTR_RO(local_cpus);
>
>  static ssize_t local_cpulist_show(struct device *dev,
>                         struct device_attribute *attr, char *buf)
> @@ -110,6 +112,7 @@ static ssize_t local_cpulist_show(struct device *dev,
>         buf[len] = '\0';
>         return len;
>  }
> +static DEVICE_ATTR_RO(local_cpulist);
>
>  /*
>   * PCI Bus Class Devices
> @@ -170,6 +173,7 @@ resource_show(struct device * dev, struct device_attribute *attr, char * buf)
>         }
>         return (str - buf);
>  }
> +static DEVICE_ATTR_RO(resource);
>
>  static ssize_t modalias_show(struct device *dev, struct device_attribute *attr, char *buf)
>  {
> @@ -181,10 +185,11 @@ static ssize_t modalias_show(struct device *dev, struct device_attribute *attr,
>                        (u8)(pci_dev->class >> 16), (u8)(pci_dev->class >> 8),
>                        (u8)(pci_dev->class));
>  }
> +static DEVICE_ATTR_RO(modalias);
>
> -static ssize_t is_enabled_store(struct device *dev,
> -                               struct device_attribute *attr, const char *buf,
> -                               size_t count)
> +static ssize_t enabled_store(struct device *dev,
> +                            struct device_attribute *attr, const char *buf,
> +                            size_t count)
>  {
>         struct pci_dev *pdev = to_pci_dev(dev);
>         unsigned long val;
> @@ -208,14 +213,15 @@ static ssize_t is_enabled_store(struct device *dev,
>         return result < 0 ? result : count;
>  }
>
> -static ssize_t is_enabled_show(struct device *dev,
> -                              struct device_attribute *attr, char *buf)
> +static ssize_t enabled_show(struct device *dev,
> +                           struct device_attribute *attr, char *buf)
>  {
>         struct pci_dev *pdev;
>
>         pdev = to_pci_dev (dev);
>         return sprintf (buf, "%u\n", atomic_read(&pdev->enable_cnt));
>  }
> +static DEVICE_ATTR_RW(enabled);
>
>  #ifdef CONFIG_NUMA
>  static ssize_t
> @@ -223,6 +229,7 @@ numa_node_show(struct device *dev, struct device_attribute *attr, char *buf)
>  {
>         return sprintf (buf, "%d\n", dev->numa_node);
>  }
> +static DEVICE_ATTR_RO(numa_node);
>  #endif
>
>  static ssize_t
> @@ -232,6 +239,7 @@ dma_mask_bits_show(struct device *dev, struct device_attribute *attr, char *buf)
>
>         return sprintf (buf, "%d\n", fls64(pdev->dma_mask));
>  }
> +static DEVICE_ATTR_RO(dma_mask_bits);
>
>  static ssize_t
>  consistent_dma_mask_bits_show(struct device *dev, struct device_attribute *attr,
> @@ -239,6 +247,7 @@ consistent_dma_mask_bits_show(struct device *dev, struct device_attribute *attr,
>  {
>         return sprintf (buf, "%d\n", fls64(dev->coherent_dma_mask));
>  }
> +static DEVICE_ATTR_RO(consistent_dma_mask_bits);
>
>  static ssize_t
>  msi_bus_show(struct device *dev, struct device_attribute *attr, char *buf)
> @@ -283,6 +292,7 @@ msi_bus_store(struct device *dev, struct device_attribute *attr,
>
>         return count;
>  }
> +static DEVICE_ATTR_RW(msi_bus);
>
>  static DEFINE_MUTEX(pci_remove_rescan_mutex);
>  static ssize_t bus_rescan_store(struct bus_type *bus, const char *buf,
> @@ -414,6 +424,7 @@ static ssize_t d3cold_allowed_show(struct device *dev,
>         struct pci_dev *pdev = to_pci_dev(dev);
>         return sprintf (buf, "%u\n", pdev->d3cold_allowed);
>  }
> +static DEVICE_ATTR_RW(d3cold_allowed);
>  #endif
>
>  #ifdef CONFIG_PCI_IOV
> @@ -499,30 +510,38 @@ static struct device_attribute sriov_numvfs_attr =
>                        sriov_numvfs_show, sriov_numvfs_store);
>  #endif /* CONFIG_PCI_IOV */
>
> -struct device_attribute pci_dev_attrs[] = {
> -       __ATTR_RO(resource),
> -       __ATTR_RO(vendor),
> -       __ATTR_RO(device),
> -       __ATTR_RO(subsystem_vendor),
> -       __ATTR_RO(subsystem_device),
> -       __ATTR_RO(class),
> -       __ATTR_RO(irq),
> -       __ATTR_RO(local_cpus),
> -       __ATTR_RO(local_cpulist),
> -       __ATTR_RO(modalias),
> +struct attribute *pci_dev_attrs[] = {
> +       &dev_attr_resource.attr,
> +       &dev_attr_vendor.attr,
> +       &dev_attr_device.attr,
> +       &dev_attr_subsystem_vendor.attr,
> +       &dev_attr_subsystem_device.attr,
> +       &dev_attr_class.attr,
> +       &dev_attr_irq.attr,
> +       &dev_attr_local_cpus.attr,
> +       &dev_attr_local_cpulist.attr,
> +       &dev_attr_modalias.attr,
>  #ifdef CONFIG_NUMA
> -       __ATTR_RO(numa_node),
> +       &dev_attr_numa_node.attr,
>  #endif
> -       __ATTR_RO(dma_mask_bits),
> -       __ATTR_RO(consistent_dma_mask_bits),
> -       __ATTR(enable, 0600, is_enabled_show, is_enabled_store),
> -       __ATTR(broken_parity_status,(S_IRUGO|S_IWUSR),
> -               broken_parity_status_show,broken_parity_status_store),
> -       __ATTR(msi_bus, 0644, msi_bus_show, msi_bus_store),
> +       &dev_attr_dma_mask_bits.attr,
> +       &dev_attr_consistent_dma_mask_bits.attr,
> +       &dev_attr_enabled.attr,
> +       &dev_attr_broken_parity_status.attr,
> +       &dev_attr_msi_bus.attr,
>  #if defined(CONFIG_PM_RUNTIME) && defined(CONFIG_ACPI)
> -       __ATTR(d3cold_allowed, 0644, d3cold_allowed_show, d3cold_allowed_store),
> +       &dev_attr_d3cold_allowed.attr,
>  #endif
> -       __ATTR_NULL,
> +       NULL,
> +};
> +
> +static const struct attribute_group pci_dev_group = {
> +       .attrs = pci_dev_attrs,
> +};
> +
> +const struct attribute_group *pci_dev_groups[] = {
> +       &pci_dev_group,
> +       NULL,
>  };
>
>  static struct attribute *pcibus_attrs[] = {
> diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h
> index 607be58..9c91ecc 100644
> --- a/drivers/pci/pci.h
> +++ b/drivers/pci/pci.h
> @@ -153,7 +153,7 @@ static inline int pci_no_d1d2(struct pci_dev *dev)
>         return (dev->no_d1d2 || parent_dstates);
>
>  }
> -extern struct device_attribute pci_dev_attrs[];
> +extern const struct attribute_group *pci_dev_groups[];
>  extern const struct attribute_group *pcibus_groups[];
>  extern struct device_type pci_dev_type;
>  extern const struct attribute_group *pci_bus_groups[];
> --
> 1.8.4.6.g82e253f.dirty
>
--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
index 38f3c01..9f85960 100644
--- a/drivers/pci/pci-driver.c
+++ b/drivers/pci/pci-driver.c
@@ -1319,7 +1319,7 @@  struct bus_type pci_bus_type = {
 	.probe		= pci_device_probe,
 	.remove		= pci_device_remove,
 	.shutdown	= pci_device_shutdown,
-	.dev_attrs	= pci_dev_attrs,
+	.dev_groups	= pci_dev_groups,
 	.bus_groups	= pci_bus_groups,
 	.drv_groups	= pci_drv_groups,
 	.pm		= PCI_PM_OPS_PTR,
diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c
index d8eb880..618c060 100644
--- a/drivers/pci/pci-sysfs.c
+++ b/drivers/pci/pci-sysfs.c
@@ -42,7 +42,8 @@  field##_show(struct device *dev, struct device_attribute *attr, char *buf)				\
 									\
 	pdev = to_pci_dev (dev);					\
 	return sprintf (buf, format_string, pdev->field);		\
-}
+}									\
+static DEVICE_ATTR_RO(field)
 
 pci_config_attr(vendor, "0x%04x\n");
 pci_config_attr(device, "0x%04x\n");
@@ -73,6 +74,7 @@  static ssize_t broken_parity_status_store(struct device *dev,
 
 	return count;
 }
+static DEVICE_ATTR_RW(broken_parity_status);
 
 static ssize_t local_cpus_show(struct device *dev,
 			struct device_attribute *attr, char *buf)
@@ -91,7 +93,7 @@  static ssize_t local_cpus_show(struct device *dev,
 	buf[len] = '\0';
 	return len;
 }
-
+static DEVICE_ATTR_RO(local_cpus);
 
 static ssize_t local_cpulist_show(struct device *dev,
 			struct device_attribute *attr, char *buf)
@@ -110,6 +112,7 @@  static ssize_t local_cpulist_show(struct device *dev,
 	buf[len] = '\0';
 	return len;
 }
+static DEVICE_ATTR_RO(local_cpulist);
 
 /*
  * PCI Bus Class Devices
@@ -170,6 +173,7 @@  resource_show(struct device * dev, struct device_attribute *attr, char * buf)
 	}
 	return (str - buf);
 }
+static DEVICE_ATTR_RO(resource);
 
 static ssize_t modalias_show(struct device *dev, struct device_attribute *attr, char *buf)
 {
@@ -181,10 +185,11 @@  static ssize_t modalias_show(struct device *dev, struct device_attribute *attr,
 		       (u8)(pci_dev->class >> 16), (u8)(pci_dev->class >> 8),
 		       (u8)(pci_dev->class));
 }
+static DEVICE_ATTR_RO(modalias);
 
-static ssize_t is_enabled_store(struct device *dev,
-				struct device_attribute *attr, const char *buf,
-				size_t count)
+static ssize_t enabled_store(struct device *dev,
+			     struct device_attribute *attr, const char *buf,
+			     size_t count)
 {
 	struct pci_dev *pdev = to_pci_dev(dev);
 	unsigned long val;
@@ -208,14 +213,15 @@  static ssize_t is_enabled_store(struct device *dev,
 	return result < 0 ? result : count;
 }
 
-static ssize_t is_enabled_show(struct device *dev,
-			       struct device_attribute *attr, char *buf)
+static ssize_t enabled_show(struct device *dev,
+			    struct device_attribute *attr, char *buf)
 {
 	struct pci_dev *pdev;
 
 	pdev = to_pci_dev (dev);
 	return sprintf (buf, "%u\n", atomic_read(&pdev->enable_cnt));
 }
+static DEVICE_ATTR_RW(enabled);
 
 #ifdef CONFIG_NUMA
 static ssize_t
@@ -223,6 +229,7 @@  numa_node_show(struct device *dev, struct device_attribute *attr, char *buf)
 {
 	return sprintf (buf, "%d\n", dev->numa_node);
 }
+static DEVICE_ATTR_RO(numa_node);
 #endif
 
 static ssize_t
@@ -232,6 +239,7 @@  dma_mask_bits_show(struct device *dev, struct device_attribute *attr, char *buf)
 
 	return sprintf (buf, "%d\n", fls64(pdev->dma_mask));
 }
+static DEVICE_ATTR_RO(dma_mask_bits);
 
 static ssize_t
 consistent_dma_mask_bits_show(struct device *dev, struct device_attribute *attr,
@@ -239,6 +247,7 @@  consistent_dma_mask_bits_show(struct device *dev, struct device_attribute *attr,
 {
 	return sprintf (buf, "%d\n", fls64(dev->coherent_dma_mask));
 }
+static DEVICE_ATTR_RO(consistent_dma_mask_bits);
 
 static ssize_t
 msi_bus_show(struct device *dev, struct device_attribute *attr, char *buf)
@@ -283,6 +292,7 @@  msi_bus_store(struct device *dev, struct device_attribute *attr,
 
 	return count;
 }
+static DEVICE_ATTR_RW(msi_bus);
 
 static DEFINE_MUTEX(pci_remove_rescan_mutex);
 static ssize_t bus_rescan_store(struct bus_type *bus, const char *buf,
@@ -414,6 +424,7 @@  static ssize_t d3cold_allowed_show(struct device *dev,
 	struct pci_dev *pdev = to_pci_dev(dev);
 	return sprintf (buf, "%u\n", pdev->d3cold_allowed);
 }
+static DEVICE_ATTR_RW(d3cold_allowed);
 #endif
 
 #ifdef CONFIG_PCI_IOV
@@ -499,30 +510,38 @@  static struct device_attribute sriov_numvfs_attr =
 		       sriov_numvfs_show, sriov_numvfs_store);
 #endif /* CONFIG_PCI_IOV */
 
-struct device_attribute pci_dev_attrs[] = {
-	__ATTR_RO(resource),
-	__ATTR_RO(vendor),
-	__ATTR_RO(device),
-	__ATTR_RO(subsystem_vendor),
-	__ATTR_RO(subsystem_device),
-	__ATTR_RO(class),
-	__ATTR_RO(irq),
-	__ATTR_RO(local_cpus),
-	__ATTR_RO(local_cpulist),
-	__ATTR_RO(modalias),
+struct attribute *pci_dev_attrs[] = {
+	&dev_attr_resource.attr,
+	&dev_attr_vendor.attr,
+	&dev_attr_device.attr,
+	&dev_attr_subsystem_vendor.attr,
+	&dev_attr_subsystem_device.attr,
+	&dev_attr_class.attr,
+	&dev_attr_irq.attr,
+	&dev_attr_local_cpus.attr,
+	&dev_attr_local_cpulist.attr,
+	&dev_attr_modalias.attr,
 #ifdef CONFIG_NUMA
-	__ATTR_RO(numa_node),
+	&dev_attr_numa_node.attr,
 #endif
-	__ATTR_RO(dma_mask_bits),
-	__ATTR_RO(consistent_dma_mask_bits),
-	__ATTR(enable, 0600, is_enabled_show, is_enabled_store),
-	__ATTR(broken_parity_status,(S_IRUGO|S_IWUSR),
-		broken_parity_status_show,broken_parity_status_store),
-	__ATTR(msi_bus, 0644, msi_bus_show, msi_bus_store),
+	&dev_attr_dma_mask_bits.attr,
+	&dev_attr_consistent_dma_mask_bits.attr,
+	&dev_attr_enabled.attr,
+	&dev_attr_broken_parity_status.attr,
+	&dev_attr_msi_bus.attr,
 #if defined(CONFIG_PM_RUNTIME) && defined(CONFIG_ACPI)
-	__ATTR(d3cold_allowed, 0644, d3cold_allowed_show, d3cold_allowed_store),
+	&dev_attr_d3cold_allowed.attr,
 #endif
-	__ATTR_NULL,
+	NULL,
+};
+
+static const struct attribute_group pci_dev_group = {
+	.attrs = pci_dev_attrs,
+};
+
+const struct attribute_group *pci_dev_groups[] = {
+	&pci_dev_group,
+	NULL,
 };
 
 static struct attribute *pcibus_attrs[] = {
diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h
index 607be58..9c91ecc 100644
--- a/drivers/pci/pci.h
+++ b/drivers/pci/pci.h
@@ -153,7 +153,7 @@  static inline int pci_no_d1d2(struct pci_dev *dev)
 	return (dev->no_d1d2 || parent_dstates);
 
 }
-extern struct device_attribute pci_dev_attrs[];
+extern const struct attribute_group *pci_dev_groups[];
 extern const struct attribute_group *pcibus_groups[];
 extern struct device_type pci_dev_type;
 extern const struct attribute_group *pci_bus_groups[];