diff mbox series

[v1,57/57] xxxen/riscv: WIP ( need advise )

Message ID 85c3008696e5f9568f6a6504c915a319ca326537.1692181079.git.oleksii.kurochko@gmail.com (mailing list archive)
State New, archived
Headers show
Series Enable build of full Xen for RISC-V | expand

Commit Message

Oleksii Kurochko Aug. 16, 2023, 10:20 a.m. UTC
These changes are needed only to make GitLab CI happy is it doesn't
take into account tiny64_defconfig where unnecessary configs are disabled.

I tried different approaches to deal with it:
1. Override EXTRA_XEN_CONFIG and EXTRA_FIXED_RANDCONFIG in the following way:
   EXTRA_XEN_CONFIG:
     CONFIG_1=n
     CONFIG_2=n
     ...
2. Override in arch-specific KConfig:
     CONFIG_1:
        default n

Each option doesn't work for me fully.

Could you please suggest other options or more correct way?

Signed-off-by: Oleksii Kurochko <oleksii.kurochko@gmail.com>
---
 xen/arch/riscv/include/asm/asm_defns.h     | 44 +++++++++++++++++
 xen/arch/riscv/include/asm/grant_table.h   | 57 ++++++++++++++++++++++
 xen/arch/riscv/include/asm/guest_atomics.h | 16 +++++-
 xen/arch/riscv/include/asm/livepatch.h     |  0
 xen/arch/riscv/include/asm/mm.h            |  5 ++
 xen/arch/riscv/include/asm/p2m.h           | 24 +++++++++
 xen/arch/riscv/include/asm/page.h          | 16 ++++++
 xen/arch/riscv/include/asm/perfc_defn.h    |  0
 xen/arch/riscv/mm.c                        | 33 +++++++++++++
 9 files changed, 194 insertions(+), 1 deletion(-)
 create mode 100644 xen/arch/riscv/include/asm/asm_defns.h
 create mode 100644 xen/arch/riscv/include/asm/livepatch.h
 create mode 100644 xen/arch/riscv/include/asm/perfc_defn.h

Comments

Oleksii Kurochko Aug. 22, 2023, 3:12 p.m. UTC | #1
On Wed, 2023-08-16 at 13:20 +0300, Oleksii Kurochko wrote:
> These changes are needed only to make GitLab CI happy is it doesn't
> take into account tiny64_defconfig where unnecessary configs are
> disabled.
> 
> I tried different approaches to deal with it:
> 1. Override EXTRA_XEN_CONFIG and EXTRA_FIXED_RANDCONFIG in the
> following way:
>    EXTRA_XEN_CONFIG:
>      CONFIG_1=n
>      CONFIG_2=n
>      ...
> 2. Override in arch-specific KConfig:
>      CONFIG_1:
>         default n
> 
> Each option doesn't work for me fully.
> 
> Could you please suggest other options or more correct way?
> 

It looks like if to do unwanted configs for now as an invisible config
in arch-specific KConfig it should work. Something like:

  config GRANT_TABLE
	bool
	default n

 I'll double-check tomorrow.

~ Oleksii

