s390/cmf: simplify copy_block
authorSebastian Ott <sebott@linux.vnet.ibm.com>
Wed, 6 Sep 2017 08:44:23 +0000 (10:44 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Thu, 28 Sep 2017 05:29:42 +0000 (07:29 +0200)
cmf_copy_block tries to ensure data consistency by copying the
channel measurement block twice and comparing the data. This was
needed on very old machines only. Nowadays we guarantee
consistency by copying the data when the channel is idle.

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

index 7ed6c86..531861d 100644 (file)
@@ -280,12 +280,9 @@ void retry_set_schib(struct ccw_device *cdev)
 
 static int cmf_copy_block(struct ccw_device *cdev)
 {
-       struct subchannel *sch;
-       void *reference_buf;
-       void *hw_block;
+       struct subchannel *sch = to_subchannel(cdev->dev.parent);
        struct cmb_data *cmb_data;
-
-       sch = to_subchannel(cdev->dev.parent);
+       void *hw_block;
 
        if (cio_update_schib(sch))
                return -ENODEV;
@@ -300,19 +297,8 @@ static int cmf_copy_block(struct ccw_device *cdev)
        }
        cmb_data = cdev->private->cmb;
        hw_block = cmb_data->hw_block;
-       if (!memcmp(cmb_data->last_block, hw_block, cmb_data->size))
-               /* No need to copy. */
-               return 0;
-       reference_buf = kzalloc(cmb_data->size, GFP_ATOMIC);
-       if (!reference_buf)
-               return -ENOMEM;
-       /* Ensure consistency of block copied from hardware. */
-       do {
-               memcpy(cmb_data->last_block, hw_block, cmb_data->size);
-               memcpy(reference_buf, hw_block, cmb_data->size);
-       } while (memcmp(cmb_data->last_block, reference_buf, cmb_data->size));
+       memcpy(cmb_data->last_block, hw_block, cmb_data->size);
        cmb_data->last_update = get_tod_clock();
-       kfree(reference_buf);
        return 0;
 }