lkml.org 
[lkml]   [2022]   [Jul]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 15/28] virtio_mmio: Restore guest page size on resume
    Date
    From: Stephan Gerhold <stephan.gerhold@kernkonzept.com>

    [ Upstream commit e0c2ce8217955537dd5434baeba061f209797119 ]

    Virtio devices might lose their state when the VMM is restarted
    after a suspend to disk (hibernation) cycle. This means that the
    guest page size register must be restored for the virtio_mmio legacy
    interface, since otherwise the virtio queues are not functional.

    This is particularly problematic for QEMU that currently still defaults
    to using the legacy interface for virtio_mmio. Write the guest page
    size register again in virtio_mmio_restore() to make legacy virtio_mmio
    devices work correctly after hibernation.

    Signed-off-by: Stephan Gerhold <stephan.gerhold@kernkonzept.com>
    Message-Id: <20220621110621.3638025-3-stephan.gerhold@kernkonzept.com>
    Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/virtio/virtio_mmio.c | 3 +++
    1 file changed, 3 insertions(+)

    diff --git a/drivers/virtio/virtio_mmio.c b/drivers/virtio/virtio_mmio.c
    index d69f0c5135ff..413f6af4d132 100644
    --- a/drivers/virtio/virtio_mmio.c
    +++ b/drivers/virtio/virtio_mmio.c
    @@ -502,6 +502,9 @@ static int virtio_mmio_restore(struct device *dev)
    {
    struct virtio_mmio_device *vm_dev = dev_get_drvdata(dev);

    + if (vm_dev->version == 1)
    + writel(PAGE_SIZE, vm_dev->base + VIRTIO_MMIO_GUEST_PAGE_SIZE);
    +
    return virtio_device_restore(&vm_dev->vdev);
    }

    --
    2.35.1


    \
     
     \ /
      Last update: 2022-07-19 13:56    [W:2.676 / U:0.152 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site