]> git.neil.brown.name Git - history.git/commitdiff
[PATCH] OProfile: timer usage override
authorJohn Levon <levon@movementarian.org>
Sun, 25 May 2003 14:42:45 +0000 (07:42 -0700)
committerLinus Torvalds <torvalds@home.transmeta.com>
Sun, 25 May 2003 14:42:45 +0000 (07:42 -0700)
A patch mostly by Will Cohen, adding a parameter to OProfile to
over-ride use of the perfctr hardware. Useful for testing and
a host of other things.

Documentation/kernel-parameters.txt
drivers/oprofile/oprof.c

index 2d87a0293cb558eab3542a0f67ef50dba79ff25a..dd844c9ff2f7a0984222d71dcb57aba00d334e7c 100644 (file)
@@ -652,6 +652,9 @@ running once the system is up.
        opl3sa2=        [HW,OSS]
                        Format: <io>,<irq>,<dma>,<dma2>,<mss_io>,<mpu_io>,<ymode>,<loopback>[,<isapnp>,<multiple]
  
+       oprofile.timer= [HW]
+                       Use timer interrupt instead of performance counters
+
        optcd=          [HW,CD]
                        Format: <io>
 
index adaf0c407f879bc1f0347f8c495efbc14bf2718b..bcc7ae257544f291db37160640e9390541876919 100644 (file)
@@ -11,6 +11,7 @@
 #include <linux/module.h>
 #include <linux/init.h>
 #include <linux/oprofile.h>
+#include <linux/moduleparam.h>
 #include <asm/semaphore.h>
 
 #include "oprof.h"
@@ -24,6 +25,12 @@ unsigned long oprofile_started;
 static unsigned long is_setup;
 static DECLARE_MUTEX(start_sem);
 
+/* timer
+   0 - use performance monitoring hardware if available
+   1 - use the timer int mechanism regardless
+ */
+static int timer = 0;
+
 int oprofile_setup(void)
 {
        int err;
@@ -124,13 +131,16 @@ extern void timer_init(struct oprofile_operations ** ops);
 
 static int __init oprofile_init(void)
 {
-       int err;
+       int err = -ENODEV;
+
+       if (!timer) {
+               /* Architecture must fill in the interrupt ops and the
+                * logical CPU type, or we can fall back to the timer
+                * interrupt profiler.
+                */
+               err = oprofile_arch_init(&oprofile_ops);
+       }
 
-       /* Architecture must fill in the interrupt ops and the
-        * logical CPU type, or we can fall back to the timer
-        * interrupt profiler.
-        */
-       err = oprofile_arch_init(&oprofile_ops);
        if (err == -ENODEV) {
                timer_init(&oprofile_ops);
                err = 0;
@@ -163,6 +173,9 @@ static void __exit oprofile_exit(void)
  
 module_init(oprofile_init);
 module_exit(oprofile_exit);
+
+module_param_named(timer, timer, int, 0644);
+MODULE_PARM_DESC(timer, "force use of timer interrupt");
  
 MODULE_LICENSE("GPL");
 MODULE_AUTHOR("John Levon <levon@movementarian.org>");