diff options
author | Krzysztof Wilczyński <kw@linux.com> | 2021-04-27 22:18:26 +0300 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2021-04-29 18:07:31 +0300 |
commit | 4dd7dfa166d220a245ee21f499bb1084bc249393 (patch) | |
tree | 26ebc7a0a0b3926a7600cf14701303d71aee4640 | |
parent | 2ed6494155444dd4d2005869edce1ae73b4f23ca (diff) | |
download | linux-4dd7dfa166d220a245ee21f499bb1084bc249393.tar.xz |
PCI/sysfs: Define SMBIOS label attributes with DEVICE_ATTR*()
Use DEVICE_ATTR*() to simplify definition of the SMBIOS label attributes.
No functional change intended.
Note that dev_attr_smbios_label requires __ATTR() because the "label"
attribute can be exposed via either ACPI or SMBIOS, and we already have the
ACPI label_show() function in this file.
[bhelgaas: split to separate patch]
Link: https://lore.kernel.org/r/20210416205856.3234481-6-kw@linux.com
Signed-off-by: Krzysztof Wilczyński <kw@linux.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
-rw-r--r-- | drivers/pci/pci-label.c | 41 |
1 files changed, 18 insertions, 23 deletions
diff --git a/drivers/pci/pci-label.c b/drivers/pci/pci-label.c index 4fef6fc0740f..6c0c4e700bc7 100644 --- a/drivers/pci/pci-label.c +++ b/drivers/pci/pci-label.c @@ -92,8 +92,8 @@ static size_t find_smbios_instance_string(struct pci_dev *pdev, char *buf, return 0; } -static umode_t smbios_instance_string_exist(struct kobject *kobj, - struct attribute *attr, int n) +static umode_t smbios_attr_is_visible(struct kobject *kobj, struct attribute *a, + int n) { struct device *dev; struct pci_dev *pdev; @@ -101,12 +101,14 @@ static umode_t smbios_instance_string_exist(struct kobject *kobj, dev = kobj_to_dev(kobj); pdev = to_pci_dev(dev); - return find_smbios_instance_string(pdev, NULL, SMBIOS_ATTR_NONE) ? - S_IRUGO : 0; + if (!find_smbios_instance_string(pdev, NULL, SMBIOS_ATTR_NONE)) + return 0; + + return a->mode; } -static ssize_t smbioslabel_show(struct device *dev, - struct device_attribute *attr, char *buf) +static ssize_t smbios_label_show(struct device *dev, + struct device_attribute *attr, char *buf) { struct pci_dev *pdev; pdev = to_pci_dev(dev); @@ -114,9 +116,11 @@ static ssize_t smbioslabel_show(struct device *dev, return find_smbios_instance_string(pdev, buf, SMBIOS_ATTR_LABEL_SHOW); } +static struct device_attribute dev_attr_smbios_label = __ATTR(label, 0444, + smbios_label_show, NULL); -static ssize_t smbiosinstance_show(struct device *dev, - struct device_attribute *attr, char *buf) +static ssize_t index_show(struct device *dev, struct device_attribute *attr, + char *buf) { struct pci_dev *pdev; pdev = to_pci_dev(dev); @@ -124,26 +128,17 @@ static ssize_t smbiosinstance_show(struct device *dev, return find_smbios_instance_string(pdev, buf, SMBIOS_ATTR_INSTANCE_SHOW); } +static DEVICE_ATTR_RO(index); -static struct device_attribute smbios_attr_label = { - .attr = {.name = "label", .mode = 0444}, - .show = smbioslabel_show, -}; - -static struct device_attribute smbios_attr_instance = { - .attr = {.name = "index", .mode = 0444}, - .show = smbiosinstance_show, -}; - -static struct attribute *smbios_attributes[] = { - &smbios_attr_label.attr, - &smbios_attr_instance.attr, +static struct attribute *smbios_attrs[] = { + &dev_attr_smbios_label.attr, + &dev_attr_index.attr, NULL, }; static const struct attribute_group smbios_attr_group = { - .attrs = smbios_attributes, - .is_visible = smbios_instance_string_exist, + .attrs = smbios_attrs, + .is_visible = smbios_attr_is_visible, }; static int pci_create_smbiosname_file(struct pci_dev *pdev) |