Commit 547598d3 authored by Linus Torvalds's avatar Linus Torvalds

Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6

* git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6:
  [SPARC64]: Adjust kernel PC validation test in fault handler.
  [SPARC64]: Loosen checks in exception table handling.
  [SPARC64]: Fix section mismatch from kernel_map_range
  [SPARC64]: Fix section mismatchs from dr_cpu_data
  [SPARC]: Fix build in arch/sparc/kernel/led.c
parents 5ad58728 be71716e
...@@ -3,6 +3,9 @@ ...@@ -3,6 +3,9 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/proc_fs.h> #include <linux/proc_fs.h>
#include <linux/string.h> #include <linux/string.h>
#include <linux/jiffies.h>
#include <linux/timer.h>
#include <linux/uaccess.h>
#include <asm/auxio.h> #include <asm/auxio.h>
......
...@@ -525,10 +525,10 @@ static void dr_cpu_mark(struct ds_data *resp, int cpu, int ncpus, ...@@ -525,10 +525,10 @@ static void dr_cpu_mark(struct ds_data *resp, int cpu, int ncpus,
} }
} }
static int dr_cpu_configure(struct ds_info *dp, static int __cpuinit dr_cpu_configure(struct ds_info *dp,
struct ds_cap_state *cp, struct ds_cap_state *cp,
u64 req_num, u64 req_num,
cpumask_t *mask) cpumask_t *mask)
{ {
struct ds_data *resp; struct ds_data *resp;
int resp_len, ncpus, cpu; int resp_len, ncpus, cpu;
...@@ -623,9 +623,9 @@ static int dr_cpu_unconfigure(struct ds_info *dp, ...@@ -623,9 +623,9 @@ static int dr_cpu_unconfigure(struct ds_info *dp,
return 0; return 0;
} }
static void dr_cpu_data(struct ds_info *dp, static void __cpuinit dr_cpu_data(struct ds_info *dp,
struct ds_cap_state *cp, struct ds_cap_state *cp,
void *buf, int len) void *buf, int len)
{ {
struct ds_data *data = buf; struct ds_data *data = buf;
struct dr_cpu_tag *tag = (struct dr_cpu_tag *) (data + 1); struct dr_cpu_tag *tag = (struct dr_cpu_tag *) (data + 1);
......
...@@ -758,7 +758,7 @@ static void __devinit get_mondo_data(struct mdesc_handle *hp, u64 mp, ...@@ -758,7 +758,7 @@ static void __devinit get_mondo_data(struct mdesc_handle *hp, u64 mp,
get_one_mondo_bits(val, &tb->nonresum_qmask, 2); get_one_mondo_bits(val, &tb->nonresum_qmask, 2);
} }
void __devinit mdesc_fill_in_cpu_data(cpumask_t mask) void __cpuinit mdesc_fill_in_cpu_data(cpumask_t mask)
{ {
struct mdesc_handle *hp = mdesc_grab(); struct mdesc_handle *hp = mdesc_grab();
u64 mp; u64 mp;
......
...@@ -244,16 +244,8 @@ static void do_kernel_fault(struct pt_regs *regs, int si_code, int fault_code, ...@@ -244,16 +244,8 @@ static void do_kernel_fault(struct pt_regs *regs, int si_code, int fault_code,
if (regs->tstate & TSTATE_PRIV) { if (regs->tstate & TSTATE_PRIV) {
const struct exception_table_entry *entry; const struct exception_table_entry *entry;
if (asi == ASI_P && (insn & 0xc0800000) == 0xc0800000) { entry = search_exception_tables(regs->tpc);
if (insn & 0x2000) if (entry) {
asi = (regs->tstate >> 24);
else
asi = (insn >> 5);
}
/* Look in asi.h: All _S asis have LS bit set */
if ((asi & 0x1) &&
(entry = search_exception_tables(regs->tpc))) {
regs->tpc = entry->fixup; regs->tpc = entry->fixup;
regs->tnpc = regs->tpc + 4; regs->tnpc = regs->tpc + 4;
return; return;
...@@ -294,7 +286,7 @@ asmlinkage void __kprobes do_sparc64_fault(struct pt_regs *regs) ...@@ -294,7 +286,7 @@ asmlinkage void __kprobes do_sparc64_fault(struct pt_regs *regs)
unsigned long tpc = regs->tpc; unsigned long tpc = regs->tpc;
/* Sanity check the PC. */ /* Sanity check the PC. */
if ((tpc >= KERNBASE && tpc < (unsigned long) _etext) || if ((tpc >= KERNBASE && tpc < (unsigned long) __init_end) ||
(tpc >= MODULES_VADDR && tpc < MODULES_END)) { (tpc >= MODULES_VADDR && tpc < MODULES_END)) {
/* Valid, no problems... */ /* Valid, no problems... */
} else { } else {
......
...@@ -1010,7 +1010,8 @@ static struct linux_prom64_registers pall[MAX_BANKS] __initdata; ...@@ -1010,7 +1010,8 @@ static struct linux_prom64_registers pall[MAX_BANKS] __initdata;
static int pall_ents __initdata; static int pall_ents __initdata;
#ifdef CONFIG_DEBUG_PAGEALLOC #ifdef CONFIG_DEBUG_PAGEALLOC
static unsigned long kernel_map_range(unsigned long pstart, unsigned long pend, pgprot_t prot) static unsigned long __ref kernel_map_range(unsigned long pstart,
unsigned long pend, pgprot_t prot)
{ {
unsigned long vstart = PAGE_OFFSET + pstart; unsigned long vstart = PAGE_OFFSET + pstart;
unsigned long vend = PAGE_OFFSET + pend; unsigned long vend = PAGE_OFFSET + pend;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment