Since they're being passed to Dom0 using an array of uint32_t, they must be representable as 32-bit quantities, and hence the buffer allocation must specify an upper address boundary. Signed-off-by: Jan Beulich --- 2010-06-15.orig/xen/common/trace.c 2010-06-28 11:58:37.000000000 +0200 +++ 2010-06-15/xen/common/trace.c 2010-06-28 12:16:05.000000000 +0200 @@ -130,7 +130,8 @@ static int alloc_trace_bufs(void) char *rawbuf; struct t_buf *buf; - if ( (rawbuf = alloc_xenheap_pages(order, 0)) == NULL ) + if ( (rawbuf = alloc_xenheap_pages( + order, MEMF_bits(32 + PAGE_SHIFT))) == NULL ) { printk("Xen trace buffers: memory allocation failed\n"); opt_tbuf_size = 0;