/
usr
/
share
/
systemtap
/
runtime
/
dyninst
/
/usr/share/systemtap/runtime/dyninst
mkdir
upload
Name
Size
Mode
Actions
addr-map.c
565
0644
edit
dl
rm
alloc.c
1188
0644
edit
dl
rm
arith.c
2291
0644
edit
dl
rm
common_session_state.h
6921
0644
edit
dl
rm
copy.c
4095
0644
edit
dl
rm
debug.h
413
0644
edit
dl
rm
ilog2.h
2943
0644
edit
dl
rm
io.c
4541
0644
edit
dl
rm
linux_defs.h
5602
0644
edit
dl
rm
linux_hash.h
1877
0644
edit
dl
rm
linux_types.h
654
0644
edit
dl
rm
loc2c-runtime.h
2494
0644
edit
dl
rm
map_list.h
1059
0644
edit
dl
rm
map_runtime.h
5160
0644
edit
dl
rm
namespaces.h
0
0644
edit
dl
rm
offptr.h
4788
0644
edit
dl
rm
offset_list.h
4428
0644
edit
dl
rm
perf.c
0
0644
edit
dl
rm
print.c
2700
0644
edit
dl
rm
probe_lock.h
1849
0644
edit
dl
rm
regs.c
2557
0644
edit
dl
rm
runtime.h
10292
0644
edit
dl
rm
runtime_context.h
6556
0644
edit
dl
rm
runtime_defines.h
280
0644
edit
dl
rm
session_attributes.c
1717
0644
edit
dl
rm
session_attributes.h
772
0644
edit
dl
rm
shm.c
6171
0644
edit
dl
rm
stapdyn.h
4617
0644
edit
dl
rm
stat_runtime.h
1832
0644
edit
dl
rm
sym.c
1621
0644
edit
dl
rm
task_finder.c
0
0644
edit
dl
rm
timer.c
2770
0644
edit
dl
rm
transport.c
31128
0644
edit
dl
rm
transport.h
3968
0644
edit
dl
rm
unwind.c
0
0644
edit
dl
rm
uprobes-regs.c
3163
0644
edit
dl
rm
uprobes.c
1798
0644
edit
dl
rm
uprobes.h
953
0644
edit
dl
rm
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 <pthread.h> 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 */
Save
cmd:
run