virtio_balloon: transitional interface
[cascardo/linux.git] / drivers / virtio / virtio_balloon.c
index 6a356e3..82e80e0 100644 (file)
@@ -214,8 +214,8 @@ static inline void update_stat(struct virtio_balloon *vb, int idx,
                               u16 tag, u64 val)
 {
        BUG_ON(idx >= VIRTIO_BALLOON_S_NR);
-       vb->stats[idx].tag = tag;
-       vb->stats[idx].val = val;
+       vb->stats[idx].tag = cpu_to_virtio16(vb->vdev, tag);
+       vb->stats[idx].val = cpu_to_virtio64(vb->vdev, val);
 }
 
 #define pages_to_bytes(x) ((u64)(x) << PAGE_SHIFT)
@@ -283,18 +283,27 @@ static void virtballoon_changed(struct virtio_device *vdev)
 
 static inline s64 towards_target(struct virtio_balloon *vb)
 {
-       __le32 v;
        s64 target;
+       u32 num_pages;
 
-       virtio_cread(vb->vdev, struct virtio_balloon_config, num_pages, &v);
+       virtio_cread(vb->vdev, struct virtio_balloon_config, num_pages,
+                    &num_pages);
 
-       target = le32_to_cpu(v);
+       /* Legacy balloon config space is LE, unlike all other devices. */
+       if (!virtio_has_feature(vb->vdev, VIRTIO_F_VERSION_1))
+               num_pages = le32_to_cpu((__force __le32)num_pages);
+
+       target = num_pages;
        return target - vb->num_pages;
 }
 
 static void update_balloon_size(struct virtio_balloon *vb)
 {
-       __le32 actual = cpu_to_le32(vb->num_pages);
+       u32 actual = vb->num_pages;
+
+       /* Legacy balloon config space is LE, unlike all other devices. */
+       if (!virtio_has_feature(vb->vdev, VIRTIO_F_VERSION_1))
+               actual = (__force u32)cpu_to_le32(actual);
 
        virtio_cwrite(vb->vdev, struct virtio_balloon_config, actual,
                      &actual);