summaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorBoris Ostrovsky <boris.ostrovsky@oracle.com>2015-01-07 09:08:54 -0500
committerDavid Vrabel <david.vrabel@citrix.com>2015-01-08 13:52:36 +0000
commit701a261ad6c4c1915861673b7e8ab9fee5cef69a (patch)
tree2f193381167b8630c3bc135677bb9377a67a2e85 /arch
parent8b8cd8a3673dd766428aee8222fa8fd3fdd26d58 (diff)
downloadlinux-stable-701a261ad6c4c1915861673b7e8ab9fee5cef69a.tar.gz
linux-stable-701a261ad6c4c1915861673b7e8ab9fee5cef69a.tar.bz2
linux-stable-701a261ad6c4c1915861673b7e8ab9fee5cef69a.zip
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>
Diffstat (limited to 'arch')
-rw-r--r--arch/x86/xen/p2m.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/arch/x86/xen/p2m.c b/arch/x86/xen/p2m.c
index edbc7a63fd73..cab221da5f10 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);
}