[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v5 3/3] xen/arm32: mpu: Stubs to build MPU for arm32


  • To: Ayan Kumar Halder <ayan.kumar.halder@xxxxxxx>
  • From: Luca Fancellu <Luca.Fancellu@xxxxxxx>
  • Date: Tue, 8 Apr 2025 09:23:22 +0000
  • Accept-language: en-GB, en-US
  • Arc-authentication-results: i=2; mx.microsoft.com 1; spf=fail (sender ip is 4.158.2.129) smtp.rcpttodomain=amd.com smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=arm.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com] dmarc=[1,1,header.from=arm.com])
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none
  • Arc-message-signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=uqbh3V8DkGrmBjH/qQTtr5Z/jekRlOHlsfY5WUZHlGY=; b=XxJmysfHYcOwP+bjxTjLC7u+cXaNEB0dQrfGJpYJf/rrO0NlRt1oLVF7BuLrkM4HKAFh3iPNCz8MvLLQcJyjZ6rLdU+V469NksmDbPgiGQAEl0+kedsvsATkS7g3OU2NuxzV3HH3F492/dJ4R6gn+feOu2c7e0xQXg6Mu1Y+Kcoebl6TdyOxV9/MQYIP3wBR4Q9vymsfO+N220SwJV1V75QaN0H/Gc4kZEBKhEnb6QTT0BLwbXzMXxnDBwBMKkf/d3cC4aTTD7caBLaz99hVMyIDf1dFME1RtjwKCDD1De2VLJj9jxW5K4B82rKk/jc6BZLeOhXNj1Ei3emBxzSDWQ==
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=uqbh3V8DkGrmBjH/qQTtr5Z/jekRlOHlsfY5WUZHlGY=; b=VIS7kf8iGH0Kel1SIrzzjpQEFbi5Q4I0xtqI/22uJWNiEOeeCvpxo7zwJEYjYZN2ANoQ7kRV6OpwTXJAeWHChvefZtgdigLQDZC+le46/SYPn7R7kkFJR/LJV6TlZ1RLRrSSM6AlUYp0jV35Js8ck8N4R/PKF6o0DxSIDsz5QpdD7DORJxjblbVbxjonEV+VdEdjPjn97dRwRfx73Ktp8iYAR51toQSOzQmIZlk0DOnTewemfChEbFZ21jpdp0iFxFAjfinLbEmv0lUKmp+7EUk4pM7vblMyGzOjFRU5v5Zv9uFV3rPR0NCvEQsCIYZ/OVf9ACUyU8tBzQW+ozXwgg==
  • Arc-seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=wot8TnMIWltg933+eJEQWH05aQ7tqBgYgMeBTox//scUoeOP1UY/lnvKznVNNfJx/9gtN0RgKmohof+nNrAdCA+yhcvIoNMcWwZaSHz/nPZhVyDhPfrm4ybZu8VAh/gxyGCt3FWRb+blNEgt3rIU6UBu4clEfbNniL9/C0o4Ym4qn2172zXHjBwYbwPVZXcljhYJY39wEHKINH21ZynZdhIrcxJgpUuN4VgxOJVeAEwvbgXE2H7tSUC91yzQP6fE/Hjl+DON3xk1hT9BPpXY707IR2zFQgE3WDSaiq4/31xc3cA8BDcoUKMSbVZypV0ocPzJcGvMTyXAhUm0kP8SjA==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=xuchFA3Q41eoByYY4PskiDQaH2TaD2sdYGR/5qRbpsXFZ6vjnQkl8PMyFqYJGFlBeZ+CVgiY6RlEWOwdiiFrJTJ1m8fr+KZcAIyd5cMKyCCCZ3N+Fghz8aDWWLoaCeofHvdq73C9y6uTmuVyv4pOkn0U1y+9jFOPBVwxRWhwVbbWOXLdnV/lM3Sw8dPO82zs+17DGwLLwZTKF1u0rrVVCcyjMGUYlGTU/dxkEU+UZbdzBXyVY8IDC26Kmpt5wlPOst3r7+Xr0GZX+RQXTDAa0uD1j1kgr2vWmZZPPMkvrO3QhB/rPCO0v8O3/+5wmr6rrTxqKlwO3wzE3BLKZVkRBw==
  • Authentication-results-original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com;
  • Cc: "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Julien Grall <julien@xxxxxxx>, Bertrand Marquis <Bertrand.Marquis@xxxxxxx>, Michal Orzel <michal.orzel@xxxxxxx>, Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>
  • Delivery-date: Tue, 08 Apr 2025 09:24:20 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Nodisclaimer: true
  • Thread-index: AQHbp+07/vC6GU4Tpk2NnzEwwALGgrOZf8AA
  • Thread-topic: [PATCH v5 3/3] xen/arm32: mpu: Stubs to build MPU for arm32

Hi Ayan,

