"Michael S. Tsirkin" <m...@redhat.com> 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 <m...@redhat.com>
> ---
>
> 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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to