Both the read and write config paths use wrappers around cds->op_handler, depending on the direction the I/O is flowing. But they expect opposite values in the returned variable to indicate success.
Fix this by unifying those checks, where CCW_CMD_READ_CONF needs to see !ret as success. The end result is some erroneous data in the SCSW response data, but the overall success/failure is correct. Cc: [email protected] Fixes: d895d25ae2 ("s390x: css: report errors from ccw_dstream_read/write") Signed-off-by: Eric Farman <[email protected]> --- hw/s390x/virtio-ccw.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/s390x/virtio-ccw.c b/hw/s390x/virtio-ccw.c index d700db405b..4622c5d46d 100644 --- a/hw/s390x/virtio-ccw.c +++ b/hw/s390x/virtio-ccw.c @@ -475,7 +475,7 @@ static int virtio_ccw_cb(SubchDev *sch, CCW1 ccw) } else { virtio_bus_get_vdev_config(&dev->bus, vdev->config); ret = ccw_dstream_write_buf(&sch->cds, vdev->config, len); - if (ret) { + if (!ret) { sch->curr_status.scsw.count = ccw.count - len; } } -- 2.53.0
