spinlock.c (fb3a6bbc912b12347614e5742c7c61416cdb0ca0) | spinlock.c (e5931943d02bf751b1ec849c0d2ade23d76a8d41) |
---|---|
1/* 2 * arch/s390/lib/spinlock.c 3 * Out of line spinlock code. 4 * 5 * Copyright (C) IBM Corp. 2004, 2006 6 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com) 7 */ 8 --- 101 unchanged lines hidden (view full) --- 110 unsigned int old; 111 int count = spin_retry; 112 113 while (1) { 114 if (count-- <= 0) { 115 _raw_yield(); 116 count = spin_retry; 117 } | 1/* 2 * arch/s390/lib/spinlock.c 3 * Out of line spinlock code. 4 * 5 * Copyright (C) IBM Corp. 2004, 2006 6 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com) 7 */ 8 --- 101 unchanged lines hidden (view full) --- 110 unsigned int old; 111 int count = spin_retry; 112 113 while (1) { 114 if (count-- <= 0) { 115 _raw_yield(); 116 count = spin_retry; 117 } |
118 if (!__raw_read_can_lock(rw)) | 118 if (!arch_read_can_lock(rw)) |
119 continue; 120 old = rw->lock & 0x7fffffffU; 121 if (_raw_compare_and_swap(&rw->lock, old, old + 1) == old) 122 return; 123 } 124} 125EXPORT_SYMBOL(_raw_read_lock_wait); 126 127void _raw_read_lock_wait_flags(arch_rwlock_t *rw, unsigned long flags) 128{ 129 unsigned int old; 130 int count = spin_retry; 131 132 local_irq_restore(flags); 133 while (1) { 134 if (count-- <= 0) { 135 _raw_yield(); 136 count = spin_retry; 137 } | 119 continue; 120 old = rw->lock & 0x7fffffffU; 121 if (_raw_compare_and_swap(&rw->lock, old, old + 1) == old) 122 return; 123 } 124} 125EXPORT_SYMBOL(_raw_read_lock_wait); 126 127void _raw_read_lock_wait_flags(arch_rwlock_t *rw, unsigned long flags) 128{ 129 unsigned int old; 130 int count = spin_retry; 131 132 local_irq_restore(flags); 133 while (1) { 134 if (count-- <= 0) { 135 _raw_yield(); 136 count = spin_retry; 137 } |
138 if (!__raw_read_can_lock(rw)) | 138 if (!arch_read_can_lock(rw)) |
139 continue; 140 old = rw->lock & 0x7fffffffU; 141 local_irq_disable(); 142 if (_raw_compare_and_swap(&rw->lock, old, old + 1) == old) 143 return; 144 } 145} 146EXPORT_SYMBOL(_raw_read_lock_wait_flags); 147 148int _raw_read_trylock_retry(arch_rwlock_t *rw) 149{ 150 unsigned int old; 151 int count = spin_retry; 152 153 while (count-- > 0) { | 139 continue; 140 old = rw->lock & 0x7fffffffU; 141 local_irq_disable(); 142 if (_raw_compare_and_swap(&rw->lock, old, old + 1) == old) 143 return; 144 } 145} 146EXPORT_SYMBOL(_raw_read_lock_wait_flags); 147 148int _raw_read_trylock_retry(arch_rwlock_t *rw) 149{ 150 unsigned int old; 151 int count = spin_retry; 152 153 while (count-- > 0) { |
154 if (!__raw_read_can_lock(rw)) | 154 if (!arch_read_can_lock(rw)) |
155 continue; 156 old = rw->lock & 0x7fffffffU; 157 if (_raw_compare_and_swap(&rw->lock, old, old + 1) == old) 158 return 1; 159 } 160 return 0; 161} 162EXPORT_SYMBOL(_raw_read_trylock_retry); 163 164void _raw_write_lock_wait(arch_rwlock_t *rw) 165{ 166 int count = spin_retry; 167 168 while (1) { 169 if (count-- <= 0) { 170 _raw_yield(); 171 count = spin_retry; 172 } | 155 continue; 156 old = rw->lock & 0x7fffffffU; 157 if (_raw_compare_and_swap(&rw->lock, old, old + 1) == old) 158 return 1; 159 } 160 return 0; 161} 162EXPORT_SYMBOL(_raw_read_trylock_retry); 163 164void _raw_write_lock_wait(arch_rwlock_t *rw) 165{ 166 int count = spin_retry; 167 168 while (1) { 169 if (count-- <= 0) { 170 _raw_yield(); 171 count = spin_retry; 172 } |
173 if (!__raw_write_can_lock(rw)) | 173 if (!arch_write_can_lock(rw)) |
174 continue; 175 if (_raw_compare_and_swap(&rw->lock, 0, 0x80000000) == 0) 176 return; 177 } 178} 179EXPORT_SYMBOL(_raw_write_lock_wait); 180 181void _raw_write_lock_wait_flags(arch_rwlock_t *rw, unsigned long flags) 182{ 183 int count = spin_retry; 184 185 local_irq_restore(flags); 186 while (1) { 187 if (count-- <= 0) { 188 _raw_yield(); 189 count = spin_retry; 190 } | 174 continue; 175 if (_raw_compare_and_swap(&rw->lock, 0, 0x80000000) == 0) 176 return; 177 } 178} 179EXPORT_SYMBOL(_raw_write_lock_wait); 180 181void _raw_write_lock_wait_flags(arch_rwlock_t *rw, unsigned long flags) 182{ 183 int count = spin_retry; 184 185 local_irq_restore(flags); 186 while (1) { 187 if (count-- <= 0) { 188 _raw_yield(); 189 count = spin_retry; 190 } |
191 if (!__raw_write_can_lock(rw)) | 191 if (!arch_write_can_lock(rw)) |
192 continue; 193 local_irq_disable(); 194 if (_raw_compare_and_swap(&rw->lock, 0, 0x80000000) == 0) 195 return; 196 } 197} 198EXPORT_SYMBOL(_raw_write_lock_wait_flags); 199 200int _raw_write_trylock_retry(arch_rwlock_t *rw) 201{ 202 int count = spin_retry; 203 204 while (count-- > 0) { | 192 continue; 193 local_irq_disable(); 194 if (_raw_compare_and_swap(&rw->lock, 0, 0x80000000) == 0) 195 return; 196 } 197} 198EXPORT_SYMBOL(_raw_write_lock_wait_flags); 199 200int _raw_write_trylock_retry(arch_rwlock_t *rw) 201{ 202 int count = spin_retry; 203 204 while (count-- > 0) { |
205 if (!__raw_write_can_lock(rw)) | 205 if (!arch_write_can_lock(rw)) |
206 continue; 207 if (_raw_compare_and_swap(&rw->lock, 0, 0x80000000) == 0) 208 return 1; 209 } 210 return 0; 211} 212EXPORT_SYMBOL(_raw_write_trylock_retry); | 206 continue; 207 if (_raw_compare_and_swap(&rw->lock, 0, 0x80000000) == 0) 208 return 1; 209 } 210 return 0; 211} 212EXPORT_SYMBOL(_raw_write_trylock_retry); |