* [PATCH] oprofile update for 2.5.52
@ 2002-12-17 17:50 John Levon
0 siblings, 0 replies; only message in thread
From: John Levon @ 2002-12-17 17:50 UTC (permalink / raw)
To: torvalds, linux-kernel
The below patch makes the following changes :
o headers cleanup
o remove deprecated kernel_only
o mention minimum oprofile version
o correctly initialise task_exit statistic
o remove racy debug check (wli saw this oops)
o remove pointless simple_open
o add dump functionality
o remove pessimising FASTCALL
Note that current .51 and also with this patch need to use oprofile CVS,
or here's a tarball :
http://www.movement.uklinux.net/oprofile-0.5cvs.tar.gz
Please apply
thanks
john
diff -X dontdiff -Naur linux-linus/arch/i386/oprofile/init.c linux/arch/i386/oprofile/init.c
--- linux-linus/arch/i386/oprofile/init.c 2002-12-16 03:45:18.000000000 +0000
+++ linux/arch/i386/oprofile/init.c 2002-12-16 03:44:32.000000000 +0000
@@ -7,7 +7,6 @@
* @author John Levon <levon@movementarian.org>
*/
-#include <linux/kernel.h>
#include <linux/oprofile.h>
#include <linux/init.h>
diff -X dontdiff -Naur linux-linus/arch/i386/oprofile/nmi_int.c linux/arch/i386/oprofile/nmi_int.c
--- linux-linus/arch/i386/oprofile/nmi_int.c 2002-12-16 03:45:18.000000000 +0000
+++ linux/arch/i386/oprofile/nmi_int.c 2002-12-17 05:36:10.000000000 +0000
@@ -7,19 +7,13 @@
* @author John Levon <levon@movementarian.org>
*/
-#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/notifier.h>
#include <linux/smp.h>
#include <linux/oprofile.h>
-#include <linux/pm.h>
-#include <linux/thread_info.h>
#include <asm/nmi.h>
-#include <asm/ptrace.h>
#include <asm/msr.h>
#include <asm/apic.h>
-#include <asm/bitops.h>
-#include <asm/processor.h>
#include "op_counter.h"
#include "op_x86_model.h"
@@ -27,7 +21,6 @@
static struct op_x86_model_spec const * model;
static struct op_msrs cpu_msrs[NR_CPUS];
static unsigned long saved_lvtpc[NR_CPUS];
-static unsigned long kernel_only;
static int nmi_start(void);
static void nmi_stop(void);
@@ -53,10 +46,9 @@
}
-// FIXME: kernel_only
static int nmi_callback(struct pt_regs * regs, int cpu)
{
- return (model->check_ctrs(cpu, &cpu_msrs[cpu], regs));
+ return model->check_ctrs(cpu, &cpu_msrs[cpu], regs);
}
@@ -210,7 +202,6 @@
oprofilefs_create_ulong(sb, dir, "user", &counter_config[i].user);
}
- oprofilefs_create_ulong(sb, root, "kernel_only", &kernel_only);
return 0;
}
diff -X dontdiff -Naur linux-linus/Documentation/Changes linux/Documentation/Changes
--- linux-linus/Documentation/Changes 2002-12-16 03:58:39.000000000 +0000
+++ linux/Documentation/Changes 2002-12-16 03:57:39.000000000 +0000
@@ -61,6 +61,7 @@
o PPP 2.4.0 # pppd --version
o isdn4k-utils 3.1pre1 # isdnctrl 2>&1|grep version
o procps 2.0.9 # ps --version
+o oprofile 0.5 # oprofiled --version
Kernel compilation
==================
@@ -368,6 +369,10 @@
---------
o <ftp://ftp.inr.ac.ru/ip-routing/iproute2-2.2.4-now-ss991023.tar.gz>
+OProfile
+--------
+o <http://oprofile.sf.net/download.php3>
+
Suggestions and corrections
===========================
diff -X dontdiff -Naur linux-linus/drivers/oprofile/buffer_sync.c linux/drivers/oprofile/buffer_sync.c
--- linux-linus/drivers/oprofile/buffer_sync.c 2002-12-16 03:54:20.000000000 +0000
+++ linux/drivers/oprofile/buffer_sync.c 2002-12-16 03:53:07.000000000 +0000
@@ -19,17 +19,17 @@
* objects.
*/
-#include <linux/fs.h>
#include <linux/mm.h>
-#include <linux/timer.h>
-#include <linux/dcookies.h>
+#include <linux/workqueue.h>
#include <linux/notifier.h>
+#include <linux/dcookies.h>
#include <linux/profile.h>
-#include <linux/workqueue.h>
-
+#include <linux/fs.h>
+
+#include "oprofile_stats.h"
#include "event_buffer.h"
#include "cpu_buffer.h"
-#include "oprofile_stats.h"
+#include "buffer_sync.h"
#define DEFAULT_EXPIRE (HZ / 4)
diff -X dontdiff -Naur linux-linus/drivers/oprofile/cpu_buffer.c linux/drivers/oprofile/cpu_buffer.c
--- linux-linus/drivers/oprofile/cpu_buffer.c 2002-12-16 03:54:21.000000000 +0000
+++ linux/drivers/oprofile/cpu_buffer.c 2002-12-17 16:59:03.000000000 +0000
@@ -19,13 +19,10 @@
#include <linux/sched.h>
#include <linux/vmalloc.h>
-#include <linux/smp.h>
#include <linux/errno.h>
-#include <linux/cache.h>
#include "cpu_buffer.h"
#include "oprof.h"
-#include "oprofile_stats.h"
struct oprofile_cpu_buffer cpu_buffer[NR_CPUS] __cacheline_aligned;
@@ -68,6 +65,7 @@
b->sample_received = 0;
b->sample_lost_locked = 0;
b->sample_lost_overflow = 0;
+ b->sample_lost_task_exit = 0;
}
return 0;
fail:
@@ -92,9 +90,6 @@
struct oprofile_cpu_buffer * cpu_buf = &cpu_buffer[cpu];
struct task_struct * task;
- /* temporary ? */
- BUG_ON(!oprofile_started);
-
cpu_buf->sample_received++;
if (!spin_trylock(&cpu_buf->int_lock)) {
diff -X dontdiff -Naur linux-linus/drivers/oprofile/event_buffer.c linux/drivers/oprofile/event_buffer.c
--- linux-linus/drivers/oprofile/event_buffer.c 2002-12-16 03:54:21.000000000 +0000
+++ linux/drivers/oprofile/event_buffer.c 2002-12-16 03:53:07.000000000 +0000
@@ -12,19 +12,15 @@
* escape value ESCAPE_CODE followed by an identifying code.
*/
-#include <linux/fs.h>
-#include <linux/slab.h>
-#include <linux/sched.h>
#include <linux/vmalloc.h>
-#include <linux/smp.h>
-#include <linux/dcookies.h>
#include <linux/oprofile.h>
+#include <linux/sched.h>
+#include <linux/dcookies.h>
+#include <linux/fs.h>
#include <asm/uaccess.h>
-#include <asm/atomic.h>
-
-#include "event_buffer.h"
-#include "cpu_buffer.h"
+
#include "oprof.h"
+#include "event_buffer.h"
#include "oprofile_stats.h"
DECLARE_MUTEX(buffer_sem);
diff -X dontdiff -Naur linux-linus/drivers/oprofile/event_buffer.h linux/drivers/oprofile/event_buffer.h
--- linux-linus/drivers/oprofile/event_buffer.h 2002-12-16 03:54:21.000000000 +0000
+++ linux/drivers/oprofile/event_buffer.h 2002-12-16 03:53:07.000000000 +0000
@@ -11,7 +11,7 @@
#define EVENT_BUFFER_H
#include <linux/types.h>
-#include <linux/sem.h>
+#include <asm/semaphore.h>
int alloc_event_buffer(void);
diff -X dontdiff -Naur linux-linus/drivers/oprofile/oprof.c linux/drivers/oprofile/oprof.c
--- linux-linus/drivers/oprofile/oprof.c 2002-12-16 03:54:21.000000000 +0000
+++ linux/drivers/oprofile/oprof.c 2002-12-17 17:23:18.000000000 +0000
@@ -10,12 +10,8 @@
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
-#include <linux/mm.h>
-#include <linux/module.h>
-#include <linux/sched.h>
-#include <linux/notifier.h>
-#include <linux/profile.h>
#include <linux/oprofile.h>
+#include <asm/semaphore.h>
#include "oprof.h"
#include "event_buffer.h"
@@ -86,6 +82,7 @@
goto out;
oprofile_started = 1;
+
oprofile_reset_stats();
out:
up(&start_sem);
@@ -148,6 +145,10 @@
oprofilefs_unregister();
}
-MODULE_LICENSE("GPL");
+
module_init(oprofile_init);
module_exit(oprofile_exit);
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("John Levon <levon@movementarian.org>");
+MODULE_DESCRIPTION("OProfile system profiler");
diff -X dontdiff -Naur linux-linus/drivers/oprofile/oprof.h linux/drivers/oprofile/oprof.h
--- linux-linus/drivers/oprofile/oprof.h 2002-12-16 03:54:21.000000000 +0000
+++ linux/drivers/oprofile/oprof.h 2002-12-17 17:00:08.000000000 +0000
@@ -10,9 +10,6 @@
#ifndef OPROF_H
#define OPROF_H
-#include <linux/spinlock.h>
-#include <linux/oprofile.h>
-
int oprofile_setup(void);
void oprofile_shutdown(void);
@@ -22,6 +19,8 @@
int oprofile_start(void);
void oprofile_stop(void);
+struct oprofile_operations;
+
extern unsigned long fs_buffer_size;
extern unsigned long fs_cpu_buffer_size;
extern unsigned long fs_buffer_watershed;
@@ -29,6 +28,9 @@
extern struct oprofile_operations * oprofile_ops;
extern unsigned long oprofile_started;
+struct super_block;
+struct dentry;
+
void oprofile_create_files(struct super_block * sb, struct dentry * root);
#endif /* OPROF_H */
diff -X dontdiff -Naur linux-linus/drivers/oprofile/oprofile_files.c linux/drivers/oprofile/oprofile_files.c
--- linux-linus/drivers/oprofile/oprofile_files.c 2002-12-16 03:54:21.000000000 +0000
+++ linux/drivers/oprofile/oprofile_files.c 2002-12-17 17:23:07.000000000 +0000
@@ -7,26 +7,18 @@
* @author John Levon <levon@movementarian.org>
*/
-#include <linux/oprofile.h>
#include <linux/fs.h>
-#include <linux/slab.h>
-#include <asm/uaccess.h>
-
-#include "oprof.h"
+#include <linux/oprofile.h>
+
#include "event_buffer.h"
#include "oprofile_stats.h"
+#include "oprof.h"
unsigned long fs_buffer_size = 131072;
unsigned long fs_cpu_buffer_size = 8192;
unsigned long fs_buffer_watershed = 32768; /* FIXME: tune */
-static int simple_open(struct inode * inode, struct file * filp)
-{
- return 0;
-}
-
-
static ssize_t cpu_type_read(struct file * file, char * buf, size_t count, loff_t * offset)
{
unsigned long cpu_type = oprofile_cpu_type;
@@ -36,7 +28,6 @@
static struct file_operations cpu_type_fops = {
- .open = simple_open,
.read = cpu_type_read,
};
@@ -71,15 +62,26 @@
static struct file_operations enable_fops = {
- .open = simple_open,
.read = enable_read,
.write = enable_write,
};
+
+static ssize_t dump_write(struct file *file, char const * buf, size_t count, loff_t * offset)
+{
+ wake_up_buffer_waiter();
+ return count;
+}
+
+
+static struct file_operations dump_fops = {
+ .write = dump_write,
+};
void oprofile_create_files(struct super_block * sb, struct dentry * root)
{
oprofilefs_create_file(sb, root, "enable", &enable_fops);
+ oprofilefs_create_file(sb, root, "dump", &dump_fops);
oprofilefs_create_file(sb, root, "buffer", &event_buffer_fops);
oprofilefs_create_ulong(sb, root, "buffer_size", &fs_buffer_size);
oprofilefs_create_ulong(sb, root, "buffer_watershed", &fs_buffer_watershed);
diff -X dontdiff -Naur linux-linus/drivers/oprofile/oprofilefs.c linux/drivers/oprofile/oprofilefs.c
--- linux-linus/drivers/oprofile/oprofilefs.c 2002-12-16 03:54:21.000000000 +0000
+++ linux/drivers/oprofile/oprofilefs.c 2002-12-16 03:53:08.000000000 +0000
@@ -12,12 +12,9 @@
#include <linux/init.h>
#include <linux/module.h>
-#include <linux/pagemap.h>
-#include <linux/fs.h>
-#include <linux/dcache.h>
-#include <linux/file.h>
-#include <linux/namei.h>
#include <linux/oprofile.h>
+#include <linux/fs.h>
+#include <linux/pagemap.h>
#include <asm/uaccess.h>
#include "oprof.h"
diff -X dontdiff -Naur linux-linus/include/linux/oprofile.h linux/include/linux/oprofile.h
--- linux-linus/include/linux/oprofile.h 2002-12-16 03:55:21.000000000 +0000
+++ linux/include/linux/oprofile.h 2002-12-16 03:54:18.000000000 +0000
@@ -55,7 +55,7 @@
* Add a sample. This may be called from any context. Pass
* smp_processor_id() as cpu.
*/
-extern void FASTCALL(oprofile_add_sample(unsigned long eip, unsigned long event, int cpu));
+extern void oprofile_add_sample(unsigned long eip, unsigned long event, int cpu);
/**
* Create a file of the given name as a child of the given root, with
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2002-12-17 17:43 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2002-12-17 17:50 [PATCH] oprofile update for 2.5.52 John Levon
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.