> On 7 Apr 2025, at 19:44, Ayan Kumar Halder <ayan.kumar.halder@xxxxxxx> wrote:
> 
> Add stubs to enable compilation
> 
> Signed-off-by: Ayan Kumar Halder <ayan.kumar.halder@xxxxxxx>
> ---
> Changes from :-
> 
> v1, v2 -
> 1. New patch introduced in v3.
> 2. Should be applied on top of
> https://patchwork.kernel.org/project/xen-devel/cover/20250316192445.2376484-1-luca.fancellu@xxxxxxx/
> 
> v3 -
> 1. Add stubs for map_domain_page() and similar functions.
> 
> 2. 'BUG_ON("unimplemented")' is kept in all the stubs.
> 
> v4 - 
> 1. is_xen_heap_mfn() macros are defined across mpu/mm.h (ARM32 specific)
> , mmu/mm.h (ARM32 specific) and asm/mm.h (ARM64 specific)
> 
> 2. s/(void*)0/NULL
> 
> xen/arch/arm/arm32/mpu/Makefile   |  2 ++
> xen/arch/arm/arm32/mpu/p2m.c      | 18 ++++++++++++++
> xen/arch/arm/arm32/mpu/smpboot.c  | 23 +++++++++++++++++
> xen/arch/arm/include/asm/mm.h     |  9 +------
> xen/arch/arm/include/asm/mmu/mm.h |  9 +++++++
> xen/arch/arm/include/asm/mpu/mm.h |  5 ++++
> xen/arch/arm/mpu/Makefile         |  1 +
> xen/arch/arm/mpu/domain_page.c    | 41 +++++++++++++++++++++++++++++++
> 8 files changed, 100 insertions(+), 8 deletions(-)
> create mode 100644 xen/arch/arm/arm32/mpu/p2m.c
> create mode 100644 xen/arch/arm/arm32/mpu/smpboot.c
> create mode 100644 xen/arch/arm/mpu/domain_page.c
> 
> diff --git a/xen/arch/arm/arm32/mpu/Makefile b/xen/arch/arm/arm32/mpu/Makefile
> index 3340058c08..38797f28af 100644
> --- a/xen/arch/arm/arm32/mpu/Makefile
> +++ b/xen/arch/arm/arm32/mpu/Makefile
> @@ -1 +1,3 @@
> obj-y += head.o
> +obj-y += smpboot.o
> +obj-y += p2m.o
> diff --git a/xen/arch/arm/arm32/mpu/p2m.c b/xen/arch/arm/arm32/mpu/p2m.c
> new file mode 100644
> index 0000000000..df8de5c7d8
> --- /dev/null
> +++ b/xen/arch/arm/arm32/mpu/p2m.c
> @@ -0,0 +1,18 @@
> +/* SPDX-License-Identifier: GPL-2.0-only */
> +

I would add:
#include <xen/bug.h>
for BUG()

> +#include <xen/init.h>
> +#include <asm/p2m.h>
> +
> +void __init setup_virt_paging(void)
> +{
> +    BUG_ON("unimplemented");
> +}
> +
> +/*
> + * Local variables:
> + * mode: C
> + * c-file-style: "BSD"
> + * c-basic-offset: 4
> + * indent-tabs-mode: nil
> + * End:
> + */
> diff --git a/xen/arch/arm/arm32/mpu/smpboot.c 
> b/xen/arch/arm/arm32/mpu/smpboot.c
> new file mode 100644
> index 0000000000..3f3e54294e
> --- /dev/null
> +++ b/xen/arch/arm/arm32/mpu/smpboot.c
> @@ -0,0 +1,23 @@
> +/* SPDX-License-Identifier: GPL-2.0-only */
> +

I would add:
#include <xen/bug.h>
for BUG()

#include <xen/errno.h>
for EINVAL

#include <xen/stdbool.h>
for bool

