1. 23 1月, 2011 1 次提交
  2. 22 1月, 2011 4 次提交
    • I
      Merge branch 'perf/urgent' of... · 01bb2dc4
      Ingo Molnar 提交于
      Merge branch 'perf/urgent' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux-2.6 into perf/urgent
      01bb2dc4
    • O
      perf: perf_event_exit_task_context: s/rcu_dereference/rcu_dereference_raw/ · 806839b2
      Oleg Nesterov 提交于
      In theory, almost every user of task->child->perf_event_ctxp[]
      is wrong. find_get_context() can install the new context at any
      moment, we need read_barrier_depends().
      
      dbe08d82 "perf: Fix
      find_get_context() vs perf_event_exit_task() race" added
      rcu_dereference() into perf_event_exit_task_context() to make
      the precedent, but this makes __rcu_dereference_check() unhappy.
      Use rcu_dereference_raw() to shut up the warning.
      Reported-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NOleg Nesterov <oleg@redhat.com>
      Cc: acme@redhat.com
      Cc: paulus@samba.org
      Cc: stern@rowland.harvard.edu
      Cc: a.p.zijlstra@chello.nl
      Cc: fweisbec@gmail.com
      Cc: roland@redhat.com
      Cc: prasad@linux.vnet.ibm.com
      Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
      LKML-Reference: <20110121174547.GA8796@redhat.com>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      806839b2
    • H
      perf test: Use cpu_map->[cpu] when setting affinity · ffb5e0fb
      Han Pingtian 提交于
      When some of CPUs are offline:
      
       # cat /sys/devices/system/cpu/online
       0,6-31
      
      perf test will fail on #3 testcase:
      
         3: detect open syscall event on all cpus:
         --- start ---
         perf_evsel__read_on_cpu: expected to intercept 111 calls on cpu 0, got 681
         perf_evsel__read_on_cpu: expected to intercept 112 calls on cpu 1, got 117
         perf_evsel__read_on_cpu: expected to intercept 113 calls on cpu 2, got 118
         perf_evsel__read_on_cpu: expected to intercept 114 calls on cpu 3, got 119
         perf_evsel__read_on_cpu: expected to intercept 115 calls on cpu 4, got 120
         perf_evsel__read_on_cpu: expected to intercept 116 calls on cpu 5, got 121
         perf_evsel__read_on_cpu: expected to intercept 117 calls on cpu 6, got 122
         perf_evsel__read_on_cpu: expected to intercept 118 calls on cpu 7, got 123
         perf_evsel__read_on_cpu: expected to intercept 119 calls on cpu 8, got 124
         perf_evsel__read_on_cpu: expected to intercept 120 calls on cpu 9, got 125
         perf_evsel__read_on_cpu: expected to intercept 121 calls on cpu 10, got 126
         ....
      
      This patch try to use 'cpus->map[cpu]' when setting cpu affinity, and
      will check the return code of sched_setaffinity()
      
      LKML-Reference: <20110120114707.GA11781@hpt.nay.redhat.com>
      Signed-off-by: NHan Pingtian <phan@redhat.com>
      Signed-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      ffb5e0fb
    • D
      perf symbols: Fix annotation of thumb code · b2f8fb23
      Dr. David Alan Gilbert 提交于
      In ARM's Thumb mode the bottom bit of the symbol address is set to mark
      the function as Thumb; the instructions are in reality 2 or 4 byte on 2
      byte alignments, and when the +1 address is used in annotate it causes
      objdump to disassemble invalid instructions.
      
      The patch removes that bottom bit during symbol loading.
      
      Many thinks to Dave Martin for comments on an initial version of the
      patch.
      
      (For reference this corresponds to this bug
      https://bugs.launchpad.net/linux-linaro/+bug/677547 )
      
      Cc: Ingo Molnar <mingo@elte.hu>
      Cc: Dave Martin <dave.martin@linaro.org>
      LKML-Reference: <20110121163922.GA31398@davesworkthinkpad>
      Signed-off-by: NDr. David Alan Gilbert <david.gilbert@linaro.org>
      Signed-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      b2f8fb23
  3. 21 1月, 2011 1 次提交
    • P
      perf: Annotate cpuctx->ctx.mutex to avoid a lockdep splat · 547e9fd7
      Peter Zijlstra 提交于
      Lockdep spotted:
      
      	loop_1b_instruc/1899 is trying to acquire lock:
      	 (event_mutex){+.+.+.}, at: [<ffffffff810e1908>] perf_trace_init+0x3b/0x2f7
      
      	but task is already holding lock:
      	 (&ctx->mutex){+.+.+.}, at: [<ffffffff810eb45b>] perf_event_init_context+0xc0/0x218
      
      	which lock already depends on the new lock.
      
      	the existing dependency chain (in reverse order) is:
      
      	-> #3 (&ctx->mutex){+.+.+.}:
      	-> #2 (cpu_hotplug.lock){+.+.+.}:
      	-> #1 (module_mutex){+.+...}:
      	-> #0 (event_mutex){+.+.+.}:
      
      But because the deadlock would be cpuhotplug (cpu-event) vs fork
      (task-event) it cannot, in fact, happen. We can annotate this by giving the
      perf_event_context used for the cpuctx a different lock class from those
      used by tasks.
      Signed-off-by: NPeter Zijlstra <a.p.zijlstra@chello.nl>
      LKML-Reference: <new-submission>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      547e9fd7
  4. 20 1月, 2011 3 次提交
    • A
      powerpc, perf: Fix frequency calculation for overflowing counters (FSL version) · 8c8a9b25
      Anton Blanchard 提交于
      When fixing the frequency calculations for perf on powerpc I
      forgot to fix the FSL version.
      
      If we dont set event->hw.last_period the frequency to period
      calculations in perf go haywire and we continually
      throttle/unthrottle the PMU.
      Signed-off-by: NAnton Blanchard <anton@samba.org>
      Acked-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Cc: Scott Wood <scottwood@freescale.com>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
      Cc: linuxppc-dev@lists.ozlabs.org
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      LKML-Reference: <20110118214404.2f42e634@kryten>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      8c8a9b25
    • O
      perf: Fix perf_event_init_task()/perf_event_free_task() interaction · 8550d7cb
      Oleg Nesterov 提交于
      perf_event_init_task() should clear child->perf_event_ctxp[]
      before anything else. Otherwise, if
      perf_event_init_context(perf_hw_context) fails,
      perf_event_free_task() can free perf_event_ctxp[perf_sw_context]
      copied from parent->perf_event_ctxp[] by dup_task_struct().
      
      Also move the initialization of perf_event_mutex and
      perf_event_list from perf_event_init_context() to
      perf_event_init_context().
      Signed-off-by: NOleg Nesterov <oleg@redhat.com>
      Acked-by: NPeter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Alan Stern <stern@rowland.harvard.edu>
      Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Frederic Weisbecker <fweisbec@gmail.com>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Prasad <prasad@linux.vnet.ibm.com>
      Cc: Roland McGrath <roland@redhat.com>
      LKML-Reference: <20110119182228.GC12183@redhat.com>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      8550d7cb
    • O
      perf: Fix find_get_context() vs perf_event_exit_task() race · dbe08d82
      Oleg Nesterov 提交于
      find_get_context() must not install the new perf_event_context
      if the task has already passed perf_event_exit_task().
      
      If nothing else, this means the memory leak. Initially
      ctx->refcount == 2, it is supposed that
      perf_event_exit_task_context() should participate and do the
      necessary put_ctx().
      
      find_lively_task_by_vpid() checks PF_EXITING but this buys
      nothing, by the time we call find_get_context() this task can be
      already dead. To the point, cmpxchg() can succeed when the task
      has already done the last schedule().
      
      Change find_get_context() to populate task->perf_event_ctxp[]
      under task->perf_event_mutex, this way we can trust PF_EXITING
      because perf_event_exit_task() takes the same mutex.
      
      Also, change perf_event_exit_task_context() to use
      rcu_dereference(). Probably this is not strictly needed, but
      with or without this change find_get_context() can race with
      setup_new_exec()->perf_event_exit_task(), rcu_dereference()
      looks better.
      Signed-off-by: NOleg Nesterov <oleg@redhat.com>
      Acked-by: NPeter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Alan Stern <stern@rowland.harvard.edu>
      Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Frederic Weisbecker <fweisbec@gmail.com>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Prasad <prasad@linux.vnet.ibm.com>
      Cc: Roland McGrath <roland@redhat.com>
      LKML-Reference: <20110119182207.GB12183@redhat.com>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      dbe08d82
  5. 19 1月, 2011 31 次提交