Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

+8 -4
+8 -4
drivers/s390/char/tape.h
··· 305 305 ccw->cmd_code = cmd_code; 306 306 ccw->flags = CCW_FLAG_CC; 307 307 ccw->count = memsize; 308 - ccw->cda = (__u32)(addr_t) cda; 308 + ccw->cda = 0; 309 + if (cda) 310 + ccw->cda = virt_to_dma32(cda); 309 311 return ccw + 1; 310 312 } 311 313 ··· 317 315 ccw->cmd_code = cmd_code; 318 316 ccw->flags = 0; 319 317 ccw->count = memsize; 320 - ccw->cda = (__u32)(addr_t) cda; 318 + ccw->cda = 0; 319 + if (cda) 320 + ccw->cda = virt_to_dma32(cda); 321 321 return ccw + 1; 322 322 } 323 323 ··· 329 325 ccw->cmd_code = cmd_code; 330 326 ccw->flags = 0; 331 327 ccw->count = 0; 332 - ccw->cda = (__u32)(addr_t) &ccw->cmd_code; 328 + ccw->cda = virt_to_dma32(&ccw->cmd_code); 333 329 return ccw + 1; 334 330 } 335 331 ··· 340 336 ccw->cmd_code = cmd_code; 341 337 ccw->flags = CCW_FLAG_CC; 342 338 ccw->count = 0; 343 - ccw->cda = (__u32)(addr_t) &ccw->cmd_code; 339 + ccw->cda = virt_to_dma32(&ccw->cmd_code); 344 340 ccw++; 345 341 } 346 342 return ccw;