]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - drivers/xen/pcpu.c
Merge branch 'x86-pmem-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
[mirror_ubuntu-bionic-kernel.git] / drivers / xen / pcpu.c
index 0aac403d53fd2987045272b34ca8a5a0a17ffa68..49e88f2ce7a1889e43f4bf9767f4502b4909f3ed 100644 (file)
@@ -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;
 }