@@ -1131,6 +1131,8 @@ static int virtio_uml_probe(struct platform_device *pdev)
platform_set_drvdata(pdev, vu_dev);
+ device_set_wakeup_capable(&vu_dev->vdev.dev, true);
+
rc = register_virtio_device(&vu_dev->vdev);
if (rc)
put_device(&vu_dev->vdev.dev);
@@ -1304,7 +1306,10 @@ static int virtio_uml_suspend(struct platform_device *pdev, pm_message_t state)
vhost_user_set_vring_enable(vu_dev, vq->index, false);
}
- return 0;
+ if (!device_may_wakeup(&vu_dev->vdev.dev))
+ return 0;
+
+ return irq_set_irq_wake(vu_dev->irq, 1);
}
static int virtio_uml_resume(struct platform_device *pdev)
@@ -1319,7 +1324,10 @@ static int virtio_uml_resume(struct platform_device *pdev)
vhost_user_set_vring_enable(vu_dev, vq->index, true);
}
- return 0;
+ if (!device_may_wakeup(&vu_dev->vdev.dev))
+ return 0;
+
+ return irq_set_irq_wake(vu_dev->irq, 0);
}
static struct platform_driver virtio_uml_driver = {