Changeset d896525 in mainline


Ignore:
Timestamp:
2005-06-09T13:35:13Z (19 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
18e0a6c
Parents:
a7a1063
Message:

Fix wrong locking order in scheduler.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/proc/scheduler.c

    ra7a1063 rd896525  
    118118
    119119        cpu_priority_high();
    120 
    121         for (i = 0; i<RQ_COUNT; i++) {
     120       
     121        i = 0;
     122retry:
     123        for (; i<RQ_COUNT; i++) {
    122124                r = &CPU->rq[i];
    123125                spinlock_lock(&r->lock);
     
    130132                }
    131133       
    132                 atomic_dec(&nrdy);
    133 
    134                 spinlock_lock(&CPU->lock);
     134                /* avoid deadlock with relink_rq */
     135                if (!spinlock_trylock(&CPU->lock)) {
     136                        /*
     137                         * Unlock r and try again.
     138                         */
     139                        spinlock_unlock(&r->lock);
     140                        goto retry;
     141                }
    135142                CPU->nrdy--;
    136143                spinlock_unlock(&CPU->lock);
    137144
     145                atomic_dec(&nrdy);
    138146                r->n--;
    139147
Note: See TracChangeset for help on using the changeset viewer.