[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH V5 1/3] xen/arm: Introduce gpaddr_bits field to struct xen_arch_domainconfig
On Wed, 6 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. > > 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> > --- > 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) > --- > tools/include/libxl.h | 5 +++++ > tools/libs/light/libxl_arm.c | 2 ++ > tools/libs/light/libxl_types.idl | 1 + > xen/arch/arm/domain.c | 6 ++++++ > xen/include/public/arch-arm.h | 5 +++++ > xen/include/public/domctl.h | 2 +- > 6 files changed, 20 insertions(+), 1 deletion(-) > > diff --git a/tools/include/libxl.h b/tools/include/libxl.h > index b9ba16d..33b4bfb 100644 > --- a/tools/include/libxl.h > +++ b/tools/include/libxl.h > @@ -279,6 +279,11 @@ > #define LIBXL_HAVE_BUILDINFO_ARCH_ARM_TEE 1 > > /* > + * libxl_domain_build_info has the gpaddr_bits field. > + */ > +#define LIBXL_HAVE_BUILDINFO_ARCH_ARM_GPADDR_BITS 1 > + > +/* > * LIBXL_HAVE_SOFT_RESET indicates that libxl supports performing > * 'soft reset' for domains and there is 'soft_reset' shutdown reason > * in enum libxl_shutdown_reason. > diff --git a/tools/libs/light/libxl_arm.c b/tools/libs/light/libxl_arm.c > index e3140a6..45e0386 100644 > --- a/tools/libs/light/libxl_arm.c > +++ b/tools/libs/light/libxl_arm.c > @@ -123,6 +123,8 @@ int libxl__arch_domain_save_config(libxl__gc *gc, > > state->clock_frequency = config->arch.clock_frequency; > > + d_config->b_info.arch_arm.gpaddr_bits = config->arch.gpaddr_bits; > + > return 0; > } > > diff --git a/tools/libs/light/libxl_types.idl > b/tools/libs/light/libxl_types.idl > index 3f9fff6..39482db 100644 > --- a/tools/libs/light/libxl_types.idl > +++ b/tools/libs/light/libxl_types.idl > @@ -644,6 +644,7 @@ libxl_domain_build_info = Struct("domain_build_info",[ > > ("arch_arm", Struct(None, [("gic_version", libxl_gic_version), > ("vuart", libxl_vuart_type), > + ("gpaddr_bits", uint8), > ])), > ("arch_x86", Struct(None, [("msr_relaxed", libxl_defbool), > ])), > diff --git a/xen/arch/arm/domain.c b/xen/arch/arm/domain.c > index 19c756a..dfecc45 100644 > --- a/xen/arch/arm/domain.c > +++ b/xen/arch/arm/domain.c > @@ -767,6 +767,12 @@ int arch_domain_create(struct domain *d, > if ( is_hardware_domain(d) && (rc = domain_vuart_init(d)) ) > goto fail; > > + /* > + * Pass maximum IPA bits to the toolstack, currently the same guest > + * physical address space size is used for all guests. > + */ > + config->arch.gpaddr_bits = p2m_ipa_bits; This could also be set in arch_sanitise_domain_config together with config->arch.gic_version. I prefer if it was done in arch_sanitise_domain_config but also here is OK I think. Given that everything else looks fine: Reviewed-by: Stefano Stabellini <sstabellini@xxxxxxxxxx> > return 0; > > fail: > diff --git a/xen/include/public/arch-arm.h b/xen/include/public/arch-arm.h > index 6b5a5f8..4a01f8b 100644 > --- a/xen/include/public/arch-arm.h > +++ b/xen/include/public/arch-arm.h > @@ -333,6 +333,11 @@ struct xen_arch_domainconfig { > * > */ > uint32_t clock_frequency; > + /* > + * OUT > + * Guest physical address space size > + */ > + uint8_t gpaddr_bits; > }; > #endif /* __XEN__ || __XEN_TOOLS__ */ > > diff --git a/xen/include/public/domctl.h b/xen/include/public/domctl.h > index 96696e3..f37586e 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. > -- > 2.7.4 >
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |