Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  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 
 18 struct oprofile_stat_struct oprofile_stats;
 19 
 20 void 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(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 }
 38 
 39 
 40 void oprofile_create_stats_files(struct super_block *sb, struct dentry *root)
 41 {
 42         struct oprofile_cpu_buffer *cpu_buf;
 43         struct dentry *cpudir;
 44         struct dentry *dir;
 45         char buf[10];
 46         int i;
 47 
 48         dir = oprofilefs_mkdir(sb, root, "stats");
 49         if (!dir)
 50                 return;
 51 
 52         for_each_possible_cpu(i) {
 53                 cpu_buf = &per_cpu(cpu_buffer, i);
 54                 snprintf(buf, 10, "cpu%d", i);
 55                 cpudir = oprofilefs_mkdir(sb, dir, buf);
 56 
 57                 /* Strictly speaking access to these ulongs is racy,
 58                  * but we can't simply lock them, and they are
 59                  * informational only.
 60                  */
 61                 oprofilefs_create_ro_ulong(sb, cpudir, "sample_received",
 62                         &cpu_buf->sample_received);
 63                 oprofilefs_create_ro_ulong(sb, cpudir, "sample_lost_overflow",
 64                         &cpu_buf->sample_lost_overflow);
 65                 oprofilefs_create_ro_ulong(sb, cpudir, "backtrace_aborted",
 66                         &cpu_buf->backtrace_aborted);
 67                 oprofilefs_create_ro_ulong(sb, cpudir, "sample_invalid_eip",
 68                         &cpu_buf->sample_invalid_eip);
 69         }
 70 
 71         oprofilefs_create_ro_atomic(sb, dir, "sample_lost_no_mm",
 72                 &oprofile_stats.sample_lost_no_mm);
 73         oprofilefs_create_ro_atomic(sb, dir, "sample_lost_no_mapping",
 74                 &oprofile_stats.sample_lost_no_mapping);
 75         oprofilefs_create_ro_atomic(sb, dir, "event_lost_overflow",
 76                 &oprofile_stats.event_lost_overflow);
 77         oprofilefs_create_ro_atomic(sb, dir, "bt_lost_no_mapping",
 78                 &oprofile_stats.bt_lost_no_mapping);
 79 }
 80 
  This page was automatically generated by the LXR engine.