[POWERPC] Fix oprofile support for e500 in arch/powerpc
[powerpc.git] / arch / powerpc / kernel / pmc.c
index 2d333cc..3d8f6f4 100644 (file)
@@ -12,7 +12,6 @@
  *  2 of the License, or (at your option) any later version.
  */
 
-#include <linux/config.h>
 #include <linux/errno.h>
 #include <linux/spinlock.h>
 #include <linux/module.h>
@@ -43,8 +42,13 @@ static void dummy_perf(struct pt_regs *regs)
        mtspr(SPRN_MMCR0, mmcr0);
 }
 #else
+/* Ensure exceptions are disabled */
 static void dummy_perf(struct pt_regs *regs)
 {
+       unsigned int mmcr0 = mfspr(SPRN_MMCR0);
+
+       mmcr0 &= ~(MMCR0_PMXE);
+       mtspr(SPRN_MMCR0, mmcr0);
 }
 #endif
 
@@ -67,7 +71,7 @@ int reserve_pmc_hardware(perf_irq_t new_perf_irq)
        }
 
        pmc_owner_caller = __builtin_return_address(0);
-       perf_irq = new_perf_irq ? : dummy_perf;
+       perf_irq = new_perf_irq ? new_perf_irq : dummy_perf;
 
  out:
        spin_unlock(&pmc_owner_lock);