Subversion Repositories HelenOS

Rev

Rev 3071 | Rev 3672 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3071 Rev 3655
Line 77... Line 77...
77
    if (irq) {
77
    if (irq) {
78
        /*
78
        /*
79
         * The IRQ handler was found.
79
         * The IRQ handler was found.
80
         */
80
         */
81
        irq->handler(irq, irq->arg);
81
        irq->handler(irq, irq->arg);
-
 
82
        /*
-
 
83
         * See if there is a clear-interrupt-routine and call it.
-
 
84
         */
-
 
85
        if (irq->cir) {
-
 
86
            irq->cir(irq->cir_arg, irq->inr);
-
 
87
        }
82
        spinlock_unlock(&irq->lock);
88
        spinlock_unlock(&irq->lock);
83
    } else if (data0 > config.base) {
89
    } else if (data0 > config.base) {
84
        /*
90
        /*
85
         * This is a cross-call.
91
         * This is a cross-call.
86
         * data0 contains address of the kernel function.
92
         * data0 contains address of the kernel function.
Line 96... Line 102...
96
        /*
102
        /*
97
         * Spurious interrupt.
103
         * Spurious interrupt.
98
         */
104
         */
99
#ifdef CONFIG_DEBUG
105
#ifdef CONFIG_DEBUG
100
        printf("cpu%u: spurious interrupt (intrcv=%#" PRIx64
106
        printf("cpu%u: spurious interrupt (intrcv=%#" PRIx64
101
            ", data0=%#" PRIx64 ")\n", CPU->id, intrcv, data0);
107
            ", data0=%#" PRIx64 ")\n", CPU->id, intrcv, data0);
102
#endif
108
#endif
103
    }
109
    }
104
 
110
 
105
    membar();
111
    membar();
106
    asi_u64_write(ASI_INTR_RECEIVE, 0, 0);
112
    asi_u64_write(ASI_INTR_RECEIVE, 0, 0);