mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-02 23:33:54 -06:00
vfio/migration: Use BE byte order for device state wire packets
Wire data commonly use BE byte order (including in the existing migration protocol), use it also for for VFIO device state packets. This will allow VFIO multifd device state transfer between hosts with different endianness. Although currently there is no such use case, it's good to have it now for completeness. Reviewed-by: Avihai Horon <avihaih@nvidia.com> Signed-off-by: Maciej S. Szmigiero <maciej.szmigiero@oracle.com> Link: https://lore.kernel.org/qemu-devel/dcfc04cc1a50655650dbac8398e2742ada84ee39.1741611079.git.maciej.szmigiero@oracle.com Signed-off-by: Cédric Le Goater <clg@redhat.com>
This commit is contained in:
parent
e46b7af508
commit
cbb2e10526
1 changed files with 10 additions and 5 deletions
|
@ -13,6 +13,7 @@
|
|||
#include "hw/vfio/vfio-common.h"
|
||||
#include "migration/misc.h"
|
||||
#include "qapi/error.h"
|
||||
#include "qemu/bswap.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "qemu/lockable.h"
|
||||
#include "qemu/main-loop.h"
|
||||
|
@ -155,12 +156,16 @@ bool vfio_multifd_load_state_buffer(void *opaque, char *data, size_t data_size,
|
|||
return false;
|
||||
}
|
||||
|
||||
packet->version = be32_to_cpu(packet->version);
|
||||
if (packet->version != VFIO_DEVICE_STATE_PACKET_VER_CURRENT) {
|
||||
error_setg(errp, "%s: packet has unknown version %" PRIu32,
|
||||
vbasedev->name, packet->version);
|
||||
return false;
|
||||
}
|
||||
|
||||
packet->idx = be32_to_cpu(packet->idx);
|
||||
packet->flags = be32_to_cpu(packet->flags);
|
||||
|
||||
if (packet->idx == UINT32_MAX) {
|
||||
error_setg(errp, "%s: packet index is invalid", vbasedev->name);
|
||||
return false;
|
||||
|
@ -558,9 +563,9 @@ vfio_save_complete_precopy_thread_config_state(VFIODevice *vbasedev,
|
|||
|
||||
packet_len = sizeof(*packet) + bioc->usage;
|
||||
packet = g_malloc0(packet_len);
|
||||
packet->version = VFIO_DEVICE_STATE_PACKET_VER_CURRENT;
|
||||
packet->idx = idx;
|
||||
packet->flags = VFIO_DEVICE_STATE_CONFIG_STATE;
|
||||
packet->version = cpu_to_be32(VFIO_DEVICE_STATE_PACKET_VER_CURRENT);
|
||||
packet->idx = cpu_to_be32(idx);
|
||||
packet->flags = cpu_to_be32(VFIO_DEVICE_STATE_CONFIG_STATE);
|
||||
memcpy(&packet->data, bioc->data, bioc->usage);
|
||||
|
||||
if (!multifd_queue_device_state(idstr, instance_id,
|
||||
|
@ -610,7 +615,7 @@ vfio_multifd_save_complete_precopy_thread(SaveLiveCompletePrecopyThreadData *d,
|
|||
}
|
||||
|
||||
packet = g_malloc0(sizeof(*packet) + migration->data_buffer_size);
|
||||
packet->version = VFIO_DEVICE_STATE_PACKET_VER_CURRENT;
|
||||
packet->version = cpu_to_be32(VFIO_DEVICE_STATE_PACKET_VER_CURRENT);
|
||||
|
||||
for (idx = 0; ; idx++) {
|
||||
ssize_t data_size;
|
||||
|
@ -631,7 +636,7 @@ vfio_multifd_save_complete_precopy_thread(SaveLiveCompletePrecopyThreadData *d,
|
|||
break;
|
||||
}
|
||||
|
||||
packet->idx = idx;
|
||||
packet->idx = cpu_to_be32(idx);
|
||||
packet_size = sizeof(*packet) + data_size;
|
||||
|
||||
if (!multifd_queue_device_state(d->idstr, d->instance_id,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue