Skip to content

Commit b87c52e

Browse files
Alexander Gordeevaxboe
authored andcommitted
s390/dasd: sort out physical vs virtual pointers usage
This does not fix a real bug, since virtual addresses are currently indentical to physical ones. Signed-off-by: Alexander Gordeev <[email protected]> Signed-off-by: Stefan Haberland <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Jens Axboe <[email protected]>
1 parent 9af9935 commit b87c52e

File tree

6 files changed

+67
-70
lines changed

6 files changed

+67
-70
lines changed

drivers/s390/block/dasd.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3978,7 +3978,7 @@ static struct dasd_ccw_req *dasd_generic_build_rdc(struct dasd_device *device,
39783978

39793979
ccw = cqr->cpaddr;
39803980
ccw->cmd_code = CCW_CMD_RDC;
3981-
ccw->cda = (__u32)(addr_t) cqr->data;
3981+
ccw->cda = (__u32)virt_to_phys(cqr->data);
39823982
ccw->flags = 0;
39833983
ccw->count = rdc_buffer_size;
39843984
cqr->startdev = device;
@@ -4022,8 +4022,7 @@ char *dasd_get_sense(struct irb *irb)
40224022

40234023
if (scsw_is_tm(&irb->scsw) && (irb->scsw.tm.fcxs == 0x01)) {
40244024
if (irb->scsw.tm.tcw)
4025-
tsb = tcw_get_tsb((struct tcw *)(unsigned long)
4026-
irb->scsw.tm.tcw);
4025+
tsb = tcw_get_tsb(phys_to_virt(irb->scsw.tm.tcw));
40274026
if (tsb && tsb->length == 64 && tsb->flags)
40284027
switch (tsb->flags & 0x07) {
40294028
case 1: /* tsa_iostat */

drivers/s390/block/dasd_3990_erp.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ dasd_3990_erp_DCTL(struct dasd_ccw_req * erp, char modifier)
220220
memset(ccw, 0, sizeof(struct ccw1));
221221
ccw->cmd_code = CCW_CMD_DCTL;
222222
ccw->count = 4;
223-
ccw->cda = (__u32)(addr_t) DCTL_data;
223+
ccw->cda = (__u32)virt_to_phys(DCTL_data);
224224
dctl_cqr->flags = erp->flags;
225225
dctl_cqr->function = dasd_3990_erp_DCTL;
226226
dctl_cqr->refers = erp;
@@ -1714,15 +1714,15 @@ dasd_3990_erp_action_1B_32(struct dasd_ccw_req * default_erp, char *sense)
17141714
ccw->cmd_code = DASD_ECKD_CCW_DEFINE_EXTENT;
17151715
ccw->flags = CCW_FLAG_CC;
17161716
ccw->count = 16;
1717-
ccw->cda = (__u32)(addr_t) DE_data;
1717+
ccw->cda = (__u32)virt_to_phys(DE_data);
17181718

17191719
/* create LO ccw */
17201720
ccw++;
17211721
memset(ccw, 0, sizeof(struct ccw1));
17221722
ccw->cmd_code = DASD_ECKD_CCW_LOCATE_RECORD;
17231723
ccw->flags = CCW_FLAG_CC;
17241724
ccw->count = 16;
1725-
ccw->cda = (__u32)(addr_t) LO_data;
1725+
ccw->cda = (__u32)virt_to_phys(LO_data);
17261726

17271727
/* TIC to the failed ccw */
17281728
ccw++;
@@ -2419,7 +2419,7 @@ static struct dasd_ccw_req *dasd_3990_erp_add_erp(struct dasd_ccw_req *cqr)
24192419
tcw = erp->cpaddr;
24202420
tsb = (struct tsb *) &tcw[1];
24212421
*tcw = *((struct tcw *)cqr->cpaddr);
2422-
tcw->tsb = (long)tsb;
2422+
tcw->tsb = virt_to_phys(tsb);
24232423
} else if (ccw->cmd_code == DASD_ECKD_CCW_PSF) {
24242424
/* PSF cannot be chained from NOOP/TIC */
24252425
erp->cpaddr = cqr->cpaddr;
@@ -2430,7 +2430,7 @@ static struct dasd_ccw_req *dasd_3990_erp_add_erp(struct dasd_ccw_req *cqr)
24302430
ccw->flags = CCW_FLAG_CC;
24312431
ccw++;
24322432
ccw->cmd_code = CCW_CMD_TIC;
2433-
ccw->cda = (long)(cqr->cpaddr);
2433+
ccw->cda = (__u32)virt_to_phys(cqr->cpaddr);
24342434
}
24352435

24362436
erp->flags = cqr->flags;

drivers/s390/block/dasd_alias.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -443,15 +443,15 @@ static int read_unit_address_configuration(struct dasd_device *device,
443443
ccw->cmd_code = DASD_ECKD_CCW_PSF;
444444
ccw->count = sizeof(struct dasd_psf_prssd_data);
445445
ccw->flags |= CCW_FLAG_CC;
446-
ccw->cda = (__u32)(addr_t) prssdp;
446+
ccw->cda = (__u32)virt_to_phys(prssdp);
447447

448448
/* Read Subsystem Data - feature codes */
449449
memset(lcu->uac, 0, sizeof(*(lcu->uac)));
450450

451451
ccw++;
452452
ccw->cmd_code = DASD_ECKD_CCW_RSSD;
453453
ccw->count = sizeof(*(lcu->uac));
454-
ccw->cda = (__u32)(addr_t) lcu->uac;
454+
ccw->cda = (__u32)virt_to_phys(lcu->uac);
455455

456456
cqr->buildclk = get_tod_clock();
457457
cqr->status = DASD_CQR_FILLED;
@@ -747,7 +747,7 @@ static int reset_summary_unit_check(struct alias_lcu *lcu,
747747
ccw->cmd_code = DASD_ECKD_CCW_RSCK;
748748
ccw->flags = CCW_FLAG_SLI;
749749
ccw->count = 16;
750-
ccw->cda = (__u32)(addr_t) cqr->data;
750+
ccw->cda = (__u32)virt_to_phys(cqr->data);
751751
((char *)cqr->data)[0] = reason;
752752

753753
clear_bit(DASD_CQR_FLAGS_USE_ERP, &cqr->flags);

0 commit comments

Comments
 (0)