diff options
author | hunt <hunt> | 2007-03-26 16:15:11 +0000 |
---|---|---|
committer | hunt <hunt> | 2007-03-26 16:15:11 +0000 |
commit | 5d65678dde08d0b2e34ee79c2e0f6c26ff3e4592 (patch) | |
tree | 05cdd33db206b646c424dd8b207221413cbb2455 /runtime/staprun/relay.c | |
parent | 98f0ea565abd496f7f4f065f652456101370751e (diff) | |
download | systemtap-steved-5d65678dde08d0b2e34ee79c2e0f6c26ff3e4592.tar.gz systemtap-steved-5d65678dde08d0b2e34ee79c2e0f6c26ff3e4592.tar.xz systemtap-steved-5d65678dde08d0b2e34ee79c2e0f6c26ff3e4592.zip |
2007-03-26 Martin Hunt <hunt@redhat.com>
* mainloop.c (run_stp_check): Just use system() call.
(init_staprun): Remove _stp_pid module parameter.
(cleanup_and_exit): If closed==2, just exit without removing module.
(driver_poll): Remove. We no longer require stap running.
(_stp_main_loop): Remove call to driver_poll.
* ctl.c (init_ctl_channel): Don't put files in systemtap_pid,
revert back to systemtap/modulename.
* relay.c: Revert back to systemtap/modulename paths.
* relay_old.c: Ditto.
* staprun.c: Add -L and -A args.
Diffstat (limited to 'runtime/staprun/relay.c')
-rw-r--r-- | runtime/staprun/relay.c | 48 |
1 files changed, 23 insertions, 25 deletions
diff --git a/runtime/staprun/relay.c b/runtime/staprun/relay.c index 6d505a22..0a805999 100644 --- a/runtime/staprun/relay.c +++ b/runtime/staprun/relay.c @@ -79,36 +79,45 @@ static void *reader_thread(void *data) * * Returns 0 if successful, negative otherwise */ -int init_relayfs(struct _stp_msg_trans *t) +int init_relayfs(void) { int i; struct statfs st; char buf[128], relay_filebase[128]; - bulkmode = t->bulk_mode; - dbug("initializing relayfs. bulkmode = %d\n", bulkmode); + dbug("initializing relayfs\n"); reader[0] = (pthread_t)0; relay_fd[0] = 0; out_fd[0] = 0; if (statfs("/sys/kernel/debug", &st) == 0 && (int) st.f_type == (int) DEBUGFS_MAGIC) - sprintf(relay_filebase, "/sys/kernel/debug/systemtap_%d", getpid()); + sprintf(relay_filebase, "/sys/kernel/debug/systemtap/%s", modname); else { fprintf(stderr,"Cannot find relayfs or debugfs mount point.\n"); return -1; } + + for (i = 0; i < NR_CPUS; i++) { + sprintf(buf, "%s/trace%d", relay_filebase, i); + dbug("attempting to open %s\n", buf); + relay_fd[i] = open(buf, O_RDONLY | O_NONBLOCK); + if (relay_fd[i] < 0) + break; + } + ncpus = i; + dbug("ncpus=%d\n", ncpus); + + if (ncpus == 0) { + err("couldn't open %s.\n", buf); + return -1; + } + if (ncpus > 1) + bulkmode = 1; + if (bulkmode) { for (i = 0; i < ncpus; i++) { - sprintf(buf, "%s/trace%d", relay_filebase, i); - dbug("opening %s\n", buf); - relay_fd[i] = open(buf, O_RDONLY | O_NONBLOCK); - if (relay_fd[i] < 0) { - fprintf(stderr, "ERROR: couldn't open relayfs file %s.\n", buf); - return -1; - } - if (outfile_name) { /* special case: for testing we sometimes want to write to /dev/null */ if (strcmp(outfile_name, "/dev/null") == 0) @@ -117,7 +126,7 @@ int init_relayfs(struct _stp_msg_trans *t) sprintf(buf, "%s_%d", outfile_name, i); } else sprintf(buf, "stpd_cpu%d", i); - + out_fd[i] = open (buf, O_CREAT|O_TRUNC|O_WRONLY, 0666); dbug("out_fd[%d] = %d\n", i, out_fd[i]); if (out_fd[i] < 0) { @@ -125,19 +134,8 @@ int init_relayfs(struct _stp_msg_trans *t) return -1; } } - } else { /* stream mode */ - ncpus = 1; - sprintf(buf, "%s/trace0", relay_filebase); - dbug("opening %s\n", buf); - relay_fd[0] = open(buf, O_RDONLY | O_NONBLOCK); - dbug("got fd=%d\n", relay_fd[0]); - if (relay_fd[0] < 0) { - fprintf(stderr, "ERROR: couldn't open relayfs file %s.\n", buf); - return -1; - } - if (outfile_name) { out_fd[0] = open (outfile_name, O_CREAT|O_TRUNC|O_WRONLY, 0666); if (out_fd[0] < 0) { @@ -146,7 +144,7 @@ int init_relayfs(struct _stp_msg_trans *t) } } else out_fd[0] = STDOUT_FILENO; - + } dbug("starting threads\n"); for (i = 0; i < ncpus; i++) { |