diff options
author | Robert Richter <robert.richter@amd.com> | 2008-11-27 16:33:37 -0500 |
---|---|---|
committer | Robert Richter <robert.richter@amd.com> | 2008-12-10 08:20:15 -0500 |
commit | bf589e32960181fa8cbca7bfdd92265e49dc2dfa (patch) | |
tree | a5690c62071771e2e325cb748d83fb1cc5565daa /drivers/oprofile/buffer_sync.c | |
parent | 229234ae4a5ed9376b2e0524da04b0e5edadbf76 (diff) |
oprofile: adding cpu_buffer_entries()
This is in preparation for changes in the cpu buffer implementation.
Signed-off-by: Robert Richter <robert.richter@amd.com>
Diffstat (limited to 'drivers/oprofile/buffer_sync.c')
-rw-r--r-- | drivers/oprofile/buffer_sync.c | 31 |
1 files changed, 2 insertions, 29 deletions
diff --git a/drivers/oprofile/buffer_sync.c b/drivers/oprofile/buffer_sync.c index 44f676c8a51d..aed286c3f16e 100644 --- a/drivers/oprofile/buffer_sync.c +++ b/drivers/oprofile/buffer_sync.c | |||
@@ -464,33 +464,6 @@ static inline int is_code(unsigned long val) | |||
464 | } | 464 | } |
465 | 465 | ||
466 | 466 | ||
467 | /* "acquire" as many cpu buffer slots as we can */ | ||
468 | static unsigned long get_slots(struct oprofile_cpu_buffer *b) | ||
469 | { | ||
470 | unsigned long head = b->head_pos; | ||
471 | unsigned long tail = b->tail_pos; | ||
472 | |||
473 | /* | ||
474 | * Subtle. This resets the persistent last_task | ||
475 | * and in_kernel values used for switching notes. | ||
476 | * BUT, there is a small window between reading | ||
477 | * head_pos, and this call, that means samples | ||
478 | * can appear at the new head position, but not | ||
479 | * be prefixed with the notes for switching | ||
480 | * kernel mode or a task switch. This small hole | ||
481 | * can lead to mis-attribution or samples where | ||
482 | * we don't know if it's in the kernel or not, | ||
483 | * at the start of an event buffer. | ||
484 | */ | ||
485 | cpu_buffer_reset(b); | ||
486 | |||
487 | if (head >= tail) | ||
488 | return head - tail; | ||
489 | |||
490 | return head + (b->buffer_size - tail); | ||
491 | } | ||
492 | |||
493 | |||
494 | /* Move tasks along towards death. Any tasks on dead_tasks | 467 | /* Move tasks along towards death. Any tasks on dead_tasks |
495 | * will definitely have no remaining references in any | 468 | * will definitely have no remaining references in any |
496 | * CPU buffers at this point, because we use two lists, | 469 | * CPU buffers at this point, because we use two lists, |
@@ -576,11 +549,11 @@ void sync_buffer(int cpu) | |||
576 | /* Remember, only we can modify tail_pos */ | 549 | /* Remember, only we can modify tail_pos */ |
577 | 550 | ||
578 | #ifndef CONFIG_OPROFILE_IBS | 551 | #ifndef CONFIG_OPROFILE_IBS |
579 | available = get_slots(cpu_buf); | 552 | available = cpu_buffer_entries(cpu_buf); |
580 | 553 | ||
581 | for (i = 0; i < available; ++i) { | 554 | for (i = 0; i < available; ++i) { |
582 | #else | 555 | #else |
583 | while (get_slots(cpu_buf)) { | 556 | while (cpu_buffer_entries(cpu_buf)) { |
584 | #endif | 557 | #endif |
585 | struct op_sample *s = cpu_buffer_read_entry(cpu_buf); | 558 | struct op_sample *s = cpu_buffer_read_entry(cpu_buf); |
586 | 559 | ||