diff options
| author | Steven Whitehouse <swhiteho@redhat.com> | 2006-09-28 08:29:59 -0400 |
|---|---|---|
| committer | Steven Whitehouse <swhiteho@redhat.com> | 2006-09-28 08:29:59 -0400 |
| commit | 185a257f2f73bcd89050ad02da5bedbc28fc43fa (patch) | |
| tree | 5e32586114534ed3f2165614cba3d578f5d87307 /include/asm-ia64 | |
| parent | 3f1a9aaeffd8d1cbc5ab9776c45cbd66af1c9699 (diff) | |
| parent | a77c64c1a641950626181b4857abb701d8f38ccc (diff) | |
Merge branch 'master' into gfs2
Diffstat (limited to 'include/asm-ia64')
| -rw-r--r-- | include/asm-ia64/esi.h | 30 | ||||
| -rw-r--r-- | include/asm-ia64/futex.h | 122 | ||||
| -rw-r--r-- | include/asm-ia64/kprobes.h | 9 | ||||
| -rw-r--r-- | include/asm-ia64/libata-portmap.h | 1 | ||||
| -rw-r--r-- | include/asm-ia64/mca_asm.h | 2 | ||||
| -rw-r--r-- | include/asm-ia64/meminit.h | 1 | ||||
| -rw-r--r-- | include/asm-ia64/module.h | 3 | ||||
| -rw-r--r-- | include/asm-ia64/numa.h | 6 | ||||
| -rw-r--r-- | include/asm-ia64/pal.h | 16 | ||||
| -rw-r--r-- | include/asm-ia64/pgtable.h | 14 | ||||
| -rw-r--r-- | include/asm-ia64/processor.h | 13 | ||||
| -rw-r--r-- | include/asm-ia64/smp.h | 3 | ||||
| -rw-r--r-- | include/asm-ia64/unistd.h | 3 |
13 files changed, 192 insertions, 31 deletions
diff --git a/include/asm-ia64/esi.h b/include/asm-ia64/esi.h new file mode 100644 index 000000000000..84aac0e0b583 --- /dev/null +++ b/include/asm-ia64/esi.h | |||
| @@ -0,0 +1,30 @@ | |||
| 1 | /* | ||
| 2 | * ESI service calls. | ||
| 3 | * | ||
| 4 | * Copyright (c) Copyright 2005-2006 Hewlett-Packard Development Company, L.P. | ||
| 5 | * Alex Williamson <alex.williamson@hp.com> | ||
| 6 | */ | ||
| 7 | #ifndef esi_h | ||
| 8 | #define esi_h | ||
| 9 | |||
| 10 | #include <linux/efi.h> | ||
| 11 | |||
| 12 | #define ESI_QUERY 0x00000001 | ||
| 13 | #define ESI_OPEN_HANDLE 0x02000000 | ||
| 14 | #define ESI_CLOSE_HANDLE 0x02000001 | ||
| 15 | |||
| 16 | enum esi_proc_type { | ||
| 17 | ESI_PROC_SERIALIZED, /* calls need to be serialized */ | ||
| 18 | ESI_PROC_MP_SAFE, /* MP-safe, but not reentrant */ | ||
| 19 | ESI_PROC_REENTRANT /* MP-safe and reentrant */ | ||
| 20 | }; | ||
| 21 | |||
| 22 | extern int ia64_esi_init (void); | ||
| 23 | extern struct ia64_sal_retval esi_call_phys (void *, u64 *); | ||
| 24 | extern int ia64_esi_call(efi_guid_t, struct ia64_sal_retval *, | ||
| 25 | enum esi_proc_type, | ||
| 26 | u64, u64, u64, u64, u64, u64, u64, u64); | ||
| 27 | extern int ia64_esi_call_phys(efi_guid_t, struct ia64_sal_retval *, u64, u64, | ||
| 28 | u64, u64, u64, u64, u64, u64); | ||
| 29 | |||
| 30 | #endif /* esi_h */ | ||
diff --git a/include/asm-ia64/futex.h b/include/asm-ia64/futex.h index 6a332a9f099c..07d77f3a8cbe 100644 --- a/include/asm-ia64/futex.h +++ b/include/asm-ia64/futex.h | |||
| @@ -1,6 +1,124 @@ | |||
| 1 | #ifndef _ASM_FUTEX_H | 1 | #ifndef _ASM_FUTEX_H |
| 2 | #define _ASM_FUTEX_H | 2 | #define _ASM_FUTEX_H |
| 3 | 3 | ||
| 4 | #include <asm-generic/futex.h> | 4 | #include <linux/futex.h> |
| 5 | #include <asm/errno.h> | ||
| 6 | #include <asm/system.h> | ||
| 7 | #include <asm/uaccess.h> | ||
| 5 | 8 | ||
| 6 | #endif | 9 | #define __futex_atomic_op1(insn, ret, oldval, uaddr, oparg) \ |
| 10 | do { \ | ||
| 11 | register unsigned long r8 __asm ("r8") = 0; \ | ||
| 12 | __asm__ __volatile__( \ | ||
| 13 | " mf;; \n" \ | ||
| 14 | "[1:] " insn ";; \n" \ | ||
| 15 | " .xdata4 \"__ex_table\", 1b-., 2f-. \n" \ | ||
| 16 | "[2:]" \ | ||
| 17 | : "+r" (r8), "=r" (oldval) \ | ||
| 18 | : "r" (uaddr), "r" (oparg) \ | ||
| 19 | : "memory"); \ | ||
| 20 | ret = r8; \ | ||
| 21 | } while (0) | ||
| 22 | |||
| 23 | #define __futex_atomic_op2(insn, ret, oldval, uaddr, oparg) \ | ||
| 24 | do { \ | ||
| 25 | register unsigned long r8 __asm ("r8") = 0; \ | ||
| 26 | int val, newval; \ | ||
| 27 | do { \ | ||
| 28 | __asm__ __volatile__( \ | ||
| 29 | " mf;; \n" \ | ||
| 30 | "[1:] ld4 %3=[%4];; \n" \ | ||
| 31 | " mov %2=%3 \n" \ | ||
| 32 | insn ";; \n" \ | ||
| 33 | " mov ar.ccv=%2;; \n" \ | ||
| 34 | "[2:] cmpxchg4.acq %1=[%4],%3,ar.ccv;; \n" \ | ||
| 35 | " .xdata4 \"__ex_table\", 1b-., 3f-.\n" \ | ||
| 36 | " .xdata4 \"__ex_table\", 2b-., 3f-.\n" \ | ||
| 37 | "[3:]" \ | ||
| 38 | : "+r" (r8), "=r" (val), "=&r" (oldval), \ | ||
| 39 | "=&r" (newval) \ | ||
| 40 | : "r" (uaddr), "r" (oparg) \ | ||
| 41 | : "memory"); \ | ||
| 42 | if (unlikely (r8)) \ | ||
| 43 | break; \ | ||
| 44 | } while (unlikely (val != oldval)); \ | ||
| 45 | ret = r8; \ | ||
| 46 | } while (0) | ||
| 47 | |||
| 48 | static inline int | ||
| 49 | futex_atomic_op_inuser (int encoded_op, int __user *uaddr) | ||
| 50 | { | ||
| 51 | int op = (encoded_op >> 28) & 7; | ||
| 52 | int cmp = (encoded_op >> 24) & 15; | ||
| 53 | int oparg = (encoded_op << 8) >> 20; | ||
| 54 | int cmparg = (encoded_op << 20) >> 20; | ||
| 55 | int oldval = 0, ret; | ||
| 56 | if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28)) | ||
| 57 | oparg = 1 << oparg; | ||
| 58 | |||
| 59 | if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int))) | ||
| 60 | return -EFAULT; | ||
| 61 | |||
| 62 | inc_preempt_count(); | ||
| 63 | |||
| 64 | switch (op) { | ||
| 65 | case FUTEX_OP_SET: | ||
| 66 | __futex_atomic_op1("xchg4 %1=[%2],%3", ret, oldval, uaddr, | ||
| 67 | oparg); | ||
| 68 | break; | ||
| 69 | case FUTEX_OP_ADD: | ||
| 70 | __futex_atomic_op2("add %3=%3,%5", ret, oldval, uaddr, oparg); | ||
| 71 | break; | ||
| 72 | case FUTEX_OP_OR: | ||
| 73 | __futex_atomic_op2("or %3=%3,%5", ret, oldval, uaddr, oparg); | ||
| 74 | break; | ||
| 75 | case FUTEX_OP_ANDN: | ||
| 76 | __futex_atomic_op2("and %3=%3,%5", ret, oldval, uaddr, | ||
| 77 | ~oparg); | ||
| 78 | break; | ||
| 79 | case FUTEX_OP_XOR: | ||
| 80 | __futex_atomic_op2("xor %3=%3,%5", ret, oldval, uaddr, oparg); | ||
| 81 | break; | ||
| 82 | default: | ||
| 83 | ret = -ENOSYS; | ||
| 84 | } | ||
| 85 | |||
| 86 | dec_preempt_count(); | ||
| 87 | |||
| 88 | if (!ret) { | ||
| 89 | switch (cmp) { | ||
| 90 | case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break; | ||
| 91 | case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break; | ||
| 92 | case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break; | ||
| 93 | case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break; | ||
| 94 | case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break; | ||
| 95 | case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break; | ||
| 96 | default: ret = -ENOSYS; | ||
| 97 | } | ||
| 98 | } | ||
| 99 | return ret; | ||
| 100 | } | ||
| 101 | |||
| 102 | static inline int | ||
| 103 | futex_atomic_cmpxchg_inatomic(int __user *uaddr, int oldval, int newval) | ||
| 104 | { | ||
| 105 | if (!access_ok(VERIFY_WRITE, uaddr, sizeof(int))) | ||
| 106 | return -EFAULT; | ||
| 107 | |||
| 108 | { | ||
| 109 | register unsigned long r8 __asm ("r8"); | ||
| 110 | __asm__ __volatile__( | ||
| 111 | " mf;; \n" | ||
| 112 | " mov ar.ccv=%3;; \n" | ||
| 113 | "[1:] cmpxchg4.acq %0=[%1],%2,ar.ccv \n" | ||
| 114 | " .xdata4 \"__ex_table\", 1b-., 2f-. \n" | ||
| 115 | "[2:]" | ||
| 116 | : "=r" (r8) | ||
| 117 | : "r" (uaddr), "r" (newval), | ||
| 118 | "rO" ((long) (unsigned) oldval) | ||
| 119 | : "memory"); | ||
| 120 | return r8; | ||
| 121 | } | ||
| 122 | } | ||
| 123 | |||
| 124 | #endif /* _ASM_FUTEX_H */ | ||
diff --git a/include/asm-ia64/kprobes.h b/include/asm-ia64/kprobes.h index 938904910115..1b45b71c79b9 100644 --- a/include/asm-ia64/kprobes.h +++ b/include/asm-ia64/kprobes.h | |||
| @@ -29,7 +29,8 @@ | |||
| 29 | #include <linux/percpu.h> | 29 | #include <linux/percpu.h> |
| 30 | #include <asm/break.h> | 30 | #include <asm/break.h> |
| 31 | 31 | ||
| 32 | #define MAX_INSN_SIZE 16 | 32 | #define __ARCH_WANT_KPROBES_INSN_SLOT |
| 33 | #define MAX_INSN_SIZE 1 | ||
| 33 | #define BREAK_INST (long)(__IA64_BREAK_KPROBE << 6) | 34 | #define BREAK_INST (long)(__IA64_BREAK_KPROBE << 6) |
| 34 | 35 | ||
| 35 | typedef union cmp_inst { | 36 | typedef union cmp_inst { |
| @@ -94,7 +95,7 @@ struct kprobe_ctlblk { | |||
| 94 | #define IP_RELATIVE_PREDICT_OPCODE (7) | 95 | #define IP_RELATIVE_PREDICT_OPCODE (7) |
| 95 | #define LONG_BRANCH_OPCODE (0xC) | 96 | #define LONG_BRANCH_OPCODE (0xC) |
| 96 | #define LONG_CALL_OPCODE (0xD) | 97 | #define LONG_CALL_OPCODE (0xD) |
| 97 | #define arch_remove_kprobe(p) do {} while (0) | 98 | #define flush_insn_slot(p) do { } while (0) |
| 98 | 99 | ||
| 99 | typedef struct kprobe_opcode { | 100 | typedef struct kprobe_opcode { |
| 100 | bundle_t bundle; | 101 | bundle_t bundle; |
| @@ -108,7 +109,7 @@ struct fnptr { | |||
| 108 | /* Architecture specific copy of original instruction*/ | 109 | /* Architecture specific copy of original instruction*/ |
| 109 | struct arch_specific_insn { | 110 | struct arch_specific_insn { |
| 110 | /* copy of the instruction to be emulated */ | 111 | /* copy of the instruction to be emulated */ |
| 111 | kprobe_opcode_t insn; | 112 | kprobe_opcode_t *insn; |
| 112 | #define INST_FLAG_FIX_RELATIVE_IP_ADDR 1 | 113 | #define INST_FLAG_FIX_RELATIVE_IP_ADDR 1 |
| 113 | #define INST_FLAG_FIX_BRANCH_REG 2 | 114 | #define INST_FLAG_FIX_BRANCH_REG 2 |
| 114 | #define INST_FLAG_BREAK_INST 4 | 115 | #define INST_FLAG_BREAK_INST 4 |
| @@ -125,6 +126,6 @@ static inline void jprobe_return(void) | |||
| 125 | } | 126 | } |
| 126 | extern void invalidate_stacked_regs(void); | 127 | extern void invalidate_stacked_regs(void); |
| 127 | extern void flush_register_stack(void); | 128 | extern void flush_register_stack(void); |
| 128 | extern void flush_insn_slot(struct kprobe *p); | 129 | extern void arch_remove_kprobe(struct kprobe *p); |
| 129 | 130 | ||
| 130 | #endif /* _ASM_KPROBES_H */ | 131 | #endif /* _ASM_KPROBES_H */ |
diff --git a/include/asm-ia64/libata-portmap.h b/include/asm-ia64/libata-portmap.h deleted file mode 100644 index 75484ef0c743..000000000000 --- a/include/asm-ia64/libata-portmap.h +++ /dev/null | |||
| @@ -1 +0,0 @@ | |||
| 1 | #include <asm-generic/libata-portmap.h> | ||
diff --git a/include/asm-ia64/mca_asm.h b/include/asm-ia64/mca_asm.h index 27c9203d8ce3..76203f9a8718 100644 --- a/include/asm-ia64/mca_asm.h +++ b/include/asm-ia64/mca_asm.h | |||
| @@ -197,9 +197,9 @@ | |||
| 197 | movl temp2 = start_addr; \ | 197 | movl temp2 = start_addr; \ |
| 198 | ;; \ | 198 | ;; \ |
| 199 | mov cr.iip = temp2; \ | 199 | mov cr.iip = temp2; \ |
| 200 | movl gp = __gp \ | ||
| 200 | ;; \ | 201 | ;; \ |
| 201 | DATA_PA_TO_VA(sp, temp1); \ | 202 | DATA_PA_TO_VA(sp, temp1); \ |
| 202 | DATA_PA_TO_VA(gp, temp2); \ | ||
| 203 | srlz.i; \ | 203 | srlz.i; \ |
| 204 | ;; \ | 204 | ;; \ |
| 205 | nop 1; \ | 205 | nop 1; \ |
diff --git a/include/asm-ia64/meminit.h b/include/asm-ia64/meminit.h index 6a33a07b3f1d..c3b1f862e6e7 100644 --- a/include/asm-ia64/meminit.h +++ b/include/asm-ia64/meminit.h | |||
| @@ -55,6 +55,7 @@ extern void efi_memmap_init(unsigned long *, unsigned long *); | |||
| 55 | extern unsigned long vmalloc_end; | 55 | extern unsigned long vmalloc_end; |
| 56 | extern struct page *vmem_map; | 56 | extern struct page *vmem_map; |
| 57 | extern int find_largest_hole (u64 start, u64 end, void *arg); | 57 | extern int find_largest_hole (u64 start, u64 end, void *arg); |
| 58 | extern int register_active_ranges (u64 start, u64 end, void *arg); | ||
| 58 | extern int create_mem_map_page_table (u64 start, u64 end, void *arg); | 59 | extern int create_mem_map_page_table (u64 start, u64 end, void *arg); |
| 59 | extern int vmemmap_find_next_valid_pfn(int, int); | 60 | extern int vmemmap_find_next_valid_pfn(int, int); |
| 60 | #else | 61 | #else |
diff --git a/include/asm-ia64/module.h b/include/asm-ia64/module.h index 85c82bd819f2..d2da61e4c49b 100644 --- a/include/asm-ia64/module.h +++ b/include/asm-ia64/module.h | |||
| @@ -28,7 +28,8 @@ struct mod_arch_specific { | |||
| 28 | #define Elf_Ehdr Elf64_Ehdr | 28 | #define Elf_Ehdr Elf64_Ehdr |
| 29 | 29 | ||
| 30 | #define MODULE_PROC_FAMILY "ia64" | 30 | #define MODULE_PROC_FAMILY "ia64" |
| 31 | #define MODULE_ARCH_VERMAGIC MODULE_PROC_FAMILY | 31 | #define MODULE_ARCH_VERMAGIC MODULE_PROC_FAMILY \ |
| 32 | "gcc-" __stringify(__GNUC__) "." __stringify(__GNUC_MINOR__) | ||
| 32 | 33 | ||
| 33 | #define ARCH_SHF_SMALL SHF_IA_64_SHORT | 34 | #define ARCH_SHF_SMALL SHF_IA_64_SHORT |
| 34 | 35 | ||
diff --git a/include/asm-ia64/numa.h b/include/asm-ia64/numa.h index e5a8260593a5..7d5e2ccc37a0 100644 --- a/include/asm-ia64/numa.h +++ b/include/asm-ia64/numa.h | |||
| @@ -64,7 +64,13 @@ extern int paddr_to_nid(unsigned long paddr); | |||
| 64 | 64 | ||
| 65 | #define local_nodeid (cpu_to_node_map[smp_processor_id()]) | 65 | #define local_nodeid (cpu_to_node_map[smp_processor_id()]) |
| 66 | 66 | ||
| 67 | extern void map_cpu_to_node(int cpu, int nid); | ||
| 68 | extern void unmap_cpu_from_node(int cpu, int nid); | ||
| 69 | |||
| 70 | |||
| 67 | #else /* !CONFIG_NUMA */ | 71 | #else /* !CONFIG_NUMA */ |
| 72 | #define map_cpu_to_node(cpu, nid) do{}while(0) | ||
| 73 | #define unmap_cpu_from_node(cpu, nid) do{}while(0) | ||
| 68 | 74 | ||
| 69 | #define paddr_to_nid(addr) 0 | 75 | #define paddr_to_nid(addr) 0 |
| 70 | 76 | ||
diff --git a/include/asm-ia64/pal.h b/include/asm-ia64/pal.h index 20a8d618c845..2c8fd92d0ece 100644 --- a/include/asm-ia64/pal.h +++ b/include/asm-ia64/pal.h | |||
| @@ -78,6 +78,7 @@ | |||
| 78 | #define PAL_VM_TR_READ 261 /* read contents of translation register */ | 78 | #define PAL_VM_TR_READ 261 /* read contents of translation register */ |
| 79 | #define PAL_GET_PSTATE 262 /* get the current P-state */ | 79 | #define PAL_GET_PSTATE 262 /* get the current P-state */ |
| 80 | #define PAL_SET_PSTATE 263 /* set the P-state */ | 80 | #define PAL_SET_PSTATE 263 /* set the P-state */ |
| 81 | #define PAL_BRAND_INFO 274 /* Processor branding information */ | ||
| 81 | 82 | ||
| 82 | #ifndef __ASSEMBLY__ | 83 | #ifndef __ASSEMBLY__ |
| 83 | 84 | ||
| @@ -963,7 +964,8 @@ static inline s64 | |||
| 963 | ia64_pal_cache_read (pal_cache_line_id_u_t line_id, u64 physical_addr) | 964 | ia64_pal_cache_read (pal_cache_line_id_u_t line_id, u64 physical_addr) |
| 964 | { | 965 | { |
| 965 | struct ia64_pal_retval iprv; | 966 | struct ia64_pal_retval iprv; |
| 966 | PAL_CALL(iprv, PAL_CACHE_READ, line_id.pclid_data, physical_addr, 0); | 967 | PAL_CALL_PHYS_STK(iprv, PAL_CACHE_READ, line_id.pclid_data, |
| 968 | physical_addr, 0); | ||
| 967 | return iprv.status; | 969 | return iprv.status; |
| 968 | } | 970 | } |
| 969 | 971 | ||
| @@ -985,7 +987,8 @@ static inline s64 | |||
| 985 | ia64_pal_cache_write (pal_cache_line_id_u_t line_id, u64 physical_addr, u64 data) | 987 | ia64_pal_cache_write (pal_cache_line_id_u_t line_id, u64 physical_addr, u64 data) |
| 986 | { | 988 | { |
| 987 | struct ia64_pal_retval iprv; | 989 | struct ia64_pal_retval iprv; |
| 988 | PAL_CALL(iprv, PAL_CACHE_WRITE, line_id.pclid_data, physical_addr, data); | 990 | PAL_CALL_PHYS_STK(iprv, PAL_CACHE_WRITE, line_id.pclid_data, |
| 991 | physical_addr, data); | ||
| 989 | return iprv.status; | 992 | return iprv.status; |
| 990 | } | 993 | } |
| 991 | 994 | ||
| @@ -1133,6 +1136,15 @@ ia64_pal_set_pstate (u64 pstate_index) | |||
| 1133 | return iprv.status; | 1136 | return iprv.status; |
| 1134 | } | 1137 | } |
| 1135 | 1138 | ||
| 1139 | /* Processor branding information*/ | ||
| 1140 | static inline s64 | ||
| 1141 | ia64_pal_get_brand_info (char *brand_info) | ||
| 1142 | { | ||
| 1143 | struct ia64_pal_retval iprv; | ||
| 1144 | PAL_CALL_STK(iprv, PAL_BRAND_INFO, 0, (u64)brand_info, 0); | ||
| 1145 | return iprv.status; | ||
| 1146 | } | ||
| 1147 | |||
| 1136 | /* Cause the processor to enter LIGHT HALT state, where prefetching and execution are | 1148 | /* Cause the processor to enter LIGHT HALT state, where prefetching and execution are |
| 1137 | * suspended, but cache and TLB coherency is maintained. | 1149 | * suspended, but cache and TLB coherency is maintained. |
| 1138 | */ | 1150 | */ |
diff --git a/include/asm-ia64/pgtable.h b/include/asm-ia64/pgtable.h index 228981cadf8f..553182747722 100644 --- a/include/asm-ia64/pgtable.h +++ b/include/asm-ia64/pgtable.h | |||
| @@ -275,21 +275,23 @@ ia64_phys_addr_valid (unsigned long addr) | |||
| 275 | #define pmd_bad(pmd) (!ia64_phys_addr_valid(pmd_val(pmd))) | 275 | #define pmd_bad(pmd) (!ia64_phys_addr_valid(pmd_val(pmd))) |
| 276 | #define pmd_present(pmd) (pmd_val(pmd) != 0UL) | 276 | #define pmd_present(pmd) (pmd_val(pmd) != 0UL) |
| 277 | #define pmd_clear(pmdp) (pmd_val(*(pmdp)) = 0UL) | 277 | #define pmd_clear(pmdp) (pmd_val(*(pmdp)) = 0UL) |
| 278 | #define pmd_page_kernel(pmd) ((unsigned long) __va(pmd_val(pmd) & _PFN_MASK)) | 278 | #define pmd_page_vaddr(pmd) ((unsigned long) __va(pmd_val(pmd) & _PFN_MASK)) |
| 279 | #define pmd_page(pmd) virt_to_page((pmd_val(pmd) + PAGE_OFFSET)) | 279 | #define pmd_page(pmd) virt_to_page((pmd_val(pmd) + PAGE_OFFSET)) |
| 280 | 280 | ||
| 281 | #define pud_none(pud) (!pud_val(pud)) | 281 | #define pud_none(pud) (!pud_val(pud)) |
| 282 | #define pud_bad(pud) (!ia64_phys_addr_valid(pud_val(pud))) | 282 | #define pud_bad(pud) (!ia64_phys_addr_valid(pud_val(pud))) |
| 283 | #define pud_present(pud) (pud_val(pud) != 0UL) | 283 | #define pud_present(pud) (pud_val(pud) != 0UL) |
| 284 | #define pud_clear(pudp) (pud_val(*(pudp)) = 0UL) | 284 | #define pud_clear(pudp) (pud_val(*(pudp)) = 0UL) |
| 285 | #define pud_page(pud) ((unsigned long) __va(pud_val(pud) & _PFN_MASK)) | 285 | #define pud_page_vaddr(pud) ((unsigned long) __va(pud_val(pud) & _PFN_MASK)) |
| 286 | #define pud_page(pud) virt_to_page((pud_val(pud) + PAGE_OFFSET)) | ||
| 286 | 287 | ||
| 287 | #ifdef CONFIG_PGTABLE_4 | 288 | #ifdef CONFIG_PGTABLE_4 |
| 288 | #define pgd_none(pgd) (!pgd_val(pgd)) | 289 | #define pgd_none(pgd) (!pgd_val(pgd)) |
| 289 | #define pgd_bad(pgd) (!ia64_phys_addr_valid(pgd_val(pgd))) | 290 | #define pgd_bad(pgd) (!ia64_phys_addr_valid(pgd_val(pgd))) |
| 290 | #define pgd_present(pgd) (pgd_val(pgd) != 0UL) | 291 | #define pgd_present(pgd) (pgd_val(pgd) != 0UL) |
| 291 | #define pgd_clear(pgdp) (pgd_val(*(pgdp)) = 0UL) | 292 | #define pgd_clear(pgdp) (pgd_val(*(pgdp)) = 0UL) |
| 292 | #define pgd_page(pgd) ((unsigned long) __va(pgd_val(pgd) & _PFN_MASK)) | 293 | #define pgd_page_vaddr(pgd) ((unsigned long) __va(pgd_val(pgd) & _PFN_MASK)) |
| 294 | #define pgd_page(pgd) virt_to_page((pgd_val(pgd) + PAGE_OFFSET)) | ||
| 293 | #endif | 295 | #endif |
| 294 | 296 | ||
| 295 | /* | 297 | /* |
| @@ -360,19 +362,19 @@ pgd_offset (struct mm_struct *mm, unsigned long address) | |||
| 360 | #ifdef CONFIG_PGTABLE_4 | 362 | #ifdef CONFIG_PGTABLE_4 |
| 361 | /* Find an entry in the second-level page table.. */ | 363 | /* Find an entry in the second-level page table.. */ |
| 362 | #define pud_offset(dir,addr) \ | 364 | #define pud_offset(dir,addr) \ |
| 363 | ((pud_t *) pgd_page(*(dir)) + (((addr) >> PUD_SHIFT) & (PTRS_PER_PUD - 1))) | 365 | ((pud_t *) pgd_page_vaddr(*(dir)) + (((addr) >> PUD_SHIFT) & (PTRS_PER_PUD - 1))) |
| 364 | #endif | 366 | #endif |
| 365 | 367 | ||
| 366 | /* Find an entry in the third-level page table.. */ | 368 | /* Find an entry in the third-level page table.. */ |
| 367 | #define pmd_offset(dir,addr) \ | 369 | #define pmd_offset(dir,addr) \ |
| 368 | ((pmd_t *) pud_page(*(dir)) + (((addr) >> PMD_SHIFT) & (PTRS_PER_PMD - 1))) | 370 | ((pmd_t *) pud_page_vaddr(*(dir)) + (((addr) >> PMD_SHIFT) & (PTRS_PER_PMD - 1))) |
| 369 | 371 | ||
| 370 | /* | 372 | /* |
| 371 | * Find an entry in the third-level page table. This looks more complicated than it | 373 | * Find an entry in the third-level page table. This looks more complicated than it |
| 372 | * should be because some platforms place page tables in high memory. | 374 | * should be because some platforms place page tables in high memory. |
| 373 | */ | 375 | */ |
| 374 | #define pte_index(addr) (((addr) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1)) | 376 | #define pte_index(addr) (((addr) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1)) |
| 375 | #define pte_offset_kernel(dir,addr) ((pte_t *) pmd_page_kernel(*(dir)) + pte_index(addr)) | 377 | #define pte_offset_kernel(dir,addr) ((pte_t *) pmd_page_vaddr(*(dir)) + pte_index(addr)) |
| 376 | #define pte_offset_map(dir,addr) pte_offset_kernel(dir, addr) | 378 | #define pte_offset_map(dir,addr) pte_offset_kernel(dir, addr) |
| 377 | #define pte_offset_map_nested(dir,addr) pte_offset_map(dir, addr) | 379 | #define pte_offset_map_nested(dir,addr) pte_offset_map(dir, addr) |
| 378 | #define pte_unmap(pte) do { } while (0) | 380 | #define pte_unmap(pte) do { } while (0) |
diff --git a/include/asm-ia64/processor.h b/include/asm-ia64/processor.h index 265f4824db0e..5830d36fd8e6 100644 --- a/include/asm-ia64/processor.h +++ b/include/asm-ia64/processor.h | |||
| @@ -20,12 +20,6 @@ | |||
| 20 | #include <asm/ustack.h> | 20 | #include <asm/ustack.h> |
| 21 | 21 | ||
| 22 | #define IA64_NUM_DBG_REGS 8 | 22 | #define IA64_NUM_DBG_REGS 8 |
| 23 | /* | ||
| 24 | * Limits for PMC and PMD are set to less than maximum architected values | ||
| 25 | * but should be sufficient for a while | ||
| 26 | */ | ||
| 27 | #define IA64_NUM_PMC_REGS 64 | ||
| 28 | #define IA64_NUM_PMD_REGS 64 | ||
| 29 | 23 | ||
| 30 | #define DEFAULT_MAP_BASE __IA64_UL_CONST(0x2000000000000000) | 24 | #define DEFAULT_MAP_BASE __IA64_UL_CONST(0x2000000000000000) |
| 31 | #define DEFAULT_TASK_SIZE __IA64_UL_CONST(0xa000000000000000) | 25 | #define DEFAULT_TASK_SIZE __IA64_UL_CONST(0xa000000000000000) |
| @@ -163,6 +157,7 @@ struct cpuinfo_ia64 { | |||
| 163 | __u8 family; | 157 | __u8 family; |
| 164 | __u8 archrev; | 158 | __u8 archrev; |
| 165 | char vendor[16]; | 159 | char vendor[16]; |
| 160 | char *model_name; | ||
| 166 | 161 | ||
| 167 | #ifdef CONFIG_NUMA | 162 | #ifdef CONFIG_NUMA |
| 168 | struct ia64_node_data *node_data; | 163 | struct ia64_node_data *node_data; |
| @@ -262,13 +257,9 @@ struct thread_struct { | |||
| 262 | # define INIT_THREAD_IA32 | 257 | # define INIT_THREAD_IA32 |
| 263 | #endif /* CONFIG_IA32_SUPPORT */ | 258 | #endif /* CONFIG_IA32_SUPPORT */ |
| 264 | #ifdef CONFIG_PERFMON | 259 | #ifdef CONFIG_PERFMON |
| 265 | __u64 pmcs[IA64_NUM_PMC_REGS]; | ||
| 266 | __u64 pmds[IA64_NUM_PMD_REGS]; | ||
| 267 | void *pfm_context; /* pointer to detailed PMU context */ | 260 | void *pfm_context; /* pointer to detailed PMU context */ |
| 268 | unsigned long pfm_needs_checking; /* when >0, pending perfmon work on kernel exit */ | 261 | unsigned long pfm_needs_checking; /* when >0, pending perfmon work on kernel exit */ |
| 269 | # define INIT_THREAD_PM .pmcs = {0UL, }, \ | 262 | # define INIT_THREAD_PM .pfm_context = NULL, \ |
| 270 | .pmds = {0UL, }, \ | ||
| 271 | .pfm_context = NULL, \ | ||
| 272 | .pfm_needs_checking = 0UL, | 263 | .pfm_needs_checking = 0UL, |
| 273 | #else | 264 | #else |
| 274 | # define INIT_THREAD_PM | 265 | # define INIT_THREAD_PM |
diff --git a/include/asm-ia64/smp.h b/include/asm-ia64/smp.h index 719ff309ce09..60fd4ae014f6 100644 --- a/include/asm-ia64/smp.h +++ b/include/asm-ia64/smp.h | |||
| @@ -122,12 +122,11 @@ extern void __init smp_build_cpu_map(void); | |||
| 122 | extern void __init init_smp_config (void); | 122 | extern void __init init_smp_config (void); |
| 123 | extern void smp_do_timer (struct pt_regs *regs); | 123 | extern void smp_do_timer (struct pt_regs *regs); |
| 124 | 124 | ||
| 125 | extern int smp_call_function_single (int cpuid, void (*func) (void *info), void *info, | ||
| 126 | int retry, int wait); | ||
| 127 | extern void smp_send_reschedule (int cpu); | 125 | extern void smp_send_reschedule (int cpu); |
| 128 | extern void lock_ipi_calllock(void); | 126 | extern void lock_ipi_calllock(void); |
| 129 | extern void unlock_ipi_calllock(void); | 127 | extern void unlock_ipi_calllock(void); |
| 130 | extern void identify_siblings (struct cpuinfo_ia64 *); | 128 | extern void identify_siblings (struct cpuinfo_ia64 *); |
| 129 | extern int is_multithreading_enabled(void); | ||
| 131 | 130 | ||
| 132 | #else | 131 | #else |
| 133 | 132 | ||
diff --git a/include/asm-ia64/unistd.h b/include/asm-ia64/unistd.h index f581662c5ab8..bb0eb727dcd0 100644 --- a/include/asm-ia64/unistd.h +++ b/include/asm-ia64/unistd.h | |||
| @@ -286,7 +286,8 @@ | |||
| 286 | /* 1294, 1295 reserved for pselect/ppoll */ | 286 | /* 1294, 1295 reserved for pselect/ppoll */ |
| 287 | #define __NR_unshare 1296 | 287 | #define __NR_unshare 1296 |
| 288 | #define __NR_splice 1297 | 288 | #define __NR_splice 1297 |
| 289 | /* 1298, 1299 reserved for set_robust_list/get_robust_list */ | 289 | #define __NR_set_robust_list 1298 |
| 290 | #define __NR_get_robust_list 1299 | ||
| 290 | #define __NR_sync_file_range 1300 | 291 | #define __NR_sync_file_range 1300 |
| 291 | #define __NR_tee 1301 | 292 | #define __NR_tee 1301 |
| 292 | #define __NR_vmsplice 1302 | 293 | #define __NR_vmsplice 1302 |
