s390/tape: fix virtual vs physical address confusion
authorHeiko Carstens <hca@linux.ibm.com>
Thu, 7 Mar 2024 12:28:20 +0000 (13:28 +0100)
committerHeiko Carstens <hca@linux.ibm.com>
Wed, 13 Mar 2024 08:23:48 +0000 (09:23 +0100)
Fix virtual vs physical address confusion and use new dma types and helper
functions to allow for type checking. This does not fix a bug since virtual
and physical address spaces are currently the same.

Tested-by: Jan Höppner <hoeppner@linux.ibm.com>
Reviewed-by: Jan Höppner <hoeppner@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
drivers/s390/char/tape.h

index 4e5d5efa978f26f014c2913c02506576b00512c1..0aba30efb483d7fce64bf2c216c058077d065fe2 100644 (file)
@@ -305,7 +305,9 @@ tape_ccw_cc(struct ccw1 *ccw, __u8 cmd_code, __u16 memsize, void *cda)
        ccw->cmd_code = cmd_code;
        ccw->flags = CCW_FLAG_CC;
        ccw->count = memsize;
-       ccw->cda = (__u32)(addr_t) cda;
+       ccw->cda = 0;
+       if (cda)
+               ccw->cda = virt_to_dma32(cda);
        return ccw + 1;
 }
 
@@ -315,7 +317,9 @@ tape_ccw_end(struct ccw1 *ccw, __u8 cmd_code, __u16 memsize, void *cda)
        ccw->cmd_code = cmd_code;
        ccw->flags = 0;
        ccw->count = memsize;
-       ccw->cda = (__u32)(addr_t) cda;
+       ccw->cda = 0;
+       if (cda)
+               ccw->cda = virt_to_dma32(cda);
        return ccw + 1;
 }
 
@@ -325,7 +329,7 @@ tape_ccw_cmd(struct ccw1 *ccw, __u8 cmd_code)
        ccw->cmd_code = cmd_code;
        ccw->flags = 0;
        ccw->count = 0;
-       ccw->cda = (__u32)(addr_t) &ccw->cmd_code;
+       ccw->cda = virt_to_dma32(&ccw->cmd_code);
        return ccw + 1;
 }
 
@@ -336,7 +340,7 @@ tape_ccw_repeat(struct ccw1 *ccw, __u8 cmd_code, int count)
                ccw->cmd_code = cmd_code;
                ccw->flags = CCW_FLAG_CC;
                ccw->count = 0;
-               ccw->cda = (__u32)(addr_t) &ccw->cmd_code;
+               ccw->cda = virt_to_dma32(&ccw->cmd_code);
                ccw++;
        }
        return ccw;