|
@@ -12,6 +12,19 @@
|
|
|
#include <asm/intrinsics.h>
|
|
|
#include <asm/types.h>
|
|
|
|
|
|
+/*
|
|
|
+ * The top three bits of an IA64 address are its Region Number.
|
|
|
+ * Different regions are assigned to different purposes.
|
|
|
+ */
|
|
|
+#define RGN_SHIFT (61)
|
|
|
+#define RGN_BASE(r) (__IA64_UL_CONST(r)<<RGN_SHIFT)
|
|
|
+
|
|
|
+#define KHIGH -1 /* high three bits of Kernel virtual address */
|
|
|
+#define RGN_KERNEL 7 /* Identity mapped region */
|
|
|
+#define RGN_UNCACHED 6 /* Identity mapped I/O region */
|
|
|
+#define RGN_GATE 5 /* Gate page, Kernel text, etc */
|
|
|
+#define RGN_HPAGE 4 /* For Huge TLB pages */
|
|
|
+
|
|
|
/*
|
|
|
* PAGE_SHIFT determines the actual kernel page size.
|
|
|
*/
|
|
@@ -36,10 +49,9 @@
|
|
|
|
|
|
#define RGN_MAP_LIMIT ((1UL << (4*PAGE_SHIFT - 12)) - PAGE_SIZE) /* per region addr limit */
|
|
|
|
|
|
+
|
|
|
#ifdef CONFIG_HUGETLB_PAGE
|
|
|
-# define REGION_HPAGE (4UL) /* note: this is hardcoded in reload_context()!*/
|
|
|
-# define REGION_SHIFT 61
|
|
|
-# define HPAGE_REGION_BASE (REGION_HPAGE << REGION_SHIFT)
|
|
|
+# define HPAGE_REGION_BASE RGN_BASE(RGN_HPAGE)
|
|
|
# define HPAGE_SHIFT hpage_shift
|
|
|
# define HPAGE_SHIFT_DEFAULT 28 /* check ia64 SDM for architecture supported size */
|
|
|
# define HPAGE_SIZE (__IA64_UL_CONST(1) << HPAGE_SHIFT)
|
|
@@ -130,16 +142,13 @@ typedef union ia64_va {
|
|
|
#define REGION_NUMBER(x) ({ia64_va _v; _v.l = (long) (x); _v.f.reg;})
|
|
|
#define REGION_OFFSET(x) ({ia64_va _v; _v.l = (long) (x); _v.f.off;})
|
|
|
|
|
|
-#define REGION_SIZE REGION_NUMBER(1)
|
|
|
-#define REGION_KERNEL 7
|
|
|
-
|
|
|
#ifdef CONFIG_HUGETLB_PAGE
|
|
|
# define htlbpage_to_page(x) (((unsigned long) REGION_NUMBER(x) << 61) \
|
|
|
| (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) == REGION_HPAGE && \
|
|
|
- REGION_NUMBER((addr)+(len)-1) == REGION_HPAGE)
|
|
|
+ (REGION_NUMBER(addr) == RGN_HPAGE && \
|
|
|
+ REGION_NUMBER((addr)+(len)-1) == RGN_HPAGE)
|
|
|
extern unsigned int hpage_shift;
|
|
|
#endif
|
|
|
|
|
@@ -197,7 +206,7 @@ get_order (unsigned long size)
|
|
|
# define __pgprot(x) (x)
|
|
|
#endif /* !STRICT_MM_TYPECHECKS */
|
|
|
|
|
|
-#define PAGE_OFFSET __IA64_UL_CONST(0xe000000000000000)
|
|
|
+#define PAGE_OFFSET RGN_BASE(RGN_KERNEL)
|
|
|
|
|
|
#define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | \
|
|
|
VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC | \
|