From 522919372d1972f65b9d8c881b3eaf68cb92ea97 Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Thu, 25 Oct 2007 16:10:19 +0100 Subject: [PATCH] linux: revert arch_free_page() change Since mm/page_alloc.c needs to be changed in two places anyway, the same effect can (now) be achieved with less modifications elsewhere. Signed-off-by: Jan Beulich --- arch/um/kernel/physmem.c | 4 +--- include/asm-i386/mach-xen/asm/page.h | 8 -------- include/asm-ia64/page.h | 9 --------- include/asm-powerpc/page.h | 9 --------- include/asm-um/page.h | 2 +- include/asm-x86_64/mach-xen/asm/page.h | 8 -------- include/linux/gfp.h | 6 +----- mm/page_alloc.c | 14 ++++++++++++-- 8 files changed, 15 insertions(+), 45 deletions(-) diff --git a/arch/um/kernel/physmem.c b/arch/um/kernel/physmem.c index 22c40d30..abafa64b 100644 --- a/arch/um/kernel/physmem.c +++ b/arch/um/kernel/physmem.c @@ -226,7 +226,7 @@ EXPORT_SYMBOL(physmem_forget_descriptor); EXPORT_SYMBOL(physmem_remove_mapping); EXPORT_SYMBOL(physmem_subst_mapping); -int arch_free_page(struct page *page, int order) +void arch_free_page(struct page *page, int order) { void *virt; int i; @@ -235,8 +235,6 @@ int arch_free_page(struct page *page, int order) virt = __va(page_to_phys(page + i)); physmem_remove_mapping(virt); } - - return 0; } int is_remapped(void *virt) diff --git a/include/asm-i386/mach-xen/asm/page.h b/include/asm-i386/mach-xen/asm/page.h index f0091170..7f3fb72b 100644 --- a/include/asm-i386/mach-xen/asm/page.h +++ b/include/asm-i386/mach-xen/asm/page.h @@ -37,14 +37,6 @@ #include #include -#define arch_free_page(_page,_order) \ -({ int foreign = PageForeign(_page); \ - if (foreign) \ - PageForeignDestructor(_page); \ - foreign; \ -}) -#define HAVE_ARCH_FREE_PAGE - #ifdef CONFIG_X86_USE_3DNOW #include diff --git a/include/asm-ia64/page.h b/include/asm-ia64/page.h index a956380d..a3de99f4 100644 --- a/include/asm-ia64/page.h +++ b/include/asm-ia64/page.h @@ -239,15 +239,6 @@ get_order (unsigned long size) #include -#define arch_free_page(_page, _order) \ -({ \ - int foreign = PageForeign(_page); \ - if (foreign) \ - PageForeignDestructor(_page); \ - foreign; \ -}) -#define HAVE_ARCH_FREE_PAGE - #endif /* CONFIG_XEN */ #endif /* __ASSEMBLY__ */ diff --git a/include/asm-powerpc/page.h b/include/asm-powerpc/page.h index 227ffa3a..fb597b37 100644 --- a/include/asm-powerpc/page.h +++ b/include/asm-powerpc/page.h @@ -194,15 +194,6 @@ extern int page_is_ram(unsigned long pfn); struct vm_area_struct; extern const char *arch_vma_name(struct vm_area_struct *vma); -#define arch_free_page(_page, _order) \ -({ \ - int foreign = PageForeign(_page); \ - if (foreign) \ - PageForeignDestructor(_page); \ - foreign; \ -}) -#define HAVE_ARCH_FREE_PAGE - #include #endif /* __ASSEMBLY__ */ diff --git a/include/asm-um/page.h b/include/asm-um/page.h index 7ea77261..4296d313 100644 --- a/include/asm-um/page.h +++ b/include/asm-um/page.h @@ -114,7 +114,7 @@ extern unsigned long uml_physmem; extern struct page *arch_validate(struct page *page, gfp_t mask, int order); #define HAVE_ARCH_VALIDATE -extern int arch_free_page(struct page *page, int order); +extern void arch_free_page(struct page *page, int order); #define HAVE_ARCH_FREE_PAGE #include diff --git a/include/asm-x86_64/mach-xen/asm/page.h b/include/asm-x86_64/mach-xen/asm/page.h index 965effd2..89cceec2 100644 --- a/include/asm-x86_64/mach-xen/asm/page.h +++ b/include/asm-x86_64/mach-xen/asm/page.h @@ -16,14 +16,6 @@ */ #define _PAGE_PRESENT 0x001 -#define arch_free_page(_page,_order) \ -({ int foreign = PageForeign(_page); \ - if (foreign) \ - PageForeignDestructor(_page); \ - foreign; \ -}) -#define HAVE_ARCH_FREE_PAGE - /* PAGE_SHIFT determines the page size */ #define PAGE_SHIFT 12 #ifdef __ASSEMBLY__ diff --git a/include/linux/gfp.h b/include/linux/gfp.h index f24dcf4f..cc9e6084 100644 --- a/include/linux/gfp.h +++ b/include/linux/gfp.h @@ -99,11 +99,7 @@ static inline int gfp_zone(gfp_t gfp) */ #ifndef HAVE_ARCH_FREE_PAGE -/* - * If arch_free_page returns non-zero then the generic free_page code can - * immediately bail: the arch-specific function has done all the work. - */ -static inline int arch_free_page(struct page *page, int order) { return 0; } +static inline void arch_free_page(struct page *page, int order) { } #endif extern struct page * diff --git a/mm/page_alloc.c b/mm/page_alloc.c index d07e06cd..c9f834ee 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -451,8 +451,13 @@ static void __free_pages_ok(struct page *page, unsigned int order) int i; int reserved = 0; - if (arch_free_page(page, order)) +#ifdef CONFIG_XEN + if (PageForeign(page)) { + PageForeignDestructor(page); return; + } +#endif + arch_free_page(page, order); if (!PageHighMem(page)) debug_check_no_locks_freed(page_address(page), PAGE_SIZE<mapping = NULL; -- 2.39.5