git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git]
/
drivers
/
oprofile
/
cpu_buffer.c
diff --git
a/drivers/oprofile/cpu_buffer.c
b/drivers/oprofile/cpu_buffer.c
index
e9b1772
..
fc4bc9b
100644
(file)
--- a/
drivers/oprofile/cpu_buffer.c
+++ b/
drivers/oprofile/cpu_buffer.c
@@
-38,12
+38,10
@@
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 i;
int alloc_cpu_buffers(void)
{
int i;
@@
-53,7
+51,8
@@
int alloc_cpu_buffers(void)
for_each_online_cpu(i) {
struct oprofile_cpu_buffer * b = &cpu_buffer[i];
for_each_online_cpu(i) {
struct oprofile_cpu_buffer * b = &cpu_buffer[i];
- b->buffer = vmalloc(sizeof(struct op_sample) * buffer_size);
+ b->buffer = vmalloc_node(sizeof(struct op_sample) * buffer_size,
+ cpu_to_node(i));
if (!b->buffer)
goto fail;
if (!b->buffer)
goto fail;
@@
-74,7
+73,6
@@
fail:
free_cpu_buffers();
return -ENOMEM;
}
free_cpu_buffers();
return -ENOMEM;
}
-
void start_cpu_work(void)
{
void start_cpu_work(void)
{
@@
-93,7
+91,6
@@
void start_cpu_work(void)
}
}
}
}
-
void end_cpu_work(void)
{
int i;
void end_cpu_work(void)
{
int i;
@@
-109,7
+106,6
@@
void end_cpu_work(void)
flush_scheduled_work();
}
flush_scheduled_work();
}
-
/* Resets the cpu buffer to a sane state. */
void cpu_buffer_reset(struct oprofile_cpu_buffer * cpu_buf)
{
/* Resets the cpu buffer to a sane state. */
void cpu_buffer_reset(struct oprofile_cpu_buffer * cpu_buf)
{
@@
-121,7
+117,6
@@
void cpu_buffer_reset(struct oprofile_cpu_buffer * cpu_buf)
cpu_buf->last_task = NULL;
}
cpu_buf->last_task = NULL;
}
-
/* compute number of available slots in cpu_buffer queue */
static unsigned long nr_available_slots(struct oprofile_cpu_buffer const * b)
{
/* compute number of available slots in cpu_buffer queue */
static unsigned long nr_available_slots(struct oprofile_cpu_buffer const * b)
{
@@
-134,7
+129,6
@@
static unsigned long nr_available_slots(struct oprofile_cpu_buffer const * b)
return tail + (b->buffer_size - head) - 1;
}
return tail + (b->buffer_size - head) - 1;
}
-
static void increment_head(struct oprofile_cpu_buffer * b)
{
unsigned long new_head = b->head_pos + 1;
static void increment_head(struct oprofile_cpu_buffer * b)
{
unsigned long new_head = b->head_pos + 1;
@@
-149,10
+143,7
@@
static void increment_head(struct oprofile_cpu_buffer * b)
b->head_pos = 0;
}
b->head_pos = 0;
}
-
-
-
-inline static void
+static inline void
add_sample(struct oprofile_cpu_buffer * cpu_buf,
unsigned long pc, unsigned long event)
{
add_sample(struct oprofile_cpu_buffer * cpu_buf,
unsigned long pc, unsigned long event)
{
@@
-162,14
+153,12
@@
add_sample(struct oprofile_cpu_buffer * cpu_buf,
increment_head(cpu_buf);
}
increment_head(cpu_buf);
}
-
-inline static void
+static inline void
add_code(struct oprofile_cpu_buffer * buffer, unsigned long value)
{
add_sample(buffer, ESCAPE_CODE, value);
}
add_code(struct oprofile_cpu_buffer * buffer, unsigned long value)
{
add_sample(buffer, ESCAPE_CODE, value);
}
-
/* This must be safe from any context. It's safe writing here
* because of the head/tail separation of the writer and reader
* of the CPU buffer.
/* This must be safe from any context. It's safe writing here
* because of the head/tail separation of the writer and reader
* of the CPU buffer.
@@
-223,18
+212,15
@@
static int oprofile_begin_trace(struct oprofile_cpu_buffer * cpu_buf)
return 1;
}
return 1;
}
-
static void oprofile_end_trace(struct oprofile_cpu_buffer * cpu_buf)
{
cpu_buf->tracing = 0;
}
static void oprofile_end_trace(struct oprofile_cpu_buffer * cpu_buf)
{
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);
@@
-251,6
+237,13
@@
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)
{
void oprofile_add_pc(unsigned long pc, int is_kernel, unsigned long event)
{
@@
-258,7
+251,6
@@
void oprofile_add_pc(unsigned long pc, int is_kernel, unsigned long event)
log_sample(cpu_buf, pc, is_kernel, event);
}
log_sample(cpu_buf, pc, is_kernel, event);
}
-
void oprofile_add_trace(unsigned long pc)
{
struct oprofile_cpu_buffer * cpu_buf = &cpu_buffer[smp_processor_id()];
void oprofile_add_trace(unsigned long pc)
{
struct oprofile_cpu_buffer * cpu_buf = &cpu_buffer[smp_processor_id()];
@@
-283,8
+275,6
@@
void oprofile_add_trace(unsigned long pc)
add_sample(cpu_buf, pc, 0);
}
add_sample(cpu_buf, pc, 0);
}
-
-
/*
* This serves to avoid cpu buffer overflow, and makes sure
* the task mortuary progresses
/*
* This serves to avoid cpu buffer overflow, and makes sure
* the task mortuary progresses