diff options
| -rw-r--r-- | arch/ia64/kernel/ia64_ksyms.c | 1 | ||||
| -rw-r--r-- | arch/ia64/kernel/kprobes.c | 2 | ||||
| -rw-r--r-- | arch/ia64/kernel/traps.c | 18 | ||||
| -rw-r--r-- | include/asm-ia64/page.h | 3 |
4 files changed, 4 insertions, 20 deletions
diff --git a/arch/ia64/kernel/ia64_ksyms.c b/arch/ia64/kernel/ia64_ksyms.c index 01572814abe4..5db9d3bcbbcb 100644 --- a/arch/ia64/kernel/ia64_ksyms.c +++ b/arch/ia64/kernel/ia64_ksyms.c | |||
| @@ -42,6 +42,7 @@ EXPORT_SYMBOL(clear_page); | |||
| 42 | 42 | ||
| 43 | #ifdef CONFIG_VIRTUAL_MEM_MAP | 43 | #ifdef CONFIG_VIRTUAL_MEM_MAP |
| 44 | #include <linux/bootmem.h> | 44 | #include <linux/bootmem.h> |
| 45 | EXPORT_SYMBOL(min_low_pfn); /* defined by bootmem.c, but not exported by generic code */ | ||
| 45 | EXPORT_SYMBOL(max_low_pfn); /* defined by bootmem.c, but not exported by generic code */ | 46 | EXPORT_SYMBOL(max_low_pfn); /* defined by bootmem.c, but not exported by generic code */ |
| 46 | #endif | 47 | #endif |
| 47 | 48 | ||
diff --git a/arch/ia64/kernel/kprobes.c b/arch/ia64/kernel/kprobes.c index 801eeaeaf3de..2895d6e6062f 100644 --- a/arch/ia64/kernel/kprobes.c +++ b/arch/ia64/kernel/kprobes.c | |||
| @@ -740,7 +740,7 @@ int __kprobes kprobe_exceptions_notify(struct notifier_block *self, | |||
| 740 | switch(val) { | 740 | switch(val) { |
| 741 | case DIE_BREAK: | 741 | case DIE_BREAK: |
| 742 | /* err is break number from ia64_bad_break() */ | 742 | /* err is break number from ia64_bad_break() */ |
| 743 | if (args->err == 0x80200 || args->err == 0x80300) | 743 | if (args->err == 0x80200 || args->err == 0x80300 || args->err == 0) |
| 744 | if (pre_kprobes_handler(args)) | 744 | if (pre_kprobes_handler(args)) |
| 745 | ret = NOTIFY_STOP; | 745 | ret = NOTIFY_STOP; |
| 746 | break; | 746 | break; |
diff --git a/arch/ia64/kernel/traps.c b/arch/ia64/kernel/traps.c index fba5fdd1f968..d3e0ecb56d62 100644 --- a/arch/ia64/kernel/traps.c +++ b/arch/ia64/kernel/traps.c | |||
| @@ -132,24 +132,6 @@ __kprobes ia64_bad_break (unsigned long break_num, struct pt_regs *regs) | |||
| 132 | siginfo_t siginfo; | 132 | siginfo_t siginfo; |
| 133 | int sig, code; | 133 | int sig, code; |
| 134 | 134 | ||
| 135 | /* break.b always sets cr.iim to 0, which causes problems for | ||
| 136 | * debuggers. Get the real break number from the original instruction, | ||
| 137 | * but only for kernel code. User space break.b is left alone, to | ||
| 138 | * preserve the existing behaviour. All break codings have the same | ||
| 139 | * format, so there is no need to check the slot type. | ||
| 140 | */ | ||
| 141 | if (break_num == 0 && !user_mode(regs)) { | ||
| 142 | struct ia64_psr *ipsr = ia64_psr(regs); | ||
| 143 | unsigned long *bundle = (unsigned long *)regs->cr_iip; | ||
| 144 | unsigned long slot; | ||
| 145 | switch (ipsr->ri) { | ||
| 146 | case 0: slot = (bundle[0] >> 5); break; | ||
| 147 | case 1: slot = (bundle[0] >> 46) | (bundle[1] << 18); break; | ||
| 148 | default: slot = (bundle[1] >> 23); break; | ||
| 149 | } | ||
| 150 | break_num = ((slot >> 36 & 1) << 20) | (slot >> 6 & 0xfffff); | ||
| 151 | } | ||
| 152 | |||
| 153 | /* SIGILL, SIGFPE, SIGSEGV, and SIGBUS want these field initialized: */ | 135 | /* SIGILL, SIGFPE, SIGSEGV, and SIGBUS want these field initialized: */ |
| 154 | siginfo.si_addr = (void __user *) (regs->cr_iip + ia64_psr(regs)->ri); | 136 | siginfo.si_addr = (void __user *) (regs->cr_iip + ia64_psr(regs)->ri); |
| 155 | siginfo.si_imm = break_num; | 137 | siginfo.si_imm = break_num; |
diff --git a/include/asm-ia64/page.h b/include/asm-ia64/page.h index 9dd9da105278..5e6362a786b7 100644 --- a/include/asm-ia64/page.h +++ b/include/asm-ia64/page.h | |||
| @@ -110,8 +110,9 @@ extern int ia64_pfn_valid (unsigned long pfn); | |||
| 110 | # define pfn_to_page(pfn) (mem_map + (pfn)) | 110 | # define pfn_to_page(pfn) (mem_map + (pfn)) |
| 111 | #elif defined(CONFIG_DISCONTIGMEM) | 111 | #elif defined(CONFIG_DISCONTIGMEM) |
| 112 | extern struct page *vmem_map; | 112 | extern struct page *vmem_map; |
| 113 | extern unsigned long min_low_pfn; | ||
| 113 | extern unsigned long max_low_pfn; | 114 | extern unsigned long max_low_pfn; |
| 114 | # define pfn_valid(pfn) (((pfn) < max_low_pfn) && ia64_pfn_valid(pfn)) | 115 | # define pfn_valid(pfn) (((pfn) >= min_low_pfn) && ((pfn) < max_low_pfn) && ia64_pfn_valid(pfn)) |
| 115 | # define page_to_pfn(page) ((unsigned long) (page - vmem_map)) | 116 | # define page_to_pfn(page) ((unsigned long) (page - vmem_map)) |
| 116 | # define pfn_to_page(pfn) (vmem_map + (pfn)) | 117 | # define pfn_to_page(pfn) (vmem_map + (pfn)) |
| 117 | #endif | 118 | #endif |
