Accepting request 61688 from home:jones_tony:branches:devel:tools
Talked to coolo, tested with preload on x86_64 and i586/ OBS-URL: https://build.opensuse.org/request/show/61688 OBS-URL: https://build.opensuse.org/package/show/devel:tools/systemtap?expand=0&rev=22
This commit is contained in:
parent
71b8c4302b
commit
e7efb5386c
13
README-BEFORE-ADDING-PATCHES
Normal file
13
README-BEFORE-ADDING-PATCHES
Normal file
@ -0,0 +1,13 @@
|
||||
All patches need to have a patch description header similar to what is used in
|
||||
SuSE kernel git tree. Patches added without this will be reverted. Thanks.
|
||||
|
||||
From: Name <email>
|
||||
Subject: Summary of fix
|
||||
Date: date
|
||||
References: bnc#xxxxxx (bugzilla reference if applicable)
|
||||
Upstream: yes (provide repo/commit-id in description) or no (provide reason)
|
||||
Signed-Off-by: Name <email> (same as From: if committer is patch author)
|
||||
|
||||
Short paragraph describing problem/fix.
|
||||
|
||||
References to upstream repo-path/commit-id if applicable.
|
@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:548ec4d4d1eaa3a3e8d13f6c5d38b3fd08280a2889f95e71ab36954eb454b652
|
||||
size 1389234
|
3
systemtap-1.4.tar.bz2
Normal file
3
systemtap-1.4.tar.bz2
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:773110b3648ce480d6470c10db47b2daeb5988722e7000aa4dbc723c27600dd7
|
||||
size 1530777
|
@ -1,3 +1,8 @@
|
||||
-------------------------------------------------------------------
|
||||
Fri Jan 21 18:45:18 UTC 2011 - tonyj@novell.com
|
||||
|
||||
- Update to version 1.4. See systemtap.changes for full changelog.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Aug 26 02:15:11 UTC 2010 - tonyj@novell.com
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
#
|
||||
# spec file for package systemtap-docs (Version 1.3)
|
||||
# spec file for package systemtap-docs
|
||||
#
|
||||
# Copyright (c) 2010 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
||||
# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
||||
#
|
||||
# All modifications and additions to the file contributed by third parties
|
||||
# remain the property of their copyright owners, unless otherwise agreed
|
||||
@ -26,7 +26,7 @@ BuildRequires: fop
|
||||
BuildRequires: latex2html
|
||||
%define use_snapshot 0
|
||||
License: GPLv2+
|
||||
Version: 1.3
|
||||
Version: 1.4
|
||||
Release: 1
|
||||
Summary: Documents and examples for systemtap
|
||||
Group: Development/Tools/Debuggers
|
||||
@ -37,6 +37,7 @@ Url: http://sourceware.org/systemtap/
|
||||
%define package_version %{version}
|
||||
%endif
|
||||
Source: ftp://sources.redhat.com/pub/systemtap/snapshots/systemtap-%{package_version}.tar.bz2
|
||||
Source2: README-BEFORE-ADDING-PATCHES
|
||||
Patch1: systemtap-docdir-fix.diff
|
||||
Patch2: systemtap-xmlto-fop.diff
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||
|
@ -1,11 +0,0 @@
|
||||
--- includes/sys/sdt.h.orig 2010-07-21 22:46:07.000000000 +0200
|
||||
+++ includes/sys/sdt.h 2010-09-05 20:47:20.686243029 +0200
|
||||
@@ -129,7 +129,7 @@
|
||||
#endif
|
||||
|
||||
|
||||
-#if defined __x86_64__ || defined __i386__ || defined __powerpc__ || defined __arm__ || defined __sparc__
|
||||
+#if defined __x86_64__ || defined __i386__ || defined __powerpc__ || defined __arm__ || defined __sparc__ || defined __hppa
|
||||
#define STAP_NOP "\tnop "
|
||||
#else
|
||||
#define STAP_NOP "\tnop 0 "
|
@ -1,57 +0,0 @@
|
||||
From 75a48ca31be58a7f2c31d7bda4069a93105f872f Mon Sep 17 00:00:00 2001
|
||||
From: David Smith <dsmith@redhat.com>
|
||||
Date: Mon, 23 Aug 2010 13:05:33 -0500
|
||||
Subject: [PATCH] Fixed PR11940 by getting scripts w/global variables to compile on 2.6.36.
|
||||
|
||||
* runtime/runtime.h: Updated module parameter get/set functions with new
|
||||
interface for 2.6.36.
|
||||
---
|
||||
runtime/runtime.h | 17 ++++++++++++++---
|
||||
1 files changed, 14 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/runtime/runtime.h b/runtime/runtime.h
|
||||
index 497137d..388216c 100644
|
||||
--- a/runtime/runtime.h
|
||||
+++ b/runtime/runtime.h
|
||||
@@ -142,10 +142,14 @@ static struct
|
||||
#endif
|
||||
#include "addr-map.c"
|
||||
|
||||
-
|
||||
+#ifdef module_param_cb /* kernels >= 2.6.36 */
|
||||
+#define _STP_KERNEL_PARAM_ARG const struct kernel_param
|
||||
+#else
|
||||
+#define _STP_KERNEL_PARAM_ARG struct kernel_param
|
||||
+#endif
|
||||
|
||||
/* Support functions for int64_t module parameters. */
|
||||
-static int param_set_int64_t(const char *val, struct kernel_param *kp)
|
||||
+static int param_set_int64_t(const char *val, _STP_KERNEL_PARAM_ARG *kp)
|
||||
{
|
||||
char *endp;
|
||||
long long ll;
|
||||
@@ -166,13 +170,20 @@ static int param_set_int64_t(const char *val, struct kernel_param *kp)
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static int param_get_int64_t(char *buffer, struct kernel_param *kp)
|
||||
+static int param_get_int64_t(char *buffer, _STP_KERNEL_PARAM_ARG *kp)
|
||||
{
|
||||
return sprintf(buffer, "%lli", (long long)*((int64_t *)kp->arg));
|
||||
}
|
||||
|
||||
#define param_check_int64_t(name, p) __param_check(name, p, int64_t)
|
||||
|
||||
+#ifdef module_param_cb /* kernels >= 2.6.36 */
|
||||
+static struct kernel_param_ops param_ops_int64_t = {
|
||||
+ .set = param_set_int64_t,
|
||||
+ .get = param_get_int64_t,
|
||||
+};
|
||||
+#endif
|
||||
+#undef _STP_KERNEL_PARAM_ARG
|
||||
|
||||
/************* Module Stuff ********************/
|
||||
|
||||
--
|
||||
1.7.2
|
||||
|
@ -1,3 +1,14 @@
|
||||
-------------------------------------------------------------------
|
||||
Fri Jan 21 18:46:18 UTC 2011 - tonyj@novell.com
|
||||
|
||||
- Update to version 1.4
|
||||
Changes in this release: https://lkml.org/lkml/2011/1/17/101
|
||||
Drop patches:
|
||||
systemtap-hppa.diff
|
||||
systemtap-support-2.6.36.diff
|
||||
systemtap_fix_mod_vs_del_timer_race.patch
|
||||
systemtap_improve_gettimeofday_stability.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri Jan 14 14:32:11 UTC 2011 - trenn@novell.com
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
#
|
||||
# spec file for package systemtap (Version 1.3)
|
||||
# spec file for package systemtap
|
||||
#
|
||||
# Copyright (c) 2010 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
||||
# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
||||
#
|
||||
# All modifications and additions to the file contributed by third parties
|
||||
# remain the property of their copyright owners, unless otherwise agreed
|
||||
@ -23,7 +23,7 @@ BuildRequires: gcc-c++ glib2-devel libcap-devel libebl-devel pkg-config sqlite-
|
||||
BuildRequires: mozilla-nspr-devel mozilla-nss-devel mozilla-nss-tools
|
||||
%define use_snapshot 0
|
||||
License: GPLv2+
|
||||
Version: 1.3
|
||||
Version: 1.4
|
||||
Release: 1
|
||||
Summary: Instrumentation System
|
||||
Group: Development/Tools/Debuggers
|
||||
@ -39,10 +39,6 @@ Source: ftp://sources.redhat.com/pub/systemtap/snapshots/systemtap-%{pac
|
||||
# need -docdir patch even though docs are packaged by systemtap-docs.spec
|
||||
# so that they are installed into directories matching below rm -rf's
|
||||
Patch1: systemtap-docdir-fix.diff
|
||||
Patch2: systemtap-hppa.diff
|
||||
Patch3: systemtap-support-2.6.36.diff
|
||||
Patch4: systemtap_improve_gettimeofday_stability.patch
|
||||
Patch5: systemtap_fix_mod_vs_del_timer_race.patch
|
||||
|
||||
Requires: libebl1
|
||||
Requires: %{name}-runtime = %{version}-%{release}
|
||||
@ -104,10 +100,6 @@ This package contains the support tools for static probes.
|
||||
%setup -n %{name}-%{package_version} -q
|
||||
%endif
|
||||
%patch1 -p1
|
||||
%patch2
|
||||
%patch3 -p1
|
||||
%patch4 -p1
|
||||
%patch5 -p1
|
||||
|
||||
%build
|
||||
autoreconf -fi
|
||||
@ -148,6 +140,7 @@ rm -rf ${RPM_BUILD_ROOT}
|
||||
%defattr(-,root,root)
|
||||
%doc %{_docdir}/systemtap
|
||||
%{_bindir}/staprun
|
||||
%{_bindir}/stap-merge
|
||||
%{_bindir}/stap-report
|
||||
%{_bindir}/stap-authorize-signing-cert
|
||||
%dir %{_libexecdir}/%{name}
|
||||
|
@ -1,183 +0,0 @@
|
||||
From: Frank Ch. Eigler <fche@elastic.org>
|
||||
Subject: PR10651 / RHBZ653286: mod_timer vs. del_timer_sync races
|
||||
References: bnc#664105
|
||||
Patch-Mainline: yes
|
||||
Git-commit: f2b610b6295628ae1fef744421c293883f1e4298
|
||||
Git-repo: git://sources.redhat.com/git/systemtap.git
|
||||
|
||||
Signed-off-by: Thomas Renninger <trenn@suse.de>
|
||||
|
||||
It appears possible for del_timer_sync (from outside) and mod_timer
|
||||
(from within a timer callback) to race. Defeat this race by ensuring
|
||||
that the timer callback checks an atomic_t flag before rescheduling
|
||||
itself with mod_timer.
|
||||
|
||||
* runtime/transport/relay_v2.c (transport_state): Turn into an atomic_t.
|
||||
Update users.
|
||||
(__stp_relay_wakeup_timer): Observe flag.
|
||||
(_stp_transport_data_fs_{start,stop}): Update flag before timer manipulations.
|
||||
* runtime/transport/ring_buffer.c: Ditto for corresponding functions.
|
||||
|
||||
diff --git a/runtime/transport/relay_v2.c b/runtime/transport/relay_v2.c
|
||||
index 974941d..33e198e 100644
|
||||
--- a/runtime/transport/relay_v2.c
|
||||
+++ b/runtime/transport/relay_v2.c
|
||||
@@ -4,7 +4,7 @@
|
||||
* code started as a proposed relayfs interface called 'utt'. It has
|
||||
* been modified and simplified for systemtap.
|
||||
*
|
||||
- * Changes Copyright (C) 2009 Red Hat Inc.
|
||||
+ * Changes Copyright (C) 2009-2010 Red Hat Inc.
|
||||
*
|
||||
* Original utt code by:
|
||||
* Copyright (C) 2006 Jens Axboe <axboe@suse.de>
|
||||
@@ -42,7 +42,7 @@
|
||||
* to be changed. */
|
||||
struct _stp_relay_data_type {
|
||||
struct rchan *rchan;
|
||||
- enum _stp_transport_state transport_state;
|
||||
+ atomic_t /* enum _stp_transport_state */ transport_state;
|
||||
struct dentry *dropped_file;
|
||||
atomic_t dropped;
|
||||
atomic_t wakeup;
|
||||
@@ -133,7 +133,10 @@ static void __stp_relay_wakeup_timer(unsigned long val)
|
||||
#endif
|
||||
}
|
||||
|
||||
- mod_timer(&_stp_relay_data.timer, jiffies + STP_RELAY_TIMER_INTERVAL);
|
||||
+ if (atomic_read(&_stp_relay_data.transport_state) == STP_TRANSPORT_RUNNING)
|
||||
+ mod_timer(&_stp_relay_data.timer, jiffies + STP_RELAY_TIMER_INTERVAL);
|
||||
+ else
|
||||
+ dbug_trans(0, "relay_v2 wakeup timer expiry\n");
|
||||
}
|
||||
|
||||
static void __stp_relay_timer_init(void)
|
||||
@@ -149,7 +152,7 @@ static void __stp_relay_timer_init(void)
|
||||
|
||||
static enum _stp_transport_state _stp_transport_get_state(void)
|
||||
{
|
||||
- return _stp_relay_data.transport_state;
|
||||
+ return atomic_read (&_stp_relay_data.transport_state);
|
||||
}
|
||||
|
||||
static void _stp_transport_data_fs_overwrite(int overwrite)
|
||||
@@ -242,19 +245,19 @@ static struct rchan_callbacks __stp_relay_callbacks = {
|
||||
|
||||
static void _stp_transport_data_fs_start(void)
|
||||
{
|
||||
- if (_stp_relay_data.transport_state == STP_TRANSPORT_INITIALIZED) {
|
||||
+ if (atomic_read (&_stp_relay_data.transport_state) == STP_TRANSPORT_INITIALIZED) {
|
||||
+ atomic_set (&_stp_relay_data.transport_state, STP_TRANSPORT_RUNNING);
|
||||
/* We're initialized. Now start the timer. */
|
||||
__stp_relay_timer_init();
|
||||
- _stp_relay_data.transport_state = STP_TRANSPORT_RUNNING;
|
||||
}
|
||||
}
|
||||
|
||||
static void _stp_transport_data_fs_stop(void)
|
||||
{
|
||||
- if (_stp_relay_data.transport_state == STP_TRANSPORT_RUNNING) {
|
||||
+ if (atomic_read (&_stp_relay_data.transport_state) == STP_TRANSPORT_RUNNING) {
|
||||
+ atomic_set (&_stp_relay_data.transport_state, STP_TRANSPORT_STOPPED);
|
||||
del_timer_sync(&_stp_relay_data.timer);
|
||||
dbug_trans(0, "flushing...\n");
|
||||
- _stp_relay_data.transport_state = STP_TRANSPORT_STOPPED;
|
||||
if (_stp_relay_data.rchan)
|
||||
relay_flush(_stp_relay_data.rchan);
|
||||
}
|
||||
@@ -277,7 +280,7 @@ static int _stp_transport_data_fs_init(void)
|
||||
u64 npages;
|
||||
struct sysinfo si;
|
||||
|
||||
- _stp_relay_data.transport_state = STP_TRANSPORT_STOPPED;
|
||||
+ atomic_set(&_stp_relay_data.transport_state, STP_TRANSPORT_STOPPED);
|
||||
_stp_relay_data.overwrite_flag = 0;
|
||||
atomic_set(&_stp_relay_data.dropped, 0);
|
||||
_stp_relay_data.dropped_file = NULL;
|
||||
@@ -337,7 +340,7 @@ static int _stp_transport_data_fs_init(void)
|
||||
goto err;
|
||||
}
|
||||
dbug_trans(1, "returning 0...\n");
|
||||
- _stp_relay_data.transport_state = STP_TRANSPORT_INITIALIZED;
|
||||
+ atomic_set (&_stp_relay_data.transport_state, STP_TRANSPORT_INITIALIZED);
|
||||
|
||||
return 0;
|
||||
|
||||
diff --git a/runtime/transport/ring_buffer.c b/runtime/transport/ring_buffer.c
|
||||
index 6c327c0..232f099 100644
|
||||
--- a/runtime/transport/ring_buffer.c
|
||||
+++ b/runtime/transport/ring_buffer.c
|
||||
@@ -55,7 +55,7 @@ struct _stp_iterator {
|
||||
#endif
|
||||
|
||||
struct _stp_relay_data_type {
|
||||
- enum _stp_transport_state transport_state;
|
||||
+ atomic_t /* enum _stp_transport_state */ transport_state;
|
||||
struct ring_buffer *rb;
|
||||
struct _stp_iterator iter[NR_ITERS];
|
||||
cpumask_var_t trace_reader_cpumask;
|
||||
@@ -649,10 +649,12 @@ static int _stp_data_write_commit(void *entry)
|
||||
|
||||
static void __stp_relay_wakeup_timer(unsigned long val)
|
||||
{
|
||||
- if (waitqueue_active(&_stp_poll_wait)
|
||||
- && ! _stp_ring_buffer_empty())
|
||||
+ if (waitqueue_active(&_stp_poll_wait) && ! _stp_ring_buffer_empty())
|
||||
wake_up_interruptible(&_stp_poll_wait);
|
||||
- mod_timer(&_stp_relay_data.timer, jiffies + STP_RELAY_TIMER_INTERVAL);
|
||||
+ if (atomic_read(&_stp_relay_data.transport_state) == STP_TRANSPORT_RUNNING)
|
||||
+ mod_timer(&_stp_relay_data.timer, jiffies + STP_RELAY_TIMER_INTERVAL);
|
||||
+ else
|
||||
+ dbug_trans(0, "ring_buffer wakeup timer expiry\n");
|
||||
}
|
||||
|
||||
static void __stp_relay_timer_start(void)
|
||||
@@ -677,7 +679,7 @@ static int _stp_transport_data_fs_init(void)
|
||||
int rc;
|
||||
int cpu, cpu2;
|
||||
|
||||
- _stp_relay_data.transport_state = STP_TRANSPORT_STOPPED;
|
||||
+ atomic_set (&_stp_relay_data.transport_state, STP_TRANSPORT_STOPPED);
|
||||
_stp_relay_data.rb = NULL;
|
||||
|
||||
// allocate buffer
|
||||
@@ -738,23 +740,23 @@ static int _stp_transport_data_fs_init(void)
|
||||
}
|
||||
|
||||
dbug_trans(1, "returning 0...\n");
|
||||
- _stp_relay_data.transport_state = STP_TRANSPORT_INITIALIZED;
|
||||
+ atomic_set (&_stp_relay_data.transport_state, STP_TRANSPORT_INITIALIZED);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void _stp_transport_data_fs_start(void)
|
||||
{
|
||||
- if (_stp_relay_data.transport_state == STP_TRANSPORT_INITIALIZED) {
|
||||
- __stp_relay_timer_start();
|
||||
- _stp_relay_data.transport_state = STP_TRANSPORT_RUNNING;
|
||||
+ if (atomic_read(&_stp_relay_data.transport_state) == STP_TRANSPORT_INITIALIZED) {
|
||||
+ atomic_set(&_stp_relay_data.transport_state, STP_TRANSPORT_RUNNING);
|
||||
+ __stp_relay_timer_start();
|
||||
}
|
||||
}
|
||||
|
||||
static void _stp_transport_data_fs_stop(void)
|
||||
{
|
||||
- if (_stp_relay_data.transport_state == STP_TRANSPORT_RUNNING) {
|
||||
- __stp_relay_timer_stop();
|
||||
- _stp_relay_data.transport_state = STP_TRANSPORT_STOPPED;
|
||||
+ if (atomic_read(&_stp_relay_data.transport_state) == STP_TRANSPORT_RUNNING) {
|
||||
+ atomic_set(&_stp_relay_data.transport_state, STP_TRANSPORT_STOPPED);
|
||||
+ __stp_relay_timer_stop();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -773,7 +775,7 @@ static void _stp_transport_data_fs_close(void)
|
||||
|
||||
static enum _stp_transport_state _stp_transport_get_state(void)
|
||||
{
|
||||
- return _stp_relay_data.transport_state;
|
||||
+ return atomic_read (&_stp_relay_data.transport_state);
|
||||
}
|
||||
|
||||
static void _stp_transport_data_fs_overwrite(int overwrite)
|
@ -1,141 +0,0 @@
|
||||
From: Josh Stone <jistone@redhat.com>
|
||||
Subject: Improve gettimeofday stability
|
||||
References: bnc#664105
|
||||
Patch-Mainline: yes
|
||||
Git-commit: 3fd1c4901e81e5f6b550bb988d612281e0fc231b
|
||||
Git-repo: git://sources.redhat.com/git/systemtap.git
|
||||
|
||||
Signed-off-by: Thomas Renninger <trenn@suse.de>
|
||||
|
||||
These are a few tweaks to improve the stability of our gettimeofday
|
||||
startup and shutdown. Hopefully this helps with PR10651 and PR12182,
|
||||
but that's not been confirmed yet.
|
||||
|
||||
* runtime/runtime.h: Don't include time.c here.
|
||||
* translate.cxx (c_unparser::emit_common_header): Include time.c here,
|
||||
only if NEEDed (so we also ensure init/kill_time will be called).
|
||||
(c_unparser::emit_module_init): Change to STAP_SESSION_STOPPED for the
|
||||
final cleanup efforts, especially for time.c to wrap up.
|
||||
(c_unparser::emit_module_exit): Ditto.
|
||||
* runtime/time.c (__stp_time_timer_callback): Use the session_state
|
||||
instead of stp_timer_reregister, and continue until STOPPED.
|
||||
(__stp_init_time): Don't add_timer from the IPI.
|
||||
(_stp_init_time): Instead, add_timer_on each cpu here.
|
||||
|
||||
diff --git a/runtime/runtime.h b/runtime/runtime.h
|
||||
index d4f41db..814d8ad 100644
|
||||
--- a/runtime/runtime.h
|
||||
+++ b/runtime/runtime.h
|
||||
@@ -132,7 +132,6 @@ static struct
|
||||
#include "copy.c"
|
||||
#include "regs.c"
|
||||
#include "regs-ia64.c"
|
||||
-#include "time.c"
|
||||
|
||||
#include "task_finder.c"
|
||||
|
||||
diff --git a/runtime/time.c b/runtime/time.c
|
||||
index 0d13487..38a808a 100644
|
||||
--- a/runtime/time.c
|
||||
+++ b/runtime/time.c
|
||||
@@ -56,9 +56,6 @@ typedef struct __stp_time_t {
|
||||
|
||||
static void *stp_time = NULL;
|
||||
|
||||
-/* Flag to tell the timer callback whether to reregister */
|
||||
-static int stp_timer_reregister = 0;
|
||||
-
|
||||
/* Try to estimate the number of CPU cycles in a millisecond - i.e. kHz. This
|
||||
* relies heavily on the accuracy of udelay. By calling udelay twice, we
|
||||
* attempt to account for overhead in the call.
|
||||
@@ -134,7 +131,7 @@ __stp_time_timer_callback(unsigned long val)
|
||||
XXX: The worst that can probably happen is that we get
|
||||
two consecutive timer resets. */
|
||||
|
||||
- if (likely(stp_timer_reregister))
|
||||
+ if (likely(atomic_read(&session_state) != STAP_SESSION_STOPPED))
|
||||
mod_timer(&time->timer, jiffies + 1);
|
||||
}
|
||||
|
||||
@@ -154,7 +151,6 @@ __stp_init_time(void *info)
|
||||
init_timer(&time->timer);
|
||||
time->timer.expires = jiffies + 1;
|
||||
time->timer.function = __stp_time_timer_callback;
|
||||
- add_timer(&time->timer);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_CPU_FREQ
|
||||
@@ -208,7 +204,6 @@ _stp_kill_time(void)
|
||||
{
|
||||
if (stp_time) {
|
||||
int cpu;
|
||||
- stp_timer_reregister = 0;
|
||||
for_each_online_cpu(cpu) {
|
||||
stp_time_t *time = per_cpu_ptr(stp_time, cpu);
|
||||
del_timer_sync(&time->timer);
|
||||
@@ -229,20 +224,23 @@ _stp_kill_time(void)
|
||||
static int
|
||||
_stp_init_time(void)
|
||||
{
|
||||
- int ret = 0;
|
||||
+ int cpu, ret = 0;
|
||||
|
||||
_stp_kill_time();
|
||||
|
||||
stp_time = _stp_alloc_percpu(sizeof(stp_time_t));
|
||||
if (unlikely(stp_time == 0))
|
||||
return -1;
|
||||
-
|
||||
- stp_timer_reregister = 1;
|
||||
+
|
||||
#ifdef STAPCONF_ONEACHCPU_RETRY
|
||||
ret = on_each_cpu(__stp_init_time, NULL, 0, 1);
|
||||
#else
|
||||
ret = on_each_cpu(__stp_init_time, NULL, 1);
|
||||
#endif
|
||||
+ for_each_online_cpu(cpu) {
|
||||
+ stp_time_t *time = per_cpu_ptr(stp_time, cpu);
|
||||
+ add_timer_on(&time->timer, cpu);
|
||||
+ }
|
||||
|
||||
#ifdef CONFIG_CPU_FREQ
|
||||
if (!ret && !__stp_constant_freq()) {
|
||||
@@ -250,7 +248,6 @@ _stp_init_time(void)
|
||||
CPUFREQ_TRANSITION_NOTIFIER);
|
||||
|
||||
if (!ret) {
|
||||
- int cpu;
|
||||
for_each_online_cpu(cpu) {
|
||||
unsigned long flags;
|
||||
int freq_khz = cpufreq_get(cpu);
|
||||
diff --git a/translate.cxx b/translate.cxx
|
||||
index f360940..4447a24 100644
|
||||
--- a/translate.cxx
|
||||
+++ b/translate.cxx
|
||||
@@ -1085,6 +1085,10 @@ c_unparser::emit_common_header ()
|
||||
if (!session->stat_decls.empty())
|
||||
o->newline() << "#include \"stat.c\"\n";
|
||||
|
||||
+ o->newline() << "#ifdef STAP_NEED_GETTIMEOFDAY";
|
||||
+ o->newline() << "#include \"time.c\""; // Don't we all need more?
|
||||
+ o->newline() << "#endif";
|
||||
+
|
||||
o->newline();
|
||||
}
|
||||
|
||||
@@ -1327,6 +1331,7 @@ c_unparser::emit_module_init ()
|
||||
}
|
||||
|
||||
// For any partially registered/unregistered kernel facilities.
|
||||
+ o->newline() << "atomic_set (&session_state, STAP_SESSION_STOPPED);";
|
||||
o->newline() << "#ifdef STAPCONF_SYNCHRONIZE_SCHED";
|
||||
o->newline() << "synchronize_sched();";
|
||||
o->newline() << "#endif";
|
||||
@@ -1409,6 +1414,7 @@ c_unparser::emit_module_exit ()
|
||||
o->newline(-2) << "} while (holdon);";
|
||||
|
||||
// cargo cult epilogue
|
||||
+ o->newline() << "atomic_set (&session_state, STAP_SESSION_STOPPED);";
|
||||
o->newline() << "#ifdef STAPCONF_SYNCHRONIZE_SCHED";
|
||||
o->newline() << "synchronize_sched();";
|
||||
o->newline() << "#endif";
|
Loading…
Reference in New Issue
Block a user