]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - arch/metag/kernel/kick.c
metag: kick: add missing irq_enter/exit to kick_handler()
[karo-tx-linux.git] / arch / metag / kernel / kick.c
index 50fcbec98cd288d85611a57808676bfa071fb5f1..beb37762132226974eebabc7afdb36981bb7ba23 100644 (file)
@@ -26,6 +26,8 @@
  * pass it as an argument.
  */
 #include <linux/export.h>
+#include <linux/hardirq.h>
+#include <linux/irq.h>
 #include <linux/kernel.h>
 #include <linux/mm.h>
 #include <linux/types.h>
@@ -66,6 +68,7 @@ EXPORT_SYMBOL(kick_unregister_func);
 TBIRES
 kick_handler(TBIRES State, int SigNum, int Triggers, int Inst, PTBI pTBI)
 {
+       struct pt_regs *old_regs;
        struct kick_irq_handler *kh;
        struct list_head *lh;
        int handled = 0;
@@ -79,6 +82,9 @@ kick_handler(TBIRES State, int SigNum, int Triggers, int Inst, PTBI pTBI)
 
        trace_hardirqs_off();
 
+       old_regs = set_irq_regs((struct pt_regs *)State.Sig.pCtx);
+       irq_enter();
+
        /*
         * There is no need to disable interrupts here because we
         * can't nest KICK interrupts in a KICK interrupt handler.
@@ -97,5 +103,8 @@ kick_handler(TBIRES State, int SigNum, int Triggers, int Inst, PTBI pTBI)
 
        WARN_ON(!handled);
 
+       irq_exit();
+       set_irq_regs(old_regs);
+
        return tail_end(ret);
 }