]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
vfio/ccw: sort out physical vs virtual pointers usage
authorAlexander Gordeev <agordeev@linux.ibm.com>
Mon, 21 Nov 2022 16:58:35 +0000 (17:58 +0100)
committerAlexander Gordeev <agordeev@linux.ibm.com>
Mon, 5 Dec 2022 14:01:31 +0000 (15:01 +0100)
The ORB's interrupt parameter field is stored unmodified into the
interruption code when an I/O interrupt occurs. As this reflects
a real device, let's store the physical address of the subchannel
struct so it can be used when processing an interrupt.

Note: this currently doesn't fix a real bug, since virtual
addresses are identical to physical ones.

Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
[EF: Updated commit message]
Signed-off-by: Eric Farman <farman@linux.ibm.com>
Reviewed-by: Matthew Rosato <mjrosato@linux.ibm.com>
Reviewed-by: Nico Boehr <nrb@linux.ibm.com>
Link: https://lore.kernel.org/r/20221121165836.283781-2-farman@linux.ibm.com
drivers/s390/cio/vfio_ccw_fsm.c

index a59c758869f8f8c614be642d56d6b5699f697921..0a5e8b4a674342b31d784b0ed73c777d5d40c51b 100644 (file)
@@ -29,7 +29,7 @@ static int fsm_io_helper(struct vfio_ccw_private *private)
 
        spin_lock_irqsave(sch->lock, flags);
 
-       orb = cp_get_orb(&private->cp, (u32)(addr_t)sch, sch->lpm);
+       orb = cp_get_orb(&private->cp, (u32)virt_to_phys(sch), sch->lpm);
        if (!orb) {
                ret = -EIO;
                goto out;