From: Philippe E. <ph...@us...> - 2003-11-01 18:56:56
|
Update of /cvsroot/oprofile/oprofile/module In directory sc8-pr-cvs1:/tmp/cvs-serv1905/module Modified Files: oprofile.c oprofile.h Log Message: 2.4 module two new read-only sysctl: nr_buffer_overflow and nr_note_buffer_overflow Index: oprofile.c =================================================================== RCS file: /cvsroot/oprofile/oprofile/module/oprofile.c,v retrieving revision 1.87 retrieving revision 1.88 diff -u -p -d -r1.87 -r1.88 --- oprofile.c 30 Oct 2003 01:14:52 -0000 1.87 +++ oprofile.c 1 Nov 2003 18:56:53 -0000 1.88 @@ -176,6 +176,7 @@ inline static void up_and_check_note(voi "oprofile with a larger note buffer.\n"); warned = 1; } + sysctl.nr_note_buffer_overflow++; note_pos = sysctl.note_size - 1; } @@ -263,6 +264,7 @@ static int check_buffer_amount(int cpu_n "You must increase the module buffer size with\n" "opcontrol --setup --bufer-size= or reduce the " "interrupt frequency\n", num); + data->nr_buffer_overflow += num; num = size; } else data->nextbuf = 0; @@ -432,6 +434,7 @@ static int oprof_init_data(void) ulong buf_size; struct _oprof_data * data; + sysctl.nr_note_buffer_overflow = 0; notebufsize = sizeof(struct op_note) * sysctl.note_size; note_buffer = vmalloc(notebufsize); if (!note_buffer) { @@ -447,6 +450,7 @@ static int oprof_init_data(void) data->buf_size = 0; data->buffer = 0; data->buf_watermark = 0; + data->nr_buffer_overflow = 0; } buf_size = (sizeof(struct op_sample) * sysctl.buf_size); @@ -654,6 +658,27 @@ out: return ret; } +static int get_nr_buffer_overflow(ctl_table * table, int write, struct file * filp, void * buffer, size_t * lenp) +{ + uint cpu; + int ret = -EINVAL; + + lock_sysctl(); + + if (write) + goto out; + + for (cpu = 0 ; cpu < smp_num_cpus; cpu++) { + sysctl.nr_buffer_overflow += oprof_data[cpu].nr_buffer_overflow; + oprof_data[cpu].nr_buffer_overflow = 0; + } + + ret = proc_dointvec(table, write, filp, buffer, lenp); +out: + unlock_sysctl(); + return ret; +} + int lproc_dointvec(ctl_table * table, int write, struct file * filp, void * buffer, size_t * lenp) { int err; @@ -722,7 +747,7 @@ out: return err; } -static int const nr_oprof_static = 6; +static int const nr_oprof_static = 8; static ctl_table oprof_table[] = { { 1, "bufsize", &sysctl_parms.buf_size, sizeof(int), 0644, NULL, &lproc_dointvec, NULL, }, @@ -731,6 +756,8 @@ static ctl_table oprof_table[] = { { 1, "nr_interrupts", &sysctl.nr_interrupts, sizeof(int), 0444, NULL, &get_nr_interrupts, NULL, }, { 1, "notesize", &sysctl_parms.note_size, sizeof(int), 0644, NULL, &lproc_dointvec, NULL, }, { 1, "cpu_type", &sysctl.cpu_type, sizeof(int), 0444, NULL, &lproc_dointvec, NULL, }, + { 1, "note_buffer_overflow", &sysctl.nr_note_buffer_overflow, sizeof(int), 0444, NULL, &lproc_dointvec, NULL, }, + { 1, "buffer_overflow", &sysctl.nr_buffer_overflow, sizeof(int), 0444, NULL, &get_nr_buffer_overflow, NULL, }, { 0, }, { 0, }, { 0, }, { 0, }, { 0, }, { 0, }, { 0, }, { 0, }, { 0, }, }; Index: oprofile.h =================================================================== RCS file: /cvsroot/oprofile/oprofile/module/oprofile.h,v retrieving revision 1.48 retrieving revision 1.49 diff -u -p -d -r1.48 -r1.49 --- oprofile.h 12 Oct 2003 23:03:25 -0000 1.48 +++ oprofile.h 1 Nov 2003 18:56:53 -0000 1.49 @@ -50,6 +50,8 @@ struct _oprof_data { uint nextbuf; /* number of IRQs for this CPU */ uint nr_irq; + /* buffer overflow cumulated size */ + uint nr_buffer_overflow; /* reset counter values */ uint ctr_count[OP_MAX_COUNTERS]; }; @@ -78,6 +80,10 @@ struct oprof_sysctl { int nr_interrupts; /* the cpu core type: CPU_PPRO, CPU_PII ... */ int cpu_type; + /* nr note buffer overflow */ + int nr_note_buffer_overflow; + /* nr buffer overflow */ + int nr_buffer_overflow; /* counter setup */ struct oprof_counter ctr[OP_MAX_COUNTERS]; }; |