Merge branch 'sh/for-2.6.32' of git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6

* 'sh/for-2.6.32' of git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6:
sh: Fix a TRACE_IRQS_OFF typo.
sh: Optimize the setup_rt_frame() I-cache flush.
sh: Populate initial secondary CPU info from boot_cpu_data.
sh: Tidy up SMP cpuinfo.
sh: Use boot_cpu_data for FPU tests in sigcontext paths.
sh: ftrace: Fix up syscall tracepoint support.
sh: force dcache flush if dcache_dirty bit set.
sh: update die() output.

+41 -20
+1 -1
arch/sh/kernel/entry-common.S
··· 121 121 ENTRY(resume_userspace) 122 122 ! r8: current_thread_info 123 123 cli 124 - TRACE_IRQS_OfF 124 + TRACE_IRQS_OFF 125 125 mov.l @(TI_FLAGS,r8), r0 ! current_thread_info->flags 126 126 tst #(_TIF_WORK_MASK & 0xff), r0 127 127 bt/s __restore_all
+27 -10
arch/sh/kernel/ftrace.c
··· 291 291 return syscalls_metadata[nr]; 292 292 } 293 293 294 - void arch_init_ftrace_syscalls(void) 294 + int syscall_name_to_nr(char *name) 295 + { 296 + int i; 297 + 298 + if (!syscalls_metadata) 299 + return -1; 300 + for (i = 0; i < NR_syscalls; i++) 301 + if (syscalls_metadata[i]) 302 + if (!strcmp(syscalls_metadata[i]->name, name)) 303 + return i; 304 + return -1; 305 + } 306 + 307 + void set_syscall_enter_id(int num, int id) 308 + { 309 + syscalls_metadata[num]->enter_id = id; 310 + } 311 + 312 + void set_syscall_exit_id(int num, int id) 313 + { 314 + syscalls_metadata[num]->exit_id = id; 315 + } 316 + 317 + static int __init arch_init_ftrace_syscalls(void) 295 318 { 296 319 int i; 297 320 struct syscall_metadata *meta; 298 321 unsigned long **psys_syscall_table = &sys_call_table; 299 - static atomic_t refs; 300 - 301 - if (atomic_inc_return(&refs) != 1) 302 - goto end; 303 322 304 323 syscalls_metadata = kzalloc(sizeof(*syscalls_metadata) * 305 324 FTRACE_SYSCALL_MAX, GFP_KERNEL); 306 325 if (!syscalls_metadata) { 307 326 WARN_ON(1); 308 - return; 327 + return -ENOMEM; 309 328 } 310 329 311 330 for (i = 0; i < FTRACE_SYSCALL_MAX; i++) { 312 331 meta = find_syscall_meta(psys_syscall_table[i]); 313 332 syscalls_metadata[i] = meta; 314 333 } 315 - return; 316 334 317 - /* Paranoid: avoid overflow */ 318 - end: 319 - atomic_dec(&refs); 335 + return 0; 320 336 } 337 + arch_initcall(arch_init_ftrace_syscalls); 321 338 #endif /* CONFIG_FTRACE_SYSCALLS */
+2
arch/sh/kernel/setup.c
··· 549 549 550 550 if (cpu == 0) 551 551 seq_printf(m, "machine\t\t: %s\n", get_system_type()); 552 + else 553 + seq_printf(m, "\n"); 552 554 553 555 seq_printf(m, "processor\t: %d\n", cpu); 554 556 seq_printf(m, "cpu family\t: %s\n", init_utsname()->machine);
+4 -5
arch/sh/kernel/signal_32.c
··· 145 145 { 146 146 struct task_struct *tsk = current; 147 147 148 - if (!(current_cpu_data.flags & CPU_HAS_FPU)) 148 + if (!(boot_cpu_data.flags & CPU_HAS_FPU)) 149 149 return 0; 150 150 151 151 set_used_math(); ··· 158 158 { 159 159 struct task_struct *tsk = current; 160 160 161 - if (!(current_cpu_data.flags & CPU_HAS_FPU)) 161 + if (!(boot_cpu_data.flags & CPU_HAS_FPU)) 162 162 return 0; 163 163 164 164 if (!used_math()) { ··· 199 199 #undef COPY 200 200 201 201 #ifdef CONFIG_SH_FPU 202 - if (current_cpu_data.flags & CPU_HAS_FPU) { 202 + if (boot_cpu_data.flags & CPU_HAS_FPU) { 203 203 int owned_fp; 204 204 struct task_struct *tsk = current; 205 205 ··· 472 472 err |= __put_user(OR_R0_R0, &frame->retcode[6]); 473 473 err |= __put_user((__NR_rt_sigreturn), &frame->retcode[7]); 474 474 regs->pr = (unsigned long) frame->retcode; 475 + flush_icache_range(regs->pr, regs->pr + sizeof(frame->retcode)); 475 476 } 476 477 477 478 if (err) ··· 497 496 498 497 pr_debug("SIG deliver (%s:%d): sp=%p pc=%08lx pr=%08lx\n", 499 498 current->comm, task_pid_nr(current), frame, regs->pc, regs->pr); 500 - 501 - flush_icache_range(regs->pr, regs->pr + sizeof(frame->retcode)); 502 499 503 500 return 0; 504 501
+2
arch/sh/kernel/smp.c
··· 35 35 { 36 36 struct sh_cpuinfo *c = cpu_data + cpu; 37 37 38 + memcpy(c, &boot_cpu_data, sizeof(struct sh_cpuinfo)); 39 + 38 40 c->loops_per_jiffy = loops_per_jiffy; 39 41 } 40 42
+4 -3
arch/sh/kernel/traps_32.c
··· 25 25 #include <linux/kexec.h> 26 26 #include <linux/limits.h> 27 27 #include <linux/proc_fs.h> 28 + #include <linux/sysfs.h> 28 29 #include <asm/system.h> 29 30 #include <asm/uaccess.h> 30 31 #include <asm/fpu.h> ··· 160 159 161 160 oops_enter(); 162 161 163 - console_verbose(); 164 162 spin_lock_irq(&die_lock); 163 + console_verbose(); 165 164 bust_spinlocks(1); 166 165 167 166 printk("%s: %04lx [#%d]\n", str, err & 0xffff, ++die_counter); 168 - 167 + sysfs_printk_last_file(); 169 168 print_modules(); 170 169 show_regs(regs); 171 170 ··· 181 180 bust_spinlocks(0); 182 181 add_taint(TAINT_DIE); 183 182 spin_unlock_irq(&die_lock); 183 + oops_exit(); 184 184 185 185 if (kexec_should_crash(current)) 186 186 crash_kexec(regs); ··· 192 190 if (panic_on_oops) 193 191 panic("Fatal exception"); 194 192 195 - oops_exit(); 196 193 do_exit(SIGSEGV); 197 194 } 198 195
+1 -1
arch/sh/mm/cache.c
··· 128 128 return; 129 129 130 130 page = pfn_to_page(pfn); 131 - if (pfn_valid(pfn) && page_mapping(page)) { 131 + if (pfn_valid(pfn)) { 132 132 int dirty = test_and_clear_bit(PG_dcache_dirty, &page->flags); 133 133 if (dirty) { 134 134 unsigned long addr = (unsigned long)page_address(page);