[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] xmalloc: make whole pages xfree() clear the order field (ab)used by xmalloc()
commit 0fbf3208d9c1a568aeeb61d9f4fbca03b1cfa1f8 Author: Jan Beulich <jbeulich@xxxxxxxx> AuthorDate: Mon Sep 9 14:34:12 2013 +0200 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Mon Sep 9 14:34:12 2013 +0200 xmalloc: make whole pages xfree() clear the order field (ab)used by xmalloc() Not doing this was found to cause problems with sequences of allocation (multi-page), freeing, and then again allocation of the same page upon boot when interrupts are still disabled (causing the owner field to be non-zero, thus making the allocator attempt a TLB flush and, in its processing, triggering an assertion). Reported-by: Tomasz Wroblewski <tomasz.wroblewski@xxxxxxxxxx> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Tested-by: Tomasz Wroblewski <tomasz.wroblewski@xxxxxxxxxx> Acked-by: Keir Fraser <keir@xxxxxxx> --- xen/common/xmalloc_tlsf.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/xen/common/xmalloc_tlsf.c b/xen/common/xmalloc_tlsf.c index f19fb85..d3bdfa7 100644 --- a/xen/common/xmalloc_tlsf.c +++ b/xen/common/xmalloc_tlsf.c @@ -629,6 +629,7 @@ void xfree(void *p) unsigned int i, order = get_order_from_pages(size); BUG_ON((unsigned long)p & ((PAGE_SIZE << order) - 1)); + PFN_ORDER(virt_to_page(p)) = 0; for ( i = 0; ; ++i ) { if ( !(size & (1 << i)) ) -- generated by git-patchbot for /home/xen/git/xen.git#master _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |