summaryrefslogtreecommitdiffstats
path: root/tapsets.cxx
diff options
context:
space:
mode:
authorDave Brolley <brolley@redhat.com>2009-06-15 11:57:03 -0400
committerDave Brolley <brolley@redhat.com>2009-06-15 11:57:03 -0400
commit148b5d924e05124eae22a27ef670c480de76553a (patch)
tree894d71a8cc22f2c37cc1313154db9a8d1abb8b15 /tapsets.cxx
parentc3a47b9b2c204849646eda60e6fff9ea7625f122 (diff)
parentd438dd9bc070216016e02f4958fe9dea571712c9 (diff)
downloadsystemtap-steved-148b5d924e05124eae22a27ef670c480de76553a.tar.gz
systemtap-steved-148b5d924e05124eae22a27ef670c480de76553a.tar.xz
systemtap-steved-148b5d924e05124eae22a27ef670c480de76553a.zip
Merge branch 'master' of git://sources.redhat.com/git/systemtap
Diffstat (limited to 'tapsets.cxx')
-rw-r--r--tapsets.cxx28
1 files changed, 17 insertions, 11 deletions
diff --git a/tapsets.cxx b/tapsets.cxx
index 76c3c370..20404869 100644
--- a/tapsets.cxx
+++ b/tapsets.cxx
@@ -695,8 +695,8 @@ dwarf_builder::probe_table::probe_table(string& mark_name, systemtap_session & s
Dwarf_Addr bias;
size_t shstrndx;
- elf = (dwarf_getelf (dwfl_module_getdwarf (dw->module, &bias))
- ?: dwfl_module_getelf (dw->module, &bias));
+ // Explicitly look in the main elf file first.
+ elf = dwfl_module_getelf (dw->module, &bias);
Elf_Scn *probe_scn = NULL;
dwfl_assert ("getshstrndx", elf_getshstrndx (elf, &shstrndx));
@@ -716,17 +716,15 @@ dwarf_builder::probe_table::probe_table(string& mark_name, systemtap_session & s
}
}
- if (!have_probes)
- return;
-
// Older versions put .probes section in the debuginfo dwarf file,
- // so check if it actually exists, if not take the main elf file
- if (have_probes && shdr->sh_type == SHT_NOBITS)
+ // so check if it actually exists, if not take a look in the debuginfo file
+ if (! have_probes || (have_probes && shdr->sh_type == SHT_NOBITS))
{
- elf = dwfl_module_getelf (dw->module, &bias);
+ elf = dwarf_getelf (dwfl_module_getdwarf (dw->module, &bias));
+ if (! elf)
+ return;
dwfl_assert ("getshstrndx", elf_getshstrndx (elf, &shstrndx));
probe_scn = NULL;
- have_probes = false;
while ((probe_scn = elf_nextscn (elf, probe_scn)))
{
shdr = gelf_getshdr (probe_scn, &shdr_mem);
@@ -2907,6 +2905,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);";
@@ -3065,7 +3067,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
@@ -4555,6 +4557,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);";
@@ -4700,7 +4706,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