Re: [PATCH 6/6] virtio: core support for config generation

From: Rusty Russell
Date: Sun Dec 21 2014 - 17:32:01 EST


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