diff options
author | Josh Stone <jistone@redhat.com> | 2009-02-23 14:22:38 -0800 |
---|---|---|
committer | Josh Stone <jistone@redhat.com> | 2009-02-23 14:22:38 -0800 |
commit | 5780cc7f8208ebca519d6e076fe403b1220ab865 (patch) | |
tree | c0c54c18bab0ad61963f7efc972cb2b773806909 /runtime | |
parent | 3c1f71d54d487806d4dfde0421b43e95d3662ea5 (diff) | |
download | systemtap-steved-5780cc7f8208ebca519d6e076fe403b1220ab865.tar.gz systemtap-steved-5780cc7f8208ebca519d6e076fe403b1220ab865.tar.xz systemtap-steved-5780cc7f8208ebca519d6e076fe403b1220ab865.zip |
Add selective use of _stp_time_init/kill (PR9822)
Our gettimeofday runtime has frequent wakeups to stay in sync with
kernel time, but this is wasted effort if gettimeofday is not used in
the script. This patch moves the calls to _stp_time_init and
_stp_time_kill into begin and end/error probes, which only get pulled in
if one of the gettimeofday variants is called.
Diffstat (limited to 'runtime')
-rw-r--r-- | runtime/time.c | 8 | ||||
-rw-r--r-- | runtime/transport/transport.c | 6 |
2 files changed, 7 insertions, 7 deletions
diff --git a/runtime/time.c b/runtime/time.c index ad7cef9d..58c23e57 100644 --- a/runtime/time.c +++ b/runtime/time.c @@ -223,6 +223,7 @@ _stp_kill_time(void) #endif _stp_free_percpu(stp_time); + stp_time = NULL; } } @@ -232,6 +233,8 @@ _stp_init_time(void) { int ret = 0; + _stp_kill_time(); + stp_time = _stp_alloc_percpu(sizeof(stp_time_t)); if (unlikely(stp_time == 0)) return -1; @@ -263,7 +266,7 @@ _stp_init_time(void) } } #endif - if (ret) + if (ret) _stp_kill_time(); return ret; } @@ -278,6 +281,9 @@ _stp_gettimeofday_ns(void) stp_time_t *time; int i = 0; + if (!stp_time) + return -1; + preempt_disable(); time = per_cpu_ptr(stp_time, smp_processor_id()); diff --git a/runtime/transport/transport.c b/runtime/transport/transport.c index 0755781e..7fcebd42 100644 --- a/runtime/transport/transport.c +++ b/runtime/transport/transport.c @@ -188,7 +188,6 @@ static void _stp_transport_close() _stp_unregister_ctl_channel(); if (_stp_utt) utt_trace_remove(_stp_utt); - _stp_kill_time(); /* Go to a beach. Drink a beer. */ _stp_print_cleanup(); /* free print buffers */ _stp_mem_debug_done(); dbug_trans(1, "---- CLOSED ----\n"); @@ -244,10 +243,6 @@ static int _stp_transport_init(void) dbug_trans(1, "Using %d subbufs of size %d\n", _stp_nsubbufs, _stp_subbuf_size); } - /* initialize timer code */ - if (_stp_init_time()) - return -1; - #if !defined (STP_OLD_TRANSPORT) || defined (STP_BULKMODE) /* open utt (relayfs) channel to send data to userspace */ _stp_utt = _stp_utt_open(); @@ -286,7 +281,6 @@ err1: if (_stp_utt) utt_trace_remove(_stp_utt); err0: - _stp_kill_time(); return -1; } |