Ignore:
Timestamp:
Nov 13, 2012, 6:20:39 PM (12 years ago)
Author:
meunier
Message:

Correction d'un bug dans drivers.c (fonctions _ioc_completed et _dma_completed) :
on relâche le lock après avoir remis à 0 les variables de synchro _ioc_done et _dma_done (+ pour le dma, lecture du status avant de relâcher le lock)
(+ ajout d'un sync dans les 2 cas avant relâchement du lock pour tsar)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • soft/giet_vm/sys/drivers.c

    r218 r223  
    645645
    646646    // reset synchronization variables
    647     _ioc_lock =0;
    648     _ioc_done =0;
     647    _ioc_done = 0;
     648    asm volatile ("sync");
     649    _ioc_lock = 0;
    649650
    650651    return ret;
     
    964965    unsigned int    task_id = _get_current_task_id();
    965966    unsigned int    dma_id  = _get_context_slot( task_id, CTX_DMA_ID );
     967    unsigned int    dma_ret;
    966968
    967969    // busy waiting with a pseudo random delay between bus access
     
    10011003
    10021004    // reset synchronization variables
     1005    _dma_done[dma_id] = 0;
     1006    dma_ret = dma_status[dma_id];
     1007    asm volatile("sync\n")
    10031008    _dma_lock[dma_id] = 0;
    1004     _dma_done[dma_id] = 0;
    1005 
    1006     return _dma_status[dma_id];
     1009
     1010    return dma_ret;
    10071011
    10081012#else //NB_DMAS_MAX == 0
Note: See TracChangeset for help on using the changeset viewer.