mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
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:
1 parent
2acc878f77
commit
3712f464fd
7 files changed
+31
No files matched your search
@@ -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)
|
||||
|
||||
@@ -604,6 +604,7 @@ ArchX86 struct {
|
||||
MsrRelaxed Defbool
|
||||
}
|
||||
Altp2M Altp2MMode
|
||||
Altp2MCount uint32
|
||||
VmtraceBufKb int
|
||||
Vpmu Defbool
|
||||
TrapUnmappedAccesses Defbool
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||