aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pci/pci-sysfs.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/pci/pci-sysfs.c')
-rw-r--r--drivers/pci/pci-sysfs.c21
1 files changed, 11 insertions, 10 deletions
diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c
index 6ca0061137a6..a15f94072a6f 100644
--- a/drivers/pci/pci-sysfs.c
+++ b/drivers/pci/pci-sysfs.c
@@ -29,7 +29,7 @@ static int sysfs_initialized; /* = 0 */
29/* show configuration fields */ 29/* show configuration fields */
30#define pci_config_attr(field, format_string) \ 30#define pci_config_attr(field, format_string) \
31static ssize_t \ 31static ssize_t \
32field##_show(struct device *dev, char *buf) \ 32field##_show(struct device *dev, struct device_attribute *attr, char *buf) \
33{ \ 33{ \
34 struct pci_dev *pdev; \ 34 struct pci_dev *pdev; \
35 \ 35 \
@@ -44,7 +44,7 @@ pci_config_attr(subsystem_device, "0x%04x\n");
44pci_config_attr(class, "0x%06x\n"); 44pci_config_attr(class, "0x%06x\n");
45pci_config_attr(irq, "%u\n"); 45pci_config_attr(irq, "%u\n");
46 46
47static ssize_t local_cpus_show(struct device *dev, char *buf) 47static ssize_t local_cpus_show(struct device *dev, struct device_attribute *attr, char *buf)
48{ 48{
49 cpumask_t mask = pcibus_to_cpumask(to_pci_dev(dev)->bus); 49 cpumask_t mask = pcibus_to_cpumask(to_pci_dev(dev)->bus);
50 int len = cpumask_scnprintf(buf, PAGE_SIZE-2, mask); 50 int len = cpumask_scnprintf(buf, PAGE_SIZE-2, mask);
@@ -54,7 +54,7 @@ static ssize_t local_cpus_show(struct device *dev, char *buf)
54 54
55/* show resources */ 55/* show resources */
56static ssize_t 56static ssize_t
57resource_show(struct device * dev, char * buf) 57resource_show(struct device * dev, struct device_attribute *attr, char * buf)
58{ 58{
59 struct pci_dev * pci_dev = to_pci_dev(dev); 59 struct pci_dev * pci_dev = to_pci_dev(dev);
60 char * str = buf; 60 char * str = buf;
@@ -73,7 +73,7 @@ resource_show(struct device * dev, char * buf)
73 return (str - buf); 73 return (str - buf);
74} 74}
75 75
76static ssize_t modalias_show(struct device *dev, char *buf) 76static ssize_t modalias_show(struct device *dev, struct device_attribute *attr, char *buf)
77{ 77{
78 struct pci_dev *pci_dev = to_pci_dev(dev); 78 struct pci_dev *pci_dev = to_pci_dev(dev);
79 79
@@ -339,16 +339,17 @@ pci_create_resource_files(struct pci_dev *pdev)
339 if (!pci_resource_len(pdev, i)) 339 if (!pci_resource_len(pdev, i))
340 continue; 340 continue;
341 341
342 res_attr = kmalloc(sizeof(*res_attr) + 10, GFP_ATOMIC); 342 /* allocate attribute structure, piggyback attribute name */
343 res_attr = kcalloc(1, sizeof(*res_attr) + 10, GFP_ATOMIC);
343 if (res_attr) { 344 if (res_attr) {
344 memset(res_attr, 0, sizeof(*res_attr) + 10); 345 char *res_attr_name = (char *)(res_attr + 1);
346
345 pdev->res_attr[i] = res_attr; 347 pdev->res_attr[i] = res_attr;
346 /* Allocated above after the res_attr struct */ 348 sprintf(res_attr_name, "resource%d", i);
347 res_attr->attr.name = (char *)(res_attr + 1); 349 res_attr->attr.name = res_attr_name;
348 sprintf(res_attr->attr.name, "resource%d", i);
349 res_attr->size = pci_resource_len(pdev, i);
350 res_attr->attr.mode = S_IRUSR | S_IWUSR; 350 res_attr->attr.mode = S_IRUSR | S_IWUSR;
351 res_attr->attr.owner = THIS_MODULE; 351 res_attr->attr.owner = THIS_MODULE;
352 res_attr->size = pci_resource_len(pdev, i);
352 res_attr->mmap = pci_mmap_resource; 353 res_attr->mmap = pci_mmap_resource;
353 res_attr->private = &pdev->resource[i]; 354 res_attr->private = &pdev->resource[i];
354 sysfs_create_bin_file(&pdev->dev.kobj, res_attr); 355 sysfs_create_bin_file(&pdev->dev.kobj, res_attr);