diff options
author | trz <trz> | 2005-10-14 21:53:51 +0000 |
---|---|---|
committer | trz <trz> | 2005-10-14 21:53:51 +0000 |
commit | 08b40d88c111a077b1069babb6a51a2b68aef1a6 (patch) | |
tree | fbfb0d0149af6afd4be71240d39918732e0ac0aa /runtime | |
parent | 20b1a57d555b30478e224eec7c358ee3f7c7a6e9 (diff) | |
download | systemtap-steved-08b40d88c111a077b1069babb6a51a2b68aef1a6.tar.gz systemtap-steved-08b40d88c111a077b1069babb6a51a2b68aef1a6.tar.xz systemtap-steved-08b40d88c111a077b1069babb6a51a2b68aef1a6.zip |
Added #ifdef'ed support for kernels containing the recent relayfs API changes
Diffstat (limited to 'runtime')
-rw-r--r-- | runtime/transport/ChangeLog | 16 | ||||
-rw-r--r-- | runtime/transport/procfs.c | 5 | ||||
-rw-r--r-- | runtime/transport/relayfs.c | 33 | ||||
-rw-r--r-- | runtime/transport/relayfs.h | 4 | ||||
-rw-r--r-- | runtime/transport/transport.c | 6 |
5 files changed, 64 insertions, 0 deletions
diff --git a/runtime/transport/ChangeLog b/runtime/transport/ChangeLog index 1c94b0e4..f2a8c54d 100644 --- a/runtime/transport/ChangeLog +++ b/runtime/transport/ChangeLog @@ -1,3 +1,19 @@ +2005-10-14 Tom Zanussi <zanussi@us.ibm.com> + + * relayfs.h: Add ifdef'ed relayfs_fs.h include for mainline + relayfs version. If you're running a kernel with a version + of relayfs >= 4 (the version # can be found in + /include/linux/relayfs_fs.h) configured in, adding a + #define RELAYFS_VERSION_GE_4 at the top of transport/relayfs.h + will make systemtap use it instead of the packaged version. + + * relayfs.c: Add ifdef'ed relayfs callback functions for + mainline relayfs version. + (_stp_relayfs_open): Add ifdef'ed code for mainline + relayfs version. + * procfs.c (_stp_proc_read): Ditto. + * transport.c (_handle_buf_info): Ditto. + 2005-10-05 Tom Zanussi <zanussi@us.ibm.com> * transport.c (_stp_transport_open): Add kbug message. diff --git a/runtime/transport/procfs.c b/runtime/transport/procfs.c index f22be8fa..7bba3033 100644 --- a/runtime/transport/procfs.c +++ b/runtime/transport/procfs.c @@ -31,8 +31,13 @@ _stp_proc_read (struct file *file, char __user *buf, size_t count, loff_t *ppos) return -EINVAL; out.cpu = cpu; +#ifdef RELAYFS_VERSION_GE_4 + out.produced = _stp_chan->buf[cpu]->subbufs_produced; + out.consumed = _stp_chan->buf[cpu]->subbufs_consumed; +#else out.produced = atomic_read(&_stp_chan->buf[cpu]->subbufs_produced); out.consumed = atomic_read(&_stp_chan->buf[cpu]->subbufs_consumed); +#endif /* RELAYFS_VERSION_GE_4 */ num = sizeof(out); if (copy_to_user(buf, &out, num)) diff --git a/runtime/transport/relayfs.c b/runtime/transport/relayfs.c index 181a130e..0754d320 100644 --- a/runtime/transport/relayfs.c +++ b/runtime/transport/relayfs.c @@ -20,6 +20,29 @@ #include "relayfs.h" +#ifdef RELAYFS_VERSION_GE_4 + +/** + * _stp_subbuf_start - subbuf_start() relayfs callback implementation + */ +static int _stp_subbuf_start(struct rchan_buf *buf, + void *subbuf, + void *prev_subbuf, + unsigned int prev_padding) +{ + if (relay_buf_full(buf)) + return 0; + + if (prev_subbuf) + *((unsigned *)prev_subbuf) = prev_padding; + + subbuf_start_reserve(buf, sizeof(prev_padding)); + + return 1; +} + +#else + /** * _stp_subbuf_start - subbuf_start() relayfs callback implementation */ @@ -46,11 +69,15 @@ static void _stp_buf_full(struct rchan_buf *buf, *((unsigned *)subbuf) = padding; } +#endif /* RELAYFS_VERSION_GE_4 */ + /* relayfs callback functions */ static struct rchan_callbacks stp_rchan_callbacks = { .subbuf_start = _stp_subbuf_start, +#ifndef RELAYFS_VERSION_GE_4 .buf_full = _stp_buf_full, +#endif /* RELAYFS_VERSION_GE_4 */ }; /** @@ -97,8 +124,14 @@ struct rchan *_stp_relayfs_open(unsigned n_subbufs, return NULL; } +#ifdef RELAYFS_VERSION_GE_4 + chan = relay_open("cpu", dir, subbuf_size, + n_subbufs, &stp_rchan_callbacks); +#else chan = relay_open("cpu", dir, subbuf_size, n_subbufs, 0, &stp_rchan_callbacks); +#endif /* RELAYFS_VERSION_GE_4 */ + if (!chan) { printk("STP: couldn't create relayfs channel.\n"); if (dir) diff --git a/runtime/transport/relayfs.h b/runtime/transport/relayfs.h index 2f30138c..5ca174e4 100644 --- a/runtime/transport/relayfs.h +++ b/runtime/transport/relayfs.h @@ -5,7 +5,11 @@ * @brief Header file for relayfs transport */ +#ifdef RELAYFS_VERSION_GE_4 #include <linux/relayfs_fs.h> +#else +#include "../relayfs/linux/relayfs_fs.h" +#endif /* RELAYFS_VERSION_GE_4 */ struct rchan *_stp_relayfs_open(unsigned n_subbufs, unsigned subbuf_size, diff --git a/runtime/transport/transport.c b/runtime/transport/transport.c index e8d2112d..89c90c96 100644 --- a/runtime/transport/transport.c +++ b/runtime/transport/transport.c @@ -75,9 +75,15 @@ int _stp_transport_write (void *data, int len) static void _stp_handle_buf_info(int *cpuptr) { struct buf_info out; + out.cpu = *cpuptr; +#ifdef RELAYFS_VERSION_GE_4 + out.produced = _stp_chan->buf[*cpuptr]->subbufs_produced; + out.consumed = _stp_chan->buf[*cpuptr]->subbufs_consumed; +#else out.produced = atomic_read(&_stp_chan->buf[*cpuptr]->subbufs_produced); out.consumed = atomic_read(&_stp_chan->buf[*cpuptr]->subbufs_consumed); +#endif /* RELAYFS_VERSION_GE_4 */ _stp_transport_send(STP_BUF_INFO, &out, sizeof(out)); } |