@@ -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
@@ -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
+
+static int __init domu_p2m_set_allocation(struct domain *d, u64 mem,
+ const struct dt_device_node *node)
+{
+ unsigned long p2m_pages;
+ u32 p2m_mem_mb;
+ int rc;
+
+ rc = dt_property_read_u32(node, "xen,domain-p2m-mem-mb", &p2m_mem_mb);
+ /* If xen,domain-p2m-mem-mb is not specified, use the default value. */
+ p2m_pages = rc ?
+ p2m_mem_mb << (20 - PAGE_SHIFT) :
+ domain_p2m_pages(mem, d->max_vcpus);
+
+ spin_lock(&d->arch.paging.lock);
+ rc = p2m_set_allocation(d, p2m_pages, NULL);
+ spin_unlock(&d->arch.paging.lock);
+
+ return rc;
+}
+
+#else /* !CONFIG_HAS_PAGING_MEMPOOL */
+
+static inline int domu_p2m_set_allocation(struct domain *d, u64 mem,
+ const struct dt_device_node *node)
+{
+ return 0;
+}
+
+#endif /* CONFIG_HAS_PAGING_MEMPOOL */
+
static int __init construct_domU(struct domain *d,
const struct dt_device_node *node)
{
@@ -848,8 +884,6 @@ static int __init construct_domU(struct domain *d,
const char *dom0less_enhanced;
int rc;
u64 mem;
- u32 p2m_mem_mb;
- unsigned long p2m_pages;
rc = dt_property_read_u64(node, "memory", &mem);
if ( !rc )
@@ -859,15 +893,7 @@ static int __init construct_domU(struct domain *d,
}
kinfo.unassigned_mem = (paddr_t)mem * SZ_1K;
- rc = dt_property_read_u32(node, "xen,domain-p2m-mem-mb", &p2m_mem_mb);
- /* If xen,domain-p2m-mem-mb is not specified, use the default value. */
- p2m_pages = rc ?
- p2m_mem_mb << (20 - PAGE_SHIFT) :
- domain_p2m_pages(mem, d->max_vcpus);
-
- spin_lock(&d->arch.paging.lock);
- rc = p2m_set_allocation(d, p2m_pages, NULL);
- spin_unlock(&d->arch.paging.lock);
+ rc = domu_p2m_set_allocation(d, mem, node);
if ( rc != 0 )
return rc;
@@ -75,7 +75,9 @@ struct arch_domain
struct hvm_domain hvm;
+#ifdef CONFIG_HAS_PAGING_MEMPOOL
struct paging_domain paging;
+#endif
struct vmmio vmmio;
@@ -1 +1,2 @@
obj-y += mm.o
+obj-y += p2m.o
new file mode 100644
@@ -0,0 +1,25 @@
+
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#include <xen/domain.h>
+#include <xen/errno.h>
+#include <xen/types.h>
+
+int arch_get_paging_mempool_size(struct domain *d, uint64_t *size)
+{
+ return -EOPNOTSUPP;
+}
+
+int arch_set_paging_mempool_size(struct domain *d, uint64_t size)
+{
+ return -EOPNOTSUPP;
+}
+
+/*
+ * Local variables:
+ * mode: C
+ * c-file-style: "BSD"
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
@@ -74,6 +74,9 @@ config HAS_KEXEC
config HAS_LLC_COLORING
bool
+config HAS_PAGING_MEMPOOL
+ bool
+
config HAS_PIRQ
bool