On 16/03/2025 20:24, Luca Fancellu wrote:
>
>
> From: Penny Zheng <penny.zh...@arm.com>
>
> ARM MPU system doesn't need to use paging memory pool, as MPU memory
> mapping table at most takes only one 4KB page, which is enough to
> manage the maximum 255 MPU memory regions, for all EL2 stage 1
> translation and EL1 stage 2 translation.
>
> Introduce HAS_PAGING_MEMPOOL Kconfig common symbol, selected for Arm
> MMU systems.
I think it should be selected by other arches that implement the stubs.
Anyway, Jan added a comment and I do agree with him.
Just a few remarks.
>
> Wrap the code inside 'construct_domU' that deal with p2m paging
> allocation in a new function 'domu_p2m_set_allocation', protected
> by HAS_PAGING_MEMPOOL, this is done in this way to prevent polluting
> the former function with #ifdefs and improve readability
>
> Introduce arch_{get,set}_paging_mempool_size implementation for MPU
> system.
>
> Remove 'struct paging_domain' from Arm 'struct arch_domain' when the
> field is not required.
>
> Signed-off-by: Penny Zheng <penny.zh...@arm.com>
> Signed-off-by: Wei Chen <wei.c...@arm.com>
> Signed-off-by: Luca Fancellu <luca.fance...@arm.com>
> ---
> v2 changes:
> - make Kconfig HAS_PAGING_MEMPOOL common
> - protect also "xen,domain-p2m-mem-mb" reading with HAS_PAGING_MEMPOOL
> - do not define p2m_teardown{_allocation} in this patch
> - change commit message
> ---
> xen/arch/arm/Kconfig | 1 +
> xen/arch/arm/dom0less-build.c | 48 ++++++++++++++++++++++++-------
> xen/arch/arm/include/asm/domain.h | 2 ++
> xen/arch/arm/mpu/Makefile | 1 +
> xen/arch/arm/mpu/p2m.c | 25 ++++++++++++++++
> xen/common/Kconfig | 3 ++
> 6 files changed, 69 insertions(+), 11 deletions(-)
> create mode 100644 xen/arch/arm/mpu/p2m.c
>
> diff --git a/xen/arch/arm/Kconfig b/xen/arch/arm/Kconfig
> index 5ac6ec0212d2..6b4bcf12683e 100644
> --- a/xen/arch/arm/Kconfig
> +++ b/xen/arch/arm/Kconfig
> @@ -76,6 +76,7 @@ choice
> config MMU
> bool "MMU"
> select HAS_LLC_COLORING if !NUMA && ARM_64
> + select HAS_PAGING_MEMPOOL
> select HAS_PMAP
> select HAS_VMAP
> select HAS_PASSTHROUGH
> diff --git a/xen/arch/arm/dom0less-build.c b/xen/arch/arm/dom0less-build.c
> index 573b0d25ae41..a65bbbb05301 100644
> --- a/xen/arch/arm/dom0less-build.c
> +++ b/xen/arch/arm/dom0less-build.c
> @@ -673,6 +673,8 @@ static int __init prepare_dtb_domU(struct domain *d,
> struct kernel_info *kinfo)
> return -EINVAL;
> }
>
> +#ifdef CONFIG_HAS_PAGING_MEMPOOL
> +
> static unsigned long __init domain_p2m_pages(unsigned long maxmem_kb,
> unsigned int smp_cpus)
> {
> @@ -688,6 +690,8 @@ static unsigned long __init domain_p2m_pages(unsigned
> long maxmem_kb,
> return DIV_ROUND_UP(memkb, 1024) << (20 - PAGE_SHIFT);
> }
>
> +#endif
> +
> static int __init alloc_xenstore_evtchn(struct domain *d)
> {
> evtchn_alloc_unbound_t alloc;
> @@ -841,6 +845,38 @@ static void __init domain_vcpu_affinity(struct domain *d,
> }
> }
>
> +#ifdef CONFIG_HAS_PAGING_MEMPOOL
Why can't this be moved to upper CONFIG_HAS_PAGING_MEMPOOL block to avoid
excessive ifdefery?
> +
> +static int __init domu_p2m_set_allocation(struct domain *d, u64 mem,
s/domu/domain/ to match naming of other functions.
uint64_t. Linux types shall no longer be used.
> + const struct dt_device_node *node)
> +{
> + unsigned long p2m_pages;
> + u32 p2m_mem_mb;
uint32_t
~Michal