> +#include <xen/mm.h>
> +
> +int prepare_secondary_mm(int cpu)
> +{
> +    BUG_ON("unimplemented");
> +    return -EINVAL;
> +}
> +
> +void update_boot_mapping(bool enable)
> +{
> +    BUG_ON("unimplemented");
> +}
> +
> +/*
> + * Local variables:
> + * mode: C
> + * c-file-style: "BSD"
> + * c-basic-offset: 4
> + * indent-tabs-mode: nil
> + * End:
> + */
> diff --git a/xen/arch/arm/include/asm/mm.h b/xen/arch/arm/include/asm/mm.h
> index fbffaccef4..5b67c0f8bb 100644
> --- a/xen/arch/arm/include/asm/mm.h
> +++ b/xen/arch/arm/include/asm/mm.h
> @@ -170,14 +170,7 @@ struct page_info
> #define _PGC_need_scrub   _PGC_allocated
> #define PGC_need_scrub    PGC_allocated
> 
> -#ifdef CONFIG_ARM_32
> -#define is_xen_heap_page(page) is_xen_heap_mfn(page_to_mfn(page))
> -#define is_xen_heap_mfn(mfn) ({                                 \
> -    unsigned long mfn_ = mfn_x(mfn);                            \
> -    (mfn_ >= mfn_x(directmap_mfn_start) &&                      \
> -     mfn_ < mfn_x(directmap_mfn_end));                          \
> -})
> -#else
> +#ifdef CONFIG_ARM_64
> #define is_xen_heap_page(page) ((page)->count_info & PGC_xen_heap)
> #define is_xen_heap_mfn(mfn) \
>     (mfn_valid(mfn) && is_xen_heap_page(mfn_to_page(mfn)))
> diff --git a/xen/arch/arm/include/asm/mmu/mm.h 
> b/xen/arch/arm/include/asm/mmu/mm.h
> index caba987edc..9b98d12b07 100644
> --- a/xen/arch/arm/include/asm/mmu/mm.h
> +++ b/xen/arch/arm/include/asm/mmu/mm.h
> @@ -21,6 +21,15 @@ extern unsigned long directmap_base_pdx;
> 
> #define frame_table ((struct page_info *)FRAMETABLE_VIRT_START)
> 
> +#ifdef CONFIG_ARM_32
> +#define is_xen_heap_page(page) is_xen_heap_mfn(page_to_mfn(page))
> +#define is_xen_heap_mfn(mfn) ({                                 \
> +    unsigned long mfn_ = mfn_x(mfn);                            \
> +    (mfn_ >= mfn_x(directmap_mfn_start) &&                      \
> +     mfn_ < mfn_x(directmap_mfn_end));                          \
> +})
> +#endif
> +
> #define virt_to_maddr(va) ({                                                  
>  \
>     vaddr_t va_ = (vaddr_t)(va);                                              
>  \
>     (paddr_t)((va_to_par(va_) & PADDR_MASK & PAGE_MASK) | (va_ & 
> ~PAGE_MASK)); \
> diff --git a/xen/arch/arm/include/asm/mpu/mm.h 
> b/xen/arch/arm/include/asm/mpu/mm.h
> index 86f33d9836..bfd840fa5d 100644
> --- a/xen/arch/arm/include/asm/mpu/mm.h
> +++ b/xen/arch/arm/include/asm/mpu/mm.h
> @@ -13,6 +13,11 @@ extern struct page_info *frame_table;
> 
> #define virt_to_maddr(va) ((paddr_t)((vaddr_t)(va) & PADDR_MASK))
> 
> +#ifdef CONFIG_ARM_32
> +#define is_xen_heap_page(page) ({ BUG_ON("unimplemented"); false; })
> +#define is_xen_heap_mfn(mfn) ({ BUG_ON("unimplemented"); false; })
> +#endif
> +
> /* On MPU systems there is no translation, ma == va. */
> static inline void *maddr_to_virt(paddr_t ma)
> {
> diff --git a/xen/arch/arm/mpu/Makefile b/xen/arch/arm/mpu/Makefile
> index 21bbc517b5..ff221011d5 100644
> --- a/xen/arch/arm/mpu/Makefile
> +++ b/xen/arch/arm/mpu/Makefile
> @@ -2,3 +2,4 @@ obj-y += mm.o
> obj-y += p2m.o
> obj-y += setup.init.o
> obj-y += vmap.o
> +obj-$(CONFIG_ARM_32) += domain_page.o
> diff --git a/xen/arch/arm/mpu/domain_page.c b/xen/arch/arm/mpu/domain_page.c
> new file mode 100644
> index 0000000000..8859b24e04
> --- /dev/null
> +++ b/xen/arch/arm/mpu/domain_page.c
> @@ -0,0 +1,41 @@
> +/* SPDX-License-Identifier: GPL-2.0-or-later */
> +#include <xen/domain_page.h>

I would add:

#include <xen/bug.h>
for BUG()

#include <xen/mm-frame.h>
for mfn_t and INVALID_MFN

#include <xen/types.h>
for NULL


> +
> +void *map_domain_page_global(mfn_t mfn)
> +{
> +    BUG_ON("unimplemented");
> +    return NULL;
> +}
> +
> +/* Map a page of domheap memory */
> +void *map_domain_page(mfn_t mfn)
> +{
> +    BUG_ON("unimplemented");
> +    return NULL;
> +}
> +
> +/* Release a mapping taken with map_domain_page() */
> +void unmap_domain_page(const void *ptr)
> +{
> +    BUG_ON("unimplemented");
> +}
> +
> +mfn_t domain_page_map_to_mfn(const void *ptr)
> +{
> +    BUG_ON("unimplemented");
> +    return INVALID_MFN;
> +}
> +
> +void unmap_domain_page_global(const void *va)
> +{
> +    BUG_ON("unimplemented");
> +}
> +
> +/*
> + * Local variables:
> + * mode: C
> + * c-file-style: "BSD"
> + * c-basic-offset: 4
> + * indent-tabs-mode: nil
> + * End:
> + */
> -- 
> 2.25.1

with the above addressed, at least for me it looks good!

Reviewed-by: Luca Fancellu <luca.fancellu@xxxxxxx>

Cheers,
Luca




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.