0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015 import sys
0016 import drgn
0017 from drgn import NULL, Object
0018 from drgn.helpers.linux import *
0019
0020 def get_rdp0(prog):
0021 try:
0022 rdp0 = prog.variable('rcu_preempt_data', 'kernel/rcu/tree.c');
0023 except LookupError:
0024 rdp0 = NULL;
0025
0026 if rdp0 == NULL:
0027 try:
0028 rdp0 = prog.variable('rcu_sched_data',
0029 'kernel/rcu/tree.c');
0030 except LookupError:
0031 rdp0 = NULL;
0032
0033 if rdp0 == NULL:
0034 rdp0 = prog.variable('rcu_data', 'kernel/rcu/tree.c');
0035 return rdp0.address_of_();
0036
0037 rdp0 = get_rdp0(prog);
0038
0039
0040 sum = 0;
0041 for cpu in for_each_possible_cpu(prog):
0042 rdp = per_cpu_ptr(rdp0, cpu);
0043 len = rdp.cblist.len.value_();
0044
0045 sum += len;
0046 print("Number of RCU callbacks in flight: " + str(sum));