aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/virtio_config.h
diff options
context:
space:
mode:
authorMichael S. Tsirkin <mst@redhat.com>2014-12-11 15:54:07 +0200
committerMichael S. Tsirkin <mst@redhat.com>2014-12-11 20:04:38 +0200
commit3d2667826cbb5e2eb8d8c7ee92f74bcb00b36a2f (patch)
tree1494ba27477b1307d40e7d80ebf41161e43f5ed1 /include/linux/virtio_config.h
parentvirtio: set VIRTIO_CONFIG_S_FEATURES_OK on restore (diff)
downloadlinux-dev-3d2667826cbb5e2eb8d8c7ee92f74bcb00b36a2f.tar.xz
linux-dev-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.h5
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,