[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH 1/2] xen: pcpu: Use static attribute groups for sysfs entry



Instead of manual calls of device_create_file() and
device_remove_file(), assign the static attribute groups to the device
to register.  The conditional build of sysfs is done in is_visible
callback instead.

Signed-off-by: Takashi Iwai <tiwai@xxxxxxx>
---
 drivers/xen/pcpu.c | 44 ++++++++++++++++++++++++++++----------------
 1 file changed, 28 insertions(+), 16 deletions(-)

diff --git a/drivers/xen/pcpu.c b/drivers/xen/pcpu.c
index 0aac403d53fd..49e88f2ce7a1 100644
--- a/drivers/xen/pcpu.c
+++ b/drivers/xen/pcpu.c
@@ -132,6 +132,33 @@ static ssize_t __ref store_online(struct device *dev,
 }
 static DEVICE_ATTR(online, S_IRUGO | S_IWUSR, show_online, store_online);
 
+static struct attribute *pcpu_dev_attrs[] = {
+       &dev_attr_online.attr,
+       NULL
+};
+
+static umode_t pcpu_dev_is_visible(struct kobject *kobj,
+                                  struct attribute *attr, int idx)
+{
+       struct device *dev = kobj_to_dev(kobj);
+       /*
+        * Xen never offline cpu0 due to several restrictions
+        * and assumptions. This basically doesn't add a sys control
+        * to user, one cannot attempt to offline BSP.
+        */
+       return dev->id ? attr->mode : 0;
+}
+
+static const struct attribute_group pcpu_dev_group = {
+       .attrs = pcpu_dev_attrs,
+       .is_visible = pcpu_dev_is_visible,
+};
+
+static const struct attribute_group *pcpu_dev_groups[] = {
+       &pcpu_dev_group,
+       NULL
+};
+
 static bool xen_pcpu_online(uint32_t flags)
 {
        return !!(flags & XEN_PCPU_FLAGS_ONLINE);
@@ -181,9 +208,6 @@ static void unregister_and_remove_pcpu(struct pcpu *pcpu)
                return;
 
        dev = &pcpu->dev;
-       if (dev->id)
-               device_remove_file(dev, &dev_attr_online);
-
        /* pcpu remove would be implicitly done */
        device_unregister(dev);
 }
@@ -200,6 +224,7 @@ static int register_pcpu(struct pcpu *pcpu)
        dev->bus = &xen_pcpu_subsys;
        dev->id = pcpu->cpu_id;
        dev->release = pcpu_release;
+       dev->groups = pcpu_dev_groups;
 
        err = device_register(dev);
        if (err) {
@@ -207,19 +232,6 @@ static int register_pcpu(struct pcpu *pcpu)
                return err;
        }
 
-       /*
-        * Xen never offline cpu0 due to several restrictions
-        * and assumptions. This basically doesn't add a sys control
-        * to user, one cannot attempt to offline BSP.
-        */
-       if (dev->id) {
-               err = device_create_file(dev, &dev_attr_online);
-               if (err) {
-                       device_unregister(dev);
-                       return err;
-               }
-       }
-
        return 0;
 }
 
-- 
2.2.2


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.