diff options
author | Jan Beulich <jbeulich@suse.com> | 2013-09-09 14:34:12 +0200 |
---|---|---|
committer | Jan Beulich <jbeulich@suse.com> | 2013-09-09 14:34:12 +0200 |
commit | 0fbf3208d9c1a568aeeb61d9f4fbca03b1cfa1f8 (patch) | |
tree | e6353a1192afa6c9612ccd7489b49eab3fb7a2f3 /xen/common | |
parent | a35137373aa9042424565e5ee76dc0a3bb7642ae (diff) | |
download | xen-0fbf3208d9c1a568aeeb61d9f4fbca03b1cfa1f8.tar.gz xen-0fbf3208d9c1a568aeeb61d9f4fbca03b1cfa1f8.tar.bz2 xen-0fbf3208d9c1a568aeeb61d9f4fbca03b1cfa1f8.zip |
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@citrix.com>
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Tested-by: Tomasz Wroblewski <tomasz.wroblewski@citrix.com>
Acked-by: Keir Fraser <keir@xen.org>
Diffstat (limited to 'xen/common')
-rw-r--r-- | 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 f19fb85f1f..d3bdfa7d57 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)) ) |