summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Morton <akpm@osdl.org>2004-02-18 04:56:21 -0800
committerLinus Torvalds <torvalds@ppc970.osdl.org>2004-02-18 04:56:21 -0800
commit3a67d0c3cb2f8065d9fb63aeabe07a5525af3edf (patch)
tree130a31a6e2510b336e1986a9a8589aed03a35297
parent01d5c986e8c3e88a54349564b40ea5d9b1671839 (diff)
[PATCH] oprofile: ARM infrastructure
From: Philippe Elie <phil.el@wanadoo.fr> From: Zwane Mwaikambo <zwane@arm.linux.org.uk> This patch adds infrastructure code and enables ARM to utilise the timer int oprofile driver. There is PMU code under development for the XScale but that is still forthcoming. In the meantime you can use the timer int driver with an updated Oprofile-CVS userspace (SF is a bit slow, please allow 24hrs).
-rw-r--r--arch/arm/Kconfig2
-rw-r--r--arch/arm/Makefile1
-rw-r--r--arch/arm/kernel/time.c3
-rw-r--r--arch/arm/oprofile/Kconfig23
-rw-r--r--arch/arm/oprofile/Makefile9
-rw-r--r--arch/arm/oprofile/init.c22
-rw-r--r--drivers/oprofile/timer_int.c1
7 files changed, 60 insertions, 1 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 0ff30774e762..aa3469d06933 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -639,6 +639,8 @@ source "drivers/media/Kconfig"
source "fs/Kconfig"
+source "arch/arm/oprofile/Kconfig"
+
source "drivers/video/Kconfig"
if ARCH_ACORN || ARCH_CLPS7500 || ARCH_TBOX || ARCH_SHARK || ARCH_SA1100 || PCI
diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index 371a4b10a4cc..00963cebd1ff 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -116,6 +116,7 @@ endif
core-$(CONFIG_FPE_NWFPE) += arch/arm/nwfpe/
core-$(CONFIG_FPE_FASTFPE) += $(FASTFPE_OBJ)
+drivers-$(CONFIG_OPROFILE) += arch/arm/oprofile/
drivers-$(CONFIG_ARCH_CLPS7500) += drivers/acorn/char/
drivers-$(CONFIG_ARCH_L7200) += drivers/acorn/char/
diff --git a/arch/arm/kernel/time.c b/arch/arm/kernel/time.c
index 150f590bcf81..80afc5bc84a1 100644
--- a/arch/arm/kernel/time.c
+++ b/arch/arm/kernel/time.c
@@ -85,6 +85,9 @@ unsigned long long __attribute__((weak)) sched_clock(void)
*/
static inline void do_profile(struct pt_regs *regs)
{
+
+ profile_hook(regs);
+
if (!user_mode(regs) &&
prof_buffer &&
current->pid) {
diff --git a/arch/arm/oprofile/Kconfig b/arch/arm/oprofile/Kconfig
new file mode 100644
index 000000000000..19d37730b664
--- /dev/null
+++ b/arch/arm/oprofile/Kconfig
@@ -0,0 +1,23 @@
+
+menu "Profiling support"
+ depends on EXPERIMENTAL
+
+config PROFILING
+ bool "Profiling support (EXPERIMENTAL)"
+ help
+ Say Y here to enable the extended profiling support mechanisms used
+ by profilers such as OProfile.
+
+
+config OPROFILE
+ tristate "OProfile system profiling (EXPERIMENTAL)"
+ depends on PROFILING
+ help
+ OProfile is a profiling system capable of profiling the
+ whole system, include the kernel, kernel modules, libraries,
+ and applications.
+
+ If unsure, say N.
+
+endmenu
+
diff --git a/arch/arm/oprofile/Makefile b/arch/arm/oprofile/Makefile
new file mode 100644
index 000000000000..e9feca1ca28b
--- /dev/null
+++ b/arch/arm/oprofile/Makefile
@@ -0,0 +1,9 @@
+obj-$(CONFIG_OPROFILE) += oprofile.o
+
+DRIVER_OBJS = $(addprefix ../../../drivers/oprofile/, \
+ oprof.o cpu_buffer.o buffer_sync.o \
+ event_buffer.o oprofile_files.o \
+ oprofilefs.o oprofile_stats.o \
+ timer_int.o )
+
+oprofile-y := $(DRIVER_OBJS) init.o
diff --git a/arch/arm/oprofile/init.c b/arch/arm/oprofile/init.c
new file mode 100644
index 000000000000..2739aedcbc1b
--- /dev/null
+++ b/arch/arm/oprofile/init.c
@@ -0,0 +1,22 @@
+/**
+ * @file init.c
+ *
+ * @remark Copyright 2004 Oprofile Authors
+ *
+ * @author Zwane Mwaikambo
+ */
+
+#include <linux/oprofile.h>
+#include <linux/init.h>
+#include <linux/errno.h>
+
+int oprofile_arch_init(struct oprofile_operations **ops)
+{
+ int ret = -ENODEV;
+
+ return ret;
+}
+
+void oprofile_arch_exit(void)
+{
+}
diff --git a/drivers/oprofile/timer_int.c b/drivers/oprofile/timer_int.c
index 3e8c44b2eff2..3fae2c772465 100644
--- a/drivers/oprofile/timer_int.c
+++ b/drivers/oprofile/timer_int.c
@@ -10,7 +10,6 @@
#include <linux/kernel.h>
#include <linux/notifier.h>
#include <linux/smp.h>
-#include <linux/irq.h>
#include <linux/oprofile.h>
#include <linux/profile.h>
#include <linux/init.h>