Re: [PATCH] virtio_mmio: generation support
From: Rusty Russell
Date: Wed Mar 11 2015 - 23:07:00 EST
"Michael S. Tsirkin" <mst@xxxxxxxxxx> writes:
> virtio_mmio currently lacks generation support which
> makes multi-byte field access racy.
> Fix by getting the value at offset 0xfc for version 2
> devices. Nothing we can do for version 1, so return
> generation id 0.
>
> Signed-off-by: Michael S. Tsirkin <mst@xxxxxxxxxx>
> ---
>
> Pawel, you mentioned you have a working virtio 1.0
> hypervisor, can you pls confirm this works correctly?
I've applied this one, but fixed it to compile:
> drivers/virtio/virtio_mmio.c | 12 ++++++++++++
> 1 file changed, 12 insertions(+)
>
> diff --git a/drivers/virtio/virtio_mmio.c b/drivers/virtio/virtio_mmio.c
> index 0375456..69b2e4d 100644
> --- a/drivers/virtio/virtio_mmio.c
> +++ b/drivers/virtio/virtio_mmio.c
> @@ -237,6 +237,16 @@ static void vm_set(struct virtio_device *vdev, unsigned offset,
> }
> }
>
> +static u32 vm_generation(struct virtio_device *vdev)
> +{
> + struct virtio_mmio_device *vm_dev = to_virtio_mmio_device(vdev);
> +
> + if (vm_dev->version == 1)
> + return 0;
> + else
> + return readl(vm_dev->base + VIRTIO_MMIO_CONFIG_GENERATION);
> +}
> +
> static u8 vm_get_status(struct virtio_device *vdev)
> {
> struct virtio_mmio_device *vm_dev = to_virtio_mmio_device(vdev);
> @@ -503,6 +513,8 @@ static const char *vm_bus_name(struct virtio_device *vdev)
> static const struct virtio_config_ops virtio_mmio_config_ops = {
> .get = vm_get,
> .set = vm_set,
> + .generation = vm_generation,
> + .get_status = vm_get_status,
> .get_status = vm_get_status,
See the double-assingment of get_status?
Thanks,
Rusty.
PS. Sorry, that *does* actually compile. I wish it didn't though...
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/