tools/xl: Add altp2m_count parameter

Introduce a new altp2m_count parameter to control the maximum number of altp2m
views a domain can use. By default, if altp2m_count is unspecified and altp2m
is enabled, the value is set to 10, reflecting the legacy behavior.

This change is preparatory; it establishes the groundwork for the feature but
does not activate it.

Signed-off-by: Petr Beneš <w1benny@gmail.com>
Acked-by: Nick Rosbrook <enr0n@ubuntu.com>
Reviewed-by: Anthony PERARD <anthony.perard@vates.tech>
This commit is contained in:
Petr Beneš authored and Jan Beulich committed 2025-07-22 08:51:24 +02:00
1 parent 2acc878f77
commit 3712f464fd
7 files changed
+31

No files matched your search

+2
View File
@@ -1167,6 +1167,7 @@ if err := x.ArchX86.MsrRelaxed.fromC(&xc.arch_x86.msr_relaxed);err != nil {
return fmt.Errorf("converting field ArchX86.MsrRelaxed: %v", err)
}
x.Altp2M = Altp2MMode(xc.altp2m)
x.Altp2MCount = uint32(xc.altp2m_count)
x.VmtraceBufKb = int(xc.vmtrace_buf_kb)
if err := x.Vpmu.fromC(&xc.vpmu);err != nil {
return fmt.Errorf("converting field Vpmu: %v", err)
@@ -1701,6 +1702,7 @@ if err := x.ArchX86.MsrRelaxed.toC(&xc.arch_x86.msr_relaxed); err != nil {
return fmt.Errorf("converting field ArchX86.MsrRelaxed: %v", err)
}
xc.altp2m = C.libxl_altp2m_mode(x.Altp2M)
xc.altp2m_count = C.uint32_t(x.Altp2MCount)
xc.vmtrace_buf_kb = C.int(x.VmtraceBufKb)
if err := x.Vpmu.toC(&xc.vpmu); err != nil {
return fmt.Errorf("converting field Vpmu: %v", err)
+1
View File
@@ -604,6 +604,7 @@ ArchX86 struct {
MsrRelaxed Defbool
}
Altp2M Altp2MMode
Altp2MCount uint32
VmtraceBufKb int
Vpmu Defbool
TrapUnmappedAccesses Defbool
+7
View File
@@ -1257,6 +1257,13 @@ typedef struct libxl__ctx libxl_ctx;
*/
#define LIBXL_HAVE_ALTP2M 1
/*
* LIBXL_HAVE_ALTP2M_COUNT
* If this is defined, then libxl supports setting the maximum number of
* alternate p2m tables.
*/
#define LIBXL_HAVE_ALTP2M_COUNT 1
/*
* LIBXL_HAVE_REMUS
* If this is defined, then libxl supports remus.
+10
View File
@@ -421,6 +421,16 @@ int libxl__domain_build_info_setdefault(libxl__gc *gc,
return -ERROR_INVAL;
}
if (b_info->altp2m_count == LIBXL_ALTP2M_COUNT_DEFAULT) {
if (b_info->type == LIBXL_DOMAIN_TYPE_HVM &&
(libxl_defbool_val(b_info->u.hvm.altp2m) ||
b_info->altp2m != LIBXL_ALTP2M_MODE_DISABLED))
/* Reflect the default legacy count */
b_info->altp2m_count = 10;
else
b_info->altp2m_count = 0;
}
/* Assume that providing a bootloader user implies enabling restrict. */
libxl_defbool_setdefault(&b_info->bootloader_restrict,
!!b_info->bootloader_user);
+1
View File
@@ -111,6 +111,7 @@
#define LIBXL_MIN_DOM0_MEM (128*1024)
#define LIBXL_INVALID_GFN (~(uint64_t)0)
#define LIBXL_VGA_HOLE_SIZE 0x20
#define LIBXL_ALTP2M_COUNT_DEFAULT (~(uint32_t)0)
/* use 0 as the domid of the toolstack domain for now */
#define LIBXL_TOOLSTACK_DOMID 0
#define QEMU_SIGNATURE "DeviceModelRecord0002"
+1
View File
@@ -731,6 +731,7 @@ libxl_domain_build_info = Struct("domain_build_info",[
# Alternate p2m is not bound to any architecture or guest type, as it is
# supported by x86 HVM and ARM support is planned.
("altp2m", libxl_altp2m_mode),
("altp2m_count", uint32, {'init_val': 'LIBXL_ALTP2M_COUNT_DEFAULT'}),
# Size of preallocated vmtrace trace buffers (in KBYTES).
# Use zero value to disable this feature.
+9
View File
@@ -2099,6 +2099,15 @@ void parse_config_data(const char *config_source,
}
}
if (!xlu_cfg_get_long(config, "altp2m_count", &l, 1)) {
if (l != (uint16_t)l) {
fprintf(stderr, "ERROR: invalid value %ld for \"altp2m_count\"\n", l);
exit (1);
}
b_info->altp2m_count = l;
}
if (!xlu_cfg_get_long(config, "vmtrace_buf_kb", &l, 1) && l) {
b_info->vmtrace_buf_kb = l;
}
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.