hw/mem/cxl-type3: Refactor ct3_build_cdat_entries_for_mr to take mr size instead of mr as argument

The function ct3_build_cdat_entries_for_mr only uses size of the passed
memory region argument, refactor the function definition to make the passed
arguments more specific.

Reviewed-by: Gregory Price <gregory.price@memverge.com>
Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Signed-off-by: Fan Ni <fan.ni@samsung.com>
Message-Id: <20240523174651.1089554-8-nifan.cxl@gmail.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
Fan Ni 2024-05-23 10:44:47 -07:00 committed by Michael S. Tsirkin
parent f4fd91af3a
commit 69e4fb569d

View file

@ -44,7 +44,7 @@ enum {
}; };
static void ct3_build_cdat_entries_for_mr(CDATSubHeader **cdat_table, static void ct3_build_cdat_entries_for_mr(CDATSubHeader **cdat_table,
int dsmad_handle, MemoryRegion *mr, int dsmad_handle, uint64_t size,
bool is_pmem, uint64_t dpa_base) bool is_pmem, uint64_t dpa_base)
{ {
CDATDsmas *dsmas; CDATDsmas *dsmas;
@ -63,7 +63,7 @@ static void ct3_build_cdat_entries_for_mr(CDATSubHeader **cdat_table,
.DSMADhandle = dsmad_handle, .DSMADhandle = dsmad_handle,
.flags = is_pmem ? CDAT_DSMAS_FLAG_NV : 0, .flags = is_pmem ? CDAT_DSMAS_FLAG_NV : 0,
.DPA_base = dpa_base, .DPA_base = dpa_base,
.DPA_length = memory_region_size(mr), .DPA_length = size,
}; };
/* For now, no memory side cache, plausiblish numbers */ /* For now, no memory side cache, plausiblish numbers */
@ -132,7 +132,7 @@ static void ct3_build_cdat_entries_for_mr(CDATSubHeader **cdat_table,
*/ */
.EFI_memory_type_attr = is_pmem ? 2 : 1, .EFI_memory_type_attr = is_pmem ? 2 : 1,
.DPA_offset = 0, .DPA_offset = 0,
.DPA_length = memory_region_size(mr), .DPA_length = size,
}; };
/* Header always at start of structure */ /* Header always at start of structure */
@ -149,6 +149,7 @@ static int ct3_build_cdat_table(CDATSubHeader ***cdat_table, void *priv)
g_autofree CDATSubHeader **table = NULL; g_autofree CDATSubHeader **table = NULL;
CXLType3Dev *ct3d = priv; CXLType3Dev *ct3d = priv;
MemoryRegion *volatile_mr = NULL, *nonvolatile_mr = NULL; MemoryRegion *volatile_mr = NULL, *nonvolatile_mr = NULL;
uint64_t vmr_size = 0, pmr_size = 0;
int dsmad_handle = 0; int dsmad_handle = 0;
int cur_ent = 0; int cur_ent = 0;
int len = 0; int len = 0;
@ -163,6 +164,7 @@ static int ct3_build_cdat_table(CDATSubHeader ***cdat_table, void *priv)
return -EINVAL; return -EINVAL;
} }
len += CT3_CDAT_NUM_ENTRIES; len += CT3_CDAT_NUM_ENTRIES;
vmr_size = memory_region_size(volatile_mr);
} }
if (ct3d->hostpmem) { if (ct3d->hostpmem) {
@ -171,21 +173,22 @@ static int ct3_build_cdat_table(CDATSubHeader ***cdat_table, void *priv)
return -EINVAL; return -EINVAL;
} }
len += CT3_CDAT_NUM_ENTRIES; len += CT3_CDAT_NUM_ENTRIES;
pmr_size = memory_region_size(nonvolatile_mr);
} }
table = g_malloc0(len * sizeof(*table)); table = g_malloc0(len * sizeof(*table));
/* Now fill them in */ /* Now fill them in */
if (volatile_mr) { if (volatile_mr) {
ct3_build_cdat_entries_for_mr(table, dsmad_handle++, volatile_mr, ct3_build_cdat_entries_for_mr(table, dsmad_handle++, vmr_size,
false, 0); false, 0);
cur_ent = CT3_CDAT_NUM_ENTRIES; cur_ent = CT3_CDAT_NUM_ENTRIES;
} }
if (nonvolatile_mr) { if (nonvolatile_mr) {
uint64_t base = volatile_mr ? memory_region_size(volatile_mr) : 0; uint64_t base = vmr_size;
ct3_build_cdat_entries_for_mr(&(table[cur_ent]), dsmad_handle++, ct3_build_cdat_entries_for_mr(&(table[cur_ent]), dsmad_handle++,
nonvolatile_mr, true, base); pmr_size, true, base);
cur_ent += CT3_CDAT_NUM_ENTRIES; cur_ent += CT3_CDAT_NUM_ENTRIES;
} }
assert(len == cur_ent); assert(len == cur_ent);