aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/char
diff options
context:
space:
mode:
authorAmit Shah <amit.shah@redhat.com>2012-01-06 05:49:08 -0500
committerRusty Russell <rusty@rustcorp.com.au>2012-01-12 00:14:45 -0500
commitc743d09dbd018dd6345519fb3264b16bdaa41746 (patch)
treeacf5eabccb93d35035547fd80489f222a1538256 /drivers/char
parent2b8f41d846990c3c1c8addbaed2cf53c3ef91d25 (diff)
virtio: console: Disable callbacks for virtqueues at start of S4 freeze
To ensure we don't receive any more interrupts from the host after we enter the freeze function, disable all vq interrupts. There wasn't any problem seen due to this in tests, but applying this patch makes the freeze case more robust. Signed-off-by: Amit Shah <amit.shah@redhat.com> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Diffstat (limited to 'drivers/char')
-rw-r--r--drivers/char/virtio_console.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/char/virtio_console.c b/drivers/char/virtio_console.c
index 614b84d38d7a..b58b56187065 100644
--- a/drivers/char/virtio_console.c
+++ b/drivers/char/virtio_console.c
@@ -1854,10 +1854,18 @@ static int virtcons_freeze(struct virtio_device *vdev)
1854 1854
1855 vdev->config->reset(vdev); 1855 vdev->config->reset(vdev);
1856 1856
1857 virtqueue_disable_cb(portdev->c_ivq);
1857 cancel_work_sync(&portdev->control_work); 1858 cancel_work_sync(&portdev->control_work);
1859 /*
1860 * Once more: if control_work_handler() was running, it would
1861 * enable the cb as the last step.
1862 */
1863 virtqueue_disable_cb(portdev->c_ivq);
1858 remove_controlq_data(portdev); 1864 remove_controlq_data(portdev);
1859 1865
1860 list_for_each_entry(port, &portdev->ports, list) { 1866 list_for_each_entry(port, &portdev->ports, list) {
1867 virtqueue_disable_cb(port->in_vq);
1868 virtqueue_disable_cb(port->out_vq);
1861 /* 1869 /*
1862 * We'll ask the host later if the new invocation has 1870 * We'll ask the host later if the new invocation has
1863 * the port opened or closed. 1871 * the port opened or closed.