hw/pci-bridge/cxl_upstream: Fix problem with g_steal_pointer()
commitc68f81fec8cb15a5c88c3e0ae152c719e633318c
authorThomas Huth <thuth@redhat.com>
Mon, 4 Mar 2024 10:44:05 +0000 (4 11:44 +0100)
committerMichael Tokarev <mjt@tls.msk.ru>
Sat, 9 Mar 2024 15:56:37 +0000 (9 18:56 +0300)
treeff2e24fa09b94c9ddd609c025dd0b0fc58ba0109
parentc4e898d502549025e087aa799211a5c6bd3984ff
hw/pci-bridge/cxl_upstream: Fix problem with g_steal_pointer()

When setting GLIB_VERSION_MAX_ALLOWED to GLIB_VERSION_2_58 or higher,
glib adds type safety checks to the g_steal_pointer() macro. This
triggers errors in the build_cdat_table() function which uses the
g_steal_pointer() for type-casting from one pointer type to the other
(which also looks quite weird since the local pointers have all been
declared with g_autofree though they are never freed here). Let's fix
it by using a proper typecast instead. For making this possible, we
have to remove the QEMU_PACKED attribute from some structs since GCC
otherwise complains that the source and destination pointer might
have different alignment restrictions. Removing the QEMU_PACKED should
be fine here since the structs are already naturally aligned. Anyway,
add some QEMU_BUILD_BUG_ON() statements to make sure that we've got
the right sizes (without padding in the structs).

Signed-off-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Reviewed-by: Michael Tokarev <mjt@tls.msk.ru>
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
hw/pci-bridge/cxl_upstream.c
include/hw/cxl/cxl_cdat.h