diff options
| author | Cornelia Huck <cornelia.huck@de.ibm.com> | 2013-06-04 05:04:47 -0400 |
|---|---|---|
| committer | Christian Borntraeger <borntraeger@de.ibm.com> | 2014-01-17 07:12:22 -0500 |
| commit | 19e4735bd7f02bd38db43a8521377b35f236b3b6 (patch) | |
| tree | 99c2faaeedd26bcc599f86f9e830a2160dfc3620 | |
| parent | d208c79d63e06457eef077af770d23dc4cde4d43 (diff) | |
KVM: s390: virtio-ccw: Handle command rejects.
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>
| -rw-r--r-- | drivers/s390/kvm/virtio_ccw.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/drivers/s390/kvm/virtio_ccw.c b/drivers/s390/kvm/virtio_ccw.c index d6297176ab85..0fc584832001 100644 --- a/drivers/s390/kvm/virtio_ccw.c +++ b/drivers/s390/kvm/virtio_ccw.c | |||
| @@ -642,8 +642,15 @@ static void virtio_ccw_int_handler(struct ccw_device *cdev, | |||
| 642 | (SCSW_STCTL_ALERT_STATUS | SCSW_STCTL_STATUS_PEND))) { | 642 | (SCSW_STCTL_ALERT_STATUS | SCSW_STCTL_STATUS_PEND))) { |
| 643 | /* OK */ | 643 | /* OK */ |
| 644 | } | 644 | } |
| 645 | if (irb_is_error(irb)) | 645 | if (irb_is_error(irb)) { |
| 646 | vcdev->err = -EIO; /* XXX - use real error */ | 646 | /* Command reject? */ |
| 647 | if ((scsw_dstat(&irb->scsw) & DEV_STAT_UNIT_CHECK) && | ||
| 648 | (irb->ecw[0] & SNS0_CMD_REJECT)) | ||
| 649 | vcdev->err = -EOPNOTSUPP; | ||
| 650 | else | ||
| 651 | /* Map everything else to -EIO. */ | ||
| 652 | vcdev->err = -EIO; | ||
| 653 | } | ||
| 647 | if (vcdev->curr_io & activity) { | 654 | if (vcdev->curr_io & activity) { |
| 648 | switch (activity) { | 655 | switch (activity) { |
| 649 | case VIRTIO_CCW_DOING_READ_FEAT: | 656 | case VIRTIO_CCW_DOING_READ_FEAT: |
