Dan Magenheimer
2008-Nov-13 22:32 UTC
[Xen-devel] Problem re-alloc''ing after freeing domheap pages
I am trying (in Xen) to repeatedly allocate and free
domheap pages belonging to a pv domain. However,
once a page is freed, it doesn''t seem to be
allocatable again. In pseudo-code:
free_up_some_pages_using_ballooning()
count = 0;
while (1) {
if ((p = alloc_domheap_pages(d,0,0)) == NULL)
break;
/* save p someplace */
count++;
}
for all saved p''s {
free_domheap_pages(p,0);
}
while (count--) {
if ((p = alloc_domheap_pages(d,0,0)) == NULL)
FAIL!!
}
This fails for all alloc''s in the second while loop.
Is there something else I need to do when I allocate
or free a non-anonymous domheap page? (Note this seems
to work fine for anonymous domheap pages.)
Do I maybe need to also do list_del(&p->list)? Or
get_page()/put_page() or something like that?
Thanks,
Dan
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
Keir Fraser
2008-Nov-13 23:39 UTC
Re: [Xen-devel] Problem re-alloc''ing after freeing domheap pages
On 13/11/08 22:32, "Dan Magenheimer" <dan.magenheimer@oracle.com> wrote:> This fails for all alloc''s in the second while loop. > > Is there something else I need to do when I allocate > or free a non-anonymous domheap page? (Note this seems > to work fine for anonymous domheap pages.) > > Do I maybe need to also do list_del(&p->list)? Or > get_page()/put_page() or something like that?What you describe should work as-is. If domain d were dying then the freed pages would end up on the scrub list rather than the free list, but that''s presumably not the case here. -- Keir _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel