oprofile, x86: Reimplement nmi timer mode using perf event
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / drivers / oprofile / oprof.c
index f7cd06967aedd7bb4c9c8698a1f0ceb6f6358731..ed2c3ec07024d0bcb04686a64510f1a607bfded7 100644 (file)
@@ -246,26 +246,24 @@ static int __init oprofile_init(void)
        int err;
 
        /* always init architecture to setup backtrace support */
+       timer_mode = 0;
        err = oprofile_arch_init(&oprofile_ops);
+       if (!err) {
+               if (!timer && !oprofilefs_register())
+                       return 0;
+               oprofile_arch_exit();
+       }
 
-       timer_mode = err || timer;      /* fall back to timer mode on errors */
-       if (timer_mode) {
-               if (!err)
-                       oprofile_arch_exit();
+       /* setup timer mode: */
+       timer_mode = 1;
+       /* no nmi timer mode if oprofile.timer is set */
+       if (timer || op_nmi_timer_init(&oprofile_ops)) {
                err = oprofile_timer_init(&oprofile_ops);
                if (err)
                        return err;
        }
 
-       err = oprofilefs_register();
-       if (!err)
-               return 0;
-
-       /* failed */
-       if (!timer_mode)
-               oprofile_arch_exit();
-
-       return err;
+       return oprofilefs_register();
 }