#include <asm/atomic.h>
 #include <asm/traps.h>
 
-#define IPIPE_ARCH_STRING     "1.9-00"
+#define IPIPE_ARCH_STRING     "1.9-01"
 #define IPIPE_MAJOR_NUMBER    1
 #define IPIPE_MINOR_NUMBER    9
-#define IPIPE_PATCH_NUMBER    0
+#define IPIPE_PATCH_NUMBER    1
 
 #ifdef CONFIG_SMP
 #error "I-pipe/blackfin: SMP not implemented"
 
 void __ipipe_enable_irqdesc(struct ipipe_domain *ipd, unsigned irq)
 {
        struct irq_desc *desc = irq_to_desc(irq);
-       int prio = desc->ic_prio;
+       int prio = __ipipe_get_irq_priority(irq);
 
        desc->depth = 0;
        if (ipd != &ipipe_root &&
 
 void __ipipe_disable_irqdesc(struct ipipe_domain *ipd, unsigned irq)
 {
-       struct irq_desc *desc = irq_to_desc(irq);
-       int prio = desc->ic_prio;
+       int prio = __ipipe_get_irq_priority(irq);
 
        if (ipd != &ipipe_root &&
            atomic_dec_and_test(&__ipipe_irq_lvdepth[prio]))
 
 asmlinkage void __ipipe_sync_root(void)
 {
+       void (*irq_tail_hook)(void) = (void (*)(void))__ipipe_irq_tail_hook;
        unsigned long flags;
 
        BUG_ON(irqs_disabled());
 
        local_irq_save_hw(flags);
 
+       if (irq_tail_hook)
+               irq_tail_hook();
+
        clear_thread_flag(TIF_IRQ_SYNC);
 
        if (ipipe_root_cpudom_var(irqpend_himask) != 0)
 
        bfin_write_SIC_IWR(IWR_DISABLE_ALL);
 #endif
 
-#ifdef CONFIG_IPIPE
-       for (irq = 0; irq < NR_IRQS; irq++) {
-               struct irq_desc *desc = irq_to_desc(irq);
-               desc->ic_prio = __ipipe_get_irq_priority(irq);
-       }
-#endif /* CONFIG_IPIPE */
-
        return 0;
 }