diff options
author | Michael S. Tsirkin <mst@redhat.com> | 2014-12-11 15:54:07 +0200 |
---|---|---|
committer | Michael S. Tsirkin <mst@redhat.com> | 2014-12-11 20:04:38 +0200 |
commit | 3d2667826cbb5e2eb8d8c7ee92f74bcb00b36a2f (patch) | |
tree | 1494ba27477b1307d40e7d80ebf41161e43f5ed1 /include/linux/virtio_config.h | |
parent | 30683a8cce8019aa4314c37e629da5c185017166 (diff) | |
download | lwn-3d2667826cbb5e2eb8d8c7ee92f74bcb00b36a2f.tar.gz lwn-3d2667826cbb5e2eb8d8c7ee92f74bcb00b36a2f.zip |
virtio_config: fix virtio_cread_bytes
virtio_cread_bytes is implemented incorrectly in case length happens to
be 2,4 or 8 bytes: transports and devices will assume it's an integer
value that has to be converted to LE format.
Let's just do multiple 1-byte reads: this also makes life easier
for transports who only need to implement 1,2,4 and 8 byte reads.
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Diffstat (limited to 'include/linux/virtio_config.h')
-rw-r--r-- | include/linux/virtio_config.h | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/include/linux/virtio_config.h b/include/linux/virtio_config.h index 7979f850e7ac..a61cd37f088c 100644 --- a/include/linux/virtio_config.h +++ b/include/linux/virtio_config.h @@ -305,7 +305,10 @@ static inline void virtio_cread_bytes(struct virtio_device *vdev, unsigned int offset, void *buf, size_t len) { - vdev->config->get(vdev, offset, buf, len); + int i; + + for (i = 0; i < len; i++) + vdev->config->get(vdev, offset + i, buf + i, 1); } static inline void virtio_cwrite8(struct virtio_device *vdev, |