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