[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 09/11] hw/pci-bridge/cxl_upstream: Fix problem with g_steal_pointe
From: |
Michael Tokarev |
Subject: |
[PULL 09/11] hw/pci-bridge/cxl_upstream: Fix problem with g_steal_pointer() |
Date: |
Sat, 9 Mar 2024 18:57:27 +0300 |
From: Thomas Huth <thuth@redhat.com>
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 | 8 ++++----
include/hw/cxl/cxl_cdat.h | 8 +++++---
2 files changed, 9 insertions(+), 7 deletions(-)
diff --git a/hw/pci-bridge/cxl_upstream.c b/hw/pci-bridge/cxl_upstream.c
index e87eb40177..537f9affb8 100644
--- a/hw/pci-bridge/cxl_upstream.c
+++ b/hw/pci-bridge/cxl_upstream.c
@@ -192,8 +192,8 @@ enum {
static int build_cdat_table(CDATSubHeader ***cdat_table, void *priv)
{
- g_autofree CDATSslbis *sslbis_latency = NULL;
- g_autofree CDATSslbis *sslbis_bandwidth = NULL;
+ CDATSslbis *sslbis_latency;
+ CDATSslbis *sslbis_bandwidth;
CXLUpstreamPort *us = CXL_USP(priv);
PCIBus *bus = &PCI_BRIDGE(us)->sec_bus;
int devfn, sslbis_size, i;
@@ -270,8 +270,8 @@ static int build_cdat_table(CDATSubHeader ***cdat_table,
void *priv)
*cdat_table = g_new0(CDATSubHeader *, CXL_USP_CDAT_NUM_ENTRIES);
/* Header always at start of structure */
- (*cdat_table)[CXL_USP_CDAT_SSLBIS_LAT] = g_steal_pointer(&sslbis_latency);
- (*cdat_table)[CXL_USP_CDAT_SSLBIS_BW] = g_steal_pointer(&sslbis_bandwidth);
+ (*cdat_table)[CXL_USP_CDAT_SSLBIS_LAT] = (CDATSubHeader *)sslbis_latency;
+ (*cdat_table)[CXL_USP_CDAT_SSLBIS_BW] = (CDATSubHeader *)sslbis_bandwidth;
return CXL_USP_CDAT_NUM_ENTRIES;
}
diff --git a/include/hw/cxl/cxl_cdat.h b/include/hw/cxl/cxl_cdat.h
index 8e3d094608..b44cefaad6 100644
--- a/include/hw/cxl/cxl_cdat.h
+++ b/include/hw/cxl/cxl_cdat.h
@@ -130,7 +130,8 @@ typedef struct CDATSslbisHeader {
uint8_t data_type;
uint8_t reserved[3];
uint64_t entry_base_unit;
-} QEMU_PACKED CDATSslbisHeader;
+} CDATSslbisHeader;
+QEMU_BUILD_BUG_ON(sizeof(CDATSslbisHeader) != 16);
#define CDAT_PORT_ID_USP 0x100
/* Switch Scoped Latency and Bandwidth Entry - CDAT Table 10 */
@@ -139,12 +140,13 @@ typedef struct CDATSslbe {
uint16_t port_y_id;
uint16_t latency_bandwidth;
uint16_t reserved;
-} QEMU_PACKED CDATSslbe;
+} CDATSslbe;
+QEMU_BUILD_BUG_ON(sizeof(CDATSslbe) != 8);
typedef struct CDATSslbis {
CDATSslbisHeader sslbis_header;
CDATSslbe sslbe[];
-} QEMU_PACKED CDATSslbis;
+} CDATSslbis;
typedef struct CDATEntry {
void *base;
--
2.39.2
- [PULL 00/11] Trivial patches for 2024-03-09, Michael Tokarev, 2024/03/09
- [PULL 01/11] replay: Improve error messages about configuration conflicts, Michael Tokarev, 2024/03/09
- [PULL 02/11] hw/vfio/pci.c: Make some structure static, Michael Tokarev, 2024/03/09
- [PULL 03/11] hw/scsi/lsi53c895a: Fix typo in comment, Michael Tokarev, 2024/03/09
- [PULL 04/11] make-release: switch to .xz format by default, Michael Tokarev, 2024/03/09
- [PULL 05/11] char: Slightly better error reporting when chardev is in use, Michael Tokarev, 2024/03/09
- [PULL 06/11] blockdev: Fix block_resize error reporting for op blockers, Michael Tokarev, 2024/03/09
- [PULL 07/11] qerror: QERR_DEVICE_IN_USE is no longer used, drop, Michael Tokarev, 2024/03/09
- [PULL 08/11] hw/cxl/cxl-cdat: Fix type of buf in ct3_load_cdat(), Michael Tokarev, 2024/03/09
- [PULL 09/11] hw/pci-bridge/cxl_upstream: Fix problem with g_steal_pointer(),
Michael Tokarev <=
- [PULL 10/11] hw/mem/cxl_type3: Fix problem with g_steal_pointer(), Michael Tokarev, 2024/03/09
- [PULL 11/11] docs/acpi/bits: add some clarity and details while also improving formating, Michael Tokarev, 2024/03/09
- Re: [PULL 00/11] Trivial patches for 2024-03-09, Peter Maydell, 2024/03/10