From: Thomas Huth <thuth@redhat.com>
To: Jonathan Cameron <jonathan.cameron@huawei.com>, qemu-devel@nongnu.org
Cc: Fan Ni <fan.ni@samsung.com>,
"Michael S. Tsirkin" <mst@redhat.com>,
Marcel Apfelbaum <marcel.apfelbaum@gmail.com>,
qemu-trivial@nongnu.org
Subject: [PATCH 3/3] hw/mem/cxl_type3: Fix problem with g_steal_pointer()
Date: Mon, 4 Mar 2024 11:44:06 +0100 [thread overview]
Message-ID: <20240304104406.59855-4-thuth@redhat.com> (raw)
In-Reply-To: <20240304104406.59855-1-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 ct3_build_cdat_entries_for_mr() 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).
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>
---
include/hw/cxl/cxl_cdat.h | 9 ++++++---
hw/mem/cxl_type3.c | 24 ++++++++++++------------
2 files changed, 18 insertions(+), 15 deletions(-)
diff --git a/include/hw/cxl/cxl_cdat.h b/include/hw/cxl/cxl_cdat.h
index b44cefaad6..17a09066dc 100644
--- a/include/hw/cxl/cxl_cdat.h
+++ b/include/hw/cxl/cxl_cdat.h
@@ -82,7 +82,8 @@ typedef struct CDATDsmas {
uint16_t reserved;
uint64_t DPA_base;
uint64_t DPA_length;
-} QEMU_PACKED CDATDsmas;
+} CDATDsmas;
+QEMU_BUILD_BUG_ON(sizeof(CDATDsmas) != 24);
/* Device Scoped Latency and Bandwidth Information Structure - CDAT Table 5 */
typedef struct CDATDslbis {
@@ -95,7 +96,8 @@ typedef struct CDATDslbis {
uint64_t entry_base_unit;
uint16_t entry[3];
uint16_t reserved2;
-} QEMU_PACKED CDATDslbis;
+} CDATDslbis;
+QEMU_BUILD_BUG_ON(sizeof(CDATDslbis) != 24);
/* Device Scoped Memory Side Cache Information Structure - CDAT Table 6 */
typedef struct CDATDsmscis {
@@ -122,7 +124,8 @@ typedef struct CDATDsemts {
uint16_t reserved;
uint64_t DPA_offset;
uint64_t DPA_length;
-} QEMU_PACKED CDATDsemts;
+} CDATDsemts;
+QEMU_BUILD_BUG_ON(sizeof(CDATDsemts) != 24);
/* Switch Scoped Latency and Bandwidth Information Structure - CDAT Table 9 */
typedef struct CDATSslbisHeader {
diff --git a/hw/mem/cxl_type3.c b/hw/mem/cxl_type3.c
index e8801805b9..b679dfae1c 100644
--- a/hw/mem/cxl_type3.c
+++ b/hw/mem/cxl_type3.c
@@ -46,12 +46,12 @@ static void ct3_build_cdat_entries_for_mr(CDATSubHeader **cdat_table,
int dsmad_handle, MemoryRegion *mr,
bool is_pmem, uint64_t dpa_base)
{
- g_autofree CDATDsmas *dsmas = NULL;
- g_autofree CDATDslbis *dslbis0 = NULL;
- g_autofree CDATDslbis *dslbis1 = NULL;
- g_autofree CDATDslbis *dslbis2 = NULL;
- g_autofree CDATDslbis *dslbis3 = NULL;
- g_autofree CDATDsemts *dsemts = NULL;
+ CDATDsmas *dsmas;
+ CDATDslbis *dslbis0;
+ CDATDslbis *dslbis1;
+ CDATDslbis *dslbis2;
+ CDATDslbis *dslbis3;
+ CDATDsemts *dsemts;
dsmas = g_malloc(sizeof(*dsmas));
*dsmas = (CDATDsmas) {
@@ -135,12 +135,12 @@ static void ct3_build_cdat_entries_for_mr(CDATSubHeader **cdat_table,
};
/* Header always at start of structure */
- cdat_table[CT3_CDAT_DSMAS] = g_steal_pointer(&dsmas);
- cdat_table[CT3_CDAT_DSLBIS0] = g_steal_pointer(&dslbis0);
- cdat_table[CT3_CDAT_DSLBIS1] = g_steal_pointer(&dslbis1);
- cdat_table[CT3_CDAT_DSLBIS2] = g_steal_pointer(&dslbis2);
- cdat_table[CT3_CDAT_DSLBIS3] = g_steal_pointer(&dslbis3);
- cdat_table[CT3_CDAT_DSEMTS] = g_steal_pointer(&dsemts);
+ cdat_table[CT3_CDAT_DSMAS] = (CDATSubHeader *)dsmas;
+ cdat_table[CT3_CDAT_DSLBIS0] = (CDATSubHeader *)dslbis0;
+ cdat_table[CT3_CDAT_DSLBIS1] = (CDATSubHeader *)dslbis1;
+ cdat_table[CT3_CDAT_DSLBIS2] = (CDATSubHeader *)dslbis2;
+ cdat_table[CT3_CDAT_DSLBIS3] = (CDATSubHeader *)dslbis3;
+ cdat_table[CT3_CDAT_DSEMTS] = (CDATSubHeader *)dsemts;
}
static int ct3_build_cdat_table(CDATSubHeader ***cdat_table, void *priv)
--
2.44.0
next prev parent reply other threads:[~2024-03-04 10:44 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-04 10:44 [PATCH 0/3] cxl: Fix issues with g_steal_pointer() Thomas Huth
2024-03-04 10:44 ` [PATCH 1/3] hw/cxl/cxl-cdat: Fix type of buf in ct3_load_cdat() Thomas Huth
2024-03-04 14:57 ` Jonathan Cameron
2024-03-04 14:57 ` Jonathan Cameron via
2024-03-04 10:44 ` [PATCH 2/3] hw/pci-bridge/cxl_upstream: Fix problem with g_steal_pointer() Thomas Huth
2024-03-04 15:06 ` Jonathan Cameron
2024-03-04 15:06 ` Jonathan Cameron via
2024-03-04 15:12 ` Jonathan Cameron
2024-03-04 15:12 ` Jonathan Cameron via
2024-03-04 10:44 ` Thomas Huth [this message]
2024-03-04 15:10 ` [PATCH 3/3] hw/mem/cxl_type3: " Jonathan Cameron
2024-03-04 15:10 ` Jonathan Cameron via
2024-03-05 7:27 ` Thomas Huth
2024-03-05 15:52 ` Jonathan Cameron
2024-03-05 15:52 ` Jonathan Cameron via
2024-03-08 6:14 ` [PATCH 0/3] cxl: Fix issues " Michael Tokarev
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240304104406.59855-4-thuth@redhat.com \
--to=thuth@redhat.com \
--cc=fan.ni@samsung.com \
--cc=jonathan.cameron@huawei.com \
--cc=marcel.apfelbaum@gmail.com \
--cc=mst@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-trivial@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.