diff options
-rw-r--r-- | drivers/pci/pci-sysfs.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c index 37897a8c95e0..bc405c035ce3 100644 --- a/drivers/pci/pci-sysfs.c +++ b/drivers/pci/pci-sysfs.c | |||
@@ -45,6 +45,28 @@ pci_config_attr(class, "0x%06x\n"); | |||
45 | pci_config_attr(irq, "%u\n"); | 45 | pci_config_attr(irq, "%u\n"); |
46 | pci_config_attr(is_enabled, "%u\n"); | 46 | pci_config_attr(is_enabled, "%u\n"); |
47 | 47 | ||
48 | static ssize_t broken_parity_status_show(struct device *dev, | ||
49 | struct device_attribute *attr, | ||
50 | char *buf) | ||
51 | { | ||
52 | struct pci_dev *pdev = to_pci_dev(dev); | ||
53 | return sprintf (buf, "%u\n", pdev->broken_parity_status); | ||
54 | } | ||
55 | |||
56 | static ssize_t broken_parity_status_store(struct device *dev, | ||
57 | struct device_attribute *attr, | ||
58 | const char *buf, size_t count) | ||
59 | { | ||
60 | struct pci_dev *pdev = to_pci_dev(dev); | ||
61 | ssize_t consumed = -EINVAL; | ||
62 | |||
63 | if ((count > 0) && (*buf == '0' || *buf == '1')) { | ||
64 | pdev->broken_parity_status = *buf == '1' ? 1 : 0; | ||
65 | consumed = count; | ||
66 | } | ||
67 | return consumed; | ||
68 | } | ||
69 | |||
48 | static ssize_t local_cpus_show(struct device *dev, | 70 | static ssize_t local_cpus_show(struct device *dev, |
49 | struct device_attribute *attr, char *buf) | 71 | struct device_attribute *attr, char *buf) |
50 | { | 72 | { |
@@ -122,6 +144,8 @@ struct device_attribute pci_dev_attrs[] = { | |||
122 | __ATTR_RO(local_cpus), | 144 | __ATTR_RO(local_cpus), |
123 | __ATTR_RO(modalias), | 145 | __ATTR_RO(modalias), |
124 | __ATTR(enable, 0600, is_enabled_show, is_enabled_store), | 146 | __ATTR(enable, 0600, is_enabled_show, is_enabled_store), |
147 | __ATTR(broken_parity_status,(S_IRUGO|S_IWUSR), | ||
148 | broken_parity_status_show,broken_parity_status_store), | ||
125 | __ATTR_NULL, | 149 | __ATTR_NULL, |
126 | }; | 150 | }; |
127 | 151 | ||