Messages in this thread | | | From | Rusty Russell <> | Subject | Re: [PATCH 6/6] virtio: core support for config generation | Date | Fri, 19 Dec 2014 13:31:53 +1030 |
| |
"Michael S. Tsirkin" <mst@redhat.com> 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.
| |