diff options
author | Boris Ostrovsky <boris.ostrovsky@oracle.com> | 2015-01-07 09:08:54 -0500 |
---|---|---|
committer | David Vrabel <david.vrabel@citrix.com> | 2015-01-08 13:52:36 +0000 |
commit | 701a261ad6c4c1915861673b7e8ab9fee5cef69a (patch) | |
tree | 2f193381167b8630c3bc135677bb9377a67a2e85 | |
parent | 8b8cd8a3673dd766428aee8222fa8fd3fdd26d58 (diff) | |
download | op-kernel-dev-701a261ad6c4c1915861673b7e8ab9fee5cef69a.zip op-kernel-dev-701a261ad6c4c1915861673b7e8ab9fee5cef69a.tar.gz |
x86/xen: Free bootmem in free_p2m_page() during early boot
With recent changes in p2m we now have legitimate cases when
p2m memory needs to be freed during early boot (i.e. before
slab is initialized).
Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Reviewed-by: Juergen Gross <jgross@suse.com>
Signed-off-by: David Vrabel <david.vrabel@citrix.com>
-rw-r--r-- | arch/x86/xen/p2m.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/arch/x86/xen/p2m.c b/arch/x86/xen/p2m.c index edbc7a6..cab221d 100644 --- a/arch/x86/xen/p2m.c +++ b/arch/x86/xen/p2m.c @@ -167,10 +167,13 @@ static void * __ref alloc_p2m_page(void) return (void *)__get_free_page(GFP_KERNEL | __GFP_REPEAT); } -/* Only to be called in case of a race for a page just allocated! */ -static void free_p2m_page(void *p) +static void __ref free_p2m_page(void *p) { - BUG_ON(!slab_is_available()); + if (unlikely(!slab_is_available())) { + free_bootmem((unsigned long)p, PAGE_SIZE); + return; + } + free_page((unsigned long)p); } |