s390/dasd_eckd: fix virtual vs physical address confusion
authorHeiko Carstens <hca@linux.ibm.com>
Thu, 7 Mar 2024 12:28:02 +0000 (13:28 +0100)
committerHeiko Carstens <hca@linux.ibm.com>
Wed, 13 Mar 2024 08:23:45 +0000 (09:23 +0100)
Fix virtual vs physical address confusion. This does not fix a bug
since virtual and physical address spaces are currently the same.

Reviewed-by: Stefan Haberland <sth@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
drivers/s390/block/dasd_eckd.c
drivers/s390/block/dasd_fba.c

index 373c1a86c33ed5d7b760087a6669315bfa35182d..698817648053c7c13d81cc1ddd2a80f59b1930ec 100644 (file)
@@ -6239,14 +6239,14 @@ static int dasd_eckd_query_pprc_status(struct dasd_device *device,
        ccw->count = sizeof(struct dasd_psf_prssd_data);
        ccw->flags |= CCW_FLAG_CC;
        ccw->flags |= CCW_FLAG_SLI;
-       ccw->cda = (__u32)(addr_t)prssdp;
+       ccw->cda = (__u32)virt_to_phys(prssdp);
 
        /* Read Subsystem Data - query host access */
        ccw++;
        ccw->cmd_code = DASD_ECKD_CCW_RSSD;
        ccw->count = sizeof(*pprc_data);
        ccw->flags |= CCW_FLAG_SLI;
-       ccw->cda = (__u32)(addr_t)pprc_data;
+       ccw->cda = (__u32)virt_to_phys(pprc_data);
 
        cqr->buildclk = get_tod_clock();
        cqr->status = DASD_CQR_FILLED;
index bcbb2f8e91feb6ca1a674742188083d5a0cdb49d..667e11b669dbf9620fd661b8f73a0f485e9310a4 100644 (file)
@@ -701,7 +701,7 @@ dasd_fba_dump_sense(struct dasd_device *device, struct dasd_ccw_req * req,
                for (count = 0; count < 32 && count < act->count;
                     count += sizeof(int))
                        len += sprintf(page + len, " %08X",
-                                      ((int *) (addr_t) act->cda)
+                                      ((int *)phys_to_virt(act->cda))
                                       [(count>>2)]);
                len += sprintf(page + len, "\n");
                act++;
@@ -710,18 +710,18 @@ dasd_fba_dump_sense(struct dasd_device *device, struct dasd_ccw_req * req,
 
        /* print failing CCW area */
        len = 0;
-       if (act <  ((struct ccw1 *)(addr_t) irb->scsw.cmd.cpa) - 2) {
-               act = ((struct ccw1 *)(addr_t) irb->scsw.cmd.cpa) - 2;
+       if (act < ((struct ccw1 *)phys_to_virt(irb->scsw.cmd.cpa)) - 2) {
+               act = ((struct ccw1 *)phys_to_virt(irb->scsw.cmd.cpa)) - 2;
                len += sprintf(page + len, "......\n");
        }
-       end = min((struct ccw1 *)(addr_t) irb->scsw.cmd.cpa + 2, last);
+       end = min((struct ccw1 *)phys_to_virt(irb->scsw.cmd.cpa) + 2, last);
        while (act <= end) {
                len += sprintf(page + len, "CCW %px: %08X %08X DAT:",
                               act, ((int *) act)[0], ((int *) act)[1]);
                for (count = 0; count < 32 && count < act->count;
                     count += sizeof(int))
                        len += sprintf(page + len, " %08X",
-                                      ((int *) (addr_t) act->cda)
+                                      ((int *)phys_to_virt(act->cda))
                                       [(count>>2)]);
                len += sprintf(page + len, "\n");
                act++;
@@ -738,7 +738,7 @@ dasd_fba_dump_sense(struct dasd_device *device, struct dasd_ccw_req * req,
                for (count = 0; count < 32 && count < act->count;
                     count += sizeof(int))
                        len += sprintf(page + len, " %08X",
-                                      ((int *) (addr_t) act->cda)
+                                      ((int *)phys_to_virt(act->cda))
                                       [(count>>2)]);
                len += sprintf(page + len, "\n");
                act++;