• Eric Farman's avatar
    s390/cio: Update SCSW if it points to the end of the chain · 15f0eb3d
    Eric Farman authored
    Per the POPs [1], when processing an interrupt the SCSW.CPA field of an
    IRB generally points to 8 bytes after the last CCW that was executed
    (there are exceptions, but this is the most common behavior).
    
    In the case of an error, this points us to the first un-executed CCW
    in the chain.  But in the case of normal I/O, the address points beyond
    the end of the chain.  While the guest generally only cares about this
    when possibly restarting a channel program after error recovery, we
    should convert the address even in the good scenario so that we provide
    a consistent, valid, response upon I/O completion.
    
    [1] Figure 16-6 in SA22-7832-11.  The footnotes in that table also state
    that this is true even if the resulting address is invalid or protected,
    but moving to the end of the guest chain should not be a surprise.
    Signed-off-by: default avatarEric Farman <farman@linux.ibm.com>
    Message-Id: <20190514234248.36203-2-farman@linux.ibm.com>
    Reviewed-by: default avatarFarhan Ali <alifm@linux.ibm.com>
    Signed-off-by: default avatarCornelia Huck <cohuck@redhat.com>
    15f0eb3d
vfio_ccw_cp.c 22.1 KB