> Signed-off-by: Oleksii Kurochko <oleksii.kurochko@gmail.com>
> ---
>  xen/arch/riscv/include/asm/asm_defns.h     | 44 +++++++++++++++++
>  xen/arch/riscv/include/asm/grant_table.h   | 57
> ++++++++++++++++++++++
>  xen/arch/riscv/include/asm/guest_atomics.h | 16 +++++-
>  xen/arch/riscv/include/asm/livepatch.h     |  0
>  xen/arch/riscv/include/asm/mm.h            |  5 ++
>  xen/arch/riscv/include/asm/p2m.h           | 24 +++++++++
>  xen/arch/riscv/include/asm/page.h          | 16 ++++++
>  xen/arch/riscv/include/asm/perfc_defn.h    |  0
>  xen/arch/riscv/mm.c                        | 33 +++++++++++++
>  9 files changed, 194 insertions(+), 1 deletion(-)
>  create mode 100644 xen/arch/riscv/include/asm/asm_defns.h
>  create mode 100644 xen/arch/riscv/include/asm/livepatch.h
>  create mode 100644 xen/arch/riscv/include/asm/perfc_defn.h
> 
> diff --git a/xen/arch/riscv/include/asm/asm_defns.h
> b/xen/arch/riscv/include/asm/asm_defns.h
> new file mode 100644
> index 0000000000..dd0511a9c6
> --- /dev/null
> +++ b/xen/arch/riscv/include/asm/asm_defns.h
> @@ -0,0 +1,44 @@
> +#ifndef __ARM_ASM_DEFNS_H__
> +#define __ARM_ASM_DEFNS_H__
> +
> +#ifndef COMPILE_OFFSETS
> +/* NB. Auto-generated from arch/.../asm-offsets.c */
> +#include <asm/asm-offsets.h>
> +#endif
> +#include <asm/processor.h>
> +
> +/* Macros for generic assembly code */
> +#if defined(CONFIG_RISCV_32)
> +# define __OP32
> +# define ASM_REG(index) asm("r" # index)
> +#elif defined(CONFIG_RISCV_64)
> +# define __OP32 "w"
> +/*
> + * Clang < 8.0 doesn't support register alllocation using the syntax
> rN.
> + * See https://reviews.llvm.org/rL328829.
> + */
> +# define ASM_REG(index) asm("x" # index)
> +#else
> +# error "unknown ARM variant"
> +#endif
> +
> +#define RODATA_STR(label, msg)                  \
> +.pushsection .rodata.str, "aMS", %progbits, 1 ; \
> +label:  .asciz msg;                             \
> +.popsection
> +
> +#define ASM_INT(label, val)                 \
> +    .p2align 2;                             \
> +label: .long (val);                         \
> +    .size label, . - label;                 \
> +    .type label, %object
> +
> +#endif /* __ARM_ASM_DEFNS_H__ */
> +/*
> + * Local variables:
> + * mode: C
> + * c-file-style: "BSD"
> + * c-basic-offset: 4
> + * indent-tabs-mode: nil
> + * End:
> + */
> diff --git a/xen/arch/riscv/include/asm/grant_table.h
> b/xen/arch/riscv/include/asm/grant_table.h
> index 600fb10669..8b7880d3ed 100644
> --- a/xen/arch/riscv/include/asm/grant_table.h
> +++ b/xen/arch/riscv/include/asm/grant_table.h
> @@ -1,4 +1,61 @@
>  #ifndef __ASM_RISCV_GRANTTABLE_H__
>  #define __ASM_RISCV_GRANTTABLE_H__
>  
> +#define INITIAL_NR_GRANT_FRAMES 1U
> +
> +#define gnttab_shared_page(t, i)   virt_to_page((t)->shared_raw[i])
> +
> +#define gnttab_status_page(t, i)   virt_to_page((t)->status[i])
> +
> +#define gnttab_shared_gfn(d, t,
> i)                                       \
> +    page_get_xenheap_gfn(gnttab_shared_page(t, i))
> +
> +#define gnttab_status_gfn(d, t,
> i)                                       \
> +    page_get_xenheap_gfn(gnttab_status_page(t, i))
> +
> +#define gnttab_set_frame_gfn(gt, st, idx, gfn,
> mfn)                      \
> +    (gfn_eq(gfn,
> INVALID_GFN)                                            \
> +     ? guest_physmap_remove_page((gt)-
> >domain,                           \
> +                                 gnttab_get_frame_gfn(gt, st,
> idx),      \
> +                                 mfn,
> 0)                                 \
> +     : 0)
> +
> +#define gnttab_get_frame_gfn(gt, st, idx)
> ({                             \
> +   (st) ? gnttab_status_gfn(NULL, gt,
> idx)                               \
> +        : gnttab_shared_gfn(NULL, gt,
> idx);                              \
> +})
> +
> +#define gnttab_need_iommu_mapping(d)                    \
> +    (is_domain_direct_mapped(d) && is_iommu_enabled(d))
> +
> +static inline bool gnttab_release_host_mappings(const struct domain
> *d)
> +{
> +    BUG();
> +}
> +
> +static inline void gnttab_mark_dirty(struct domain *d, mfn_t mfn)
> +{
> +#ifndef NDEBUG
> +    printk_once(XENLOG_G_WARNING "gnttab_mark_dirty not implemented
> yet\n");
> +#endif
> +}
> +
> +static inline void gnttab_clear_flags(struct domain *d,
> +                                      unsigned int mask, uint16_t
> *addr)
> +{
> +    BUG();
> +}
> +
> +static inline bool gnttab_host_mapping_get_page_type(bool ro,
> +                                                     const struct
> domain *ld,
> +                                                     const struct
> domain *rd)
> +{
> +    return false;
> +}
> +
> +int create_grant_host_mapping(uint64_t gpaddr, mfn_t frame,
> +                              unsigned int flags, unsigned int
> cache_flags);
> +int replace_grant_host_mapping(uint64_t gpaddr, mfn_t frame,
> +                               uint64_t new_gpaddr, unsigned int
> flags);
> +
>  #endif /* __ASM_RISCV_GRANTTABLE_H__ */
> \ No newline at end of file
> diff --git a/xen/arch/riscv/include/asm/guest_atomics.h
> b/xen/arch/riscv/include/asm/guest_atomics.h
> index 71b0b11a25..8c8fd647d6 100644
> --- a/xen/arch/riscv/include/asm/guest_atomics.h
> +++ b/xen/arch/riscv/include/asm/guest_atomics.h
> @@ -35,9 +35,23 @@ guest_testop(test_and_change_bit)
>  
>  #undef guest_testop
>  
> -
>  #define guest_test_bit(d, nr, p) ((void)(d), test_bit(nr, p))
>  
> +#define guest_cmpxchg(d, ptr, o, n)                         \
> +    ((__typeof__(*(ptr)))__guest_cmpxchg(d, ptr,            \
> +                                         (unsigned long)(o),\
> +                                         (unsigned long)(n),\
> +                                         sizeof (*(ptr))))
> +
> +static always_inline unsigned long __guest_cmpxchg(struct domain *d,
> +                                                   volatile void
> *ptr,
> +                                                   unsigned long
> old,
> +                                                   unsigned long
> new,
> +                                                   unsigned int
> size)
> +{
> +    BUG();
> +}
> +
>  #endif /* __ASM_RISCV_GUEST_ATOMICS_H */
>  /*
>   * Local variables:
> diff --git a/xen/arch/riscv/include/asm/livepatch.h
> b/xen/arch/riscv/include/asm/livepatch.h
> new file mode 100644
> index 0000000000..e69de29bb2
> diff --git a/xen/arch/riscv/include/asm/mm.h
> b/xen/arch/riscv/include/asm/mm.h
> index 1d464afec9..37916f9be7 100644
> --- a/xen/arch/riscv/include/asm/mm.h
> +++ b/xen/arch/riscv/include/asm/mm.h
> @@ -276,4 +276,9 @@ void setup_initial_pagetables(void);
>  void enable_mmu(void);
>  void cont_after_mmu_is_enabled(void);
>  
> +static inline gfn_t page_get_xenheap_gfn(const struct page_info *p)
> +{
> +    BUG();
> +}
> +
>  #endif /* _ASM_RISCV_MM_H */
> diff --git a/xen/arch/riscv/include/asm/p2m.h
> b/xen/arch/riscv/include/asm/p2m.h
> index 993aec6d2c..8537ce12fd 100644
> --- a/xen/arch/riscv/include/asm/p2m.h
> +++ b/xen/arch/riscv/include/asm/p2m.h
> @@ -29,6 +29,28 @@ typedef enum {
>      p2m_max_real_type,  /* Types after this won't be store in the
> p2m */
>  } p2m_type_t;
>  
> +/* We use bitmaps and mask to handle groups of types */
> +#define p2m_to_mask(_t) (1UL << (_t))
> +
> +/* RAM types, which map to real machine frames */
> +#define P2M_RAM_TYPES (p2m_to_mask(p2m_ram_rw) |        \
> +                       p2m_to_mask(p2m_ram_ro))
> +
> +/* Grant mapping types, which map to a real frame in another VM */
> +#define P2M_GRANT_TYPES (p2m_to_mask(p2m_grant_map_rw) |  \
> +                         p2m_to_mask(p2m_grant_map_ro))
> +
> +/* Foreign mappings types */
> +#define P2M_FOREIGN_TYPES (p2m_to_mask(p2m_map_foreign_rw) | \
> +                           p2m_to_mask(p2m_map_foreign_ro))
> +
> +/* Useful predicates */
> +#define p2m_is_ram(_t) (p2m_to_mask(_t) & P2M_RAM_TYPES)
> +#define p2m_is_foreign(_t) (p2m_to_mask(_t) & P2M_FOREIGN_TYPES)
> +#define p2m_is_any_ram(_t) (p2m_to_mask(_t) &                   \
> +                            (P2M_RAM_TYPES | P2M_GRANT_TYPES |  \
> +                             P2M_FOREIGN_TYPES))
> +
>  #include <xen/p2m-common.h>
>  
>  static inline int get_page_and_type(struct page_info *page,
> @@ -102,4 +124,6 @@ static inline void p2m_altp2m_check(struct vcpu
> *v, uint16_t idx)
>      /* Not supported on RISCV. */
>  }
>  
> +bool is_iomem_page(mfn_t mfn);
> +
>  #endif /* __ASM_RISCV_P2M_H__ */
> \ No newline at end of file
> diff --git a/xen/arch/riscv/include/asm/page.h
> b/xen/arch/riscv/include/asm/page.h
> index abbae75aaf..52eb517669 100644
> --- a/xen/arch/riscv/include/asm/page.h
> +++ b/xen/arch/riscv/include/asm/page.h
> @@ -83,6 +83,22 @@ static inline void flush_page_to_ram(unsigned long
> mfn, bool sync_icache)
>      BUG();
>  }
>  
> +static inline int clean_dcache_va_range(const void *p, unsigned long
> size)
> +{
> +    BUG();
> +}
> +
> +static inline int invalidate_dcache_va_range(const void *p, unsigned
> long size)
> +{
> +    BUG();
> +}
> +
> +static inline int clean_and_invalidate_dcache_va_range
> +    (const void *p, unsigned long size)
> +{
> +    BUG();
> +}
> +
>  #endif /* __ASSEMBLY__ */
>  
>  #endif /* _ASM_RISCV_PAGE_H */
> diff --git a/xen/arch/riscv/include/asm/perfc_defn.h
> b/xen/arch/riscv/include/asm/perfc_defn.h
> new file mode 100644
> index 0000000000..e69de29bb2
> diff --git a/xen/arch/riscv/mm.c b/xen/arch/riscv/mm.c
> index 0f40641db7..696a1e8448 100644
> --- a/xen/arch/riscv/mm.c
> +++ b/xen/arch/riscv/mm.c
> @@ -323,3 +323,36 @@ int map_pages_to_xen(unsigned long virt,
>      assert_failed(__func__);
>      return -1;
>  }
> +
> +bool is_iomem_page(mfn_t mfn)
> +{
> +    BUG();
> +}
> +
> +int replace_grant_host_mapping(uint64_t gpaddr, mfn_t frame,
> +                               uint64_t new_gpaddr, unsigned int
> flags)
> +{
> +    BUG();
> +}
> +
> +int create_grant_host_mapping(uint64_t gpaddr, mfn_t frame,
> +                              unsigned int flags, unsigned int
> cache_flags)
> +{
> +    BUG();
> +}
> +
> +struct domain *page_get_owner_and_reference(struct page_info *page)
> +{
> +    BUG();
> +}
> +
> +void share_xen_page_with_guest(struct page_info *page, struct domain
> *d,
> +                               enum XENSHARE_flags flags)
> +{
> +    BUG();
> +}
> +
> +bool get_page(struct page_info *page, const struct domain *domain)
> +{
> +    BUG();
> +}
> \ No newline at end of file
diff mbox series

