s390/ctcm: switch to ccwgroup_create_dev
authorSebastian Ott <sebott@linux.vnet.ibm.com>
Tue, 15 May 2012 15:54:12 +0000 (17:54 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Wed, 16 May 2012 12:42:47 +0000 (14:42 +0200)
Switch to the new ccwgroup_create_dev interface. Also wrap device
attributes in a struct device_type and let the driver core create
these attributes automagically.

Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
drivers/s390/net/ctcm_main.c
drivers/s390/net/ctcm_main.h
drivers/s390/net/ctcm_sysfs.c

index 11f3b071f30539abd07001c25b09f9213fb6effa..abb84c3849e0c1d885a297ffebff97e9caf798b5 100644 (file)
@@ -1296,6 +1296,11 @@ static void ctcm_irq_handler(struct ccw_device *cdev,
 
 }
 
+static const struct device_type ctcm_devtype = {
+       .name = "ctcm",
+       .groups = ctcm_attr_groups,
+};
+
 /**
  * Add ctcm specific attributes.
  * Add ctcm private data.
@@ -1307,7 +1312,6 @@ static void ctcm_irq_handler(struct ccw_device *cdev,
 static int ctcm_probe_device(struct ccwgroup_device *cgdev)
 {
        struct ctcm_priv *priv;
-       int rc;
 
        CTCM_DBF_TEXT_(SETUP, CTC_DBF_INFO,
                        "%s %p",
@@ -1324,17 +1328,11 @@ static int ctcm_probe_device(struct ccwgroup_device *cgdev)
                put_device(&cgdev->dev);
                return -ENOMEM;
        }
-
-       rc = ctcm_add_files(&cgdev->dev);
-       if (rc) {
-               kfree(priv);
-               put_device(&cgdev->dev);
-               return rc;
-       }
        priv->buffer_size = CTCM_BUFSIZE_DEFAULT;
        cgdev->cdev[0]->handler = ctcm_irq_handler;
        cgdev->cdev[1]->handler = ctcm_irq_handler;
        dev_set_drvdata(&cgdev->dev, priv);
+       cgdev->dev.type = &ctcm_devtype;
 
        return 0;
 }
@@ -1611,11 +1609,6 @@ static int ctcm_new_device(struct ccwgroup_device *cgdev)
                goto out_dev;
        }
 
-       if (ctcm_add_attributes(&cgdev->dev)) {
-               result = -ENODEV;
-               goto out_unregister;
-       }
-
        strlcpy(priv->fsm->name, dev->name, sizeof(priv->fsm->name));
 
        dev_info(&dev->dev,
@@ -1629,8 +1622,6 @@ static int ctcm_new_device(struct ccwgroup_device *cgdev)
                        priv->channel[CTCM_WRITE]->id, priv->protocol);
 
        return 0;
-out_unregister:
-       unregister_netdev(dev);
 out_dev:
        ctcm_free_netdevice(dev);
 out_ccw2:
@@ -1669,7 +1660,6 @@ static int ctcm_shutdown_device(struct ccwgroup_device *cgdev)
                /* Close the device */
                ctcm_close(dev);
                dev->flags &= ~IFF_RUNNING;
-               ctcm_remove_attributes(&cgdev->dev);
                channel_free(priv->channel[CTCM_READ]);
        } else
                dev = NULL;
@@ -1711,7 +1701,6 @@ static void ctcm_remove_device(struct ccwgroup_device *cgdev)
 
        if (cgdev->state == CCWGROUP_ONLINE)
                ctcm_shutdown_device(cgdev);
-       ctcm_remove_files(&cgdev->dev);
        dev_set_drvdata(&cgdev->dev, NULL);
        kfree(priv);
        put_device(&cgdev->dev);
@@ -1780,7 +1769,7 @@ static struct ccwgroup_driver ctcm_group_driver = {
        },
        .max_slaves  = 2,
        .driver_id   = 0xC3E3C3D4,      /* CTCM */
