summaryrefslogtreecommitdiffstats
path: root/runtime/transport/relayfs.c
diff options
context:
space:
mode:
authortrz <trz>2005-10-14 21:53:51 +0000
committertrz <trz>2005-10-14 21:53:51 +0000
commit08b40d88c111a077b1069babb6a51a2b68aef1a6 (patch)
treefbfb0d0149af6afd4be71240d39918732e0ac0aa /runtime/transport/relayfs.c
parent20b1a57d555b30478e224eec7c358ee3f7c7a6e9 (diff)
downloadsystemtap-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/transport/relayfs.c')
-rw-r--r--runtime/transport/relayfs.c33
1 files changed, 33 insertions, 0 deletions
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)