summaryrefslogtreecommitdiffstats
path: root/runtime/transport
diff options
context:
space:
mode:
authorDavid Smith <dsmith@redhat.com>2009-06-18 16:42:35 -0500
committerDavid Smith <dsmith@redhat.com>2009-06-18 16:42:35 -0500
commit7b1be319b40ec791c4fdbe77065204a4c3ed439b (patch)
tree3bfe79e23e13873e7e07b5968ab87b05124cb621 /runtime/transport
parentf530a9fec01f287d42072632d5607d5fa275479d (diff)
downloadsystemtap-steved-7b1be319b40ec791c4fdbe77065204a4c3ed439b.tar.gz
systemtap-steved-7b1be319b40ec791c4fdbe77065204a4c3ed439b.tar.xz
systemtap-steved-7b1be319b40ec791c4fdbe77065204a4c3ed439b.zip
Transports now export their state.
* runtime/transport/transport.h: Added prototype for _stp_transport_get_state(). * runtime/transport/relay_v2.c (_stp_transport_get_state): New function. * runtime/transport/relayfs.c (_stp_transport_get_state): Ditto. * runtime/transport/ring_buffer.c (_stp_transport_data_fs_init): Sets state. (_stp_transport_data_fs_start): Ditto. (_stp_transport_data_fs_stop): Ditto. (_stp_transport_get_state): Returns state. * runtime/print_new.c (stp_print_flush): Checks transport state before trying to flush.
Diffstat (limited to 'runtime/transport')
-rw-r--r--runtime/transport/relay_v2.c11
-rw-r--r--runtime/transport/relayfs.c11
-rw-r--r--runtime/transport/ring_buffer.c16
-rw-r--r--runtime/transport/transport.h14
4 files changed, 38 insertions, 14 deletions
diff --git a/runtime/transport/relay_v2.c b/runtime/transport/relay_v2.c
index aa6f7b99..65e9c59b 100644
--- a/runtime/transport/relay_v2.c
+++ b/runtime/transport/relay_v2.c
@@ -38,12 +38,6 @@
#define STP_RELAY_TIMER_INTERVAL ((HZ + 99) / 100)
#endif
-enum _stp_transport_state {
- STP_TRANSPORT_STOPPED,
- STP_TRANSPORT_INITIALIZED,
- STP_TRANSPORT_RUNNING,
-};
-
struct _stp_relay_data_type {
enum _stp_transport_state transport_state;
struct rchan *rchan;
@@ -147,6 +141,11 @@ static void __stp_relay_timer_init(void)
smp_mb();
}
+static enum _stp_transport_state _stp_transport_get_state(void)
+{
+ return _stp_relay_data.transport_state;
+}
+
static void _stp_transport_data_fs_overwrite(int overwrite)
{
_stp_relay_data.overwrite_flag = overwrite;
diff --git a/runtime/transport/relayfs.c b/runtime/transport/relayfs.c
index c557efbc..338b2771 100644
--- a/runtime/transport/relayfs.c
+++ b/runtime/transport/relayfs.c
@@ -23,12 +23,6 @@
#include <linux/relayfs_fs.h>
#include <linux/namei.h>
-enum _stp_transport_state {
- STP_TRANSPORT_STOPPED,
- STP_TRANSPORT_INITIALIZED,
- STP_TRANSPORT_RUNNING,
-};
-
struct _stp_relay_data_type {
enum _stp_transport_state transport_state;
struct rchan *rchan;
@@ -136,6 +130,11 @@ err:
return rc;
}
+static enum _stp_transport_state _stp_transport_get_state(void)
+{
+ return _stp_relay_data.transport_state;
+}
+
static void _stp_transport_data_fs_overwrite(int overwrite)
{
_stp_relay_data.rchan->overwrite = overwrite;
diff --git a/runtime/transport/ring_buffer.c b/runtime/transport/ring_buffer.c
index 418465c2..0b73d4b4 100644
--- a/runtime/transport/ring_buffer.c
+++ b/runtime/transport/ring_buffer.c
@@ -19,6 +19,7 @@ struct _stp_ring_buffer_data {
};
struct _stp_relay_data_type {
+ enum _stp_transport_state transport_state;
struct ring_buffer *rb;
struct _stp_ring_buffer_data rb_data;
cpumask_var_t trace_reader_cpumask;
@@ -384,6 +385,7 @@ static int _stp_transport_data_fs_init(void)
int rc;
long cpu;
+ _stp_relay_data.transport_state = STP_TRANSPORT_STOPPED;
_stp_relay_data.rb = NULL;
// allocate buffer
@@ -428,17 +430,22 @@ static int _stp_transport_data_fs_init(void)
}
dbug_trans(1, "returning 0...\n");
+ _stp_relay_data.transport_state = STP_TRANSPORT_INITIALIZED;
return 0;
}
static void _stp_transport_data_fs_start(void)
{
- /* Do nothing. */
+ if (_stp_relay_data.transport_state == STP_TRANSPORT_INITIALIZED) {
+ _stp_relay_data.transport_state = STP_TRANSPORT_RUNNING;
+ }
}
static void _stp_transport_data_fs_stop(void)
{
- /* Do nothing. */
+ if (_stp_relay_data.transport_state == STP_TRANSPORT_RUNNING) {
+ _stp_relay_data.transport_state = STP_TRANSPORT_STOPPED;
+ }
}
static void _stp_transport_data_fs_close(void)
@@ -454,6 +461,11 @@ static void _stp_transport_data_fs_close(void)
__stp_free_ring_buffer();
}
+static enum _stp_transport_state _stp_transport_get_state(void)
+{
+ return _stp_relay_data.transport_state;
+}
+
static void _stp_transport_data_fs_overwrite(int overwrite)
{
/* FIXME: Just a place holder for now. */
diff --git a/runtime/transport/transport.h b/runtime/transport/transport.h
index b3d15ef3..871e37b3 100644
--- a/runtime/transport/transport.h
+++ b/runtime/transport/transport.h
@@ -54,11 +54,25 @@ static int _stp_ctl_attached;
static int _stp_bufsize;
+
+enum _stp_transport_state {
+ STP_TRANSPORT_STOPPED,
+ STP_TRANSPORT_INITIALIZED,
+ STP_TRANSPORT_RUNNING,
+};
+
/*
* All transports must provide the following functions.
*/
/*
+ * _stp_transport_get_state
+ *
+ * This function returns the current transport state.
+ */
+static enum _stp_transport_state _stp_transport_get_state(void);
+
+/*
* _stp_transport_data_fs_init
*
* This function allocates any buffers needed, creates files,