Subversion Repositories HelenOS

Rev

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

Rev 2131 Rev 2307
Line 334... Line 334...
334
    spinlock_lock(&box->irq_lock);
334
    spinlock_lock(&box->irq_lock);
335
   
335
   
336
    while (box->irq_head.next != &box->irq_head) {
336
    while (box->irq_head.next != &box->irq_head) {
337
        link_t *cur = box->irq_head.next;
337
        link_t *cur = box->irq_head.next;
338
        irq_t *irq;
338
        irq_t *irq;
-
 
339
        DEADLOCK_PROBE_INIT(p_irqlock);
339
       
340
       
340
        irq = list_get_instance(cur, irq_t, notif_cfg.link);
341
        irq = list_get_instance(cur, irq_t, notif_cfg.link);
341
        if (!spinlock_trylock(&irq->lock)) {
342
        if (!spinlock_trylock(&irq->lock)) {
342
            /*
343
            /*
343
             * Avoid deadlock by trying again.
344
             * Avoid deadlock by trying again.
344
             */
345
             */
345
            spinlock_unlock(&box->irq_lock);
346
            spinlock_unlock(&box->irq_lock);
346
            interrupts_restore(ipl);
347
            interrupts_restore(ipl);
-
 
348
            DEADLOCK_PROBE(p_irqlock, DEADLOCK_THRESHOLD);
347
            goto loop;
349
            goto loop;
348
        }
350
        }
349
       
351
       
350
        ASSERT(irq->notif_cfg.answerbox == box);
352
        ASSERT(irq->notif_cfg.answerbox == box);
351
       
353