summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrank Ch. Eigler <fche@elastic.org>2009-06-13 18:21:06 -0400
committerFrank Ch. Eigler <fche@elastic.org>2009-06-13 18:21:06 -0400
commitf07c3b680a722e27ed55bb5c9719fa5827ebfc75 (patch)
treea109e4a1fbae2b84ce8e8fa3724d97298a124012
parentb818f048bb5edca2bde3b33fdbe7e42451eb3c6e (diff)
downloadsystemtap-steved-f07c3b680a722e27ed55bb5c9719fa5827ebfc75.tar.gz
systemtap-steved-f07c3b680a722e27ed55bb5c9719fa5827ebfc75.tar.xz
systemtap-steved-f07c3b680a722e27ed55bb5c9719fa5827ebfc75.zip
PR10279: add -DKRETACTIVE=nnnn parameter
* tapsets.cxx (dwarf/kprobe_derived_...::emit_decl/init): Define and use KRETPROBE instead of hard-coded max(...) values. Raise the default 50%. * testsuite/buildok/thirtytwo.stp: New test.
-rw-r--r--NEWS5
-rw-r--r--tapsets.cxx12
-rwxr-xr-xtestsuite/buildok/thirtytwo.stp10
3 files changed, 25 insertions, 2 deletions
diff --git a/NEWS b/NEWS
index 464b66c1..8fa10401 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,8 @@
+* What's new
+
+- Systemwide kernel .function.return (kretprobe) maxactive defaults may
+ be overridden with the -DKRETACTIVE=nnn parameter.
+
* What's new in version 0.9.8
- Miscellaneous new tapset functions:
diff --git a/tapsets.cxx b/tapsets.cxx
index 3ecf2250..0707e052 100644
--- a/tapsets.cxx
+++ b/tapsets.cxx
@@ -2902,6 +2902,10 @@ dwarf_derived_probe_group::emit_module_decls (systemtap_session& s)
s.op->newline() << "#endif";
s.op->newline();
+ s.op->newline() << "#ifndef KRETACTIVE";
+ s.op->newline() << "#define KRETACTIVE (max(15,6*NR_CPUS))";
+ s.op->newline() << "#endif";
+
// Forward declare the master entry functions
s.op->newline() << "static int enter_kprobe_probe (struct kprobe *inst,";
s.op->line() << " struct pt_regs *regs);";
@@ -3060,7 +3064,7 @@ dwarf_derived_probe_group::emit_module_init (systemtap_session& s)
s.op->newline() << "if (sdp->maxactive_p) {";
s.op->newline(1) << "kp->u.krp.maxactive = sdp->maxactive_val;";
s.op->newline(-1) << "} else {";
- s.op->newline(1) << "kp->u.krp.maxactive = max(10, 4*NR_CPUS);";
+ s.op->newline(1) << "kp->u.krp.maxactive = KRETACTIVE;";
s.op->newline(-1) << "}";
s.op->newline() << "kp->u.krp.handler = &enter_kretprobe_probe;";
// to ensure safeness of bspcache, always use aggr_kprobe on ia64
@@ -4550,6 +4554,10 @@ kprobe_derived_probe_group::emit_module_decls (systemtap_session& s)
s.op->newline() << "#endif";
s.op->newline();
+ s.op->newline() << "#ifndef KRETACTIVE";
+ s.op->newline() << "#define KRETACTIVE (max(15,6*NR_CPUS))";
+ s.op->newline() << "#endif";
+
// Forward declare the master entry functions
s.op->newline() << "static int enter_kprobe2_probe (struct kprobe *inst,";
s.op->line() << " struct pt_regs *regs);";
@@ -4695,7 +4703,7 @@ kprobe_derived_probe_group::emit_module_init (systemtap_session& s)
s.op->newline() << "if (sdp->maxactive_p) {";
s.op->newline(1) << "kp->u.krp.maxactive = sdp->maxactive_val;";
s.op->newline(-1) << "} else {";
- s.op->newline(1) << "kp->u.krp.maxactive = max(10, 4*NR_CPUS);";
+ s.op->newline(1) << "kp->u.krp.maxactive = KRETACTIVE;";
s.op->newline(-1) << "}";
s.op->newline() << "kp->u.krp.handler = &enter_kretprobe2_probe;";
// to ensure safeness of bspcache, always use aggr_kprobe on ia64
diff --git a/testsuite/buildok/thirtytwo.stp b/testsuite/buildok/thirtytwo.stp
new file mode 100755
index 00000000..d97aa50b
--- /dev/null
+++ b/testsuite/buildok/thirtytwo.stp
@@ -0,0 +1,10 @@
+#! /bin/sh
+
+stap -t -p4 -DKRETACTIVE=8888 -e '
+probe kprobe.function("sys_open").return {}
+probe kprobe.function("sys_open").return.maxactive(100) {}
+probe kernel.function("sys_open").return {}
+probe kernel.function("sys_open").return.maxactive(100) {}
+probe syscall.*.return {}
+'
+