s390/diag: fix diag26c() physical vs virtual address confusion
authorAlexander Gordeev <agordeev@linux.ibm.com>
Tue, 16 Jan 2024 16:25:39 +0000 (17:25 +0100)
committerHeiko Carstens <hca@linux.ibm.com>
Fri, 9 Feb 2024 12:58:13 +0000 (13:58 +0100)
Fix virtual vs physical address confusion (which currently are the same).

Reviewed-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
arch/s390/include/asm/diag.h
arch/s390/kernel/diag.c

index bed804137537becd6a5d0ecdc2c74c7c764ba04b..79ff1f940611d2d8a8ca3d7b239c384d34a6b95c 100644 (file)
@@ -331,7 +331,7 @@ struct hypfs_diag0c_entry;
  */
 struct diag_ops {
        int (*diag210)(struct diag210 *addr);
-       int (*diag26c)(void *req, void *resp, enum diag26c_sc subcode);
+       int (*diag26c)(unsigned long rx, unsigned long rx1, enum diag26c_sc subcode);
        int (*diag14)(unsigned long rx, unsigned long ry1, unsigned long subcode);
        int (*diag8c)(struct diag8c *addr, struct ccw_dev_id *devno, size_t len);
        void (*diag0c)(struct hypfs_diag0c_entry *entry);
@@ -342,7 +342,7 @@ extern struct diag_ops diag_amode31_ops;
 extern struct diag210 *__diag210_tmp_amode31;
 
 int _diag210_amode31(struct diag210 *addr);
-int _diag26c_amode31(void *req, void *resp, enum diag26c_sc subcode);
+int _diag26c_amode31(unsigned long rx, unsigned long rx1, enum diag26c_sc subcode);
 int _diag14_amode31(unsigned long rx, unsigned long ry1, unsigned long subcode);
 void _diag0c_amode31(struct hypfs_diag0c_entry *entry);
 void _diag308_reset_amode31(void);
index 92fdc35f028c7984129954eb35547e0569d3712a..c33a95cfcc14613c954a28794d2080cf7dadc373 100644 (file)
@@ -265,6 +265,6 @@ EXPORT_SYMBOL(diag224);
 int diag26c(void *req, void *resp, enum diag26c_sc subcode)
 {
        diag_stat_inc(DIAG_STAT_X26C);
-       return diag_amode31_ops.diag26c(req, resp, subcode);
+       return diag_amode31_ops.diag26c(virt_to_phys(req), virt_to_phys(resp), subcode);
 }
 EXPORT_SYMBOL(diag26c);