Hi Hongyan,
On 30/04/2020 21:44, Hongyan Xia wrote:
From: Hongyan Xia <hongy...@amazon.com>
When there is not an always-mapped direct map, xenheap allocations need
to be mapped and unmapped on-demand.
Signed-off-by: Hongyan Xia <hongy...@amazon.com>
---
xen/common/page_alloc.c | 45 ++++++++++++++++++++++++++++++++++++++---
1 file changed, 42 insertions(+), 3 deletions(-)
diff --git a/xen/common/page_alloc.c b/xen/common/page_alloc.c
index 10b7aeca48..1285fc5977 100644
--- a/xen/common/page_alloc.c
+++ b/xen/common/page_alloc.c
@@ -2143,6 +2143,7 @@ void init_xenheap_pages(paddr_t ps, paddr_t pe)
void *alloc_xenheap_pages(unsigned int order, unsigned int memflags)
{
struct page_info *pg;
+ void *ret;
ASSERT(!in_irq());
@@ -2151,14 +2152,27 @@ void *alloc_xenheap_pages(unsigned int order, unsigned int memflags)
if ( unlikely(pg == NULL) )
return NULL;
- memguard_unguard_range(page_to_virt(pg), 1 << (order + PAGE_SHIFT));
+ ret = page_to_virt(pg);
- return page_to_virt(pg);
+ if ( !arch_has_directmap() &&
+ map_pages_to_xen((unsigned long)ret, page_to_mfn(pg), 1UL << order,
+ PAGE_HYPERVISOR) )
The only user (arm32) of split domheap/xenheap has no directmap. So this
will break arm32 as we don't support superpage shattering (for good
reasons).
In this configuration, only xenheap pages are always mapped. Domheap
will be mapped on-demand. So I don't think we need to map/unmap xenheap
pages at allocation/free.
Cheers,
--
Julien Grall