Merge branch 'perf-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 13 Jun 2014 02:18:49 +0000 (19:18 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 13 Jun 2014 02:18:49 +0000 (19:18 -0700)
Pull more perf updates from Ingo Molnar:
 "A second round of perf updates:

   - wide reaching kprobes sanitization and robustization, with the hope
     of fixing all 'probe this function crashes the kernel' bugs, by
     Masami Hiramatsu.

   - uprobes updates from Oleg Nesterov: tmpfs support, corner case
     fixes and robustization work.

   - perf tooling updates and fixes from Jiri Olsa, Namhyung Ki, Arnaldo
     et al:
        * Add support to accumulate hist periods (Namhyung Kim)
        * various fixes, refactorings and enhancements"

* 'perf-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (101 commits)
  perf: Differentiate exec() and non-exec() comm events
  perf: Fix perf_event_comm() vs. exec() assumption
  uprobes/x86: Rename arch_uprobe->def to ->defparam, minor comment updates
  perf/documentation: Add description for conditional branch filter
  perf/x86: Add conditional branch filtering support
  perf/tool: Add conditional branch filter 'cond' to perf record
  perf: Add new conditional branch filter 'PERF_SAMPLE_BRANCH_COND'
  uprobes: Teach copy_insn() to support tmpfs
  uprobes: Shift ->readpage check from __copy_insn() to uprobe_register()
  perf/x86: Use common PMU interrupt disabled code
  perf/ARM: Use common PMU interrupt disabled code
  perf: Disable sampled events if no PMU interrupt
  perf: Fix use after free in perf_remove_from_context()
  perf tools: Fix 'make help' message error
  perf record: Fix poll return value propagation
  perf tools: Move elide bool into perf_hpp_fmt struct
  perf tools: Remove elide setup for SORT_MODE__MEMORY mode
  perf tools: Fix "==" into "=" in ui_browser__warning assignment
  perf tools: Allow overriding sysfs and proc finding with env var
  perf tools: Consider header files outside perf directory in tags target
  ...

17 files changed:
1  2 
arch/arm/kernel/perf_event_cpu.c
arch/x86/include/asm/traps.h
arch/x86/kernel/apic/hw_nmi.c
arch/x86/kernel/cpu/common.c
arch/x86/kernel/entry_32.S
arch/x86/kernel/entry_64.S
arch/x86/kernel/kvm.c
arch/x86/mm/fault.c
include/asm-generic/vmlinux.lds.h
include/linux/compiler.h
include/linux/kprobes.h
include/linux/sched.h
include/linux/uprobes.h
kernel/events/core.c
kernel/events/uprobes.c
kernel/sched/core.c
kernel/trace/trace_kprobe.c

Simple merge
Simple merge
@@@ -57,10 -57,10 +57,10 @@@ void arch_trigger_all_cpu_backtrace(voi
        }
  
        clear_bit(0, &backtrace_flag);
 -      smp_mb__after_clear_bit();
 +      smp_mb__after_atomic();
  }
  
- static int __kprobes
+ static int
  arch_trigger_all_cpu_backtrace_handler(unsigned int cmd, struct pt_regs *regs)
  {
        int cpu;
Simple merge
Simple merge
@@@ -946,48 -1106,8 +939,43 @@@ ENTRY(retint_kernel
        CFI_ENDPROC
  END(common_interrupt)
  
 +      /*
 +       * If IRET takes a fault on the espfix stack, then we
 +       * end up promoting it to a doublefault.  In that case,
 +       * modify the stack to make it look like we just entered
 +       * the #GP handler from user space, similar to bad_iret.
 +       */
 +#ifdef CONFIG_X86_ESPFIX64
 +      ALIGN
 +__do_double_fault:
 +      XCPT_FRAME 1 RDI+8
 +      movq RSP(%rdi),%rax             /* Trap on the espfix stack? */
 +      sarq $PGDIR_SHIFT,%rax
 +      cmpl $ESPFIX_PGD_ENTRY,%eax
 +      jne do_double_fault             /* No, just deliver the fault */
 +      cmpl $__KERNEL_CS,CS(%rdi)
 +      jne do_double_fault
 +      movq RIP(%rdi),%rax
 +      cmpq $irq_return_iret,%rax
 +#ifdef CONFIG_PARAVIRT
 +      je 1f
 +      cmpq $native_iret,%rax
 +#endif
 +      jne do_double_fault             /* This shouldn't happen... */
 +1:
 +      movq PER_CPU_VAR(kernel_stack),%rax
 +      subq $(6*8-KERNEL_STACK_OFFSET),%rax    /* Reset to original stack */
 +      movq %rax,RSP(%rdi)
 +      movq $0,(%rax)                  /* Missing (lost) #GP error code */
 +      movq $general_protection,RIP(%rdi)
 +      retq
 +      CFI_ENDPROC
 +END(__do_double_fault)
 +#else
 +# define __do_double_fault do_double_fault
 +#endif
 +
  /*
-  * End of kprobes section
-  */
-        .popsection
- /*
   * APIC interrupts.
   */
  .macro apicinterrupt3 num sym do_sym
@@@ -1321,26 -1466,21 +1309,21 @@@ apicinterrupt3 HYPERVISOR_CALLBACK_VECT
        hyperv_callback_vector hyperv_vector_handler
  #endif /* CONFIG_HYPERV */
  
- /*
-  * Some functions should be protected against kprobes
-  */
-       .pushsection .kprobes.text, "ax"
 -paranoidzeroentry_ist debug do_debug DEBUG_STACK
 -paranoidzeroentry_ist int3 do_int3 DEBUG_STACK
 -paranoiderrorentry stack_segment do_stack_segment
 +idtentry debug do_debug has_error_code=0 paranoid=1 shift_ist=DEBUG_STACK
 +idtentry int3 do_int3 has_error_code=0 paranoid=1 shift_ist=DEBUG_STACK
 +idtentry stack_segment do_stack_segment has_error_code=1 paranoid=1
  #ifdef CONFIG_XEN
 -zeroentry xen_debug do_debug
 -zeroentry xen_int3 do_int3
 -errorentry xen_stack_segment do_stack_segment
 +idtentry xen_debug do_debug has_error_code=0
 +idtentry xen_int3 do_int3 has_error_code=0
 +idtentry xen_stack_segment do_stack_segment has_error_code=1
  #endif
 -errorentry general_protection do_general_protection
 -trace_errorentry page_fault do_page_fault
 +idtentry general_protection do_general_protection has_error_code=1
 +trace_idtentry page_fault do_page_fault has_error_code=1
  #ifdef CONFIG_KVM_GUEST
 -errorentry async_page_fault do_async_page_fault
 +idtentry async_page_fault do_async_page_fault has_error_code=1
  #endif
  #ifdef CONFIG_X86_MCE
 -paranoidzeroentry machine_check *machine_check_vector(%rip)
 +idtentry machine_check has_error_code=0 paranoid=1 do_sym=*machine_check_vector(%rip)
  #endif
  
        /*
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge