Ignore:
Timestamp:
Feb 12, 2013, 6:33:31 PM (11 years ago)
Author:
meunier
Message:

Added support for memspaces and const.
Added an interrupt masking to the "giet_context_switch" syscall
Corrected two bugs in boot/boot_init.c (one minor and one regarding barriers initialization)
Reformatted the code in all files.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • soft/giet_vm/libs/spin_lock.c

    r189 r228  
    2828// If the lock is already taken a random delay is introduced before retry.
    2929///////////////////////////////////////////////////////////////////////////////////
    30 void lock_acquire( giet_lock_t* lock )
    31 {
    32     unsigned int*       plock = &lock->value;
    33  
     30void lock_acquire(giet_lock_t * lock) {
     31    unsigned int * plock = &lock->value;
     32
    3433    asm volatile (
    35             "giet_lock_try:                                     \n"
    36             "ll   $2,    0(%0)                          \n" /* $2 <= lock current value */
    37             "bnez $2,    giet_lock_delay        \n" /* retry if lock already taken */
    38             "li   $3,    1                                      \n" /* $3 <= argument for sc */
    39             "sc   $3,    0(%0)                          \n" /* try to get lock */
    40             "bnez $3,    giet_lock_ok           \n" /* exit if atomic */
     34            "giet_lock_try:                 \n"
     35            "ll   $2,    0(%0)              \n" /* $2 <= lock current value */
     36            "bnez $2,    giet_lock_delay    \n" /* retry if lock already taken */
     37            "li   $3,    1                  \n" /* $3 <= argument for sc */
     38            "sc   $3,    0(%0)              \n" /* try to get lock */
     39            "bnez $3,    giet_lock_ok       \n" /* exit if atomic */
    4140
    42             "giet_lock_delay:                           \n"
    43             "jal  giet_rand                                 \n" /* giet_rand() system call */
    44             "nop                                                        \n"
    45             "andi $4,   $2,     0xFF                    \n"     /* $4 <= delay < 256 cycles */
     41            "giet_lock_delay:               \n"
     42            "jal  giet_rand                 \n" /* giet_rand() system call */
     43            "nop                            \n"
     44            "andi $4,    $2,    0xFF        \n" /* $4 <= delay < 256 cycles */
    4645
    47             "giet_lock_loop:                            \n"
    48             "addi $4,    $4,  -1                        \n" /* $4 <= $4 - 1 */
    49             "beqz $4,    giet_lock_loop         \n" /* test end delay */
    50             "nop                                                        \n"
    51             "j           giet_lock_try          \n" /* retry */
    52             "nop                                                        \n"
    53             "giet_lock_ok:                                      \n"
     46            "giet_lock_loop:                \n"
     47            "addi $4,    $4,  -1            \n" /* $4 <= $4 - 1 */
     48            "beqz $4,    giet_lock_loop     \n" /* test end delay */
     49            "nop                            \n"
     50            "j           giet_lock_try      \n" /* retry */
     51            "nop                            \n"
     52            "giet_lock_ok:                  \n"
    5453            :
    5554            :"r"(plock)
    5655            :"$2", "$3", "$4");
    57 }
     56}
     57
    5858
    5959//////////////////////////////////////////////////////////////////////////////
    6060// lock_release()
    6161//////////////////////////////////////////////////////////////////////////////
    62 void lock_release( giet_lock_t* lock)
    63 {
     62void lock_release(giet_lock_t * lock) {
    6463    lock->value = 0;
    6564}
    6665
     66
     67// Local Variables:
     68// tab-width: 4
     69// c-basic-offset: 4
     70// c-file-offsets:((innamespace . 0)(inline-open . 0))
     71// indent-tabs-mode: nil
     72// End:
     73// vim: filetype=c:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
     74
Note: See TracChangeset for help on using the changeset viewer.