diff options
Diffstat (limited to 'arch/mips/kernel')
27 files changed, 125 insertions, 183 deletions
diff --git a/arch/mips/kernel/cpu-probe.c b/arch/mips/kernel/cpu-probe.c index bb133d10b14..ebc0cd20b35 100644 --- a/arch/mips/kernel/cpu-probe.c +++ b/arch/mips/kernel/cpu-probe.c | |||
@@ -71,7 +71,6 @@ void r4k_wait_irqoff(void) | |||
71 | local_irq_enable(); | 71 | local_irq_enable(); |
72 | __asm__(" .globl __pastwait \n" | 72 | __asm__(" .globl __pastwait \n" |
73 | "__pastwait: \n"); | 73 | "__pastwait: \n"); |
74 | return; | ||
75 | } | 74 | } |
76 | 75 | ||
77 | /* | 76 | /* |
diff --git a/arch/mips/kernel/ftrace.c b/arch/mips/kernel/ftrace.c index feb8021a305..6a2d758dd8e 100644 --- a/arch/mips/kernel/ftrace.c +++ b/arch/mips/kernel/ftrace.c | |||
@@ -19,6 +19,26 @@ | |||
19 | 19 | ||
20 | #include <asm-generic/sections.h> | 20 | #include <asm-generic/sections.h> |
21 | 21 | ||
22 | #if defined(KBUILD_MCOUNT_RA_ADDRESS) && defined(CONFIG_32BIT) | ||
23 | #define MCOUNT_OFFSET_INSNS 5 | ||
24 | #else | ||
25 | #define MCOUNT_OFFSET_INSNS 4 | ||
26 | #endif | ||
27 | |||
28 | /* | ||
29 | * Check if the address is in kernel space | ||
30 | * | ||
31 | * Clone core_kernel_text() from kernel/extable.c, but doesn't call | ||
32 | * init_kernel_text() for Ftrace doesn't trace functions in init sections. | ||
33 | */ | ||
34 | static inline int in_kernel_space(unsigned long ip) | ||
35 | { | ||
36 | if (ip >= (unsigned long)_stext && | ||
37 | ip <= (unsigned long)_etext) | ||
38 | return 1; | ||
39 | return 0; | ||
40 | } | ||
41 | |||
22 | #ifdef CONFIG_DYNAMIC_FTRACE | 42 | #ifdef CONFIG_DYNAMIC_FTRACE |
23 | 43 | ||
24 | #define JAL 0x0c000000 /* jump & link: ip --> ra, jump to target */ | 44 | #define JAL 0x0c000000 /* jump & link: ip --> ra, jump to target */ |
@@ -54,20 +74,6 @@ static inline void ftrace_dyn_arch_init_insns(void) | |||
54 | #endif | 74 | #endif |
55 | } | 75 | } |
56 | 76 | ||
57 | /* | ||
58 | * Check if the address is in kernel space | ||
59 | * | ||
60 | * Clone core_kernel_text() from kernel/extable.c, but doesn't call | ||
61 | * init_kernel_text() for Ftrace doesn't trace functions in init sections. | ||
62 | */ | ||
63 | static inline int in_kernel_space(unsigned long ip) | ||
64 | { | ||
65 | if (ip >= (unsigned long)_stext && | ||
66 | ip <= (unsigned long)_etext) | ||
67 | return 1; | ||
68 | return 0; | ||
69 | } | ||
70 | |||
71 | static int ftrace_modify_code(unsigned long ip, unsigned int new_code) | 77 | static int ftrace_modify_code(unsigned long ip, unsigned int new_code) |
72 | { | 78 | { |
73 | int faulted; | 79 | int faulted; |
@@ -112,11 +118,6 @@ static int ftrace_modify_code(unsigned long ip, unsigned int new_code) | |||
112 | * 1: offset = 4 instructions | 118 | * 1: offset = 4 instructions |
113 | */ | 119 | */ |
114 | 120 | ||
115 | #if defined(KBUILD_MCOUNT_RA_ADDRESS) && defined(CONFIG_32BIT) | ||
116 | #define MCOUNT_OFFSET_INSNS 5 | ||
117 | #else | ||
118 | #define MCOUNT_OFFSET_INSNS 4 | ||
119 | #endif | ||
120 | #define INSN_B_1F (0x10000000 | MCOUNT_OFFSET_INSNS) | 121 | #define INSN_B_1F (0x10000000 | MCOUNT_OFFSET_INSNS) |
121 | 122 | ||
122 | int ftrace_make_nop(struct module *mod, | 123 | int ftrace_make_nop(struct module *mod, |
diff --git a/arch/mips/kernel/i8253.c b/arch/mips/kernel/i8253.c index 391221b6a6a..be4ee7d63e0 100644 --- a/arch/mips/kernel/i8253.c +++ b/arch/mips/kernel/i8253.c | |||
@@ -3,96 +3,16 @@ | |||
3 | * | 3 | * |
4 | */ | 4 | */ |
5 | #include <linux/clockchips.h> | 5 | #include <linux/clockchips.h> |
6 | #include <linux/init.h> | 6 | #include <linux/i8253.h> |
7 | #include <linux/interrupt.h> | ||
8 | #include <linux/jiffies.h> | ||
9 | #include <linux/module.h> | 7 | #include <linux/module.h> |
10 | #include <linux/smp.h> | 8 | #include <linux/smp.h> |
11 | #include <linux/spinlock.h> | ||
12 | #include <linux/irq.h> | 9 | #include <linux/irq.h> |
13 | 10 | ||
14 | #include <asm/delay.h> | ||
15 | #include <asm/i8253.h> | ||
16 | #include <asm/io.h> | ||
17 | #include <asm/time.h> | 11 | #include <asm/time.h> |
18 | 12 | ||
19 | DEFINE_RAW_SPINLOCK(i8253_lock); | ||
20 | EXPORT_SYMBOL(i8253_lock); | ||
21 | |||
22 | /* | ||
23 | * Initialize the PIT timer. | ||
24 | * | ||
25 | * This is also called after resume to bring the PIT into operation again. | ||
26 | */ | ||
27 | static void init_pit_timer(enum clock_event_mode mode, | ||
28 | struct clock_event_device *evt) | ||
29 | { | ||
30 | raw_spin_lock(&i8253_lock); | ||
31 | |||
32 | switch(mode) { | ||
33 | case CLOCK_EVT_MODE_PERIODIC: | ||
34 | /* binary, mode 2, LSB/MSB, ch 0 */ | ||
35 | outb_p(0x34, PIT_MODE); | ||
36 | outb_p(LATCH & 0xff , PIT_CH0); /* LSB */ | ||
37 | outb(LATCH >> 8 , PIT_CH0); /* MSB */ | ||
38 | break; | ||
39 | |||
40 | case CLOCK_EVT_MODE_SHUTDOWN: | ||
41 | case CLOCK_EVT_MODE_UNUSED: | ||
42 | if (evt->mode == CLOCK_EVT_MODE_PERIODIC || | ||
43 | evt->mode == CLOCK_EVT_MODE_ONESHOT) { | ||
44 | outb_p(0x30, PIT_MODE); | ||
45 | outb_p(0, PIT_CH0); | ||
46 | outb_p(0, PIT_CH0); | ||
47 | } | ||
48 | break; | ||
49 | |||
50 | case CLOCK_EVT_MODE_ONESHOT: | ||
51 | /* One shot setup */ | ||
52 | outb_p(0x38, PIT_MODE); | ||
53 | break; | ||
54 | |||
55 | case CLOCK_EVT_MODE_RESUME: | ||
56 | /* Nothing to do here */ | ||
57 | break; | ||
58 | } | ||
59 | raw_spin_unlock(&i8253_lock); | ||
60 | } | ||
61 | |||
62 | /* | ||
63 | * Program the next event in oneshot mode | ||
64 | * | ||
65 | * Delta is given in PIT ticks | ||
66 | */ | ||
67 | static int pit_next_event(unsigned long delta, struct clock_event_device *evt) | ||
68 | { | ||
69 | raw_spin_lock(&i8253_lock); | ||
70 | outb_p(delta & 0xff , PIT_CH0); /* LSB */ | ||
71 | outb(delta >> 8 , PIT_CH0); /* MSB */ | ||
72 | raw_spin_unlock(&i8253_lock); | ||
73 | |||
74 | return 0; | ||
75 | } | ||
76 | |||
77 | /* | ||
78 | * On UP the PIT can serve all of the possible timer functions. On SMP systems | ||
79 | * it can be solely used for the global tick. | ||
80 | * | ||
81 | * The profiling and update capabilites are switched off once the local apic is | ||
82 | * registered. This mechanism replaces the previous #ifdef LOCAL_APIC - | ||
83 | * !using_apic_timer decisions in do_timer_interrupt_hook() | ||
84 | */ | ||
85 | static struct clock_event_device pit_clockevent = { | ||
86 | .name = "pit", | ||
87 | .features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT, | ||
88 | .set_mode = init_pit_timer, | ||
89 | .set_next_event = pit_next_event, | ||
90 | .irq = 0, | ||
91 | }; | ||
92 | |||
93 | static irqreturn_t timer_interrupt(int irq, void *dev_id) | 13 | static irqreturn_t timer_interrupt(int irq, void *dev_id) |
94 | { | 14 | { |
95 | pit_clockevent.event_handler(&pit_clockevent); | 15 | i8253_clockevent.event_handler(&i8253_clockevent); |
96 | 16 | ||
97 | return IRQ_HANDLED; | 17 | return IRQ_HANDLED; |
98 | } | 18 | } |
@@ -103,25 +23,9 @@ static struct irqaction irq0 = { | |||
103 | .name = "timer" | 23 | .name = "timer" |
104 | }; | 24 | }; |
105 | 25 | ||
106 | /* | ||
107 | * Initialize the conversion factor and the min/max deltas of the clock event | ||
108 | * structure and register the clock event source with the framework. | ||
109 | */ | ||
110 | void __init setup_pit_timer(void) | 26 | void __init setup_pit_timer(void) |
111 | { | 27 | { |
112 | struct clock_event_device *cd = &pit_clockevent; | 28 | clockevent_i8253_init(true); |
113 | unsigned int cpu = smp_processor_id(); | ||
114 | |||
115 | /* | ||
116 | * Start pit with the boot cpu mask and make it global after the | ||
117 | * IO_APIC has been initialized. | ||
118 | */ | ||
119 | cd->cpumask = cpumask_of(cpu); | ||
120 | clockevent_set_clock(cd, CLOCK_TICK_RATE); | ||
121 | cd->max_delta_ns = clockevent_delta2ns(0x7FFF, cd); | ||
122 | cd->min_delta_ns = clockevent_delta2ns(0xF, cd); | ||
123 | clockevents_register_device(cd); | ||
124 | |||
125 | setup_irq(0, &irq0); | 29 | setup_irq(0, &irq0); |
126 | } | 30 | } |
127 | 31 | ||
diff --git a/arch/mips/kernel/i8259.c b/arch/mips/kernel/i8259.c index 5c74eb797f0..32b397b646e 100644 --- a/arch/mips/kernel/i8259.c +++ b/arch/mips/kernel/i8259.c | |||
@@ -229,7 +229,7 @@ static void i8259A_shutdown(void) | |||
229 | */ | 229 | */ |
230 | if (i8259A_auto_eoi >= 0) { | 230 | if (i8259A_auto_eoi >= 0) { |
231 | outb(0xff, PIC_MASTER_IMR); /* mask all of 8259A-1 */ | 231 | outb(0xff, PIC_MASTER_IMR); /* mask all of 8259A-1 */ |
232 | outb(0xff, PIC_SLAVE_IMR); /* mask all of 8259A-1 */ | 232 | outb(0xff, PIC_SLAVE_IMR); /* mask all of 8259A-2 */ |
233 | } | 233 | } |
234 | } | 234 | } |
235 | 235 | ||
@@ -295,6 +295,7 @@ static void init_8259A(int auto_eoi) | |||
295 | static struct irqaction irq2 = { | 295 | static struct irqaction irq2 = { |
296 | .handler = no_action, | 296 | .handler = no_action, |
297 | .name = "cascade", | 297 | .name = "cascade", |
298 | .flags = IRQF_NO_THREAD, | ||
298 | }; | 299 | }; |
299 | 300 | ||
300 | static struct resource pic1_io_resource = { | 301 | static struct resource pic1_io_resource = { |
diff --git a/arch/mips/kernel/irq.c b/arch/mips/kernel/irq.c index 9b734d74ae8..b53970d8099 100644 --- a/arch/mips/kernel/irq.c +++ b/arch/mips/kernel/irq.c | |||
@@ -23,7 +23,7 @@ | |||
23 | #include <linux/kgdb.h> | 23 | #include <linux/kgdb.h> |
24 | #include <linux/ftrace.h> | 24 | #include <linux/ftrace.h> |
25 | 25 | ||
26 | #include <asm/atomic.h> | 26 | #include <linux/atomic.h> |
27 | #include <asm/system.h> | 27 | #include <asm/system.h> |
28 | #include <asm/uaccess.h> | 28 | #include <asm/uaccess.h> |
29 | 29 | ||
diff --git a/arch/mips/kernel/irq_cpu.c b/arch/mips/kernel/irq_cpu.c index 6e71b284f6c..191eb52228c 100644 --- a/arch/mips/kernel/irq_cpu.c +++ b/arch/mips/kernel/irq_cpu.c | |||
@@ -103,14 +103,12 @@ void __init mips_cpu_irq_init(void) | |||
103 | clear_c0_status(ST0_IM); | 103 | clear_c0_status(ST0_IM); |
104 | clear_c0_cause(CAUSEF_IP); | 104 | clear_c0_cause(CAUSEF_IP); |
105 | 105 | ||
106 | /* | 106 | /* Software interrupts are used for MT/CMT IPI */ |
107 | * Only MT is using the software interrupts currently, so we just | 107 | for (i = irq_base; i < irq_base + 2; i++) |
108 | * leave them uninitialized for other processors. | 108 | irq_set_chip_and_handler(i, cpu_has_mipsmt ? |
109 | */ | 109 | &mips_mt_cpu_irq_controller : |
110 | if (cpu_has_mipsmt) | 110 | &mips_cpu_irq_controller, |
111 | for (i = irq_base; i < irq_base + 2; i++) | 111 | handle_percpu_irq); |
112 | irq_set_chip_and_handler(i, &mips_mt_cpu_irq_controller, | ||
113 | handle_percpu_irq); | ||
114 | 112 | ||
115 | for (i = irq_base + 2; i < irq_base + 8; i++) | 113 | for (i = irq_base + 2; i < irq_base + 8; i++) |
116 | irq_set_chip_and_handler(i, &mips_cpu_irq_controller, | 114 | irq_set_chip_and_handler(i, &mips_cpu_irq_controller, |
diff --git a/arch/mips/kernel/linux32.c b/arch/mips/kernel/linux32.c index 876a75cc376..922a554cd10 100644 --- a/arch/mips/kernel/linux32.c +++ b/arch/mips/kernel/linux32.c | |||
@@ -349,3 +349,10 @@ SYSCALL_DEFINE6(32_fanotify_mark, int, fanotify_fd, unsigned int, flags, | |||
349 | return sys_fanotify_mark(fanotify_fd, flags, merge_64(a3, a4), | 349 | return sys_fanotify_mark(fanotify_fd, flags, merge_64(a3, a4), |
350 | dfd, pathname); | 350 | dfd, pathname); |
351 | } | 351 | } |
352 | |||
353 | SYSCALL_DEFINE6(32_futex, u32 __user *, uaddr, int, op, u32, val, | ||
354 | struct compat_timespec __user *, utime, u32 __user *, uaddr2, | ||
355 | u32, val3) | ||
356 | { | ||
357 | return compat_sys_futex(uaddr, op, val, utime, uaddr2, val3); | ||
358 | } | ||
diff --git a/arch/mips/kernel/mips-mt.c b/arch/mips/kernel/mips-mt.c index b2259e7cd82..594ca69cb86 100644 --- a/arch/mips/kernel/mips-mt.c +++ b/arch/mips/kernel/mips-mt.c | |||
@@ -12,7 +12,7 @@ | |||
12 | 12 | ||
13 | #include <asm/cpu.h> | 13 | #include <asm/cpu.h> |
14 | #include <asm/processor.h> | 14 | #include <asm/processor.h> |
15 | #include <asm/atomic.h> | 15 | #include <linux/atomic.h> |
16 | #include <asm/system.h> | 16 | #include <asm/system.h> |
17 | #include <asm/hardirq.h> | 17 | #include <asm/hardirq.h> |
18 | #include <asm/mmu_context.h> | 18 | #include <asm/mmu_context.h> |
diff --git a/arch/mips/kernel/module.c b/arch/mips/kernel/module.c index dd940b70196..4b930ac4aff 100644 --- a/arch/mips/kernel/module.c +++ b/arch/mips/kernel/module.c | |||
@@ -45,30 +45,14 @@ static struct mips_hi16 *mips_hi16_list; | |||
45 | static LIST_HEAD(dbe_list); | 45 | static LIST_HEAD(dbe_list); |
46 | static DEFINE_SPINLOCK(dbe_lock); | 46 | static DEFINE_SPINLOCK(dbe_lock); |
47 | 47 | ||
48 | #ifdef MODULE_START | ||
48 | void *module_alloc(unsigned long size) | 49 | void *module_alloc(unsigned long size) |
49 | { | 50 | { |
50 | #ifdef MODULE_START | ||
51 | return __vmalloc_node_range(size, 1, MODULE_START, MODULE_END, | 51 | return __vmalloc_node_range(size, 1, MODULE_START, MODULE_END, |
52 | GFP_KERNEL, PAGE_KERNEL, -1, | 52 | GFP_KERNEL, PAGE_KERNEL, -1, |
53 | __builtin_return_address(0)); | 53 | __builtin_return_address(0)); |
54 | #else | ||
55 | if (size == 0) | ||
56 | return NULL; | ||
57 | return vmalloc(size); | ||
58 | #endif | ||
59 | } | ||
60 | |||
61 | /* Free memory returned from module_alloc */ | ||
62 | void module_free(struct module *mod, void *module_region) | ||
63 | { | ||
64 | vfree(module_region); | ||
65 | } | ||
66 | |||
67 | int module_frob_arch_sections(Elf_Ehdr *hdr, Elf_Shdr *sechdrs, | ||
68 | char *secstrings, struct module *mod) | ||
69 | { | ||
70 | return 0; | ||
71 | } | 54 | } |
55 | #endif | ||
72 | 56 | ||
73 | static int apply_r_mips_none(struct module *me, u32 *location, Elf_Addr v) | 57 | static int apply_r_mips_none(struct module *me, u32 *location, Elf_Addr v) |
74 | { | 58 | { |
diff --git a/arch/mips/kernel/perf_event.c b/arch/mips/kernel/perf_event.c index a8244854d3d..0aee944ac38 100644 --- a/arch/mips/kernel/perf_event.c +++ b/arch/mips/kernel/perf_event.c | |||
@@ -192,8 +192,6 @@ again: | |||
192 | 192 | ||
193 | local64_add(delta, &event->count); | 193 | local64_add(delta, &event->count); |
194 | local64_sub(delta, &hwc->period_left); | 194 | local64_sub(delta, &hwc->period_left); |
195 | |||
196 | return; | ||
197 | } | 195 | } |
198 | 196 | ||
199 | static void mipspmu_start(struct perf_event *event, int flags) | 197 | static void mipspmu_start(struct perf_event *event, int flags) |
@@ -527,7 +525,7 @@ handle_associated_event(struct cpu_hw_events *cpuc, | |||
527 | if (!mipspmu_event_set_period(event, hwc, idx)) | 525 | if (!mipspmu_event_set_period(event, hwc, idx)) |
528 | return; | 526 | return; |
529 | 527 | ||
530 | if (perf_event_overflow(event, 0, data, regs)) | 528 | if (perf_event_overflow(event, data, regs)) |
531 | mipspmu->disable_event(idx); | 529 | mipspmu->disable_event(idx); |
532 | } | 530 | } |
533 | 531 | ||
diff --git a/arch/mips/kernel/perf_event_mipsxx.c b/arch/mips/kernel/perf_event_mipsxx.c index 75266ff4cc3..e5ad09a9baf 100644 --- a/arch/mips/kernel/perf_event_mipsxx.c +++ b/arch/mips/kernel/perf_event_mipsxx.c | |||
@@ -377,6 +377,20 @@ static const struct mips_perf_event mipsxxcore_cache_map | |||
377 | [C(RESULT_MISS)] = { UNSUPPORTED_PERF_EVENT_ID }, | 377 | [C(RESULT_MISS)] = { UNSUPPORTED_PERF_EVENT_ID }, |
378 | }, | 378 | }, |
379 | }, | 379 | }, |
380 | [C(NODE)] = { | ||
381 | [C(OP_READ)] = { | ||
382 | [C(RESULT_ACCESS)] = { UNSUPPORTED_PERF_EVENT_ID }, | ||
383 | [C(RESULT_MISS)] = { UNSUPPORTED_PERF_EVENT_ID }, | ||
384 | }, | ||
385 | [C(OP_WRITE)] = { | ||
386 | [C(RESULT_ACCESS)] = { UNSUPPORTED_PERF_EVENT_ID }, | ||
387 | [C(RESULT_MISS)] = { UNSUPPORTED_PERF_EVENT_ID }, | ||
388 | }, | ||
389 | [C(OP_PREFETCH)] = { | ||
390 | [C(RESULT_ACCESS)] = { UNSUPPORTED_PERF_EVENT_ID }, | ||
391 | [C(RESULT_MISS)] = { UNSUPPORTED_PERF_EVENT_ID }, | ||
392 | }, | ||
393 | }, | ||
380 | }; | 394 | }; |
381 | 395 | ||
382 | /* 74K core has completely different cache event map. */ | 396 | /* 74K core has completely different cache event map. */ |
@@ -480,6 +494,20 @@ static const struct mips_perf_event mipsxx74Kcore_cache_map | |||
480 | [C(RESULT_MISS)] = { UNSUPPORTED_PERF_EVENT_ID }, | 494 | [C(RESULT_MISS)] = { UNSUPPORTED_PERF_EVENT_ID }, |
481 | }, | 495 | }, |
482 | }, | 496 | }, |
497 | [C(NODE)] = { | ||
498 | [C(OP_READ)] = { | ||
499 | [C(RESULT_ACCESS)] = { UNSUPPORTED_PERF_EVENT_ID }, | ||
500 | [C(RESULT_MISS)] = { UNSUPPORTED_PERF_EVENT_ID }, | ||
501 | }, | ||
502 | [C(OP_WRITE)] = { | ||
503 | [C(RESULT_ACCESS)] = { UNSUPPORTED_PERF_EVENT_ID }, | ||
504 | [C(RESULT_MISS)] = { UNSUPPORTED_PERF_EVENT_ID }, | ||
505 | }, | ||
506 | [C(OP_PREFETCH)] = { | ||
507 | [C(RESULT_ACCESS)] = { UNSUPPORTED_PERF_EVENT_ID }, | ||
508 | [C(RESULT_MISS)] = { UNSUPPORTED_PERF_EVENT_ID }, | ||
509 | }, | ||
510 | }, | ||
483 | }; | 511 | }; |
484 | 512 | ||
485 | #ifdef CONFIG_MIPS_MT_SMP | 513 | #ifdef CONFIG_MIPS_MT_SMP |
diff --git a/arch/mips/kernel/process.c b/arch/mips/kernel/process.c index d2112d3cf11..b30cb2573aa 100644 --- a/arch/mips/kernel/process.c +++ b/arch/mips/kernel/process.c | |||
@@ -103,7 +103,6 @@ void start_thread(struct pt_regs * regs, unsigned long pc, unsigned long sp) | |||
103 | __init_dsp(); | 103 | __init_dsp(); |
104 | regs->cp0_epc = pc; | 104 | regs->cp0_epc = pc; |
105 | regs->regs[29] = sp; | 105 | regs->regs[29] = sp; |
106 | current_thread_info()->addr_limit = USER_DS; | ||
107 | } | 106 | } |
108 | 107 | ||
109 | void exit_thread(void) | 108 | void exit_thread(void) |
@@ -373,18 +372,18 @@ unsigned long thread_saved_pc(struct task_struct *tsk) | |||
373 | 372 | ||
374 | 373 | ||
375 | #ifdef CONFIG_KALLSYMS | 374 | #ifdef CONFIG_KALLSYMS |
376 | /* used by show_backtrace() */ | 375 | /* generic stack unwinding function */ |
377 | unsigned long unwind_stack(struct task_struct *task, unsigned long *sp, | 376 | unsigned long notrace unwind_stack_by_address(unsigned long stack_page, |
378 | unsigned long pc, unsigned long *ra) | 377 | unsigned long *sp, |
378 | unsigned long pc, | ||
379 | unsigned long *ra) | ||
379 | { | 380 | { |
380 | unsigned long stack_page; | ||
381 | struct mips_frame_info info; | 381 | struct mips_frame_info info; |
382 | unsigned long size, ofs; | 382 | unsigned long size, ofs; |
383 | int leaf; | 383 | int leaf; |
384 | extern void ret_from_irq(void); | 384 | extern void ret_from_irq(void); |
385 | extern void ret_from_exception(void); | 385 | extern void ret_from_exception(void); |
386 | 386 | ||
387 | stack_page = (unsigned long)task_stack_page(task); | ||
388 | if (!stack_page) | 387 | if (!stack_page) |
389 | return 0; | 388 | return 0; |
390 | 389 | ||
@@ -443,6 +442,15 @@ unsigned long unwind_stack(struct task_struct *task, unsigned long *sp, | |||
443 | *ra = 0; | 442 | *ra = 0; |
444 | return __kernel_text_address(pc) ? pc : 0; | 443 | return __kernel_text_address(pc) ? pc : 0; |
445 | } | 444 | } |
445 | EXPORT_SYMBOL(unwind_stack_by_address); | ||
446 | |||
447 | /* used by show_backtrace() */ | ||
448 | unsigned long unwind_stack(struct task_struct *task, unsigned long *sp, | ||
449 | unsigned long pc, unsigned long *ra) | ||
450 | { | ||
451 | unsigned long stack_page = (unsigned long)task_stack_page(task); | ||
452 | return unwind_stack_by_address(stack_page, sp, pc, ra); | ||
453 | } | ||
446 | #endif | 454 | #endif |
447 | 455 | ||
448 | /* | 456 | /* |
diff --git a/arch/mips/kernel/rtlx.c b/arch/mips/kernel/rtlx.c index 557ef72472e..7a80b7cda7c 100644 --- a/arch/mips/kernel/rtlx.c +++ b/arch/mips/kernel/rtlx.c | |||
@@ -36,7 +36,7 @@ | |||
36 | #include <asm/mipsmtregs.h> | 36 | #include <asm/mipsmtregs.h> |
37 | #include <asm/mips_mt.h> | 37 | #include <asm/mips_mt.h> |
38 | #include <asm/cacheflush.h> | 38 | #include <asm/cacheflush.h> |
39 | #include <asm/atomic.h> | 39 | #include <linux/atomic.h> |
40 | #include <asm/cpu.h> | 40 | #include <asm/cpu.h> |
41 | #include <asm/processor.h> | 41 | #include <asm/processor.h> |
42 | #include <asm/system.h> | 42 | #include <asm/system.h> |
diff --git a/arch/mips/kernel/scall32-o32.S b/arch/mips/kernel/scall32-o32.S index 99e656e425f..865bc7a6f5a 100644 --- a/arch/mips/kernel/scall32-o32.S +++ b/arch/mips/kernel/scall32-o32.S | |||
@@ -424,7 +424,7 @@ einval: li v0, -ENOSYS | |||
424 | sys sys_getresuid 3 | 424 | sys sys_getresuid 3 |
425 | sys sys_ni_syscall 0 /* was sys_query_module */ | 425 | sys sys_ni_syscall 0 /* was sys_query_module */ |
426 | sys sys_poll 3 | 426 | sys sys_poll 3 |
427 | sys sys_nfsservctl 3 | 427 | sys sys_ni_syscall 0 /* was nfsservctl */ |
428 | sys sys_setresgid 3 /* 4190 */ | 428 | sys sys_setresgid 3 /* 4190 */ |
429 | sys sys_getresgid 3 | 429 | sys sys_getresgid 3 |
430 | sys sys_prctl 5 | 430 | sys sys_prctl 5 |
@@ -589,6 +589,7 @@ einval: li v0, -ENOSYS | |||
589 | sys sys_open_by_handle_at 3 /* 4340 */ | 589 | sys sys_open_by_handle_at 3 /* 4340 */ |
590 | sys sys_clock_adjtime 2 | 590 | sys sys_clock_adjtime 2 |
591 | sys sys_syncfs 1 | 591 | sys sys_syncfs 1 |
592 | sys sys_sendmmsg 4 | ||
592 | sys sys_setns 2 | 593 | sys sys_setns 2 |
593 | .endm | 594 | .endm |
594 | 595 | ||
diff --git a/arch/mips/kernel/scall64-64.S b/arch/mips/kernel/scall64-64.S index fb0575f47f3..fb7334bea73 100644 --- a/arch/mips/kernel/scall64-64.S +++ b/arch/mips/kernel/scall64-64.S | |||
@@ -299,7 +299,7 @@ sys_call_table: | |||
299 | PTR sys_ni_syscall /* 5170, was get_kernel_syms */ | 299 | PTR sys_ni_syscall /* 5170, was get_kernel_syms */ |
300 | PTR sys_ni_syscall /* was query_module */ | 300 | PTR sys_ni_syscall /* was query_module */ |
301 | PTR sys_quotactl | 301 | PTR sys_quotactl |
302 | PTR sys_nfsservctl | 302 | PTR sys_ni_syscall /* was nfsservctl */ |
303 | PTR sys_ni_syscall /* res. for getpmsg */ | 303 | PTR sys_ni_syscall /* res. for getpmsg */ |
304 | PTR sys_ni_syscall /* 5175 for putpmsg */ | 304 | PTR sys_ni_syscall /* 5175 for putpmsg */ |
305 | PTR sys_ni_syscall /* res. for afs_syscall */ | 305 | PTR sys_ni_syscall /* res. for afs_syscall */ |
@@ -428,5 +428,6 @@ sys_call_table: | |||
428 | PTR sys_open_by_handle_at | 428 | PTR sys_open_by_handle_at |
429 | PTR sys_clock_adjtime /* 5300 */ | 429 | PTR sys_clock_adjtime /* 5300 */ |
430 | PTR sys_syncfs | 430 | PTR sys_syncfs |
431 | PTR sys_sendmmsg | ||
431 | PTR sys_setns | 432 | PTR sys_setns |
432 | .size sys_call_table,.-sys_call_table | 433 | .size sys_call_table,.-sys_call_table |
diff --git a/arch/mips/kernel/scall64-n32.S b/arch/mips/kernel/scall64-n32.S index 4de0c5534e7..6de1f598346 100644 --- a/arch/mips/kernel/scall64-n32.S +++ b/arch/mips/kernel/scall64-n32.S | |||
@@ -294,7 +294,7 @@ EXPORT(sysn32_call_table) | |||
294 | PTR sys_ni_syscall /* 6170, was get_kernel_syms */ | 294 | PTR sys_ni_syscall /* 6170, was get_kernel_syms */ |
295 | PTR sys_ni_syscall /* was query_module */ | 295 | PTR sys_ni_syscall /* was query_module */ |
296 | PTR sys_quotactl | 296 | PTR sys_quotactl |
297 | PTR compat_sys_nfsservctl | 297 | PTR sys_ni_syscall /* was nfsservctl */ |
298 | PTR sys_ni_syscall /* res. for getpmsg */ | 298 | PTR sys_ni_syscall /* res. for getpmsg */ |
299 | PTR sys_ni_syscall /* 6175 for putpmsg */ | 299 | PTR sys_ni_syscall /* 6175 for putpmsg */ |
300 | PTR sys_ni_syscall /* res. for afs_syscall */ | 300 | PTR sys_ni_syscall /* res. for afs_syscall */ |
@@ -315,7 +315,7 @@ EXPORT(sysn32_call_table) | |||
315 | PTR sys_fremovexattr | 315 | PTR sys_fremovexattr |
316 | PTR sys_tkill | 316 | PTR sys_tkill |
317 | PTR sys_ni_syscall | 317 | PTR sys_ni_syscall |
318 | PTR compat_sys_futex | 318 | PTR sys_32_futex |
319 | PTR compat_sys_sched_setaffinity /* 6195 */ | 319 | PTR compat_sys_sched_setaffinity /* 6195 */ |
320 | PTR compat_sys_sched_getaffinity | 320 | PTR compat_sys_sched_getaffinity |
321 | PTR sys_cacheflush | 321 | PTR sys_cacheflush |
@@ -428,5 +428,6 @@ EXPORT(sysn32_call_table) | |||
428 | PTR sys_open_by_handle_at | 428 | PTR sys_open_by_handle_at |
429 | PTR compat_sys_clock_adjtime /* 6305 */ | 429 | PTR compat_sys_clock_adjtime /* 6305 */ |
430 | PTR sys_syncfs | 430 | PTR sys_syncfs |
431 | PTR compat_sys_sendmmsg | ||
431 | PTR sys_setns | 432 | PTR sys_setns |
432 | .size sysn32_call_table,.-sysn32_call_table | 433 | .size sysn32_call_table,.-sysn32_call_table |
diff --git a/arch/mips/kernel/scall64-o32.S b/arch/mips/kernel/scall64-o32.S index 4a387de08bf..1d813169e45 100644 --- a/arch/mips/kernel/scall64-o32.S +++ b/arch/mips/kernel/scall64-o32.S | |||
@@ -392,7 +392,7 @@ sys_call_table: | |||
392 | PTR sys_getresuid | 392 | PTR sys_getresuid |
393 | PTR sys_ni_syscall /* was query_module */ | 393 | PTR sys_ni_syscall /* was query_module */ |
394 | PTR sys_poll | 394 | PTR sys_poll |
395 | PTR compat_sys_nfsservctl | 395 | PTR sys_ni_syscall /* was nfsservctl */ |
396 | PTR sys_setresgid /* 4190 */ | 396 | PTR sys_setresgid /* 4190 */ |
397 | PTR sys_getresgid | 397 | PTR sys_getresgid |
398 | PTR sys_prctl | 398 | PTR sys_prctl |
@@ -441,7 +441,7 @@ sys_call_table: | |||
441 | PTR sys_fremovexattr /* 4235 */ | 441 | PTR sys_fremovexattr /* 4235 */ |
442 | PTR sys_tkill | 442 | PTR sys_tkill |
443 | PTR sys_sendfile64 | 443 | PTR sys_sendfile64 |
444 | PTR compat_sys_futex | 444 | PTR sys_32_futex |
445 | PTR compat_sys_sched_setaffinity | 445 | PTR compat_sys_sched_setaffinity |
446 | PTR compat_sys_sched_getaffinity /* 4240 */ | 446 | PTR compat_sys_sched_getaffinity /* 4240 */ |
447 | PTR compat_sys_io_setup | 447 | PTR compat_sys_io_setup |
@@ -546,5 +546,6 @@ sys_call_table: | |||
546 | PTR compat_sys_open_by_handle_at /* 4340 */ | 546 | PTR compat_sys_open_by_handle_at /* 4340 */ |
547 | PTR compat_sys_clock_adjtime | 547 | PTR compat_sys_clock_adjtime |
548 | PTR sys_syncfs | 548 | PTR sys_syncfs |
549 | PTR compat_sys_sendmmsg | ||
549 | PTR sys_setns | 550 | PTR sys_setns |
550 | .size sys_call_table,.-sys_call_table | 551 | .size sys_call_table,.-sys_call_table |
diff --git a/arch/mips/kernel/signal.c b/arch/mips/kernel/signal.c index dbbe0ce48d8..f8524003676 100644 --- a/arch/mips/kernel/signal.c +++ b/arch/mips/kernel/signal.c | |||
@@ -8,6 +8,7 @@ | |||
8 | * Copyright (C) 1999, 2000 Silicon Graphics, Inc. | 8 | * Copyright (C) 1999, 2000 Silicon Graphics, Inc. |
9 | */ | 9 | */ |
10 | #include <linux/cache.h> | 10 | #include <linux/cache.h> |
11 | #include <linux/irqflags.h> | ||
11 | #include <linux/sched.h> | 12 | #include <linux/sched.h> |
12 | #include <linux/mm.h> | 13 | #include <linux/mm.h> |
13 | #include <linux/personality.h> | 14 | #include <linux/personality.h> |
@@ -658,6 +659,8 @@ static void do_signal(struct pt_regs *regs) | |||
658 | asmlinkage void do_notify_resume(struct pt_regs *regs, void *unused, | 659 | asmlinkage void do_notify_resume(struct pt_regs *regs, void *unused, |
659 | __u32 thread_info_flags) | 660 | __u32 thread_info_flags) |
660 | { | 661 | { |
662 | local_irq_enable(); | ||
663 | |||
661 | /* deal with pending signal delivery */ | 664 | /* deal with pending signal delivery */ |
662 | if (thread_info_flags & (_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK)) | 665 | if (thread_info_flags & (_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK)) |
663 | do_signal(regs); | 666 | do_signal(regs); |
diff --git a/arch/mips/kernel/smp-cmp.c b/arch/mips/kernel/smp-cmp.c index cc81771b882..fe309516065 100644 --- a/arch/mips/kernel/smp-cmp.c +++ b/arch/mips/kernel/smp-cmp.c | |||
@@ -25,7 +25,7 @@ | |||
25 | #include <linux/interrupt.h> | 25 | #include <linux/interrupt.h> |
26 | #include <linux/compiler.h> | 26 | #include <linux/compiler.h> |
27 | 27 | ||
28 | #include <asm/atomic.h> | 28 | #include <linux/atomic.h> |
29 | #include <asm/cacheflush.h> | 29 | #include <asm/cacheflush.h> |
30 | #include <asm/cpu.h> | 30 | #include <asm/cpu.h> |
31 | #include <asm/processor.h> | 31 | #include <asm/processor.h> |
diff --git a/arch/mips/kernel/smp-mt.c b/arch/mips/kernel/smp-mt.c index 1ec56e635d0..ce9e286f0a7 100644 --- a/arch/mips/kernel/smp-mt.c +++ b/arch/mips/kernel/smp-mt.c | |||
@@ -24,7 +24,7 @@ | |||
24 | #include <linux/compiler.h> | 24 | #include <linux/compiler.h> |
25 | #include <linux/smp.h> | 25 | #include <linux/smp.h> |
26 | 26 | ||
27 | #include <asm/atomic.h> | 27 | #include <linux/atomic.h> |
28 | #include <asm/cacheflush.h> | 28 | #include <asm/cacheflush.h> |
29 | #include <asm/cpu.h> | 29 | #include <asm/cpu.h> |
30 | #include <asm/processor.h> | 30 | #include <asm/processor.h> |
diff --git a/arch/mips/kernel/smp.c b/arch/mips/kernel/smp.c index 32a25610108..32c1e954cd3 100644 --- a/arch/mips/kernel/smp.c +++ b/arch/mips/kernel/smp.c | |||
@@ -34,7 +34,7 @@ | |||
34 | #include <linux/err.h> | 34 | #include <linux/err.h> |
35 | #include <linux/ftrace.h> | 35 | #include <linux/ftrace.h> |
36 | 36 | ||
37 | #include <asm/atomic.h> | 37 | #include <linux/atomic.h> |
38 | #include <asm/cpu.h> | 38 | #include <asm/cpu.h> |
39 | #include <asm/processor.h> | 39 | #include <asm/processor.h> |
40 | #include <asm/r4k-timer.h> | 40 | #include <asm/r4k-timer.h> |
diff --git a/arch/mips/kernel/smtc-proc.c b/arch/mips/kernel/smtc-proc.c index fe256559c99..928a5a61e1a 100644 --- a/arch/mips/kernel/smtc-proc.c +++ b/arch/mips/kernel/smtc-proc.c | |||
@@ -10,7 +10,7 @@ | |||
10 | 10 | ||
11 | #include <asm/cpu.h> | 11 | #include <asm/cpu.h> |
12 | #include <asm/processor.h> | 12 | #include <asm/processor.h> |
13 | #include <asm/atomic.h> | 13 | #include <linux/atomic.h> |
14 | #include <asm/system.h> | 14 | #include <asm/system.h> |
15 | #include <asm/hardirq.h> | 15 | #include <asm/hardirq.h> |
16 | #include <asm/mmu_context.h> | 16 | #include <asm/mmu_context.h> |
diff --git a/arch/mips/kernel/smtc.c b/arch/mips/kernel/smtc.c index cedac463374..f0895e70e28 100644 --- a/arch/mips/kernel/smtc.c +++ b/arch/mips/kernel/smtc.c | |||
@@ -30,7 +30,7 @@ | |||
30 | 30 | ||
31 | #include <asm/cpu.h> | 31 | #include <asm/cpu.h> |
32 | #include <asm/processor.h> | 32 | #include <asm/processor.h> |
33 | #include <asm/atomic.h> | 33 | #include <linux/atomic.h> |
34 | #include <asm/system.h> | 34 | #include <asm/system.h> |
35 | #include <asm/hardirq.h> | 35 | #include <asm/hardirq.h> |
36 | #include <asm/hazards.h> | 36 | #include <asm/hazards.h> |
diff --git a/arch/mips/kernel/sync-r4k.c b/arch/mips/kernel/sync-r4k.c index 05dd170a83f..99f913c8d7a 100644 --- a/arch/mips/kernel/sync-r4k.c +++ b/arch/mips/kernel/sync-r4k.c | |||
@@ -16,7 +16,7 @@ | |||
16 | #include <linux/cpumask.h> | 16 | #include <linux/cpumask.h> |
17 | 17 | ||
18 | #include <asm/r4k-timer.h> | 18 | #include <asm/r4k-timer.h> |
19 | #include <asm/atomic.h> | 19 | #include <linux/atomic.h> |
20 | #include <asm/barrier.h> | 20 | #include <asm/barrier.h> |
21 | #include <asm/mipsregs.h> | 21 | #include <asm/mipsregs.h> |
22 | 22 | ||
diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c index e9b3af27d84..cbea618af0b 100644 --- a/arch/mips/kernel/traps.c +++ b/arch/mips/kernel/traps.c | |||
@@ -14,6 +14,7 @@ | |||
14 | #include <linux/bug.h> | 14 | #include <linux/bug.h> |
15 | #include <linux/compiler.h> | 15 | #include <linux/compiler.h> |
16 | #include <linux/init.h> | 16 | #include <linux/init.h> |
17 | #include <linux/kernel.h> | ||
17 | #include <linux/mm.h> | 18 | #include <linux/mm.h> |
18 | #include <linux/module.h> | 19 | #include <linux/module.h> |
19 | #include <linux/sched.h> | 20 | #include <linux/sched.h> |
@@ -364,21 +365,26 @@ static int regs_to_trapnr(struct pt_regs *regs) | |||
364 | return (regs->cp0_cause >> 2) & 0x1f; | 365 | return (regs->cp0_cause >> 2) & 0x1f; |
365 | } | 366 | } |
366 | 367 | ||
367 | static DEFINE_SPINLOCK(die_lock); | 368 | static DEFINE_RAW_SPINLOCK(die_lock); |
368 | 369 | ||
369 | void __noreturn die(const char *str, struct pt_regs *regs) | 370 | void __noreturn die(const char *str, struct pt_regs *regs) |
370 | { | 371 | { |
371 | static int die_counter; | 372 | static int die_counter; |
372 | int sig = SIGSEGV; | 373 | int sig = SIGSEGV; |
373 | #ifdef CONFIG_MIPS_MT_SMTC | 374 | #ifdef CONFIG_MIPS_MT_SMTC |
374 | unsigned long dvpret = dvpe(); | 375 | unsigned long dvpret; |
375 | #endif /* CONFIG_MIPS_MT_SMTC */ | 376 | #endif /* CONFIG_MIPS_MT_SMTC */ |
376 | 377 | ||
378 | oops_enter(); | ||
379 | |||
377 | if (notify_die(DIE_OOPS, str, regs, 0, regs_to_trapnr(regs), SIGSEGV) == NOTIFY_STOP) | 380 | if (notify_die(DIE_OOPS, str, regs, 0, regs_to_trapnr(regs), SIGSEGV) == NOTIFY_STOP) |
378 | sig = 0; | 381 | sig = 0; |
379 | 382 | ||
380 | console_verbose(); | 383 | console_verbose(); |
381 | spin_lock_irq(&die_lock); | 384 | raw_spin_lock_irq(&die_lock); |
385 | #ifdef CONFIG_MIPS_MT_SMTC | ||
386 | dvpret = dvpe(); | ||
387 | #endif /* CONFIG_MIPS_MT_SMTC */ | ||
382 | bust_spinlocks(1); | 388 | bust_spinlocks(1); |
383 | #ifdef CONFIG_MIPS_MT_SMTC | 389 | #ifdef CONFIG_MIPS_MT_SMTC |
384 | mips_mt_regdump(dvpret); | 390 | mips_mt_regdump(dvpret); |
@@ -387,7 +393,9 @@ void __noreturn die(const char *str, struct pt_regs *regs) | |||
387 | printk("%s[#%d]:\n", str, ++die_counter); | 393 | printk("%s[#%d]:\n", str, ++die_counter); |
388 | show_registers(regs); | 394 | show_registers(regs); |
389 | add_taint(TAINT_DIE); | 395 | add_taint(TAINT_DIE); |
390 | spin_unlock_irq(&die_lock); | 396 | raw_spin_unlock_irq(&die_lock); |
397 | |||
398 | oops_exit(); | ||
391 | 399 | ||
392 | if (in_interrupt()) | 400 | if (in_interrupt()) |
393 | panic("Fatal exception in interrupt"); | 401 | panic("Fatal exception in interrupt"); |
@@ -578,12 +586,12 @@ static int simulate_llsc(struct pt_regs *regs, unsigned int opcode) | |||
578 | { | 586 | { |
579 | if ((opcode & OPCODE) == LL) { | 587 | if ((opcode & OPCODE) == LL) { |
580 | perf_sw_event(PERF_COUNT_SW_EMULATION_FAULTS, | 588 | perf_sw_event(PERF_COUNT_SW_EMULATION_FAULTS, |
581 | 1, 0, regs, 0); | 589 | 1, regs, 0); |
582 | return simulate_ll(regs, opcode); | 590 | return simulate_ll(regs, opcode); |
583 | } | 591 | } |
584 | if ((opcode & OPCODE) == SC) { | 592 | if ((opcode & OPCODE) == SC) { |
585 | perf_sw_event(PERF_COUNT_SW_EMULATION_FAULTS, | 593 | perf_sw_event(PERF_COUNT_SW_EMULATION_FAULTS, |
586 | 1, 0, regs, 0); | 594 | 1, regs, 0); |
587 | return simulate_sc(regs, opcode); | 595 | return simulate_sc(regs, opcode); |
588 | } | 596 | } |
589 | 597 | ||
@@ -602,7 +610,7 @@ static int simulate_rdhwr(struct pt_regs *regs, unsigned int opcode) | |||
602 | int rd = (opcode & RD) >> 11; | 610 | int rd = (opcode & RD) >> 11; |
603 | int rt = (opcode & RT) >> 16; | 611 | int rt = (opcode & RT) >> 16; |
604 | perf_sw_event(PERF_COUNT_SW_EMULATION_FAULTS, | 612 | perf_sw_event(PERF_COUNT_SW_EMULATION_FAULTS, |
605 | 1, 0, regs, 0); | 613 | 1, regs, 0); |
606 | switch (rd) { | 614 | switch (rd) { |
607 | case 0: /* CPU number */ | 615 | case 0: /* CPU number */ |
608 | regs->regs[rt] = smp_processor_id(); | 616 | regs->regs[rt] = smp_processor_id(); |
@@ -640,7 +648,7 @@ static int simulate_sync(struct pt_regs *regs, unsigned int opcode) | |||
640 | { | 648 | { |
641 | if ((opcode & OPCODE) == SPEC0 && (opcode & FUNC) == SYNC) { | 649 | if ((opcode & OPCODE) == SPEC0 && (opcode & FUNC) == SYNC) { |
642 | perf_sw_event(PERF_COUNT_SW_EMULATION_FAULTS, | 650 | perf_sw_event(PERF_COUNT_SW_EMULATION_FAULTS, |
643 | 1, 0, regs, 0); | 651 | 1, regs, 0); |
644 | return 0; | 652 | return 0; |
645 | } | 653 | } |
646 | 654 | ||
diff --git a/arch/mips/kernel/unaligned.c b/arch/mips/kernel/unaligned.c index cfea1adfa15..eb319b58035 100644 --- a/arch/mips/kernel/unaligned.c +++ b/arch/mips/kernel/unaligned.c | |||
@@ -111,8 +111,7 @@ static void emulate_load_store_insn(struct pt_regs *regs, | |||
111 | unsigned long value; | 111 | unsigned long value; |
112 | unsigned int res; | 112 | unsigned int res; |
113 | 113 | ||
114 | perf_sw_event(PERF_COUNT_SW_EMULATION_FAULTS, | 114 | perf_sw_event(PERF_COUNT_SW_EMULATION_FAULTS, 1, regs, 0); |
115 | 1, 0, regs, 0); | ||
116 | 115 | ||
117 | /* | 116 | /* |
118 | * This load never faults. | 117 | * This load never faults. |
@@ -517,7 +516,7 @@ asmlinkage void do_ade(struct pt_regs *regs) | |||
517 | mm_segment_t seg; | 516 | mm_segment_t seg; |
518 | 517 | ||
519 | perf_sw_event(PERF_COUNT_SW_ALIGNMENT_FAULTS, | 518 | perf_sw_event(PERF_COUNT_SW_ALIGNMENT_FAULTS, |
520 | 1, 0, regs, regs->cp0_badvaddr); | 519 | 1, regs, regs->cp0_badvaddr); |
521 | /* | 520 | /* |
522 | * Did we catch a fault trying to load an instruction? | 521 | * Did we catch a fault trying to load an instruction? |
523 | * Or are we running in MIPS16 mode? | 522 | * Or are we running in MIPS16 mode? |
diff --git a/arch/mips/kernel/vpe.c b/arch/mips/kernel/vpe.c index dbb6b408f00..3efcb065f78 100644 --- a/arch/mips/kernel/vpe.c +++ b/arch/mips/kernel/vpe.c | |||
@@ -46,7 +46,7 @@ | |||
46 | #include <asm/mipsregs.h> | 46 | #include <asm/mipsregs.h> |
47 | #include <asm/mipsmtregs.h> | 47 | #include <asm/mipsmtregs.h> |
48 | #include <asm/cacheflush.h> | 48 | #include <asm/cacheflush.h> |
49 | #include <asm/atomic.h> | 49 | #include <linux/atomic.h> |
50 | #include <asm/cpu.h> | 50 | #include <asm/cpu.h> |
51 | #include <asm/mips_mt.h> | 51 | #include <asm/mips_mt.h> |
52 | #include <asm/processor.h> | 52 | #include <asm/processor.h> |
@@ -192,7 +192,7 @@ static struct tc *get_tc(int index) | |||
192 | } | 192 | } |
193 | spin_unlock(&vpecontrol.tc_list_lock); | 193 | spin_unlock(&vpecontrol.tc_list_lock); |
194 | 194 | ||
195 | return NULL; | 195 | return res; |
196 | } | 196 | } |
197 | 197 | ||
198 | /* allocate a vpe and associate it with this minor (or index) */ | 198 | /* allocate a vpe and associate it with this minor (or index) */ |