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;
virt = __va(page_to_phys(page + i));
physmem_remove_mapping(virt);
}
-
- return 0;
}
int is_remapped(void *virt)
#include <xen/interface/xen.h>
#include <xen/features.h>
-#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 <asm/mmx.h>
#include <asm/maddr.h>
-#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__ */
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 <asm-generic/memory_model.h>
#endif /* __ASSEMBLY__ */
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 <asm-generic/memory_model.h>
*/
#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__
*/
#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 *
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<<order);
struct per_cpu_pages *pcp;
unsigned long flags;
- if (arch_free_page(page, 0))
+#ifdef CONFIG_XEN
+ if (PageForeign(page)) {
+ PageForeignDestructor(page);
return;
+ }
+#endif
+ arch_free_page(page, 0);
if (PageAnon(page))
page->mapping = NULL;