[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2 30/40] xen/mpu: disable VMAP sub-system for MPU systems
On 13.01.2023 06:29, Penny Zheng wrote: > VMAP in MMU system, is used to remap a range of normal memory > or device memory to another virtual address with new attributes > for specific purpose, like ALTERNATIVE feature. Since there is > no virtual address translation support in MPU system, we can > not support VMAP in MPU system. > > So in this patch, we disable VMAP for MPU systems, and some > features depending on VMAP also need to be disabled at the same > time, Like ALTERNATIVE, CPU ERRATA. > > Signed-off-by: Penny Zheng <penny.zheng@xxxxxxx> > Signed-off-by: Wei Chen <wei.chen@xxxxxxx> > --- > xen/arch/arm/Kconfig | 3 +- > xen/arch/arm/Makefile | 2 +- > xen/arch/arm/include/asm/alternative.h | 15 +++++ > xen/arch/arm/include/asm/cpuerrata.h | 12 ++++ > xen/arch/arm/setup.c | 7 +++ > xen/arch/x86/Kconfig | 1 + > xen/common/Kconfig | 3 + > xen/common/Makefile | 2 +- > xen/include/xen/vmap.h | 81 ++++++++++++++++++++++++-- > 9 files changed, 119 insertions(+), 7 deletions(-) > > diff --git a/xen/arch/arm/Kconfig b/xen/arch/arm/Kconfig > index c6b6b612d1..9230c8b885 100644 > --- a/xen/arch/arm/Kconfig > +++ b/xen/arch/arm/Kconfig > @@ -11,12 +11,13 @@ config ARM_64 > > config ARM > def_bool y > - select HAS_ALTERNATIVE > + select HAS_ALTERNATIVE if !ARM_V8R Judging from the connection you make in the description, I think this wants to be "if HAS_VMAP". > select HAS_DEVICE_TREE > select HAS_PASSTHROUGH > select HAS_PDX > select HAS_PMAP > select IOMMU_FORCE_PT_SHARE > + select HAS_VMAP if !ARM_V8R I think entries here are intended to be sorted alphabetically. > --- a/xen/arch/x86/Kconfig > +++ b/xen/arch/x86/Kconfig > @@ -28,6 +28,7 @@ config X86 > select HAS_UBSAN > select HAS_VPCI if HVM > select NEEDS_LIBELF > + select HAS_VMAP Here they are certainly meant to be. > --- a/xen/include/xen/vmap.h > +++ b/xen/include/xen/vmap.h > @@ -1,15 +1,17 @@ > -#if !defined(__XEN_VMAP_H__) && defined(VMAP_VIRT_START) > +#if !defined(__XEN_VMAP_H__) && (defined(VMAP_VIRT_START) || > !defined(CONFIG_HAS_VMAP)) > #define __XEN_VMAP_H__ > > -#include <xen/mm-frame.h> > -#include <xen/page-size.h> > - > enum vmap_region { > VMAP_DEFAULT, > VMAP_XEN, > VMAP_REGION_NR, > }; > > +#ifdef CONFIG_HAS_VMAP > + > +#include <xen/mm-frame.h> > +#include <xen/page-size.h> > + > void vm_init_type(enum vmap_region type, void *start, void *end); > > void *__vmap(const mfn_t *mfn, unsigned int granularity, unsigned int nr, > @@ -38,4 +40,75 @@ static inline void vm_init(void) > vm_init_type(VMAP_DEFAULT, (void *)VMAP_VIRT_START, > arch_vmap_virt_end()); > } > > +#else /* !CONFIG_HAS_VMAP */ > + > +static inline void vm_init_type(enum vmap_region type, void *start, void > *end) > +{ > + ASSERT_UNREACHABLE(); > +} Do you really need this and all other inline stubs? Imo the goal ought to be to have as few of them as possible: The one above won't be referenced if you further make LIVEPATCH depend on HAS_VMAP (which I think you need to do anyway), and the only other call to the function is visible in context above (i.e. won't be used either when !HAS_VMAP). In other cases merely having a declaration (but no definition) may be sufficient, as the compiler may be able to eliminate calls. Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |