Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 140799
b: refs/heads/master
c: 2d542cf
h: refs/heads/master
i:
  140797: cf16d80
  140795: 21f84a6
  140791: f44b2a0
  140783: 50d36bd
  140767: e52a72a
  140735: 6283944
  140671: 096694d
  140543: 5428660
  140287: 5cc369f
v: v3
  • Loading branch information
Ingo Molnar committed Feb 25, 2009
1 parent 9eebbf3 commit 06625dc
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 30 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 499aa86dcbc3c4daf7d2c59c5c30e1a78220fbc1
refs/heads/master: 2d542cf34264ac92e9e7ac55c0b096b066d569d2
57 changes: 28 additions & 29 deletions trunk/kernel/trace/trace_hw_branches.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,15 @@
*
* Copyright (C) 2008-2009 Intel Corporation.
* Markus Metzger <markus.t.metzger@gmail.com>, 2008-2009
*
*/

#include <linux/module.h>
#include <linux/fs.h>
#include <linux/spinlock.h>
#include <linux/kallsyms.h>
#include <linux/debugfs.h>
#include <linux/ftrace.h>
#include <linux/kallsyms.h>
#include <linux/mutex.h>
#include <linux/module.h>
#include <linux/cpu.h>
#include <linux/smp.h>
#include <linux/fs.h>

#include <asm/ds.h>

Expand All @@ -23,16 +21,17 @@

#define SIZEOF_BTS (1 << 13)

/* The tracer mutex protects the below per-cpu tracer array.
It needs to be held to:
- start tracing on all cpus
- stop tracing on all cpus
- start tracing on a single hotplug cpu
- stop tracing on a single hotplug cpu
- read the trace from all cpus
- read the trace from a single cpu
*/
static DEFINE_MUTEX(bts_tracer_mutex);
/*
* The tracer lock protects the below per-cpu tracer array.
* It needs to be held to:
* - start tracing on all cpus
* - stop tracing on all cpus
* - start tracing on a single hotplug cpu
* - stop tracing on a single hotplug cpu
* - read the trace from all cpus
* - read the trace from a single cpu
*/
static DEFINE_SPINLOCK(bts_tracer_lock);
static DEFINE_PER_CPU(struct bts_tracer *, tracer);
static DEFINE_PER_CPU(unsigned char[SIZEOF_BTS], buffer);

Expand All @@ -47,7 +46,7 @@ static struct trace_array *hw_branch_trace __read_mostly;
* Start tracing on the current cpu.
* The argument is ignored.
*
* pre: bts_tracer_mutex must be locked.
* pre: bts_tracer_lock must be locked.
*/
static void bts_trace_start_cpu(void *arg)
{
Expand All @@ -66,19 +65,19 @@ static void bts_trace_start_cpu(void *arg)

static void bts_trace_start(struct trace_array *tr)
{
mutex_lock(&bts_tracer_mutex);
spin_lock(&bts_tracer_lock);

on_each_cpu(bts_trace_start_cpu, NULL, 1);
trace_hw_branches_enabled = 1;

mutex_unlock(&bts_tracer_mutex);
spin_unlock(&bts_tracer_lock);
}

/*
* Stop tracing on the current cpu.
* The argument is ignored.
*
* pre: bts_tracer_mutex must be locked.
* pre: bts_tracer_lock must be locked.
*/
static void bts_trace_stop_cpu(void *arg)
{
Expand All @@ -90,20 +89,20 @@ static void bts_trace_stop_cpu(void *arg)

static void bts_trace_stop(struct trace_array *tr)
{
mutex_lock(&bts_tracer_mutex);
spin_lock(&bts_tracer_lock);

trace_hw_branches_enabled = 0;
on_each_cpu(bts_trace_stop_cpu, NULL, 1);

mutex_unlock(&bts_tracer_mutex);
spin_unlock(&bts_tracer_lock);
}

static int __cpuinit bts_hotcpu_handler(struct notifier_block *nfb,
unsigned long action, void *hcpu)
{
unsigned int cpu = (unsigned long)hcpu;

mutex_lock(&bts_tracer_mutex);
spin_lock(&bts_tracer_lock);

if (!trace_hw_branches_enabled)
goto out;
Expand All @@ -119,7 +118,7 @@ static int __cpuinit bts_hotcpu_handler(struct notifier_block *nfb,
}

out:
mutex_unlock(&bts_tracer_mutex);
spin_unlock(&bts_tracer_lock);
return NOTIFY_DONE;
}

Expand Down Expand Up @@ -225,7 +224,7 @@ static void trace_bts_at(const struct bts_trace *trace, void *at)
/*
* Collect the trace on the current cpu and write it into the ftrace buffer.
*
* pre: bts_tracer_mutex must be locked
* pre: bts_tracer_lock must be locked
*/
static void trace_bts_cpu(void *arg)
{
Expand Down Expand Up @@ -261,11 +260,11 @@ static void trace_bts_cpu(void *arg)

static void trace_bts_prepare(struct trace_iterator *iter)
{
mutex_lock(&bts_tracer_mutex);
spin_lock(&bts_tracer_lock);

on_each_cpu(trace_bts_cpu, iter->tr, 1);

mutex_unlock(&bts_tracer_mutex);
spin_unlock(&bts_tracer_lock);
}

static void trace_bts_close(struct trace_iterator *iter)
Expand All @@ -275,11 +274,11 @@ static void trace_bts_close(struct trace_iterator *iter)

void trace_hw_branch_oops(void)
{
mutex_lock(&bts_tracer_mutex);
spin_lock(&bts_tracer_lock);

trace_bts_cpu(hw_branch_trace);

mutex_unlock(&bts_tracer_mutex);
spin_unlock(&bts_tracer_lock);
}

struct tracer bts_tracer __read_mostly =
Expand Down

0 comments on commit 06625dc

Please sign in to comment.