linux/drivers/oprofile/oprofile_stats.c
<<
>>
Prefs
   1/**
   2 * @file oprofile_stats.c
   3 *
   4 * @remark Copyright 2002 OProfile authors
   5 * @remark Read the file COPYING
   6 *
   7 * @author John Levon
   8 */
   9
  10#include <linux/oprofile.h>
  11#include <linux/smp.h>
  12#include <linux/cpumask.h>
  13#include <linux/threads.h>
  14
  15#include "oprofile_stats.h"
  16#include "cpu_buffer.h"
  17
  18struct oprofile_stat_struct oprofile_stats;
  19
  20void oprofile_reset_stats(void)
  21{
  22        struct oprofile_cpu_buffer *cpu_buf;
  23        int i;
  24
  25        for_each_possible_cpu(i) {
  26                cpu_buf = &per_cpu(op_cpu_buffer, i);
  27                cpu_buf->sample_received = 0;
  28                cpu_buf->sample_lost_overflow = 0;
  29                cpu_buf->backtrace_aborted = 0;
  30                cpu_buf->sample_invalid_eip = 0;
  31        }
  32
  33        atomic_set(&oprofile_stats.sample_lost_no_mm, 0);
  34        atomic_set(&oprofile_stats.sample_lost_no_mapping, 0);
  35        atomic_set(&oprofile_stats.event_lost_overflow, 0);
  36        atomic_set(&oprofile_stats.bt_lost_no_mapping, 0);
  37        atomic_set(&oprofile_stats.multiplex_counter, 0);
  38}
  39
  40
  41void oprofile_create_stats_files(struct super_block *sb, struct dentry *root)
  42{
  43        struct oprofile_cpu_buffer *cpu_buf;
  44        struct dentry *cpudir;
  45        struct dentry *dir;
  46        char buf[10];
  47        int i;
  48
  49        dir = oprofilefs_mkdir(sb, root, "stats");
  50        if (!dir)
  51                return;
  52
  53        for_each_possible_cpu(i) {
  54                cpu_buf = &per_cpu(op_cpu_buffer, i);
  55                snprintf(buf, 10, "cpu%d", i);
  56                cpudir = oprofilefs_mkdir(sb, dir, buf);
  57
  58                /* Strictly speaking access to these ulongs is racy,
  59                 * but we can't simply lock them, and they are
  60                 * informational only.
  61                 */
  62                oprofilefs_create_ro_ulong(sb, cpudir, "sample_received",
  63                        &cpu_buf->sample_received);
  64                oprofilefs_create_ro_ulong(sb, cpudir, "sample_lost_overflow",
  65                        &cpu_buf->sample_lost_overflow);
  66                oprofilefs_create_ro_ulong(sb, cpudir, "backtrace_aborted",
  67                        &cpu_buf->backtrace_aborted);
  68                oprofilefs_create_ro_ulong(sb, cpudir, "sample_invalid_eip",
  69                        &cpu_buf->sample_invalid_eip);
  70        }
  71
  72        oprofilefs_create_ro_atomic(sb, dir, "sample_lost_no_mm",
  73                &oprofile_stats.sample_lost_no_mm);
  74        oprofilefs_create_ro_atomic(sb, dir, "sample_lost_no_mapping",
  75                &oprofile_stats.sample_lost_no_mapping);
  76        oprofilefs_create_ro_atomic(sb, dir, "event_lost_overflow",
  77                &oprofile_stats.event_lost_overflow);
  78        oprofilefs_create_ro_atomic(sb, dir, "bt_lost_no_mapping",
  79                &oprofile_stats.bt_lost_no_mapping);
  80#ifdef CONFIG_OPROFILE_EVENT_MULTIPLEX
  81        oprofilefs_create_ro_atomic(sb, dir, "multiplex_counter",
  82                &oprofile_stats.multiplex_counter);
  83#endif
  84}
  85
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.