s390/cio: clarify cssid usage
authorSebastian Ott <sebott@linux.vnet.ibm.com>
Tue, 8 Nov 2016 13:28:03 +0000 (14:28 +0100)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Mon, 16 Jan 2017 06:27:52 +0000 (07:27 +0100)
Currently the cssid in various structures is used as the id of
the respective channel subsystem. Sometimes however we call the
index in the channel_subsystems array cssid. In some places the
id is even used as the index.

Provide a new define MAX_CSS_IDX and use it where appropriate.
In addition to that provide a dummy function to find a channel
subsystem by its id and a macro to iterate over the channel
subsystems.

Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com>
Reviewed-by: Peter Oberparleiter <oberpar@linux.vnet.ibm.com>
Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
drivers/s390/cio/chp.c
drivers/s390/cio/chp.h
drivers/s390/cio/css.c
drivers/s390/cio/css.h

index 876c7e6..7e0d4f7 100644 (file)
@@ -444,6 +444,7 @@ int chp_update_desc(struct channel_path *chp)
  */
 int chp_new(struct chp_id chpid)
 {
+       struct channel_subsystem *css = css_by_id(chpid.cssid);
        struct channel_path *chp;
        int ret;
 
@@ -456,7 +457,7 @@ int chp_new(struct chp_id chpid)
        /* fill in status, etc. */
        chp->chpid = chpid;
        chp->state = 1;
-       chp->dev.parent = &channel_subsystems[chpid.cssid]->device;
+       chp->dev.parent = &css->device;
        chp->dev.groups = chp_attr_groups;
        chp->dev.release = chp_release;
        mutex_init(&chp->lock);
@@ -479,17 +480,17 @@ int chp_new(struct chp_id chpid)
                put_device(&chp->dev);
                goto out;
        }
-       mutex_lock(&channel_subsystems[chpid.cssid]->mutex);
-       if (channel_subsystems[chpid.cssid]->cm_enabled) {
+       mutex_lock(&css->mutex);
+       if (css->cm_enabled) {
                ret = chp_add_cmg_attr(chp);
                if (ret) {
                        device_unregister(&chp->dev);
-                       mutex_unlock(&channel_subsystems[chpid.cssid]->mutex);
+                       mutex_unlock(&css->mutex);
                        goto out;
                }
        }
-       channel_subsystems[chpid.cssid]->chps[chpid.id] = chp;
-       mutex_unlock(&channel_subsystems[chpid.cssid]->mutex);
+       css->chps[chpid.id] = chp;
+       mutex_unlock(&css->mutex);
        goto out;
 out_free:
        kfree(chp);
index bb5a682..0d8437b 100644 (file)
@@ -54,7 +54,7 @@ struct channel_path {
 /* Return channel_path struct for given chpid. */
 static inline struct channel_path *chpid_to_chp(struct chp_id chpid)
 {
-       return channel_subsystems[chpid.cssid]->chps[chpid.id];
+       return css_by_id(chpid.cssid)->chps[chpid.id];
 }
 
 int chp_get_status(struct chp_id chpid);
index bc099b6..065c4e1 100644 (file)
@@ -36,7 +36,8 @@
 int css_init_done = 0;
 int max_ssid;
 
-struct channel_subsystem *channel_subsystems[__MAX_CSSID + 1];
+#define MAX_CSS_IDX 0
+struct channel_subsystem *channel_subsystems[MAX_CSS_IDX + 1];
 static struct bus_type css_bus_type;
 
 int
@@ -805,13 +806,11 @@ static int css_reboot_event(struct notifier_block *this,
                            unsigned long event,
                            void *ptr)
 {
-       int ret, i;
+       struct channel_subsystem *css;
+       int ret;
 
        ret = NOTIFY_DONE;
-       for (i = 0; i <= __MAX_CSSID; i++) {
-               struct channel_subsystem *css;
-
-               css = channel_subsystems[i];
+       for_each_css(css) {
                mutex_lock(&css->mutex);
                if (css->cm_enabled)
                        if (chsc_secm(css, 0))
@@ -835,16 +834,14 @@ static struct notifier_block css_reboot_notifier = {
 static int css_power_event(struct notifier_block *this, unsigned long event,
                           void *ptr)
 {
-       int ret, i;
+       struct channel_subsystem *css;
+       int ret;
 
        switch (event) {
        case PM_HIBERNATION_PREPARE:
        case PM_SUSPEND_PREPARE:
                ret = NOTIFY_DONE;
-               for (i = 0; i <= __MAX_CSSID; i++) {
-                       struct channel_subsystem *css;
-
-                       css = channel_subsystems[i];
+               for_each_css(css) {
                        mutex_lock(&css->mutex);
                        if (!css->cm_enabled) {
                                mutex_unlock(&css->mutex);
@@ -858,10 +855,7 @@ static int css_power_event(struct notifier_block *this, unsigned long event,
        case PM_POST_HIBERNATION:
        case PM_POST_SUSPEND:
                ret = NOTIFY_DONE;
-               for (i = 0; i <= __MAX_CSSID; i++) {
-                       struct channel_subsystem *css;
-
-                       css = channel_subsystems[i];
+               for_each_css(css) {
                        mutex_lock(&css->mutex);
                        if (!css->cm_enabled) {
                                mutex_unlock(&css->mutex);
@@ -916,7 +910,7 @@ static int __init css_bus_init(void)
                goto out;
 
        /* Setup css structure. */
-       for (i = 0; i <= __MAX_CSSID; i++) {
+       for (i = 0; i <= MAX_CSS_IDX; i++) {
                struct channel_subsystem *css;
 
                css = kmalloc(sizeof(struct channel_subsystem), GFP_KERNEL);
@@ -993,10 +987,8 @@ out:
 static void __init css_bus_cleanup(void)
 {
        struct channel_subsystem *css;
-       int i;
 
-       for (i = 0; i <= __MAX_CSSID; i++) {
-               css = channel_subsystems[i];
+       for_each_css(css) {
                device_unregister(&css->pseudo_subchannel->dev);
                css->pseudo_subchannel = NULL;
                if (css_chsc_characteristics.secm)
index 2c9107e..cd19c08 100644 (file)
@@ -130,6 +130,16 @@ struct channel_subsystem {
 
 extern struct channel_subsystem *channel_subsystems[];
 
+/* Dummy helper which needs to change once we support more than one css. */
+static inline struct channel_subsystem *css_by_id(u8 cssid)
+{
+       return channel_subsystems[0];
+}
+
+/* Dummy iterator which needs to change once we support more than one css. */
+#define for_each_css(css)                                              \
+       for ((css) = channel_subsystems[0]; (css); (css) = NULL)
+
 /* Helper functions to build lists for the slow path. */
 void css_schedule_eval(struct subchannel_id schid);
 void css_schedule_eval_all(void);