Patch

diff --git a/xen/arch/riscv/include/asm/asm_defns.h b/xen/arch/riscv/include/asm/asm_defns.h
new file mode 100644
index 0000000000..dd0511a9c6
--- /dev/null
+++ b/xen/arch/riscv/include/asm/asm_defns.h
@@ -0,0 +1,44 @@ 
+#ifndef __ARM_ASM_DEFNS_H__
+#define __ARM_ASM_DEFNS_H__
+
+#ifndef COMPILE_OFFSETS
+/* NB. Auto-generated from arch/.../asm-offsets.c */
+#include <asm/asm-offsets.h>
+#endif
+#include <asm/processor.h>
+
+/* Macros for generic assembly code */
+#if defined(CONFIG_RISCV_32)
+# define __OP32
+# define ASM_REG(index) asm("r" # index)
+#elif defined(CONFIG_RISCV_64)
+# define __OP32 "w"
+/*
+ * Clang < 8.0 doesn't support register alllocation using the syntax rN.
+ * See https://reviews.llvm.org/rL328829.
+ */
+# define ASM_REG(index) asm("x" # index)
+#else
+# error "unknown ARM variant"
+#endif
+
+#define RODATA_STR(label, msg)                  \
+.pushsection .rodata.str, "aMS", %progbits, 1 ; \
+label:  .asciz msg;                             \
+.popsection
+
+#define ASM_INT(label, val)                 \
+    .p2align 2;                             \
+label: .long (val);                         \
+    .size label, . - label;                 \
+    .type label, %object
+
+#endif /* __ARM_ASM_DEFNS_H__ */
+/*
+ * Local variables:
+ * mode: C
+ * c-file-style: "BSD"
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xen/arch/riscv/include/asm/grant_table.h b/xen/arch/riscv/include/asm/grant_table.h
index 600fb10669..8b7880d3ed 100644
--- a/xen/arch/riscv/include/asm/grant_table.h
+++ b/xen/arch/riscv/include/asm/grant_table.h
@@ -1,4 +1,61 @@ 
 #ifndef __ASM_RISCV_GRANTTABLE_H__
 #define __ASM_RISCV_GRANTTABLE_H__
 
+#define INITIAL_NR_GRANT_FRAMES 1U
+
+#define gnttab_shared_page(t, i)   virt_to_page((t)->shared_raw[i])
+
+#define gnttab_status_page(t, i)   virt_to_page((t)->status[i])
+
+#define gnttab_shared_gfn(d, t, i)                                       \
+    page_get_xenheap_gfn(gnttab_shared_page(t, i))
+
+#define gnttab_status_gfn(d, t, i)                                       \
+    page_get_xenheap_gfn(gnttab_status_page(t, i))
+
+#define gnttab_set_frame_gfn(gt, st, idx, gfn, mfn)                      \
+    (gfn_eq(gfn, INVALID_GFN)                                            \
+     ? guest_physmap_remove_page((gt)->domain,                           \
+                                 gnttab_get_frame_gfn(gt, st, idx),      \
+                                 mfn, 0)                                 \
+     : 0)
+
+#define gnttab_get_frame_gfn(gt, st, idx) ({                             \
+   (st) ? gnttab_status_gfn(NULL, gt, idx)                               \
+        : gnttab_shared_gfn(NULL, gt, idx);                              \
+})
+
+#define gnttab_need_iommu_mapping(d)                    \
+    (is_domain_direct_mapped(d) && is_iommu_enabled(d))
+
+static inline bool gnttab_release_host_mappings(const struct domain *d)
+{
+    BUG();
+}
+
+static inline void gnttab_mark_dirty(struct domain *d, mfn_t mfn)
+{
+#ifndef NDEBUG
+    printk_once(XENLOG_G_WARNING "gnttab_mark_dirty not implemented yet\n");
+#endif
+}
+
+static inline void gnttab_clear_flags(struct domain *d,
+                                      unsigned int mask, uint16_t *addr)
+{
+    BUG();
+}
+
+static inline bool gnttab_host_mapping_get_page_type(bool ro,
+                                                     const struct domain *ld,
+                                                     const struct domain *rd)
+{
+    return false;
+}
+
+int create_grant_host_mapping(uint64_t gpaddr, mfn_t frame,
+                              unsigned int flags, unsigned int cache_flags);
+int replace_grant_host_mapping(uint64_t gpaddr, mfn_t frame,
+                               uint64_t new_gpaddr, unsigned int flags);
+
 #endif /* __ASM_RISCV_GRANTTABLE_H__ */
