- Timestamp:
 - 2025-04-17T19:11:34Z (7 months ago)
 - Branches:
 - master
 - Children:
 - 94abc30c, e9bc927
 - Parents:
 - eb2187c4
 - git-author:
 - Miroslav Cimerman <70661600+mcimerman@…> (2025-04-17 19:11:34)
 - git-committer:
 - GitHub <noreply@…> (2025-04-17 19:11:34)
 - File:
 - 
      
- 1 edited
 
- 
          
  uspace/lib/c/arch/arm32/src/atomic.c (modified) (2 diffs)
 
 
Legend:
- Unmodified
 - Added
 - Removed
 
- 
      
uspace/lib/c/arch/arm32/src/atomic.c
reb2187c4 r51949d0 106 106 } 107 107 108 bool __atomic_compare_exchange_ 4(volatile void *mem0, void *expected0,109 unsigned desired, bool weak, int success, int failure)110 { 111 volatile unsigned *mem = mem0;112 unsigned *expected = expected0;108 bool __atomic_compare_exchange_1(volatile void *mem0, void *expected0, 109 unsigned char desired, bool weak, int success, int failure) 110 { 111 volatile unsigned char *mem = mem0; 112 unsigned char *expected = expected0; 113 113 114 114 (void) success; … … 116 116 (void) weak; 117 117 118 unsigned char ov = *expected; 119 unsigned ret; 120 121 /* 122 * The following instructions between labels 1 and 2 constitute a 123 * Restartable Atomic Sequence. Should the sequence be non-atomic, 124 * the kernel will restart it. 125 */ 126 asm volatile ( 127 "1:\n" 128 " adr %[ret], 1b\n" 129 " str %[ret], %[rp0]\n" 130 " adr %[ret], 2f\n" 131 " str %[ret], %[rp1]\n" 132 133 " ldrb %[ret], %[addr]\n" 134 " cmp %[ret], %[ov]\n" 135 " streqb %[nv], %[addr]\n" 136 "2:\n" 137 : [ret] "=&r" (ret), 138 [rp0] "=m" (ras_page[0]), 139 [rp1] "=m" (ras_page[1]), 140 [addr] "+m" (*mem) 141 : [ov] "r" (ov), 142 [nv] "r" (desired) 143 ); 144 145 ras_page[0] = 0; 146 ras_page[1] = 0xffffffff; 147 148 if (ret == ov) 149 return true; 150 151 *expected = ret; 152 return false; 153 } 154 155 bool __atomic_compare_exchange_4(volatile void *mem0, void *expected0, 156 unsigned desired, bool weak, int success, int failure) 157 { 158 volatile unsigned *mem = mem0; 159 unsigned *expected = expected0; 160 161 (void) success; 162 (void) failure; 163 (void) weak; 164 118 165 unsigned ov = *expected; 119 166 unsigned ret;  
  Note:
 See   TracChangeset
 for help on using the changeset viewer.
  