diff options
Diffstat (limited to 'arch/arm/kernel')
-rw-r--r-- | arch/arm/kernel/armksyms.c | 20 | ||||
-rw-r--r-- | arch/arm/kernel/crunch.c | 2 | ||||
-rw-r--r-- | arch/arm/kernel/debug.S | 20 | ||||
-rw-r--r-- | arch/arm/kernel/dma-isa.c | 4 | ||||
-rw-r--r-- | arch/arm/kernel/elf.c | 9 | ||||
-rw-r--r-- | arch/arm/kernel/entry-armv.S | 4 | ||||
-rw-r--r-- | arch/arm/kernel/irq.c | 12 | ||||
-rw-r--r-- | arch/arm/kernel/process.c | 15 | ||||
-rw-r--r-- | arch/arm/kernel/vmlinux.lds.S | 13 | ||||
-rw-r--r-- | arch/arm/kernel/xscale-cp0.c | 2 |
10 files changed, 46 insertions, 55 deletions
diff --git a/arch/arm/kernel/armksyms.c b/arch/arm/kernel/armksyms.c index 0e627705f746..8214bfebfaca 100644 --- a/arch/arm/kernel/armksyms.c +++ b/arch/arm/kernel/armksyms.c | |||
@@ -48,27 +48,7 @@ extern void __aeabi_uidivmod(void); | |||
48 | extern void __aeabi_ulcmp(void); | 48 | extern void __aeabi_ulcmp(void); |
49 | 49 | ||
50 | extern void fpundefinstr(void); | 50 | extern void fpundefinstr(void); |
51 | extern void fp_enter(void); | ||
52 | 51 | ||
53 | /* | ||
54 | * This has a special calling convention; it doesn't | ||
55 | * modify any of the usual registers, except for LR. | ||
56 | */ | ||
57 | #define EXPORT_CRC_ALIAS(sym) __CRC_SYMBOL(sym, "") | ||
58 | |||
59 | #define EXPORT_SYMBOL_ALIAS(sym,orig) \ | ||
60 | EXPORT_CRC_ALIAS(sym) \ | ||
61 | static const struct kernel_symbol __ksymtab_##sym \ | ||
62 | __used __attribute__((section("__ksymtab"))) = \ | ||
63 | { (unsigned long)&orig, #sym }; | ||
64 | |||
65 | /* | ||
66 | * floating point math emulator support. | ||
67 | * These symbols will never change their calling convention... | ||
68 | */ | ||
69 | EXPORT_SYMBOL_ALIAS(kern_fp_enter,fp_enter); | ||
70 | EXPORT_SYMBOL_ALIAS(fp_printk,printk); | ||
71 | EXPORT_SYMBOL_ALIAS(fp_send_sig,send_sig); | ||
72 | 52 | ||
73 | EXPORT_SYMBOL(__backtrace); | 53 | EXPORT_SYMBOL(__backtrace); |
74 | 54 | ||
diff --git a/arch/arm/kernel/crunch.c b/arch/arm/kernel/crunch.c index 769abe15cf91..25ef223ba7f3 100644 --- a/arch/arm/kernel/crunch.c +++ b/arch/arm/kernel/crunch.c | |||
@@ -51,7 +51,7 @@ static int crunch_do(struct notifier_block *self, unsigned long cmd, void *t) | |||
51 | * initialised state information on the first fault. | 51 | * initialised state information on the first fault. |
52 | */ | 52 | */ |
53 | 53 | ||
54 | case THREAD_NOTIFY_RELEASE: | 54 | case THREAD_NOTIFY_EXIT: |
55 | crunch_task_release(thread); | 55 | crunch_task_release(thread); |
56 | break; | 56 | break; |
57 | 57 | ||
diff --git a/arch/arm/kernel/debug.S b/arch/arm/kernel/debug.S index b121b6053cce..5c91addcaebc 100644 --- a/arch/arm/kernel/debug.S +++ b/arch/arm/kernel/debug.S | |||
@@ -49,6 +49,26 @@ | |||
49 | 1002: | 49 | 1002: |
50 | .endm | 50 | .endm |
51 | 51 | ||
52 | #elif defined(CONFIG_CPU_V7) | ||
53 | |||
54 | .macro addruart, rx | ||
55 | .endm | ||
56 | |||
57 | .macro senduart, rd, rx | ||
58 | mcr p14, 0, \rd, c0, c5, 0 | ||
59 | .endm | ||
60 | |||
61 | .macro busyuart, rd, rx | ||
62 | busy: mrc p14, 0, pc, c0, c1, 0 | ||
63 | bcs busy | ||
64 | .endm | ||
65 | |||
66 | .macro waituart, rd, rx | ||
67 | wait: mrc p14, 0, pc, c0, c1, 0 | ||
68 | bcs wait | ||
69 | |||
70 | .endm | ||
71 | |||
52 | #elif defined(CONFIG_CPU_XSCALE) | 72 | #elif defined(CONFIG_CPU_XSCALE) |
53 | 73 | ||
54 | .macro addruart, rx | 74 | .macro addruart, rx |
diff --git a/arch/arm/kernel/dma-isa.c b/arch/arm/kernel/dma-isa.c index 0e88e46fc732..360bb6d701f5 100644 --- a/arch/arm/kernel/dma-isa.c +++ b/arch/arm/kernel/dma-isa.c | |||
@@ -207,8 +207,6 @@ void __init isa_init_dma(void) | |||
207 | outb(0x32, 0x4d6); | 207 | outb(0x32, 0x4d6); |
208 | outb(0x33, 0x4d6); | 208 | outb(0x33, 0x4d6); |
209 | 209 | ||
210 | request_dma(DMA_ISA_CASCADE, "cascade"); | ||
211 | |||
212 | for (i = 0; i < ARRAY_SIZE(dma_resources); i++) | 210 | for (i = 0; i < ARRAY_SIZE(dma_resources); i++) |
213 | request_resource(&ioport_resource, dma_resources + i); | 211 | request_resource(&ioport_resource, dma_resources + i); |
214 | 212 | ||
@@ -218,5 +216,7 @@ void __init isa_init_dma(void) | |||
218 | printk(KERN_ERR "ISADMA%u: unable to register: %d\n", | 216 | printk(KERN_ERR "ISADMA%u: unable to register: %d\n", |
219 | chan, ret); | 217 | chan, ret); |
220 | } | 218 | } |
219 | |||
220 | request_dma(DMA_ISA_CASCADE, "cascade"); | ||
221 | } | 221 | } |
222 | } | 222 | } |
diff --git a/arch/arm/kernel/elf.c b/arch/arm/kernel/elf.c index 950391f194c4..d4a0da1e48f4 100644 --- a/arch/arm/kernel/elf.c +++ b/arch/arm/kernel/elf.c | |||
@@ -78,15 +78,6 @@ int arm_elf_read_implies_exec(const struct elf32_hdr *x, int executable_stack) | |||
78 | return 1; | 78 | return 1; |
79 | if (cpu_architecture() < CPU_ARCH_ARMv6) | 79 | if (cpu_architecture() < CPU_ARCH_ARMv6) |
80 | return 1; | 80 | return 1; |
81 | #if !defined(CONFIG_AEABI) || defined(CONFIG_OABI_COMPAT) | ||
82 | /* | ||
83 | * If we have support for OABI programs, we can never allow NX | ||
84 | * support - our signal syscall restart mechanism relies upon | ||
85 | * being able to execute code placed on the user stack. | ||
86 | */ | ||
87 | return 1; | ||
88 | #else | ||
89 | return 0; | 81 | return 0; |
90 | #endif | ||
91 | } | 82 | } |
92 | EXPORT_SYMBOL(arm_elf_read_implies_exec); | 83 | EXPORT_SYMBOL(arm_elf_read_implies_exec); |
diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S index d2903e3bc861..6c5cf369183b 100644 --- a/arch/arm/kernel/entry-armv.S +++ b/arch/arm/kernel/entry-armv.S | |||
@@ -957,9 +957,7 @@ kuser_cmpxchg_fixup: | |||
957 | 957 | ||
958 | #else | 958 | #else |
959 | 959 | ||
960 | #ifdef CONFIG_SMP | 960 | smp_dmb |
961 | mcr p15, 0, r0, c7, c10, 5 @ dmb | ||
962 | #endif | ||
963 | 1: ldrex r3, [r2] | 961 | 1: ldrex r3, [r2] |
964 | subs r3, r3, r0 | 962 | subs r3, r3, r0 |
965 | strexeq r3, r1, [r2] | 963 | strexeq r3, r1, [r2] |
diff --git a/arch/arm/kernel/irq.c b/arch/arm/kernel/irq.c index c9a8619f3856..b7cb45bb91e8 100644 --- a/arch/arm/kernel/irq.c +++ b/arch/arm/kernel/irq.c | |||
@@ -69,7 +69,7 @@ int show_interrupts(struct seq_file *p, void *v) | |||
69 | } | 69 | } |
70 | 70 | ||
71 | if (i < NR_IRQS) { | 71 | if (i < NR_IRQS) { |
72 | spin_lock_irqsave(&irq_desc[i].lock, flags); | 72 | raw_spin_lock_irqsave(&irq_desc[i].lock, flags); |
73 | action = irq_desc[i].action; | 73 | action = irq_desc[i].action; |
74 | if (!action) | 74 | if (!action) |
75 | goto unlock; | 75 | goto unlock; |
@@ -84,7 +84,7 @@ int show_interrupts(struct seq_file *p, void *v) | |||
84 | 84 | ||
85 | seq_putc(p, '\n'); | 85 | seq_putc(p, '\n'); |
86 | unlock: | 86 | unlock: |
87 | spin_unlock_irqrestore(&irq_desc[i].lock, flags); | 87 | raw_spin_unlock_irqrestore(&irq_desc[i].lock, flags); |
88 | } else if (i == NR_IRQS) { | 88 | } else if (i == NR_IRQS) { |
89 | #ifdef CONFIG_FIQ | 89 | #ifdef CONFIG_FIQ |
90 | show_fiq_list(p, v); | 90 | show_fiq_list(p, v); |
@@ -139,7 +139,7 @@ void set_irq_flags(unsigned int irq, unsigned int iflags) | |||
139 | } | 139 | } |
140 | 140 | ||
141 | desc = irq_desc + irq; | 141 | desc = irq_desc + irq; |
142 | spin_lock_irqsave(&desc->lock, flags); | 142 | raw_spin_lock_irqsave(&desc->lock, flags); |
143 | desc->status |= IRQ_NOREQUEST | IRQ_NOPROBE | IRQ_NOAUTOEN; | 143 | desc->status |= IRQ_NOREQUEST | IRQ_NOPROBE | IRQ_NOAUTOEN; |
144 | if (iflags & IRQF_VALID) | 144 | if (iflags & IRQF_VALID) |
145 | desc->status &= ~IRQ_NOREQUEST; | 145 | desc->status &= ~IRQ_NOREQUEST; |
@@ -147,7 +147,7 @@ void set_irq_flags(unsigned int irq, unsigned int iflags) | |||
147 | desc->status &= ~IRQ_NOPROBE; | 147 | desc->status &= ~IRQ_NOPROBE; |
148 | if (!(iflags & IRQF_NOAUTOEN)) | 148 | if (!(iflags & IRQF_NOAUTOEN)) |
149 | desc->status &= ~IRQ_NOAUTOEN; | 149 | desc->status &= ~IRQ_NOAUTOEN; |
150 | spin_unlock_irqrestore(&desc->lock, flags); | 150 | raw_spin_unlock_irqrestore(&desc->lock, flags); |
151 | } | 151 | } |
152 | 152 | ||
153 | void __init init_IRQ(void) | 153 | void __init init_IRQ(void) |
@@ -166,9 +166,9 @@ static void route_irq(struct irq_desc *desc, unsigned int irq, unsigned int cpu) | |||
166 | { | 166 | { |
167 | pr_debug("IRQ%u: moving from cpu%u to cpu%u\n", irq, desc->node, cpu); | 167 | pr_debug("IRQ%u: moving from cpu%u to cpu%u\n", irq, desc->node, cpu); |
168 | 168 | ||
169 | spin_lock_irq(&desc->lock); | 169 | raw_spin_lock_irq(&desc->lock); |
170 | desc->chip->set_affinity(irq, cpumask_of(cpu)); | 170 | desc->chip->set_affinity(irq, cpumask_of(cpu)); |
171 | spin_unlock_irq(&desc->lock); | 171 | raw_spin_unlock_irq(&desc->lock); |
172 | } | 172 | } |
173 | 173 | ||
174 | /* | 174 | /* |
diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c index 0d96d0171c05..ba2adefa53f7 100644 --- a/arch/arm/kernel/process.c +++ b/arch/arm/kernel/process.c | |||
@@ -212,7 +212,8 @@ void __show_regs(struct pt_regs *regs) | |||
212 | char buf[64]; | 212 | char buf[64]; |
213 | 213 | ||
214 | printk("CPU: %d %s (%s %.*s)\n", | 214 | printk("CPU: %d %s (%s %.*s)\n", |
215 | smp_processor_id(), print_tainted(), init_utsname()->release, | 215 | raw_smp_processor_id(), print_tainted(), |
216 | init_utsname()->release, | ||
216 | (int)strcspn(init_utsname()->version, " "), | 217 | (int)strcspn(init_utsname()->version, " "), |
217 | init_utsname()->version); | 218 | init_utsname()->version); |
218 | print_symbol("PC is at %s\n", instruction_pointer(regs)); | 219 | print_symbol("PC is at %s\n", instruction_pointer(regs)); |
@@ -274,17 +275,18 @@ void show_regs(struct pt_regs * regs) | |||
274 | __backtrace(); | 275 | __backtrace(); |
275 | } | 276 | } |
276 | 277 | ||
278 | ATOMIC_NOTIFIER_HEAD(thread_notify_head); | ||
279 | |||
280 | EXPORT_SYMBOL_GPL(thread_notify_head); | ||
281 | |||
277 | /* | 282 | /* |
278 | * Free current thread data structures etc.. | 283 | * Free current thread data structures etc.. |
279 | */ | 284 | */ |
280 | void exit_thread(void) | 285 | void exit_thread(void) |
281 | { | 286 | { |
287 | thread_notify(THREAD_NOTIFY_EXIT, current_thread_info()); | ||
282 | } | 288 | } |
283 | 289 | ||
284 | ATOMIC_NOTIFIER_HEAD(thread_notify_head); | ||
285 | |||
286 | EXPORT_SYMBOL_GPL(thread_notify_head); | ||
287 | |||
288 | void flush_thread(void) | 290 | void flush_thread(void) |
289 | { | 291 | { |
290 | struct thread_info *thread = current_thread_info(); | 292 | struct thread_info *thread = current_thread_info(); |
@@ -299,9 +301,6 @@ void flush_thread(void) | |||
299 | 301 | ||
300 | void release_thread(struct task_struct *dead_task) | 302 | void release_thread(struct task_struct *dead_task) |
301 | { | 303 | { |
302 | struct thread_info *thread = task_thread_info(dead_task); | ||
303 | |||
304 | thread_notify(THREAD_NOTIFY_RELEASE, thread); | ||
305 | } | 304 | } |
306 | 305 | ||
307 | asmlinkage void ret_from_fork(void) __asm__("ret_from_fork"); | 306 | asmlinkage void ret_from_fork(void) __asm__("ret_from_fork"); |
diff --git a/arch/arm/kernel/vmlinux.lds.S b/arch/arm/kernel/vmlinux.lds.S index 71151bd87a36..4957e13ef55b 100644 --- a/arch/arm/kernel/vmlinux.lds.S +++ b/arch/arm/kernel/vmlinux.lds.S | |||
@@ -65,11 +65,11 @@ SECTIONS | |||
65 | __init_end = .; | 65 | __init_end = .; |
66 | #endif | 66 | #endif |
67 | 67 | ||
68 | /DISCARD/ : { /* Exit code and data */ | 68 | /* |
69 | EXIT_TEXT | 69 | * unwind exit sections must be discarded before the rest of the |
70 | EXIT_DATA | 70 | * unwind sections get included. |
71 | *(.exitcall.exit) | 71 | */ |
72 | *(.discard) | 72 | /DISCARD/ : { |
73 | *(.ARM.exidx.exit.text) | 73 | *(.ARM.exidx.exit.text) |
74 | *(.ARM.extab.exit.text) | 74 | *(.ARM.extab.exit.text) |
75 | #ifndef CONFIG_HOTPLUG_CPU | 75 | #ifndef CONFIG_HOTPLUG_CPU |
@@ -238,6 +238,9 @@ SECTIONS | |||
238 | 238 | ||
239 | STABS_DEBUG | 239 | STABS_DEBUG |
240 | .comment 0 : { *(.comment) } | 240 | .comment 0 : { *(.comment) } |
241 | |||
242 | /* Default discards */ | ||
243 | DISCARDS | ||
241 | } | 244 | } |
242 | 245 | ||
243 | /* | 246 | /* |
diff --git a/arch/arm/kernel/xscale-cp0.c b/arch/arm/kernel/xscale-cp0.c index 17127db906fa..1796157e3dd5 100644 --- a/arch/arm/kernel/xscale-cp0.c +++ b/arch/arm/kernel/xscale-cp0.c | |||
@@ -70,7 +70,7 @@ static int iwmmxt_do(struct notifier_block *self, unsigned long cmd, void *t) | |||
70 | * initialised state information on the first fault. | 70 | * initialised state information on the first fault. |
71 | */ | 71 | */ |
72 | 72 | ||
73 | case THREAD_NOTIFY_RELEASE: | 73 | case THREAD_NOTIFY_EXIT: |
74 | iwmmxt_task_release(thread); | 74 | iwmmxt_task_release(thread); |
75 | break; | 75 | break; |
76 | 76 | ||