\ No newline at end of file
diff --git a/xen/arch/riscv/include/asm/guest_atomics.h b/xen/arch/riscv/include/asm/guest_atomics.h
index 71b0b11a25..8c8fd647d6 100644
--- a/xen/arch/riscv/include/asm/guest_atomics.h
+++ b/xen/arch/riscv/include/asm/guest_atomics.h
@@ -35,9 +35,23 @@  guest_testop(test_and_change_bit)
 
 #undef guest_testop
 
-
 #define guest_test_bit(d, nr, p) ((void)(d), test_bit(nr, p))
 
+#define guest_cmpxchg(d, ptr, o, n)                         \
+    ((__typeof__(*(ptr)))__guest_cmpxchg(d, ptr,            \
+                                         (unsigned long)(o),\
+                                         (unsigned long)(n),\
+                                         sizeof (*(ptr))))
+
+static always_inline unsigned long __guest_cmpxchg(struct domain *d,
+                                                   volatile void *ptr,
+                                                   unsigned long old,
+                                                   unsigned long new,
+                                                   unsigned int size)
+{
+    BUG();
+}
+
 #endif /* __ASM_RISCV_GUEST_ATOMICS_H */
 /*
  * Local variables:
diff --git a/xen/arch/riscv/include/asm/livepatch.h b/xen/arch/riscv/include/asm/livepatch.h
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/xen/arch/riscv/include/asm/mm.h b/xen/arch/riscv/include/asm/mm.h
index 1d464afec9..37916f9be7 100644
--- a/xen/arch/riscv/include/asm/mm.h
+++ b/xen/arch/riscv/include/asm/mm.h
@@ -276,4 +276,9 @@  void setup_initial_pagetables(void);
 void enable_mmu(void);
 void cont_after_mmu_is_enabled(void);
 
+static inline gfn_t page_get_xenheap_gfn(const struct page_info *p)
+{
+    BUG();
+}
+
 #endif /* _ASM_RISCV_MM_H */
