Print this page
5042 stop using deprecated atomic functions


 147         int enabled = (systrace_sysent[sysnum].stsy_entry != DTRACE_IDNONE ||
 148             systrace_sysent[sysnum].stsy_return != DTRACE_IDNONE);
 149 
 150         if (SYSTRACE_ISENTRY((uintptr_t)parg)) {
 151                 systrace_sysent[sysnum].stsy_entry = id;
 152 #ifdef _SYSCALL32_IMPL
 153                 systrace_sysent32[sysnum].stsy_entry = id;
 154 #endif
 155         } else {
 156                 systrace_sysent[sysnum].stsy_return = id;
 157 #ifdef _SYSCALL32_IMPL
 158                 systrace_sysent32[sysnum].stsy_return = id;
 159 #endif
 160         }
 161 
 162         if (enabled) {
 163                 ASSERT(sysent[sysnum].sy_callc == dtrace_systrace_syscall);
 164                 return (0);
 165         }
 166 
 167         (void) casptr(&sysent[sysnum].sy_callc,
 168             (void *)systrace_sysent[sysnum].stsy_underlying,
 169             (void *)dtrace_systrace_syscall);
 170 #ifdef _SYSCALL32_IMPL
 171         (void) casptr(&sysent32[sysnum].sy_callc,
 172             (void *)systrace_sysent32[sysnum].stsy_underlying,
 173             (void *)dtrace_systrace_syscall32);
 174 #endif
 175         return (0);
 176 }
 177 
 178 /*ARGSUSED*/
 179 static void
 180 systrace_disable(void *arg, dtrace_id_t id, void *parg)
 181 {
 182         int sysnum = SYSTRACE_SYSNUM((uintptr_t)parg);
 183         int disable = (systrace_sysent[sysnum].stsy_entry == DTRACE_IDNONE ||
 184             systrace_sysent[sysnum].stsy_return == DTRACE_IDNONE);
 185 
 186         if (disable) {
 187                 (void) casptr(&sysent[sysnum].sy_callc,
 188                     (void *)dtrace_systrace_syscall,
 189                     (void *)systrace_sysent[sysnum].stsy_underlying);
 190 
 191 #ifdef _SYSCALL32_IMPL
 192                 (void) casptr(&sysent32[sysnum].sy_callc,
 193                     (void *)dtrace_systrace_syscall32,
 194                     (void *)systrace_sysent32[sysnum].stsy_underlying);
 195 #endif
 196         }
 197 
 198         if (SYSTRACE_ISENTRY((uintptr_t)parg)) {
 199                 systrace_sysent[sysnum].stsy_entry = DTRACE_IDNONE;
 200 #ifdef _SYSCALL32_IMPL
 201                 systrace_sysent32[sysnum].stsy_entry = DTRACE_IDNONE;
 202 #endif
 203         } else {
 204                 systrace_sysent[sysnum].stsy_return = DTRACE_IDNONE;
 205 #ifdef _SYSCALL32_IMPL
 206                 systrace_sysent32[sysnum].stsy_return = DTRACE_IDNONE;
 207 #endif
 208         }
 209 }
 210 
 211 static dtrace_pattr_t systrace_attr = {
 212 { DTRACE_STABILITY_EVOLVING, DTRACE_STABILITY_EVOLVING, DTRACE_CLASS_COMMON },




 147         int enabled = (systrace_sysent[sysnum].stsy_entry != DTRACE_IDNONE ||
 148             systrace_sysent[sysnum].stsy_return != DTRACE_IDNONE);
 149 
 150         if (SYSTRACE_ISENTRY((uintptr_t)parg)) {
 151                 systrace_sysent[sysnum].stsy_entry = id;
 152 #ifdef _SYSCALL32_IMPL
 153                 systrace_sysent32[sysnum].stsy_entry = id;
 154 #endif
 155         } else {
 156                 systrace_sysent[sysnum].stsy_return = id;
 157 #ifdef _SYSCALL32_IMPL
 158                 systrace_sysent32[sysnum].stsy_return = id;
 159 #endif
 160         }
 161 
 162         if (enabled) {
 163                 ASSERT(sysent[sysnum].sy_callc == dtrace_systrace_syscall);
 164                 return (0);
 165         }
 166 
 167         (void) atomic_cas_ptr(&sysent[sysnum].sy_callc,
 168             (void *)systrace_sysent[sysnum].stsy_underlying,
 169             (void *)dtrace_systrace_syscall);
 170 #ifdef _SYSCALL32_IMPL
 171         (void) atomic_cas_ptr(&sysent32[sysnum].sy_callc,
 172             (void *)systrace_sysent32[sysnum].stsy_underlying,
 173             (void *)dtrace_systrace_syscall32);
 174 #endif
 175         return (0);
 176 }
 177 
 178 /*ARGSUSED*/
 179 static void
 180 systrace_disable(void *arg, dtrace_id_t id, void *parg)
 181 {
 182         int sysnum = SYSTRACE_SYSNUM((uintptr_t)parg);
 183         int disable = (systrace_sysent[sysnum].stsy_entry == DTRACE_IDNONE ||
 184             systrace_sysent[sysnum].stsy_return == DTRACE_IDNONE);
 185 
 186         if (disable) {
 187                 (void) atomic_cas_ptr(&sysent[sysnum].sy_callc,
 188                     (void *)dtrace_systrace_syscall,
 189                     (void *)systrace_sysent[sysnum].stsy_underlying);
 190 
 191 #ifdef _SYSCALL32_IMPL
 192                 (void) atomic_cas_ptr(&sysent32[sysnum].sy_callc,
 193                     (void *)dtrace_systrace_syscall32,
 194                     (void *)systrace_sysent32[sysnum].stsy_underlying);
 195 #endif
 196         }
 197 
 198         if (SYSTRACE_ISENTRY((uintptr_t)parg)) {
 199                 systrace_sysent[sysnum].stsy_entry = DTRACE_IDNONE;
 200 #ifdef _SYSCALL32_IMPL
 201                 systrace_sysent32[sysnum].stsy_entry = DTRACE_IDNONE;
 202 #endif
 203         } else {
 204                 systrace_sysent[sysnum].stsy_return = DTRACE_IDNONE;
 205 #ifdef _SYSCALL32_IMPL
 206                 systrace_sysent32[sysnum].stsy_return = DTRACE_IDNONE;
 207 #endif
 208         }
 209 }
 210 
 211 static dtrace_pattr_t systrace_attr = {
 212 { DTRACE_STABILITY_EVOLVING, DTRACE_STABILITY_EVOLVING, DTRACE_CLASS_COMMON },