* David Mosberger-Tang <davidm@hpl.hp.com>
*/
-# ifdef __KERNEL__
+#include <linux/config.h>
#include <asm/intrinsics.h>
#include <asm/types.h>
# define HAVE_ARCH_HUGETLB_UNMAPPED_AREA
# define ARCH_HAS_HUGEPAGE_ONLY_RANGE
-# define ARCH_HAS_PREPARE_HUGEPAGE_RANGE
-# define ARCH_HAS_HUGETLB_FREE_PGD_RANGE
#endif /* CONFIG_HUGETLB_PAGE */
#ifdef __ASSEMBLY__
# define __pa(x) ((x) - PAGE_OFFSET)
# define __va(x) ((x) + PAGE_OFFSET)
#else /* !__ASSEMBLY */
+# ifdef __KERNEL__
# define STRICT_MM_TYPECHECKS
extern void clear_page (void *page);
# define ia64_pfn_valid(pfn) 1
#endif
-#ifdef CONFIG_VIRTUAL_MEM_MAP
-extern struct page *vmem_map;
-#ifdef CONFIG_DISCONTIGMEM
-# define page_to_pfn(page) ((unsigned long) (page - vmem_map))
-# define pfn_to_page(pfn) (vmem_map + (pfn))
-#endif
-#endif
-
-#if defined(CONFIG_FLATMEM) || defined(CONFIG_SPARSEMEM)
-/* FLATMEM always configures mem_map (mem_map = vmem_map if necessary) */
-#include <asm-generic/memory_model.h>
-#endif
-
#ifdef CONFIG_FLATMEM
# define pfn_valid(pfn) (((pfn) < max_mapnr) && ia64_pfn_valid(pfn))
+# define page_to_pfn(page) ((unsigned long) (page - mem_map))
+# define pfn_to_page(pfn) (mem_map + (pfn))
#elif defined(CONFIG_DISCONTIGMEM)
+extern struct page *vmem_map;
extern unsigned long min_low_pfn;
extern unsigned long max_low_pfn;
# define pfn_valid(pfn) (((pfn) >= min_low_pfn) && ((pfn) < max_low_pfn) && ia64_pfn_valid(pfn))
+# define page_to_pfn(page) ((unsigned long) (page - vmem_map))
+# define pfn_to_page(pfn) (vmem_map + (pfn))
#endif
-#ifndef CONFIG_XEN
#define page_to_phys(page) (page_to_pfn(page) << PAGE_SHIFT)
-#endif
#define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT)
#define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT)
| (REGION_OFFSET(x) >> (HPAGE_SHIFT-PAGE_SHIFT)))
# define HUGETLB_PAGE_ORDER (HPAGE_SHIFT - PAGE_SHIFT)
# define is_hugepage_only_range(mm, addr, len) \
- (REGION_NUMBER(addr) == RGN_HPAGE || \
+ (REGION_NUMBER(addr) == RGN_HPAGE && \
REGION_NUMBER((addr)+(len)-1) == RGN_HPAGE)
extern unsigned int hpage_shift;
#endif
return order;
}
+# endif /* __KERNEL__ */
#endif /* !__ASSEMBLY__ */
#ifdef STRICT_MM_TYPECHECKS
(((current->personality & READ_IMPLIES_EXEC) != 0) \
? VM_EXEC : 0))
-#ifndef __ASSEMBLY__
-#ifdef CONFIG_XEN
-
-#include <linux/kernel.h>
-#include <asm/hypervisor.h>
-#include <xen/features.h> // to compile netback, netfront
-
-/*
- * XXX hack!
- * Linux/IA64 uses PG_arch_1.
- * This hack will be removed once PG_foreign bit is taken.
- * #include <xen/foreign_page.h>
- */
-#ifdef __ASM_XEN_FOREIGN_PAGE_H__
-# error "don't include include/xen/foreign_page.h!"
-#endif
-
-extern struct address_space xen_ia64_foreign_dummy_mapping;
-#define PageForeign(page) \
- ((page)->mapping == &xen_ia64_foreign_dummy_mapping)
-
-#define SetPageForeign(page, dtor) do { \
- set_page_private((page), (unsigned long)(dtor)); \
- (page)->mapping = &xen_ia64_foreign_dummy_mapping; \
- smp_rmb(); \
-} while (0)
-
-#define ClearPageForeign(page) do { \
- (page)->mapping = NULL; \
- smp_rmb(); \
- set_page_private((page), 0); \
-} while (0)
-
-#define PageForeignDestructor(page) \
- ( (void (*) (struct page *)) page_private(page) )
-
-#define arch_free_page(_page,_order) \
-({ int foreign = PageForeign(_page); \
- if (foreign) \
- (PageForeignDestructor(_page))(_page); \
- foreign; \
-})
-#define HAVE_ARCH_FREE_PAGE
-
-#include <asm/maddr.h>
-
-#endif /* CONFIG_XEN */
-#endif /* __ASSEMBLY__ */
-#define devmem_is_allowed(x) 1
-# endif /* __KERNEL__ */
#endif /* _ASM_IA64_PAGE_H */