Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-15-SP4:Update
xen.26660
63456175-libxl-per-arch-extra-default-paging-me...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 63456175-libxl-per-arch-extra-default-paging-memory.patch of Package xen.26660
# Commit 156a239ea288972425f967ac807b3cb5b5e14874 # Date 2022-10-11 14:28:37 +0200 # Author Henry Wang <Henry.Wang@arm.com> # Committer Jan Beulich <jbeulich@suse.com> libxl, docs: Use arch-specific default paging memory The default paging memory (descibed in `shadow_memory` entry in xl config) in libxl is used to determine the memory pool size for xl guests. Currently this size is only used for x86, and contains a part of RAM to shadow the resident processes. Since on Arm there is no shadow mode guests, so the part of RAM to shadow the resident processes is not necessary. Therefore, this commit splits the function `libxl_get_required_shadow_memory()` to arch specific helpers and renamed the helper to `libxl__arch_get_required_paging_memory()`. On x86, this helper calls the original value from `libxl_get_required_shadow_memory()` so no functional change intended. On Arm, this helper returns 1MB per vcpu plus 4KB per MiB of RAM for the P2M map and additional 512KB. Also update the xl.cfg documentation to add Arm documentation according to code changes and correct the comment style following Xen coding style. This is part of CVE-2022-33747 / XSA-409. Signed-off-by: Henry Wang <Henry.Wang@arm.com> Reviewed-by: Anthony PERARD <anthony.perard@citrix.com> --- a/docs/man/xl.cfg.5.pod.in +++ b/docs/man/xl.cfg.5.pod.in @@ -1768,6 +1768,11 @@ are not using hardware assisted paging ( mode) and your guest workload consists of a very large number of similar processes then increasing this value may improve performance. +On Arm, this field is used to determine the size of the guest P2M pages +pool, and the default value is 1MB per vCPU plus 4KB per MB of RAM for +the P2M map and additional 512KB for extended regions. Users should +adjust this value if bigger P2M pool size is needed. + =back =head3 Processor and Platform Features --- a/tools/libs/light/libxl_arch.h +++ b/tools/libs/light/libxl_arch.h @@ -90,6 +90,10 @@ void libxl__arch_update_domain_config(li libxl_domain_config *dst, const libxl_domain_config *src); +_hidden +unsigned long libxl__arch_get_required_paging_memory(unsigned long maxmem_kb, + unsigned int smp_cpus); + #if defined(__i386__) || defined(__x86_64__) #define LAPIC_BASE_ADDRESS 0xfee00000 --- a/tools/libs/light/libxl_arm.c +++ b/tools/libs/light/libxl_arm.c @@ -154,6 +154,20 @@ out: return rc; } +unsigned long libxl__arch_get_required_paging_memory(unsigned long maxmem_kb, + unsigned int smp_cpus) +{ + /* + * 256 pages (1MB) per vcpu, + * plus 1 page per MiB of RAM for the P2M map, + * plus 1 page per MiB of extended region. This default value is 128 MiB + * which should be enough for domains that are not running backend. + * This is higher than the minimum that Xen would allocate if no value + * were given (but the Xen minimum is for safety, not performance). + */ + return 4 * (256 * smp_cpus + maxmem_kb / 1024 + 128); +} + static struct arch_info { const char *guest_type; const char *timer_compat; --- a/tools/libs/light/libxl_utils.c +++ b/tools/libs/light/libxl_utils.c @@ -18,6 +18,7 @@ #include <ctype.h> #include "libxl_internal.h" +#include "libxl_arch.h" #include "_paths.h" #ifndef LIBXL_HAVE_NONCONST_LIBXL_BASENAME_RETURN_VALUE @@ -39,13 +40,7 @@ char *libxl_basename(const char *name) unsigned long libxl_get_required_shadow_memory(unsigned long maxmem_kb, unsigned int smp_cpus) { - /* 256 pages (1MB) per vcpu, - plus 1 page per MiB of RAM for the P2M map, - plus 1 page per MiB of RAM to shadow the resident processes. - This is higher than the minimum that Xen would allocate if no value - were given (but the Xen minimum is for safety, not performance). - */ - return 4 * (256 * smp_cpus + 2 * (maxmem_kb / 1024)); + return libxl__arch_get_required_paging_memory(maxmem_kb, smp_cpus); } char *libxl_domid_to_name(libxl_ctx *ctx, uint32_t domid) --- a/tools/libs/light/libxl_x86.c +++ b/tools/libs/light/libxl_x86.c @@ -882,6 +882,19 @@ void libxl__arch_update_domain_config(li libxl_defbool_val(src->b_info.arch_x86.msr_relaxed)); } +unsigned long libxl__arch_get_required_paging_memory(unsigned long maxmem_kb, + unsigned int smp_cpus) +{ + /* + * 256 pages (1MB) per vcpu, + * plus 1 page per MiB of RAM for the P2M map, + * plus 1 page per MiB of RAM to shadow the resident processes. + * This is higher than the minimum that Xen would allocate if no value + * were given (but the Xen minimum is for safety, not performance). + */ + return 4 * (256 * smp_cpus + 2 * (maxmem_kb / 1024)); +} + /* * Local variables: * mode: C
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor