Skip to content

Commit e8be820

Browse files
committed
s390/tape: fix virtual vs physical address confusion
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>
1 parent 1b2ac5a commit e8be820

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

drivers/s390/char/tape.h

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,9 @@ tape_ccw_cc(struct ccw1 *ccw, __u8 cmd_code, __u16 memsize, void *cda)
305305
ccw->cmd_code = cmd_code;
306306
ccw->flags = CCW_FLAG_CC;
307307
ccw->count = memsize;
308-
ccw->cda = (__u32)(addr_t) cda;
308+
ccw->cda = 0;
309+
if (cda)
310+
ccw->cda = virt_to_dma32(cda);
309311
return ccw + 1;
310312
}
311313

@@ -315,7 +317,9 @@ tape_ccw_end(struct ccw1 *ccw, __u8 cmd_code, __u16 memsize, void *cda)
315317
ccw->cmd_code = cmd_code;
316318
ccw->flags = 0;
317319
ccw->count = memsize;
318-
ccw->cda = (__u32)(addr_t) cda;
320+
ccw->cda = 0;
321+
if (cda)
322+
ccw->cda = virt_to_dma32(cda);
319323
return ccw + 1;
320324
}
321325

@@ -325,7 +329,7 @@ tape_ccw_cmd(struct ccw1 *ccw, __u8 cmd_code)
325329
ccw->cmd_code = cmd_code;
326330
ccw->flags = 0;
327331
ccw->count = 0;
328-
ccw->cda = (__u32)(addr_t) &ccw->cmd_code;
332+
ccw->cda = virt_to_dma32(&ccw->cmd_code);
329333
return ccw + 1;
330334
}
331335

@@ -336,7 +340,7 @@ tape_ccw_repeat(struct ccw1 *ccw, __u8 cmd_code, int count)
336340
ccw->cmd_code = cmd_code;
337341
ccw->flags = CCW_FLAG_CC;
338342
ccw->count = 0;
339-
ccw->cda = (__u32)(addr_t) &ccw->cmd_code;
343+
ccw->cda = virt_to_dma32(&ccw->cmd_code);
340344
ccw++;
341345
}
342346
return ccw;

0 commit comments

Comments
 (0)