s390/cio: make use of newly added format 1 channel-path data
authorPeter Oberparleiter <peter.oberparleiter@de.ibm.com>
Mon, 11 Mar 2013 12:01:08 +0000 (13:01 +0100)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Wed, 17 Apr 2013 12:07:26 +0000 (14:07 +0200)
Make use of the stored copy of format 1 channel-path data instead
of querying the information every time the corresponding function
is called.

Reviewed-by: Sebastian Ott <sebott@linux.vnet.ibm.com>
Signed-off-by: Peter Oberparleiter <peter.oberparleiter@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
drivers/s390/cio/device_ops.c

index c77b6e0..4845d64 100644 (file)
@@ -704,9 +704,9 @@ EXPORT_SYMBOL(ccw_device_tm_start_timeout);
 int ccw_device_get_mdc(struct ccw_device *cdev, u8 mask)
 {
        struct subchannel *sch = to_subchannel(cdev->dev.parent);
-       struct channel_path_desc_fmt1 desc;
+       struct channel_path *chp;
        struct chp_id chpid;
-       int mdc = 0, ret, i;
+       int mdc = 0, i;
 
        /* Adjust requested path mask to excluded varied off paths. */
        if (mask)
@@ -719,14 +719,20 @@ int ccw_device_get_mdc(struct ccw_device *cdev, u8 mask)
                if (!(mask & (0x80 >> i)))
                        continue;
                chpid.id = sch->schib.pmcw.chpid[i];
-               ret = chsc_determine_fmt1_channel_path_desc(chpid, &desc);
-               if (ret)
-                       return ret;
-               if (!desc.f)
+               chp = chpid_to_chp(chpid);
+               if (!chp)
+                       continue;
+
+               mutex_lock(&chp->lock);
+               if (!chp->desc_fmt1.f) {
+                       mutex_unlock(&chp->lock);
                        return 0;
-               if (!desc.r)
+               }
+               if (!chp->desc_fmt1.r)
                        mdc = 1;
-               mdc = mdc ? min(mdc, (int)desc.mdc) : desc.mdc;
+               mdc = mdc ? min_t(int, mdc, chp->desc_fmt1.mdc) :
+                           chp->desc_fmt1.mdc;
+               mutex_unlock(&chp->lock);
        }
 
        return mdc;