On 31.07.2025 17:58, Oleksii Kurochko wrote: > +static int p2m_alloc_root_table(struct p2m_domain *p2m) > +{ > + struct domain *d = p2m->domain; > + struct page_info *page; > + const unsigned int nr_root_pages = P2M_ROOT_PAGES; > + > + /* > + * Return back nr_root_pages to assure the root table memory is also > + * accounted against the P2M pool of the domain. > + */ > + if ( !paging_ret_pages_to_domheap(d, nr_root_pages) ) > + return -ENOMEM; > + > + page = p2m_allocate_root(d); > + if ( !page ) > + return -ENOMEM; > + > + p2m->root = page; > + > + return 0; > +}
In the success case, shouldn't you bump the paging pool's total_pages by P2M_ROOT_PAGES? (As the freeing side is missing so far, it's not easy to tell whether there's [going to be] a balancing problem in the long run. In the short run there certainly is.) Jan