Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'arc-fixes-for-3.16' of git://git.kernel.org/pub/scm/linux/kernel/git/vgupta/arc

Pull ARC fixes from Vineet Gupta:
"Some SMP changes, a ptrace request for NPTL debugging, bunch of build
breakages/warnings"

* tag 'arc-fixes-for-3.16' of git://git.kernel.org/pub/scm/linux/kernel/git/vgupta/arc:
ARC: [SMP] Enable icache coherency
ARC: [SMP] Fix IPI IRQ registration
ARC: Implement ptrace(PTRACE_GET_THREAD_AREA)
ARC: optimize kernel bss clearing in early boot code
ARC: Fix build breakage for !CONFIG_ARC_DW2_UNWIND
ARC: fix build warning in devtree
ARC: remove checks for CONFIG_ARC_MMU_V4

+46 -16
+2 -2
arch/arc/include/asm/cache.h
··· 60 60 #define ARC_REG_IC_IVIC 0x10 61 61 #define ARC_REG_IC_CTRL 0x11 62 62 #define ARC_REG_IC_IVIL 0x19 63 - #if defined(CONFIG_ARC_MMU_V3) || defined (CONFIG_ARC_MMU_V4) 63 + #if defined(CONFIG_ARC_MMU_V3) 64 64 #define ARC_REG_IC_PTAG 0x1E 65 65 #endif 66 66 ··· 74 74 #define ARC_REG_DC_IVDL 0x4A 75 75 #define ARC_REG_DC_FLSH 0x4B 76 76 #define ARC_REG_DC_FLDL 0x4C 77 - #if defined(CONFIG_ARC_MMU_V3) || defined (CONFIG_ARC_MMU_V4) 77 + #if defined(CONFIG_ARC_MMU_V3) 78 78 #define ARC_REG_DC_PTAG 0x5C 79 79 #endif 80 80
+1
arch/arc/include/uapi/asm/ptrace.h
··· 11 11 #ifndef _UAPI__ASM_ARC_PTRACE_H 12 12 #define _UAPI__ASM_ARC_PTRACE_H 13 13 14 + #define PTRACE_GET_THREAD_AREA 25 14 15 15 16 #ifndef __ASSEMBLY__ 16 17 /*
+1 -1
arch/arc/kernel/ctx_sw_asm.S
··· 10 10 * -This is the more "natural" hand written assembler 11 11 */ 12 12 13 + #include <linux/linkage.h> 13 14 #include <asm/entry.h> /* For the SAVE_* macros */ 14 15 #include <asm/asm-offsets.h> 15 - #include <asm/linkage.h> 16 16 17 17 #define KSP_WORD_OFF ((TASK_THREAD + THREAD_KSP) / 4) 18 18
+1 -1
arch/arc/kernel/devtree.c
··· 41 41 { 42 42 const struct machine_desc *mdesc; 43 43 unsigned long dt_root; 44 - void *clk; 44 + const void *clk; 45 45 int len; 46 46 47 47 if (!early_init_dt_scan(dt))
+4 -3
arch/arc/kernel/head.S
··· 77 77 ; Clear BSS before updating any globals 78 78 ; XXX: use ZOL here 79 79 mov r5, __bss_start 80 - mov r6, __bss_stop 80 + sub r6, __bss_stop, r5 81 + lsr.f lp_count, r6, 2 82 + lpnz 1f 83 + st.ab 0, [r5, 4] 81 84 1: 82 - st.ab 0, [r5,4] 83 - brlt r5, r6, 1b 84 85 85 86 ; Uboot - kernel ABI 86 87 ; r0 = [0] No uboot interaction, [1] cmdline in r2, [2] DTB in r2
+4
arch/arc/kernel/ptrace.c
··· 146 146 pr_debug("REQ=%ld: ADDR =0x%lx, DATA=0x%lx)\n", request, addr, data); 147 147 148 148 switch (request) { 149 + case PTRACE_GET_THREAD_AREA: 150 + ret = put_user(task_thread_info(child)->thr_ptr, 151 + (unsigned long __user *)data); 152 + break; 149 153 default: 150 154 ret = ptrace_request(child, request, addr, data); 151 155 break;
+13 -2
arch/arc/kernel/smp.c
··· 337 337 * API called by platform code to hookup arch-common ISR to their IPI IRQ 338 338 */ 339 339 static DEFINE_PER_CPU(int, ipi_dev); 340 + 341 + static struct irqaction arc_ipi_irq = { 342 + .name = "IPI Interrupt", 343 + .flags = IRQF_PERCPU, 344 + .handler = do_IPI, 345 + }; 346 + 340 347 int smp_ipi_irq_setup(int cpu, int irq) 341 348 { 342 - int *dev_id = &per_cpu(ipi_dev, smp_processor_id()); 343 - return request_percpu_irq(irq, do_IPI, "IPI Interrupt", dev_id); 349 + if (!cpu) 350 + return setup_irq(irq, &arc_ipi_irq); 351 + else 352 + arch_unmask_irq(irq); 353 + 354 + return 0; 344 355 }
+1 -1
arch/arc/kernel/vmlinux.lds.S
··· 116 116 117 117 _edata = .; 118 118 119 - BSS_SECTION(0, 0, 0) 119 + BSS_SECTION(4, 4, 4) 120 120 121 121 #ifdef CONFIG_ARC_DW2_UNWIND 122 122 . = ALIGN(PAGE_SIZE);
+19 -6
arch/arc/mm/cache_arc700.c
··· 389 389 /*********************************************************** 390 390 * Machine specific helper for per line I-Cache invalidate. 391 391 */ 392 - static void __ic_line_inv_vaddr(unsigned long paddr, unsigned long vaddr, 392 + static void __ic_line_inv_vaddr_local(unsigned long paddr, unsigned long vaddr, 393 393 unsigned long sz) 394 394 { 395 395 unsigned long flags; ··· 405 405 read_aux_reg(ARC_REG_IC_CTRL); /* blocks */ 406 406 } 407 407 408 + struct ic_line_inv_vaddr_ipi { 409 + unsigned long paddr, vaddr; 410 + int sz; 411 + }; 412 + 413 + static void __ic_line_inv_vaddr_helper(void *info) 414 + { 415 + struct ic_line_inv_vaddr_ipi *ic_inv = (struct ic_line_inv_vaddr_ipi*) info; 416 + __ic_line_inv_vaddr_local(ic_inv->paddr, ic_inv->vaddr, ic_inv->sz); 417 + } 418 + 419 + static void __ic_line_inv_vaddr(unsigned long paddr, unsigned long vaddr, 420 + unsigned long sz) 421 + { 422 + struct ic_line_inv_vaddr_ipi ic_inv = { paddr, vaddr , sz}; 423 + on_each_cpu(__ic_line_inv_vaddr_helper, &ic_inv, 1); 424 + } 408 425 #else 409 426 410 427 #define __ic_entire_inv() ··· 570 553 */ 571 554 void __sync_icache_dcache(unsigned long paddr, unsigned long vaddr, int len) 572 555 { 573 - unsigned long flags; 574 - 575 - local_irq_save(flags); 576 - __ic_line_inv_vaddr(paddr, vaddr, len); 577 556 __dc_line_op(paddr, vaddr, len, OP_FLUSH_N_INV); 578 - local_irq_restore(flags); 557 + __ic_line_inv_vaddr(paddr, vaddr, len); 579 558 } 580 559 581 560 /* wrapper to compile time eliminate alignment checks in flush loop */