Subversion Repositories HelenOS

Rev

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

Rev 3493 Rev 3665
Line 85... Line 85...
85
    if (irq) {
85
    if (irq) {
86
        /*
86
        /*
87
         * The IRQ handler was found.
87
         * The IRQ handler was found.
88
         */
88
         */
89
        irq->handler(irq, irq->arg);
89
        irq->handler(irq, irq->arg);
-
 
90
        /*
-
 
91
         * See if there is a clear-interrupt-routine and call it.
-
 
92
         */
-
 
93
        if (irq->cir) {
-
 
94
            irq->cir(irq->cir_arg, irq->inr);
-
 
95
        }
90
        spinlock_unlock(&irq->lock);
96
        spinlock_unlock(&irq->lock);
91
    } else if (data0 > config.base) {
97
    } else if (data0 > config.base) {
92
        /*
98
        /*
93
         * This is a cross-call.
99
         * This is a cross-call.
94
         * data0 contains address of the kernel function.
100
         * data0 contains address of the kernel function.
Line 104... Line 110...
104
        /*
110
        /*
105
         * Spurious interrupt.
111
         * Spurious interrupt.
106
         */
112
         */
107
#ifdef CONFIG_DEBUG
113
#ifdef CONFIG_DEBUG
108
        printf("cpu%u: spurious interrupt (intrcv=%#" PRIx64
114
        printf("cpu%u: spurious interrupt (intrcv=%#" PRIx64
109
            ", data0=%#" PRIx64 ")\n", CPU->id, intrcv, data0);
115
            ", data0=%#" PRIx64 ")\n", CPU->id, intrcv, data0);
110
#endif
116
#endif
111
    }
117
    }
112
 
118
 
113
    membar();
119
    membar();
114
    asi_u64_write(ASI_INTR_RECEIVE, 0, 0);
120
    asi_u64_write(ASI_INTR_RECEIVE, 0, 0);