From: Philippe Mathieu-Daudé <[email protected]>

VirtIODevice::access_is_big_endian boolean field, initialized on device
realize, and updated when setting device features. This happens on reset
or when configuring device after initial realize. It represents
whether load/store accesses are ordered using big endianness.

Signed-off-by: Philippe Mathieu-Daudé <[email protected]>
Signed-off-by: Pierrick Bouvier <[email protected]>
---
 include/hw/virtio/virtio.h | 5 +++++
 hw/virtio/virtio.c         | 5 +++++
 2 files changed, 10 insertions(+)

diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h
index 65872f2c54c..0f792e24f23 100644
--- a/include/hw/virtio/virtio.h
+++ b/include/hw/virtio/virtio.h
@@ -154,6 +154,11 @@ struct VirtIODevice
     VMChangeStateEntry *vmstate;
     char *bus_name;
     uint8_t device_endian;
+    /**
+     * @access_is_big_endian: whether load/store memory accesses are ordered
+     * using big endianness.
+     */
+    bool access_is_big_endian;
     /**
      * @user_guest_notifier_mask: gate usage of ->guest_notifier_mask() 
callback.
      * This is used to suppress the masking of guest updates for
diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
index 77ca54e5206..a429ff7de39 100644
--- a/hw/virtio/virtio.c
+++ b/hw/virtio/virtio.c
@@ -3154,6 +3154,10 @@ static int virtio_set_features_nocheck(VirtIODevice 
*vdev, const uint64_t *val)
     }
 
     virtio_features_copy(vdev->guest_features_ex, tmp);
+    if (!bad) {
+        /* set_features might enable VIRTIO_F_VERSION_1 */
+        vdev->access_is_big_endian = virtio_access_is_big_endian(vdev);
+    }
     return bad ? -1 : 0;
 }
 
@@ -4075,6 +4079,7 @@ static void virtio_device_realize(DeviceState *dev, Error 
**errp)
     vdev->listener.commit = virtio_memory_listener_commit;
     vdev->listener.name = "virtio";
     memory_listener_register(&vdev->listener, vdev->dma_as);
+    vdev->access_is_big_endian = virtio_access_is_big_endian(vdev);
 }
 
 static void virtio_device_unrealize(DeviceState *dev)
-- 
2.47.3


Reply via email to