Changeset 5e04b48d in mainline
- Timestamp:
- 2005-10-02T14:49:39Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- ac4177ca
- Parents:
- 922c7ce
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/synch/spinlock.c
r922c7ce r5e04b48d 27 27 */ 28 28 29 #include <arch.h> 30 29 #include <synch/spinlock.h> 31 30 #include <arch/atomic.h> 32 31 #include <arch/barrier.h> 33 #include < synch/spinlock.h>32 #include <arch.h> 34 33 #include <preemption.h> 35 34 #include <print.h> 35 #include <debug.h> 36 36 37 37 #ifdef __SMP__ 38 38 39 /** Initialize spinlock 40 * 41 * Initialize spinlock. 42 * 43 * @param sl Pointer to spinlock_t structure. 44 */ 39 45 void spinlock_initialize(spinlock_t *sl) 40 46 { … … 43 49 44 50 #ifdef DEBUG_SPINLOCK 51 /** Lock spinlock 52 * 53 * Lock spinlock. 54 * This version has limitted ability to report 55 * possible occurence of deadlock. 56 * 57 * @param sl Pointer to spinlock_t structure. 58 */ 45 59 void spinlock_lock(spinlock_t *sl) 46 60 { … … 55 69 } 56 70 } 71 72 /* 73 * Prevent critical section code from bleeding out this way up. 74 */ 57 75 CS_ENTER_BARRIER(); 58 76 59 77 } 78 60 79 #else 80 81 /** Lock spinlock 82 * 83 * Lock spinlock. 84 * 85 * @param sl Pointer to spinlock_t structure. 86 */ 61 87 void spinlock_lock(spinlock_t *sl) 62 88 { … … 68 94 */ 69 95 spinlock_arch(&sl->val); 96 97 /* 98 * Prevent critical section code from bleeding out this way up. 99 */ 70 100 CS_ENTER_BARRIER(); 71 101 } 72 102 #endif 73 103 104 /** Lock spinlock conditionally 105 * 106 * Lock spinlock conditionally. 107 * If the spinlock is not available at the moment, 108 * signal failure. 109 * 110 * @param sl Pointer to spinlock_t structure. 111 * 112 * @return Zero on failure, non-zero otherwise. 113 */ 74 114 int spinlock_trylock(spinlock_t *sl) 75 115 { … … 78 118 preemption_disable(); 79 119 rc = !test_and_set(&sl->val); 120 121 /* 122 * Prevent critical section code from bleeding out this way up. 123 */ 80 124 CS_ENTER_BARRIER(); 81 125 … … 86 130 } 87 131 132 /** Unlock spinlock 133 * 134 * Unlock spinlock. 135 * 136 * @param sl Pointer to spinlock_t structure. 137 */ 88 138 void spinlock_unlock(spinlock_t *sl) 89 139 { 140 ASSERT(sl->val != 0); 141 142 /* 143 * Prevent critical section code from bleeding out this way down. 144 */ 90 145 CS_LEAVE_BARRIER(); 146 91 147 sl->val = 0; 92 148 preemption_enable();
Note:
See TracChangeset
for help on using the changeset viewer.