s390/ipl: fix physical-virtual confusion for diag308
authorNico Boehr <nrb@linux.ibm.com>
Fri, 10 Mar 2023 11:52:37 +0000 (12:52 +0100)
committerVasily Gorbik <gor@linux.ibm.com>
Thu, 13 Apr 2023 15:36:26 +0000 (17:36 +0200)
commitbac30ea9ef80624dfe4bf20c0fc2073dcc771a87
tree1dee99cf1f683adf10cf125cba78b970a66d4d2d
parent34644cc2e15a7a91ec36b496e218694d17371589
s390/ipl: fix physical-virtual confusion for diag308

Diag 308 subcodes expect a physical address as their parameter.

This currently is not a bug, but in the future physical and virtual
addresses might differ.

Fix the confusion by doing a virtual-to-physical conversion in the
exported diag308() and leave the assembly wrapper __diag308() alone.

Note that several callers pass NULL as addr, so check for the case when
NULL is passed and pass 0 to hardware since virt_to_phys(0) might be
nonzero.

Suggested-by: Marc Hartmayer <mhartmay@linux.ibm.com>
Signed-off-by: Nico Boehr <nrb@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
arch/s390/kernel/ipl.c