"Michael S. Tsirkin" <[email protected]> writes:
> virtio 1.0 spec says:
>
> Drivers MUST NOT assume reads from fields greater than 32 bits wide are
> atomic, nor are reads from multiple fields: drivers SHOULD read device
> configuration space fields like so:
>       u32 before, after;
>       do {
>               before = get_config_generation(device);
>               // read config entry/entries.
>               after = get_config_generation(device);
>       } while (after != before);
>
> Do exactly this, for transports that support it.

>  static inline void virtio_cwrite8(struct virtio_device *vdev,
> @@ -352,6 +375,7 @@ static inline u64 virtio_cread64(struct virtio_device 
> *vdev,
>  {
>       u64 ret;
>       vdev->config->get(vdev, offset, &ret, sizeof(ret));
> +     __virtio_cread_many(vdev, offset, &ret, 1, sizeof(ret));
>       return virtio64_to_cpu(vdev, (__force __virtio64)ret);
>  }

The "vdev->config->get(vdev, offset, &ret, sizeof(ret));" should
be deleted.  Harmless if not, though.

Cheers,
Rusty.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
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