diff -r 1f4b29eaf7f4 xen/common/page_alloc.c --- a/xen/common/page_alloc.c Thu Dec 20 17:30:27 2007 +0000 +++ b/xen/common/page_alloc.c Fri Dec 21 22:58:58 2007 +0100 @@ -797,7 +797,12 @@ struct page_info *__alloc_domheap_pages( if ( (zone_hi + PAGE_SHIFT) >= dma_bitsize ) { - pg = alloc_heap_pages(dma_bitsize - PAGE_SHIFT, zone_hi, cpu, order); + if (avail_heap_pages(dma_bitsize - PAGE_SHIFT, zone_hi, + cpu_to_node (cpu)) >= ( 1UL << order )) + { + pg = alloc_heap_pages(dma_bitsize - PAGE_SHIFT, zone_hi, + cpu, order); + } /* Failure? Then check if we can fall back to the DMA pool. */ if ( unlikely(pg == NULL) &&