-       .probe       = ctcm_probe_device,
+       .setup       = ctcm_probe_device,
        .remove      = ctcm_remove_device,
        .set_online  = ctcm_new_device,
        .set_offline = ctcm_shutdown_device,
@@ -1789,18 +1778,15 @@ static struct ccwgroup_driver ctcm_group_driver = {
        .restore     = ctcm_pm_resume,
 };
 
-static ssize_t
-ctcm_driver_group_store(struct device_driver *ddrv, const char *buf,
-                       size_t count)
+static ssize_t ctcm_driver_group_store(struct device_driver *ddrv,
+                                      const char *buf, size_t count)
 {
        int err;
 
-       err = ccwgroup_create_from_string(ctcm_root_dev,
-                                         ctcm_group_driver.driver_id,
-                                         &ctcm_ccw_driver, 2, buf);
+       err = ccwgroup_create_dev(ctcm_root_dev, ctcm_group_driver.driver_id,
+                                 &ctcm_group_driver, 2, buf);
        return err ? err : count;
 }
-
 static DRIVER_ATTR(group, 0200, NULL, ctcm_driver_group_store);
 
 static struct attribute *ctcm_group_attrs[] = {
index 24d5215eb0c40af4816115579bde366149eb159f..b9056a55d9950b113d1446422fdec5d955d07c29 100644 (file)
@@ -225,13 +225,7 @@ struct ctcm_priv {
 int ctcm_open(struct net_device *dev);
 int ctcm_close(struct net_device *dev);
 
-/*
- * prototypes for non-static sysfs functions
- */
-int ctcm_add_attributes(struct device *dev);
-void ctcm_remove_attributes(struct device *dev);
-int ctcm_add_files(struct device *dev);
-void ctcm_remove_files(struct device *dev);
+extern const struct attribute_group *ctcm_attr_groups[];
 
 /*
  * Compatibility macros for busy handling
index 650aec1839e9e381b7eef4f05fd3edac557e8478..0c27ae726475cb253dd3dee10ec73ad91873017d 100644 (file)
@@ -13,6 +13,7 @@
 #define KMSG_COMPONENT "ctcm"
 #define pr_fmt(fmt) KMSG_COMPONENT ": " fmt
 
+#include <linux/device.h>
 #include <linux/sysfs.h>
 #include <linux/slab.h>
 #include "ctcm_main.h"
@@ -108,10 +109,12 @@ static void ctcm_print_statistics(struct ctcm_priv *priv)
 }
 
 static ssize_t stats_show(struct device *dev,
-                               struct device_attribute *attr, char *buf)
+                         struct device_attribute *attr, char *buf)
 {
+       struct ccwgroup_device *gdev = to_ccwgroupdev(dev);
        struct ctcm_priv *priv = dev_get_drvdata(dev);
-       if (!priv)
+
+       if (!priv || gdev->state != CCWGROUP_ONLINE)
                return -ENODEV;
        ctcm_print_statistics(priv);
        return sprintf(buf, "0\n");
@@ -190,34 +193,14 @@ static struct attribute *ctcm_attr[] = {
        &dev_attr_protocol.attr,
        &dev_attr_type.attr,
        &dev_attr_buffer.attr,
+       &dev_attr_stats.attr,
        NULL,
 };
 
 static struct attribute_group ctcm_attr_group = {
        .attrs = ctcm_attr,
 };
-
-int ctcm_add_attributes(struct device *dev)
-{
-       int rc;
-
-       rc = device_create_file(dev, &dev_attr_stats);
-
-       return rc;
-}
-
-void ctcm_remove_attributes(struct device *dev)
-{
-       device_remove_file(dev, &dev_attr_stats);
-}
-
-int ctcm_add_files(struct device *dev)
-{
-       return sysfs_create_group(&dev->kobj, &ctcm_attr_group);
-}
-
-void ctcm_remove_files(struct device *dev)
-{
-       sysfs_remove_group(&dev->kobj, &ctcm_attr_group);
-}
-
+const struct attribute_group *ctcm_attr_groups[] = {
+       &ctcm_attr_group,
+       NULL,
+};