diff --git a/xen/arch/riscv/include/asm/p2m.h b/xen/arch/riscv/include/asm/p2m.h
index 993aec6d2c..8537ce12fd 100644
--- a/xen/arch/riscv/include/asm/p2m.h
+++ b/xen/arch/riscv/include/asm/p2m.h
@@ -29,6 +29,28 @@  typedef enum {
     p2m_max_real_type,  /* Types after this won't be store in the p2m */
 } p2m_type_t;
 
+/* We use bitmaps and mask to handle groups of types */
+#define p2m_to_mask(_t) (1UL << (_t))
+
+/* RAM types, which map to real machine frames */
+#define P2M_RAM_TYPES (p2m_to_mask(p2m_ram_rw) |        \
+                       p2m_to_mask(p2m_ram_ro))
+
+/* Grant mapping types, which map to a real frame in another VM */
+#define P2M_GRANT_TYPES (p2m_to_mask(p2m_grant_map_rw) |  \
+                         p2m_to_mask(p2m_grant_map_ro))
+
+/* Foreign mappings types */
+#define P2M_FOREIGN_TYPES (p2m_to_mask(p2m_map_foreign_rw) | \
+                           p2m_to_mask(p2m_map_foreign_ro))
+
+/* Useful predicates */
+#define p2m_is_ram(_t) (p2m_to_mask(_t) & P2M_RAM_TYPES)
+#define p2m_is_foreign(_t) (p2m_to_mask(_t) & P2M_FOREIGN_TYPES)
+#define p2m_is_any_ram(_t) (p2m_to_mask(_t) &                   \
+                            (P2M_RAM_TYPES | P2M_GRANT_TYPES |  \
+                             P2M_FOREIGN_TYPES))
+
 #include <xen/p2m-common.h>
 
 static inline int get_page_and_type(struct page_info *page,
@@ -102,4 +124,6 @@  static inline void p2m_altp2m_check(struct vcpu *v, uint16_t idx)
     /* Not supported on RISCV. */
 }
 
