Commit 2439f976 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost

Pull virtio fixes from Michael Tsirkin:
 "This includes a bugfix for virtio 9p fs. It also fixes hybernation for
  s390 guests with virtio devices"

* tag 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost:
  virtio/s390: implement PM operations for virtio_ccw
  9p/trans_virtio: discard zero-length reply
parents 1388c804 fa08a3b4
...@@ -1297,6 +1297,9 @@ static int virtio_ccw_cio_notify(struct ccw_device *cdev, int event) ...@@ -1297,6 +1297,9 @@ static int virtio_ccw_cio_notify(struct ccw_device *cdev, int event)
vcdev->device_lost = true; vcdev->device_lost = true;
rc = NOTIFY_DONE; rc = NOTIFY_DONE;
break; break;
case CIO_OPER:
rc = NOTIFY_OK;
break;
default: default:
rc = NOTIFY_DONE; rc = NOTIFY_DONE;
break; break;
...@@ -1309,6 +1312,27 @@ static struct ccw_device_id virtio_ids[] = { ...@@ -1309,6 +1312,27 @@ static struct ccw_device_id virtio_ids[] = {
{}, {},
}; };
#ifdef CONFIG_PM_SLEEP
static int virtio_ccw_freeze(struct ccw_device *cdev)
{
struct virtio_ccw_device *vcdev = dev_get_drvdata(&cdev->dev);
return virtio_device_freeze(&vcdev->vdev);
}
static int virtio_ccw_restore(struct ccw_device *cdev)
{
struct virtio_ccw_device *vcdev = dev_get_drvdata(&cdev->dev);
int ret;
ret = virtio_ccw_set_transport_rev(vcdev);
if (ret)
return ret;
return virtio_device_restore(&vcdev->vdev);
}
#endif
static struct ccw_driver virtio_ccw_driver = { static struct ccw_driver virtio_ccw_driver = {
.driver = { .driver = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
...@@ -1321,6 +1345,11 @@ static struct ccw_driver virtio_ccw_driver = { ...@@ -1321,6 +1345,11 @@ static struct ccw_driver virtio_ccw_driver = {
.set_online = virtio_ccw_online, .set_online = virtio_ccw_online,
.notify = virtio_ccw_cio_notify, .notify = virtio_ccw_cio_notify,
.int_class = IRQIO_VIR, .int_class = IRQIO_VIR,
#ifdef CONFIG_PM_SLEEP
.freeze = virtio_ccw_freeze,
.thaw = virtio_ccw_restore,
.restore = virtio_ccw_restore,
#endif
}; };
static int __init pure_hex(char **cp, unsigned int *val, int min_digit, static int __init pure_hex(char **cp, unsigned int *val, int min_digit,
......
...@@ -160,6 +160,7 @@ static void req_done(struct virtqueue *vq) ...@@ -160,6 +160,7 @@ static void req_done(struct virtqueue *vq)
spin_unlock_irqrestore(&chan->lock, flags); spin_unlock_irqrestore(&chan->lock, flags);
/* Wakeup if anyone waiting for VirtIO ring space. */ /* Wakeup if anyone waiting for VirtIO ring space. */
wake_up(chan->vc_wq); wake_up(chan->vc_wq);
if (len)
p9_client_cb(chan->client, req, REQ_STATUS_RCVD); p9_client_cb(chan->client, req, REQ_STATUS_RCVD);
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment