[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH V6 1/2] xen/arm: Introduce gpaddr_bits field to struct xen_domctl_getdomaininfo
On Mon, 11 Oct 2021, Oleksandr Tyshchenko wrote: > From: Oleksandr Tyshchenko <oleksandr_tyshchenko@xxxxxxxx> > > We need to pass info about maximum supported guest physical > address space size to the toolstack on Arm in order to properly > calculate the base and size of the extended region (safe range) > for the guest. The extended region is unused address space which > could be safely used by domain for foreign/grant mappings on Arm. > The extended region itself will be handled by the subsequent > patch. > > Currently the same guest physical address space size is used > for all guests (p2m_ipa_bits variable on Arm, the x86 equivalent > is hap_paddr_bits). > > As we add new field to the structure bump the interface version. > > Suggested-by: Julien Grall <jgrall@xxxxxxxxxx> > Signed-off-by: Oleksandr Tyshchenko <oleksandr_tyshchenko@xxxxxxxx> I couldn't spot any errors in this patch > --- > Changes RFC -> V2: > - update patch subject/description > - replace arch-specific sub-struct with common gpaddr_bits > field and update code to reflect that > > Changes V2 -> V3: > - make the field uint8_t and add uint8_t pad[7] after > - remove leading blanks in libxl.h > > Changes V3 -> V4: > - also print gpaddr_bits from output_physinfo() > - add Michal's R-b > > Changes V4 -> V5: > - update patch subject and description > - drop Michal's R-b > - pass gpaddr_bits via createdomain domctl > (struct xen_arch_domainconfig) > > Changes V5 -> V6: > - update patch subject and description > - pass gpaddr_bits via getdomaininfo domctl > (struct xen_domctl_getdomaininfo) > --- > tools/include/libxl.h | 8 ++++++++ > tools/include/xenctrl.h | 1 + > tools/libs/ctrl/xc_domain.c | 1 + > tools/libs/light/libxl_domain.c | 1 + > tools/libs/light/libxl_types.idl | 1 + > xen/arch/arm/domctl.c | 2 ++ > xen/arch/x86/domctl.c | 1 + > xen/include/public/domctl.h | 3 ++- > 8 files changed, 17 insertions(+), 1 deletion(-) > > diff --git a/tools/include/libxl.h b/tools/include/libxl.h > index b9ba16d..deb5022 100644 > --- a/tools/include/libxl.h > +++ b/tools/include/libxl.h > @@ -874,6 +874,14 @@ typedef struct libxl__ctx libxl_ctx; > #define LIBXL_HAVE_DOMINFO_NEVER_STOP 1 > > /* > + * LIBXL_HAVE_DOMINFO_GPADDR_BITS > + * > + * If this is defined, libxl_dominfo will contain an uint8 field called > + * gpaddr_bits, containing the guest physical address space size. > + */ > +#define LIBXL_HAVE_DOMINFO_GPADDR_BITS 1 > + > +/* > * LIBXL_HAVE_QXL > * > * If defined, then the libxl_vga_interface_type will contain another value: > diff --git a/tools/include/xenctrl.h b/tools/include/xenctrl.h > index a306399..07b96e6 100644 > --- a/tools/include/xenctrl.h > +++ b/ tools/include/xenctrl.h > @@ -462,6 +462,7 @@ typedef struct xc_dominfo { > unsigned int max_vcpu_id; > xen_domain_handle_t handle; > unsigned int cpupool; > + uint8_t gpaddr_bits; > struct xen_arch_domainconfig arch_config; > } xc_dominfo_t; > > diff --git a/tools/libs/ctrl/xc_domain.c b/tools/libs/ctrl/xc_domain.c > index 23322b7..b155d6a 100644 > --- a/tools/libs/ctrl/xc_domain.c > +++ b/tools/libs/ctrl/xc_domain.c > @@ -396,6 +396,7 @@ int xc_domain_getinfo(xc_interface *xch, > info->nr_online_vcpus = domctl.u.getdomaininfo.nr_online_vcpus; > info->max_vcpu_id = domctl.u.getdomaininfo.max_vcpu_id; > info->cpupool = domctl.u.getdomaininfo.cpupool; > + info->gpaddr_bits = domctl.u.getdomaininfo.gpaddr_bits; > info->arch_config = domctl.u.getdomaininfo.arch_config; > > memcpy(info->handle, domctl.u.getdomaininfo.handle, > diff --git a/tools/libs/light/libxl_domain.c b/tools/libs/light/libxl_domain.c > index 51a6127..544a9bf 100644 > --- a/tools/libs/light/libxl_domain.c > +++ b/tools/libs/light/libxl_domain.c > @@ -306,6 +306,7 @@ void libxl__xcinfo2xlinfo(libxl_ctx *ctx, > xlinfo->vcpu_max_id = xcinfo->max_vcpu_id; > xlinfo->vcpu_online = xcinfo->nr_online_vcpus; > xlinfo->cpupool = xcinfo->cpupool; > + xlinfo->gpaddr_bits = xcinfo->gpaddr_bits; > xlinfo->domain_type = (xcinfo->flags & XEN_DOMINF_hvm_guest) ? > LIBXL_DOMAIN_TYPE_HVM : LIBXL_DOMAIN_TYPE_PV; > } > diff --git a/tools/libs/light/libxl_types.idl > b/tools/libs/light/libxl_types.idl > index 3f9fff6..2df7258 100644 > --- a/tools/libs/light/libxl_types.idl > +++ b/tools/libs/light/libxl_types.idl > @@ -357,6 +357,7 @@ libxl_dominfo = Struct("dominfo",[ > ("vcpu_max_id", uint32), > ("vcpu_online", uint32), > ("cpupool", uint32), > + ("gpaddr_bits", uint8), > ("domain_type", libxl_domain_type), > ], dir=DIR_OUT) > > diff --git a/xen/arch/arm/domctl.c b/xen/arch/arm/domctl.c > index b7d27f3..6245af6 100644 > --- a/xen/arch/arm/domctl.c > +++ b/xen/arch/arm/domctl.c > @@ -20,6 +20,8 @@ void arch_get_domain_info(const struct domain *d, > { > /* All ARM domains use hardware assisted paging. */ > info->flags |= XEN_DOMINF_hap; > + > + info->gpaddr_bits = p2m_ipa_bits; > } > > static int handle_vuart_init(struct domain *d, > diff --git a/xen/arch/x86/domctl.c b/xen/arch/x86/domctl.c > index 26a76d2..7d102e0 100644 > --- a/xen/arch/x86/domctl.c > +++ b/xen/arch/x86/domctl.c > @@ -151,6 +151,7 @@ void arch_get_domain_info(const struct domain *d, > info->flags |= XEN_DOMINF_hap; > > info->arch_config.emulation_flags = d->arch.emulation_flags; > + info->gpaddr_bits = hap_paddr_bits; > } > > static int do_vmtrace_op(struct domain *d, struct xen_domctl_vmtrace_op *op, > diff --git a/xen/include/public/domctl.h b/xen/include/public/domctl.h > index 4cb3f66..b93f776 100644 > --- a/xen/include/public/domctl.h > +++ b/xen/include/public/domctl.h > @@ -38,7 +38,7 @@ > #include "hvm/save.h" > #include "memory.h" > > -#define XEN_DOMCTL_INTERFACE_VERSION 0x00000014 > +#define XEN_DOMCTL_INTERFACE_VERSION 0x00000015 > > /* > * NB. xen_domctl.domain is an IN/OUT parameter for this operation. > @@ -150,6 +150,7 @@ struct xen_domctl_getdomaininfo { > uint32_t ssidref; > xen_domain_handle_t handle; > uint32_t cpupool; > + uint8_t gpaddr_bits; /* Guest physical address space size. */ > struct xen_arch_domainconfig arch_config; > }; > typedef struct xen_domctl_getdomaininfo xen_domctl_getdomaininfo_t; > -- > 2.7.4 >
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |