diff options
author | Sebastian Ott <sebott@linux.vnet.ibm.com> | 2014-04-30 16:50:09 -0400 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2014-05-22 12:54:06 -0400 |
commit | ef4858c64e836b0b9dbdb9ece13ce932d9fcd4ad (patch) | |
tree | 599cb5cfa02091b77f9c30bada76e6b1bdebe27b | |
parent | dfc73e7acd9925b434a355eeeed86d44cb435f9c (diff) |
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>
-rw-r--r-- | arch/s390/include/asm/pci.h | 6 | ||||
-rw-r--r-- | arch/s390/pci/pci.c | 6 | ||||
-rw-r--r-- | 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 2583466f576b..79b5f0783a30 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) | |||
120 | return (zdev->fh & (1UL << 31)) ? true : false; | 120 | return (zdev->fh & (1UL << 31)) ? true : false; |
121 | } | 121 | } |
122 | 122 | ||
123 | extern const struct attribute_group *zpci_attr_groups[]; | ||
124 | |||
123 | /* ----------------------------------------------------------------------------- | 125 | /* ----------------------------------------------------------------------------- |
124 | Prototypes | 126 | Prototypes |
125 | ----------------------------------------------------------------------------- */ | 127 | ----------------------------------------------------------------------------- */ |
@@ -166,10 +168,6 @@ static inline void zpci_exit_slot(struct zpci_dev *zdev) {} | |||
166 | struct zpci_dev *get_zdev(struct pci_dev *); | 168 | struct zpci_dev *get_zdev(struct pci_dev *); |
167 | struct zpci_dev *get_zdev_by_fid(u32); | 169 | struct zpci_dev *get_zdev_by_fid(u32); |
168 | 170 | ||
169 | /* sysfs */ | ||
170 | int zpci_sysfs_add_device(struct device *); | ||
171 | void zpci_sysfs_remove_device(struct device *); | ||
172 | |||
173 | /* DMA */ | 171 | /* DMA */ |
174 | int zpci_dma_init(void); | 172 | int zpci_dma_init(void); |
175 | void zpci_dma_exit(void); | 173 | void zpci_dma_exit(void); |
diff --git a/arch/s390/pci/pci.c b/arch/s390/pci/pci.c index 1df1d29ac81d..bdf02570d1df 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) | |||
530 | } | 530 | } |
531 | } | 531 | } |
532 | 532 | ||
533 | int pcibios_add_platform_entries(struct pci_dev *pdev) | ||
534 | { | ||
535 | return zpci_sysfs_add_device(&pdev->dev); | ||
536 | } | ||
537 | |||
538 | static int __init zpci_irq_init(void) | 533 | static int __init zpci_irq_init(void) |
539 | { | 534 | { |
540 | int rc; | 535 | int rc; |
@@ -671,6 +666,7 @@ int pcibios_add_device(struct pci_dev *pdev) | |||
671 | int i; | 666 | int i; |
672 | 667 | ||
673 | zdev->pdev = pdev; | 668 | zdev->pdev = pdev; |
669 | pdev->dev.groups = zpci_attr_groups; | ||
674 | zpci_map_resources(zdev); | 670 | zpci_map_resources(zdev); |
675 | 671 | ||
676 | for (i = 0; i < PCI_BAR_COUNT; i++) { | 672 | 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 ab4a91393005..b56a3958f1a7 100644 --- a/arch/s390/pci/pci_sysfs.c +++ b/arch/s390/pci/pci_sysfs.c | |||
@@ -72,36 +72,18 @@ static ssize_t store_recover(struct device *dev, struct device_attribute *attr, | |||
72 | } | 72 | } |
73 | static DEVICE_ATTR(recover, S_IWUSR, NULL, store_recover); | 73 | static DEVICE_ATTR(recover, S_IWUSR, NULL, store_recover); |
74 | 74 | ||
75 | static struct device_attribute *zpci_dev_attrs[] = { | 75 | static struct attribute *zpci_dev_attrs[] = { |
76 | &dev_attr_function_id, | 76 | &dev_attr_function_id.attr, |
77 | &dev_attr_function_handle, | 77 | &dev_attr_function_handle.attr, |
78 | &dev_attr_pchid, | 78 | &dev_attr_pchid.attr, |
79 | &dev_attr_pfgid, | 79 | &dev_attr_pfgid.attr, |
80 | &dev_attr_recover, | 80 | &dev_attr_recover.attr, |
81 | NULL, | ||
82 | }; | ||
83 | static struct attribute_group zpci_attr_group = { | ||
84 | .attrs = zpci_dev_attrs, | ||
85 | }; | ||
86 | const struct attribute_group *zpci_attr_groups[] = { | ||
87 | &zpci_attr_group, | ||
81 | NULL, | 88 | NULL, |
82 | }; | 89 | }; |
83 | |||
84 | int zpci_sysfs_add_device(struct device *dev) | ||
85 | { | ||
86 | int i, rc = 0; | ||
87 | |||
88 | for (i = 0; zpci_dev_attrs[i]; i++) { | ||
89 | rc = device_create_file(dev, zpci_dev_attrs[i]); | ||
90 | if (rc) | ||
91 | goto error; | ||
92 | } | ||
93 | return 0; | ||
94 | |||
95 | error: | ||
96 | while (--i >= 0) | ||
97 | device_remove_file(dev, zpci_dev_attrs[i]); | ||
98 | return rc; | ||
99 | } | ||
100 | |||
101 | void zpci_sysfs_remove_device(struct device *dev) | ||
102 | { | ||
103 | int i; | ||
104 | |||
105 | for (i = 0; zpci_dev_attrs[i]; i++) | ||
106 | device_remove_file(dev, zpci_dev_attrs[i]); | ||
107 | } | ||