+bool is_iomem_page(mfn_t mfn);
+
 #endif /* __ASM_RISCV_P2M_H__ */
\ No newline at end of file
diff --git a/xen/arch/riscv/include/asm/page.h b/xen/arch/riscv/include/asm/page.h
index abbae75aaf..52eb517669 100644
--- a/xen/arch/riscv/include/asm/page.h
+++ b/xen/arch/riscv/include/asm/page.h
@@ -83,6 +83,22 @@  static inline void flush_page_to_ram(unsigned long mfn, bool sync_icache)
     BUG();
 }
 
+static inline int clean_dcache_va_range(const void *p, unsigned long size)
+{
+    BUG();
+}
+
+static inline int invalidate_dcache_va_range(const void *p, unsigned long size)
+{
+    BUG();
+}
+
+static inline int clean_and_invalidate_dcache_va_range
+    (const void *p, unsigned long size)
+{
+    BUG();
+}
+
 #endif /* __ASSEMBLY__ */
 
 #endif /* _ASM_RISCV_PAGE_H */
diff --git a/xen/arch/riscv/include/asm/perfc_defn.h b/xen/arch/riscv/include/asm/perfc_defn.h
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/xen/arch/riscv/mm.c b/xen/arch/riscv/mm.c
index 0f40641db7..696a1e8448 100644
--- a/xen/arch/riscv/mm.c
+++ b/xen/arch/riscv/mm.c
@@ -323,3 +323,36 @@  int map_pages_to_xen(unsigned long virt,
     assert_failed(__func__);
     return -1;
 }
+
+bool is_iomem_page(mfn_t mfn)
+{
+    BUG();
+}
+
+int replace_grant_host_mapping(uint64_t gpaddr, mfn_t frame,
+                               uint64_t new_gpaddr, unsigned int flags)
+{
+    BUG();
+}
+
+int create_grant_host_mapping(uint64_t gpaddr, mfn_t frame,
+                              unsigned int flags, unsigned int cache_flags)
+{
+    BUG();
+}
+
+struct domain *page_get_owner_and_reference(struct page_info *page)
+{
+    BUG();
+}
+
+void share_xen_page_with_guest(struct page_info *page, struct domain *d,
+                               enum XENSHARE_flags flags)
+{
+    BUG();
+}
+
+bool get_page(struct page_info *page, const struct domain *domain)
+{
+    BUG();
+}
\ No newline at end of file