|
@@ -7,6 +7,8 @@
|
|
|
#include <linux/init.h>
|
|
|
#include <linux/irq.h>
|
|
|
|
|
|
+#include <linux/perf_counter.h>
|
|
|
+
|
|
|
#include <asm/pil.h>
|
|
|
#include <asm/pcr.h>
|
|
|
#include <asm/nmi.h>
|
|
@@ -34,10 +36,20 @@ unsigned int picl_shift;
|
|
|
*/
|
|
|
void deferred_pcr_work_irq(int irq, struct pt_regs *regs)
|
|
|
{
|
|
|
+ struct pt_regs *old_regs;
|
|
|
+
|
|
|
clear_softint(1 << PIL_DEFERRED_PCR_WORK);
|
|
|
+
|
|
|
+ old_regs = set_irq_regs(regs);
|
|
|
+ irq_enter();
|
|
|
+#ifdef CONFIG_PERF_COUNTERS
|
|
|
+ perf_counter_do_pending();
|
|
|
+#endif
|
|
|
+ irq_exit();
|
|
|
+ set_irq_regs(old_regs);
|
|
|
}
|
|
|
|
|
|
-void schedule_deferred_pcr_work(void)
|
|
|
+void set_perf_counter_pending(void)
|
|
|
{
|
|
|
set_softint(1 << PIL_DEFERRED_PCR_WORK);
|
|
|
}
|