Merge branch 'x86-debug-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
[deliverable/linux.git] / arch / mips / oprofile / op_model_mipsxx.c
index 54759f1669d3a00aca9e07fb213842b397b4b800..4d80a856048d19261e3af077ff1ff5344b3b26d2 100644 (file)
@@ -298,6 +298,11 @@ static void reset_counters(void *arg)
        }
 }
 
+static irqreturn_t mipsxx_perfcount_int(int irq, void *dev_id)
+{
+       return mipsxx_perfcount_handler();
+}
+
 static int __init mipsxx_init(void)
 {
        int counters;
@@ -317,6 +322,10 @@ static int __init mipsxx_init(void)
 
        op_model_mipsxx_ops.num_counters = counters;
        switch (current_cpu_type()) {
+       case CPU_M14KC:
+               op_model_mipsxx_ops.cpu_type = "mips/M14Kc";
+               break;
+
        case CPU_20KC:
                op_model_mipsxx_ops.cpu_type = "mips/20K";
                break;
@@ -374,6 +383,10 @@ static int __init mipsxx_init(void)
        save_perf_irq = perf_irq;
        perf_irq = mipsxx_perfcount_handler;
 
+       if ((cp0_perfcount_irq >= 0) && (cp0_compare_irq != cp0_perfcount_irq))
+               return request_irq(cp0_perfcount_irq, mipsxx_perfcount_int,
+                       0, "Perfcounter", save_perf_irq);
+
        return 0;
 }
 
@@ -381,6 +394,9 @@ static void mipsxx_exit(void)
 {
        int counters = op_model_mipsxx_ops.num_counters;
 
+       if ((cp0_perfcount_irq >= 0) && (cp0_compare_irq != cp0_perfcount_irq))
+               free_irq(cp0_perfcount_irq, save_perf_irq);
+
        counters = counters_per_cpu_to_total(counters);
        on_each_cpu(reset_counters, (void *)(long)counters, 1);
 
This page took 0.024713 seconds and 5 git commands to generate.