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

Re: [PATCH v4 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: Fri, 4 Apr 2025 09:11:04 +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=Ye2CP5boQbxkr6JQv0lu9EtqLHajEC77tVRIcAQdqVI=; b=bxppekwZ2ejaDI1Yp1nivHt3RgFuuYTEXzPBPneyhyL0gGJwUnt+xWlJJGO5heYTmS1w+lRLrBewvRof8z2y96+L1XDEUpdzOXEwbMtQXUqri5SALt8B0xLoWFiCrWOy80kB+9FMn93zGCS8tbKz4qer5zKxVHjwfmsmlOYRREiWJUWU5PGbE7nZwL5cgQLfxW/L08yyD91AqD+dHGTnENMMCl79DkDnvXNzai/HhnG8PcLXcC9HXyZ8yCeWY+WhyuFljY4fw7G0BJNDVruTRPez7c/GRb0IgvRTq1d3u2TP2SOB1sW90PMEsiZUUqac2InJ1C/Cgc5Lmu8ZFfz/vw==
  • 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=Ye2CP5boQbxkr6JQv0lu9EtqLHajEC77tVRIcAQdqVI=; b=GbUgD/iNhFIM/JoqytLNTUTLyc0fjxwHUjyqaiw5BpZsMxh+vyhJ7jgYuDOtJjYgYKA1YuM+g6iGLfxjNTEQlfzWbtLSKknzEs2HQq6mKhRQx6AO0fL4oHcC04/4AwL3zBDY5TEwCJ4TV1DseyiRJ9yUEEHL1oDVW//WyALT44YDUxewdEeePVDtnrlTj9IOhoGATkOaDz/b382MjNHHu/jv0BcRP7L3YfNKVG58+wEfbylOK964a4RZVFNkJRKu5Can1rtcVzodXpQDvgKwj4EehC2SUZd5cOH2jP29QXdgEpQPRwcytJZgYzX/L9ktJ9KfPsJeSiHWD1AQH7rIaQ==
  • Arc-seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=dg5XbvabApD1eFznJNBRAoDB7GYEo9KMGRm7Oj4jRVj6HsxEjn4V9rsYIqgUg9sm8AxtSkXC144vLkCBLfDaTu+P1EWUmUQB8u7CZz+PnfpL6YJqe5OnJgjppq8AegbhvW1KAdq2rbID4odkIoD+zXa2aQsrvAVFpNPeQfU6jXjijo1Koaoeb9HZ1gn2st5LcvdhpgiyvMAnSV84ekryAg/Y56G3vLW/eDsALuRC3EKWtBw393dDMrg76U7xXpTsERL0+AFStHjzaqkhcSpJqW9RqDLVJ79xXp1qWXf42MK9ec5EQkG3+LL6fhebKe5XnsIYrAd1/3qUq2bCBPy4bA==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Mx8eRZyROdFbotvO1t6obrHU+3vkKnK6LPFaTsqkxpls3G6R+ztwaSRAUV5LZwlMBAK5TkKWIcyR24D/KwZa/Ud10m3cGPdem+rATAQ8kJEHUkmelnai/M9OBOKtyvEcUxnO4vntndzuQTCdK2njNitw6uKyruDc7MJ62EXQ8rKFWHt7WpFmXG2pfvu1+Vio+JkcKnRd5GCzHjRkOk7j0cDAXAAgY2kIEaCp/h7nVcXoWS1V70ExqFgaEWuwEoJvb+CNm8DgHKx2rZ0Wl9LRyFJSUi0vNstYLE6xPS6zY4qxWAr+Fs01/KejWZj1vWggmceBG3bW31SDVeq2gg8rJg==
  • 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: Fri, 04 Apr 2025 09:11:59 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Nodisclaimer: true
  • Thread-index: AQHbpLu+qDQrebRIZEGOW3V0WpA7GrOTOWAA
  • Thread-topic: [PATCH v4 3/3] xen/arm32: mpu: Stubs to build MPU for arm32

Hi Ayan,

> On 3 Apr 2025, at 18:12, 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.
> 
> 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    |  5 ++++
> xen/arch/arm/mpu/Makefile        |  1 +
> xen/arch/arm/mpu/domain_page.c   | 40 ++++++++++++++++++++++++++++++++
> 6 files changed, 89 insertions(+)
> 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/include/asm/mm.h b/xen/arch/arm/include/asm/mm.h
> index fbffaccef4..2a52cf530f 100644
> --- a/xen/arch/arm/include/asm/mm.h
> +++ b/xen/arch/arm/include/asm/mm.h
> @@ -171,12 +171,17 @@ struct page_info
> #define PGC_need_scrub    PGC_allocated
> 
> #ifdef CONFIG_ARM_32
> +#ifdef CONFIG_MPU
> +#define is_xen_heap_page(page) ({ BUG_ON("unimplemented"); false; })
> +#define is_xen_heap_mfn(mfn) ({ BUG_ON("unimplemented"); false; })
> +#else /* !CONFIG_MPU */
> #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 /* !CONFIG_MPU */
> #else
> #define is_xen_heap_page(page) ((page)->count_info & PGC_xen_heap)
> #define is_xen_heap_mfn(mfn) \

I’ve had a look on this, if we want to get rid of some #ifdef we could do this:

diff --git a/xen/arch/arm/include/asm/mm.h b/xen/arch/arm/include/asm/mm.h
index 2a52cf530f25..5b67c0f8bb1c 100644
--- a/xen/arch/arm/include/asm/mm.h
+++ b/xen/arch/arm/include/asm/mm.h
@@ -170,19 +170,7 @@ struct page_info
 #define _PGC_need_scrub   _PGC_allocated
 #define PGC_need_scrub    PGC_allocated
 
-#ifdef CONFIG_ARM_32
-#ifdef CONFIG_MPU
-#define is_xen_heap_page(page) ({ BUG_ON("unimplemented"); false; })
-#define is_xen_heap_mfn(mfn) ({ BUG_ON("unimplemented"); false; })
-#else /* !CONFIG_MPU */
-#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 /* !CONFIG_MPU */
-#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 caba987edc85..9b98d12b076b 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 86f33d9836b7..bfd840fa5d31 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)
 {

But feel free to ignore if it’s not desirable.


> 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..b9ebb03d67
> --- /dev/null
> +++ b/xen/arch/arm/mpu/domain_page.c
> @@ -0,0 +1,40 @@
> +/* SPDX-License-Identifier: GPL-2.0-or-later */
> +#include <xen/domain_page.h>
> +
> +void *map_domain_page_global(mfn_t mfn)
> +{
> +    BUG_ON("unimplemented");
> +    return (void*)0;

return NULL? here and below

> +}
> +
> +/* Map a page of domheap memory */
> +void *map_domain_page(mfn_t mfn)
> +{
> +    BUG_ON("unimplemented");
> +    return (void*)0;
> +}
> +
> +/* 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");

Not really necessary, but if you want: 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
> 
> 


 


Rackspace

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