/usr/share/systemtap/runtime/dyninst
NameSizeModeActions
addr-map.c5650644editdlrm
alloc.c11880644editdlrm
arith.c22910644editdlrm
common_session_state.h69210644editdlrm
copy.c40950644editdlrm
debug.h4130644editdlrm
ilog2.h29430644editdlrm
io.c45410644editdlrm
linux_defs.h56020644editdlrm
linux_hash.h18770644editdlrm
linux_types.h6540644editdlrm
loc2c-runtime.h24940644editdlrm
map_list.h10590644editdlrm
map_runtime.h51600644editdlrm
namespaces.h00644editdlrm
offptr.h47880644editdlrm
offset_list.h44280644editdlrm
perf.c00644editdlrm
print.c27000644editdlrm
probe_lock.h18490644editdlrm
regs.c25570644editdlrm
runtime.h102920644editdlrm
runtime_context.h65560644editdlrm
runtime_defines.h2800644editdlrm
session_attributes.c17170644editdlrm
session_attributes.h7720644editdlrm
shm.c61710644editdlrm
stapdyn.h46170644editdlrm
stat_runtime.h18320644editdlrm
sym.c16210644editdlrm
task_finder.c00644editdlrm
timer.c27700644editdlrm
transport.c311280644editdlrm
transport.h39680644editdlrm
unwind.c00644editdlrm
uprobes-regs.c31630644editdlrm
uprobes.c17980644editdlrm
uprobes.h9530644editdlrm
Edit: /usr/share/systemtap/runtime/dyninst/probe_lock.h (1849B)
/* dyninst probe locking header file * Copyright (C) 2012, 2017 Red Hat Inc. * * This file is part of systemtap, and is free software. You can * redistribute it and/or modify it under the terms of the GNU General * Public License (GPL); either version 2, or (at your option) any * later version. */ #ifndef _STAPDYN_PROBE_LOCK_H #define _STAPDYN_PROBE_LOCK_H #include struct stp_probe_lock { #ifdef STP_TIMING atomic_t *skipped; atomic_t *contention; #endif pthread_rwlock_t *lock; unsigned write_p; }; static void stp_unlock_probe(const struct stp_probe_lock *locks, unsigned num_locks) { unsigned i; for (i = num_locks; i-- > 0;) { pthread_rwlock_unlock(locks[i].lock); } } static unsigned stp_lock_probe(const struct stp_probe_lock *locks, unsigned num_locks) { #if 0 // XXX: should we bother with trylocks in pure userspace? unsigned i, retries = 0; for (i = 0; i < num_locks; ++i) { if (locks[i].write_p) while (!pthread_rwlock_trywrlock(locks[i].lock)) { #if !define(STAP_SUPRESS_TIME_LIMITS_ENABLE) if (++retries > MAXTRYLOCK) goto skip; #endif #ifdef STP_TIMING atomic_inc(locks[i].contention); #endif udelay (TRYLOCKDELAY); } else while (!pthread_rwlock_tryrdlock(locks[i].lock)) { #if !define(STAP_SUPPRESS_TIME_LIMITS_ENABLE) if (++retries > MAXTRYLOCK) goto skip; #endif #ifdef STP_TIMING atomic_inc(locks[i].contention); #endif udelay (TRYLOCKDELAY); } } return 1; skip: atomic_inc(skipped_count()); #ifdef STP_TIMING atomic_inc(locks[i].skipped); #endif stp_unlock_probe(locks, i); return 0; #else unsigned i; for (i = 0; i < num_locks; ++i) { if (locks[i].write_p) pthread_rwlock_wrlock(locks[i].lock); else pthread_rwlock_rdlock(locks[i].lock); } return 1; #endif } #endif /* _STAPDYN_PROBE_LOCK_H */