git.openpandora.org
/
pandora-kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'intx' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/misc-2.6
[pandora-kernel.git]
/
drivers
/
oprofile
/
cpu_buffer.c
diff --git
a/drivers/oprofile/cpu_buffer.c
b/drivers/oprofile/cpu_buffer.c
index
78193e4
..
a83c3db
100644
(file)
--- a/
drivers/oprofile/cpu_buffer.c
+++ b/
drivers/oprofile/cpu_buffer.c
@@
-29,7
+29,7
@@
struct oprofile_cpu_buffer cpu_buffer[NR_CPUS] __cacheline_aligned;
struct oprofile_cpu_buffer cpu_buffer[NR_CPUS] __cacheline_aligned;
-static void wq_sync_buffer(
void *
);
+static void wq_sync_buffer(
struct work_struct *work
);
#define DEFAULT_TIMER_EXPIRE (HZ / 10)
static int work_enabled;
#define DEFAULT_TIMER_EXPIRE (HZ / 10)
static int work_enabled;
@@
-38,9
+38,8
@@
void free_cpu_buffers(void)
{
int i;
{
int i;
- for_each_online_cpu(i)
{
+ for_each_online_cpu(i)
vfree(cpu_buffer[i].buffer);
vfree(cpu_buffer[i].buffer);
- }
}
int alloc_cpu_buffers(void)
}
int alloc_cpu_buffers(void)
@@
-66,7
+65,7
@@
int alloc_cpu_buffers(void)
b->sample_received = 0;
b->sample_lost_overflow = 0;
b->cpu = i;
b->sample_received = 0;
b->sample_lost_overflow = 0;
b->cpu = i;
- INIT_
WORK(&b->work, wq_sync_buffer, b
);
+ INIT_
DELAYED_WORK(&b->work, wq_sync_buffer
);
}
return 0;
}
return 0;
@@
-218,11
+217,10
@@
static void oprofile_end_trace(struct oprofile_cpu_buffer * cpu_buf)
cpu_buf->tracing = 0;
}
cpu_buf->tracing = 0;
}
-void oprofile_add_sample(struct pt_regs * const regs, unsigned long event)
+void oprofile_add_ext_sample(unsigned long pc, struct pt_regs * const regs,
+ unsigned long event, int is_kernel)
{
struct oprofile_cpu_buffer * cpu_buf = &cpu_buffer[smp_processor_id()];
{
struct oprofile_cpu_buffer * cpu_buf = &cpu_buffer[smp_processor_id()];
- unsigned long pc = profile_pc(regs);
- int is_kernel = !user_mode(regs);
if (!backtrace_depth) {
log_sample(cpu_buf, pc, is_kernel, event);
if (!backtrace_depth) {
log_sample(cpu_buf, pc, is_kernel, event);
@@
-239,6
+237,14
@@
void oprofile_add_sample(struct pt_regs * const regs, unsigned long event)
oprofile_end_trace(cpu_buf);
}
oprofile_end_trace(cpu_buf);
}
+void oprofile_add_sample(struct pt_regs * const regs, unsigned long event)
+{
+ int is_kernel = !user_mode(regs);
+ unsigned long pc = profile_pc(regs);
+
+ oprofile_add_ext_sample(pc, regs, event, is_kernel);
+}
+
void oprofile_add_pc(unsigned long pc, int is_kernel, unsigned long event)
{
struct oprofile_cpu_buffer * cpu_buf = &cpu_buffer[smp_processor_id()];
void oprofile_add_pc(unsigned long pc, int is_kernel, unsigned long event)
{
struct oprofile_cpu_buffer * cpu_buf = &cpu_buffer[smp_processor_id()];
@@
-276,9
+282,10
@@
void oprofile_add_trace(unsigned long pc)
* By using schedule_delayed_work_on and then schedule_delayed_work
* we guarantee this will stay on the correct cpu
*/
* By using schedule_delayed_work_on and then schedule_delayed_work
* we guarantee this will stay on the correct cpu
*/
-static void wq_sync_buffer(
void * data
)
+static void wq_sync_buffer(
struct work_struct *work
)
{
{
- struct oprofile_cpu_buffer * b = data;
+ struct oprofile_cpu_buffer * b =
+ container_of(work, struct oprofile_cpu_buffer, work.work);
if (b->cpu != smp_processor_id()) {
printk("WQ on CPU%d, prefer CPU%d\n",
smp_processor_id(), b->cpu);
if (b->cpu != smp_processor_id()) {
printk("WQ on CPU%d, prefer CPU%d\n",
smp_processor_id(), b->cpu);