diff -r f0af9a2abbf2 xen/arch/x86/mm/p2m.c --- a/xen/arch/x86/mm/p2m.c Tue Sep 22 18:47:33 2009 +0100 +++ b/xen/arch/x86/mm/p2m.c Thu Sep 24 10:37:06 2009 +0100 @@ -386,10 +386,22 @@ order = 9; else order = 0; - + retry: page = alloc_domheap_pages(d, order, 0); if ( unlikely(page == NULL) ) + { + if ( order == 9 ) + { + /* If we can't allocate a superpage, try singleton pages */ + order = 0; + goto retry; + } + + printk("%s: Unable to allocate domheap page for pod cache. target %lu cachesize %d\n", + __func__, pod_target, p2md->pod.count); + ret = -ENOMEM; goto out; + } p2m_pod_cache_add(d, page, order); }