diff options
author | David Smith <dsmith@redhat.com> | 2009-06-18 16:42:35 -0500 |
---|---|---|
committer | David Smith <dsmith@redhat.com> | 2009-06-18 16:42:35 -0500 |
commit | 7b1be319b40ec791c4fdbe77065204a4c3ed439b (patch) | |
tree | 3bfe79e23e13873e7e07b5968ab87b05124cb621 /runtime/transport | |
parent | f530a9fec01f287d42072632d5607d5fa275479d (diff) | |
download | systemtap-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.c | 11 | ||||
-rw-r--r-- | runtime/transport/relayfs.c | 11 | ||||
-rw-r--r-- | runtime/transport/ring_buffer.c | 16 | ||||
-rw-r--r-- | runtime/transport/transport.h | 14 |
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, |