KVM: s390: virtio-ccw: Handle command rejects.
authorCornelia Huck <cornelia.huck@de.ibm.com>
Tue, 4 Jun 2013 09:04:47 +0000 (11:04 +0200)
committerChristian Borntraeger <borntraeger@de.ibm.com>
Fri, 17 Jan 2014 12:12:22 +0000 (13:12 +0100)
A command reject for a ccw may happen if we run on a host not supporting
a certain feature. We want to be able to handle this as special case of
command failure, so let's split this off from the generic -EIO error code.

Reviewed-by: Thomas Huth <thuth@linux.vnet.ibm.com>
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
drivers/s390/kvm/virtio_ccw.c

index d6297176ab85b8b306eb69be685dfba811ae35ba..0fc5848320018434997baed720632390b73ec0bf 100644 (file)
@@ -642,8 +642,15 @@ static void virtio_ccw_int_handler(struct ccw_device *cdev,
             (SCSW_STCTL_ALERT_STATUS | SCSW_STCTL_STATUS_PEND))) {
                /* OK */
        }
-       if (irb_is_error(irb))
-               vcdev->err = -EIO; /* XXX - use real error */
+       if (irb_is_error(irb)) {
+               /* Command reject? */
+               if ((scsw_dstat(&irb->scsw) & DEV_STAT_UNIT_CHECK) &&
+                   (irb->ecw[0] & SNS0_CMD_REJECT))
+                       vcdev->err = -EOPNOTSUPP;
+               else
+                       /* Map everything else to -EIO. */
+                       vcdev->err = -EIO;
+       }
        if (vcdev->curr_io & activity) {
                switch (activity) {
                case VIRTIO_CCW_DOING_READ_FEAT: