diff --git a/xen/arch/arm/p2m.c b/xen/arch/arm/p2m.c index e36d07502a..1fc6ca3bb2 100644 --- a/xen/arch/arm/p2m.c +++ b/xen/arch/arm/p2m.c @@ -660,6 +660,7 @@ static void p2m_free_entry(struct p2m_domain *p2m, unsigned int i; lpae_t *table; mfn_t mfn; + struct page_info *pg; /* Nothing to do if the entry is invalid. */ if ( !p2m_valid(entry) ) @@ -697,7 +698,10 @@ static void p2m_free_entry(struct p2m_domain *p2m, mfn = _mfn(entry.p2m.base); ASSERT(mfn_valid(mfn)); - free_domheap_page(mfn_to_page(mfn_x(mfn))); + pg = mfn_to_page(mfn_x(mfn)); + + page_list_del(pg, &p2m->pages); + free_domheap_page(pg); } static bool p2m_split_superpage(struct p2m_domain *p2m, lpae_t *entry,