Openembedded Core Discussions
 help / color / mirror / Atom feed
* [PATCH 1/2] systemtap: supports mips starting with version 3.1
@ 2018-03-05 16:50 Victor Kamensky
  2018-03-05 16:50 ` [PATCH 2/2] systemtap: bring in PR22551 fix that addresses build against 4.15 kernel issue Victor Kamensky
  2018-03-05 17:35 ` ✗ patchtest: failure for "systemtap: supports mips start..." and 1 more Patchwork
  0 siblings, 2 replies; 4+ messages in thread
From: Victor Kamensky @ 2018-03-05 16:50 UTC (permalink / raw)
  To: openembedded-core

Signed-off-by: Victor Kamensky <kamensky@cisco.com>
---
 meta/recipes-kernel/systemtap/systemtap_git.inc | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/meta/recipes-kernel/systemtap/systemtap_git.inc b/meta/recipes-kernel/systemtap/systemtap_git.inc
index c938760..d122359 100644
--- a/meta/recipes-kernel/systemtap/systemtap_git.inc
+++ b/meta/recipes-kernel/systemtap/systemtap_git.inc
@@ -15,8 +15,7 @@ SRC_URI = "git://sourceware.org/git/systemtap.git \
            file://0001-staprun-stapbpf-don-t-support-installing-a-non-root.patch \
            "
 
-# systemtap doesn't support mips
-COMPATIBLE_HOST = '(x86_64|i.86|powerpc|arm|aarch64|microblazeel).*-linux'
+COMPATIBLE_HOST = '(x86_64|i.86|powerpc|arm|aarch64|microblazeel|mips).*-linux'
 
 S = "${WORKDIR}/git"
 
-- 
2.7.4



^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH 2/2] systemtap: bring in PR22551 fix that addresses build against 4.15 kernel issue
  2018-03-05 16:50 [PATCH 1/2] systemtap: supports mips starting with version 3.1 Victor Kamensky
@ 2018-03-05 16:50 ` Victor Kamensky
  2018-03-06  3:16   ` Khem Raj
  2018-03-05 17:35 ` ✗ patchtest: failure for "systemtap: supports mips start..." and 1 more Patchwork
  1 sibling, 1 reply; 4+ messages in thread
From: Victor Kamensky @ 2018-03-05 16:50 UTC (permalink / raw)
  To: openembedded-core

With 4.15 kernel systemtap needs update to address systemtap module
compilation issues. It is fixed in later version of systemtap by
PR22551.

Upstream-Status: Backport

Signed-off-by: Victor Kamensky <kamensky@cisco.com>
---
 ...-by-updating-the-use-of-timers-for-the-4..patch | 273 +++++++++++++++++++++
 meta/recipes-kernel/systemtap/systemtap_git.inc    |   1 +
 2 files changed, 274 insertions(+)
 create mode 100644 meta/recipes-kernel/systemtap/systemtap/0001-Fix-PR22551-by-updating-the-use-of-timers-for-the-4..patch

diff --git a/meta/recipes-kernel/systemtap/systemtap/0001-Fix-PR22551-by-updating-the-use-of-timers-for-the-4..patch b/meta/recipes-kernel/systemtap/systemtap/0001-Fix-PR22551-by-updating-the-use-of-timers-for-the-4..patch
new file mode 100644
index 0000000..da30f8c
--- /dev/null
+++ b/meta/recipes-kernel/systemtap/systemtap/0001-Fix-PR22551-by-updating-the-use-of-timers-for-the-4..patch
@@ -0,0 +1,273 @@
+From fbb26e17a4c026f05a497fc5d584516bad3b6950 Mon Sep 17 00:00:00 2001
+From: David Smith <dsmith@redhat.com>
+Date: Wed, 6 Dec 2017 14:37:42 -0600
+Subject: [PATCH] Fix PR22551 by updating the use of timers for the 4.15
+ kernel.
+
+* runtime/linux/timer_compatibility.h: New file.
+* runtime/time.c: Update timer callback function parameter type. Update
+  timer initialization.
+* runtime/transport/relay_v2.c: Ditto.
+* runtime/transport/transport.c: Ditto.
+* tapset-timers.cxx (timer_derived_probe_group::emit_module_decls):
+  Ditto. Handle old and new timer callback interface.
+* runtime/linux/runtime.h: Include timer_compatibility.h instead of timer.h.
+* tapset/linux/scsi.stp: Ditto.
+---
+ runtime/linux/runtime.h             |  2 +-
+ runtime/linux/timer_compatibility.h | 76 +++++++++++++++++++++++++++++++++++++
+ runtime/time.c                      |  7 ++--
+ runtime/transport/relay_v2.c        |  8 ++--
+ runtime/transport/transport.c       | 13 +++----
+ tapset-timers.cxx                   | 14 +++++--
+ tapset/linux/scsi.stp               |  2 +-
+ 7 files changed, 100 insertions(+), 22 deletions(-)
+ create mode 100644 runtime/linux/timer_compatibility.h
+
+diff --git a/runtime/linux/runtime.h b/runtime/linux/runtime.h
+index 9c585a2..df9b74c 100644
+--- a/runtime/linux/runtime.h
++++ b/runtime/linux/runtime.h
+@@ -34,7 +34,7 @@
+ #include <linux/compat.h>
+ #include <linux/sched.h>
+ #include <linux/mm.h>
+-#include <linux/timer.h>
++#include "timer_compatibility.h"
+ #include <linux/delay.h>
+ #include <linux/profile.h>
+ #include <linux/rcupdate.h>
+diff --git a/runtime/linux/timer_compatibility.h b/runtime/linux/timer_compatibility.h
+new file mode 100644
+index 0000000..ac03de9
+--- /dev/null
++++ b/runtime/linux/timer_compatibility.h
+@@ -0,0 +1,76 @@
++/*
++ * linux/timer.h compatibility defines and inlines
++ * Copyright (C) 2017 Red Hat Inc.
++ *
++ * This file is part of systemtap, and is free software.  You can
++ * redistribute it and/or modify it under the terms of the GNU General
++ * Public License (GPL); either version 2, or (at your option) any
++ * later version.
++ */
++
++#ifndef _TIMER_COMPATIBILITY_H_
++#define _TIMER_COMPATIBILITY_H_
++
++#include <linux/timer.h>
++
++/*
++ * Starting with the 4.15 kernel, the timer interface
++ * changed. Originally, you'd do something like:
++ *
++ *   static void timer_func(unsigned long val);
++ *
++ *   init_timer(&timer);
++ *   timer.expires = jiffies + STP_RELAY_TIMER_INTERVAL;
++ *   timer.function = timer_func;
++ *   timer.data = 0;
++ *   add_timer(&timer);
++ *
++ * The 'data' parameter would get passed to the callback
++ * function. Starting with 4.15, you'd do something like this:
++ *
++ *   static void timer_func(struct timer_list *val);
++ *
++ *   timer_setup(&timer, timer_func, 0);
++ *   timer.expires = jiffies + STP_RELAY_TIMER_INTERVAL;
++ *   add_timer(&timer);
++ *   
++ * With the new code, the timer that caused the callback gets passed
++ * to the timer callback function. The 'data' field has been removed.
++ *
++ * So, we're going to use the new interface. To hide the differences
++ * between the callback function parameter type, we'll define a new
++ * type, 'stp_timer_callback_parameter_t'.
++ *
++ * If code needs to figure out the difference between the old and new
++ * interface, it should test the TIMER_TRACE_FLAGMASK define (which
++ * only exists in the new interface).
++ */
++
++#if defined(TIMER_TRACE_FLAGMASK) 
++/* This is the >= 4.15 kernel interface. */
++
++typedef struct timer_list * stp_timer_callback_parameter_t;
++
++#else
++/* This is the < 4.15 kernel interface. */
++
++typedef unsigned long stp_timer_callback_parameter_t;
++
++/**
++ * timer_setup - prepare a timer for first use
++ * @timer: the timer in question
++ * @callback: the function to call when timer expires
++ * @flags: any TIMER_* flags (note that anything other than 0 is an
++ * 	   error, since this compatibility function can't support any
++ *	   of the TIMER_* flags)
++ */
++#define timer_setup(timer, callback, flags)			\
++	{							\
++		init_timer((timer));				\
++		(timer)->function = callback;			\
++		(timer)->data = 0;				\
++		BUILD_BUG_ON_ZERO((flags) != 0);		\
++	}
++#endif
++
++#endif /* _TIMER_COMPATIBILITY_H_ */
+diff --git a/runtime/time.c b/runtime/time.c
+index 2e666d5..91ceafa 100644
+--- a/runtime/time.c
++++ b/runtime/time.c
+@@ -168,10 +168,10 @@ __stp_time_smp_callback(void *val)
+ 
+ /* The timer callback is in a softIRQ -- interrupts enabled. */
+ static void
+-__stp_time_timer_callback(unsigned long val)
++__stp_time_timer_callback(stp_timer_callback_parameter_t unused)
+ {
+     stp_time_t *time =__stp_time_local_update();
+-    (void) val;
++    (void) unused;
+ 
+     /* PR6481: make sure IRQs are enabled before resetting the timer
+        (IRQs are disabled and then reenabled in
+@@ -200,9 +200,8 @@ __stp_init_time(void *info)
+     time->freq = __stp_get_freq();
+     __stp_time_local_update();
+ 
+-    init_timer(&time->timer);
++    timer_setup(&time->timer, __stp_time_timer_callback, 0);
+     time->timer.expires = jiffies + STP_TIME_SYNC_INTERVAL;
+-    time->timer.function = __stp_time_timer_callback;
+ 
+ #ifndef STAPCONF_ADD_TIMER_ON
+     add_timer(&time->timer);
+diff --git a/runtime/transport/relay_v2.c b/runtime/transport/relay_v2.c
+index f81d75d..135951a 100644
+--- a/runtime/transport/relay_v2.c
++++ b/runtime/transport/relay_v2.c
+@@ -30,7 +30,7 @@
+ #include <linux/debugfs.h>
+ #include <linux/mm.h>
+ #include <linux/relay.h>
+-#include <linux/timer.h>
++#include "../linux/timer_compatibility.h"
+ #include "../uidgid_compatibility.h"
+ #include "relay_compat.h"
+ 
+@@ -120,7 +120,7 @@ static void __stp_relay_wakeup_readers(struct rchan_buf *buf)
+ 		wake_up_interruptible(&buf->read_wait);
+ }
+ 
+-static void __stp_relay_wakeup_timer(unsigned long val)
++static void __stp_relay_wakeup_timer(stp_timer_callback_parameter_t unused)
+ {
+ #ifdef STP_BULKMODE
+ 	int i;
+@@ -151,10 +151,8 @@ static void __stp_relay_wakeup_timer(unsigned long val)
+ static void __stp_relay_timer_init(void)
+ {
+ 	atomic_set(&_stp_relay_data.wakeup, 0);
+-	init_timer(&_stp_relay_data.timer);
++	timer_setup(&_stp_relay_data.timer, __stp_relay_wakeup_timer, 0);
+ 	_stp_relay_data.timer.expires = jiffies + STP_RELAY_TIMER_INTERVAL;
+-	_stp_relay_data.timer.function = __stp_relay_wakeup_timer;
+-	_stp_relay_data.timer.data = 0;
+ 	add_timer(&_stp_relay_data.timer);
+ 	smp_mb();
+ }
+diff --git a/runtime/transport/transport.c b/runtime/transport/transport.c
+index 3400f22..320fd18 100644
+--- a/runtime/transport/transport.c
++++ b/runtime/transport/transport.c
+@@ -311,7 +311,7 @@ static void _stp_detach(void)
+ }
+ 
+ 
+-static void _stp_ctl_work_callback(unsigned long val);
++static void _stp_ctl_work_callback(stp_timer_callback_parameter_t unused);
+ 
+ /*
+  * Called when stapio opens the control channel.
+@@ -320,13 +320,12 @@ static void _stp_attach(void)
+ {
+ 	dbug_trans(1, "attach\n");
+ 	_stp_pid = current->pid;
+-  if (_stp_namespaces_pid < 1)
+-    _stp_namespaces_pid = _stp_pid;
++	if (_stp_namespaces_pid < 1)
++		_stp_namespaces_pid = _stp_pid;
+ 	_stp_transport_data_fs_overwrite(0);
+-	init_timer(&_stp_ctl_work_timer);
++
++	timer_setup(&_stp_ctl_work_timer, _stp_ctl_work_callback, 0);
+ 	_stp_ctl_work_timer.expires = jiffies + STP_CTL_TIMER_INTERVAL;
+-	_stp_ctl_work_timer.function = _stp_ctl_work_callback;
+-	_stp_ctl_work_timer.data= 0;
+ 	add_timer(&_stp_ctl_work_timer);
+ }
+ 
+@@ -341,7 +340,7 @@ static void _stp_attach(void)
+  *	notified. Reschedules itself if someone is still attached
+  *	to the cmd channel.
+  */
+-static void _stp_ctl_work_callback(unsigned long val)
++static void _stp_ctl_work_callback(stp_timer_callback_parameter_t unused)
+ {
+ 	int do_io = 0;
+ 	unsigned long flags;
+diff --git a/tapset-timers.cxx b/tapset-timers.cxx
+index 1a40bcd..0ab4d69 100644
+--- a/tapset-timers.cxx
++++ b/tapset-timers.cxx
+@@ -122,9 +122,13 @@ timer_derived_probe_group::emit_module_decls (systemtap_session& s)
+   s.op->newline(-1) << "};";
+   s.op->newline();
+ 
+-  s.op->newline() << "static void enter_timer_probe (unsigned long val) {";
++  s.op->newline() << "static void enter_timer_probe (stp_timer_callback_parameter_t val) {";
++  s.op->newline() << "#if defined(TIMER_TRACE_FLAGMASK)";
++  s.op->newline(1) << "struct stap_timer_probe* stp = container_of(val, struct stap_timer_probe, timer_list);";
++  s.op->newline(-1) << "#else";
+   s.op->newline(1) << "struct stap_timer_probe* stp = & stap_timer_probes [val];";
+-  s.op->newline() << "if ((atomic_read (session_state()) == STAP_SESSION_STARTING) ||";
++  s.op->newline(-1) << "#endif";
++  s.op->newline(1) << "if ((atomic_read (session_state()) == STAP_SESSION_STARTING) ||";
+   s.op->newline() << "    (atomic_read (session_state()) == STAP_SESSION_RUNNING))";
+   s.op->newline(1) << "mod_timer (& stp->timer_list, jiffies + ";
+   emit_interval (s.op);
+@@ -148,9 +152,11 @@ timer_derived_probe_group::emit_module_init (systemtap_session& s)
+   s.op->newline() << "for (i=0; i<" << probes.size() << "; i++) {";
+   s.op->newline(1) << "struct stap_timer_probe* stp = & stap_timer_probes [i];";
+   s.op->newline() << "probe_point = stp->probe->pp;";
+-  s.op->newline() << "init_timer (& stp->timer_list);";
+-  s.op->newline() << "stp->timer_list.function = & enter_timer_probe;";
++
++  s.op->newline() << "timer_setup (& stp->timer_list, enter_timer_probe, 0);";
++  s.op->newline() << "#if !defined(TIMER_TRACE_FLAGMASK)";
+   s.op->newline() << "stp->timer_list.data = i;"; // NB: important!
++  s.op->newline() << "#endif";
+   // copy timer renew calculations from above :-(
+   s.op->newline() << "stp->timer_list.expires = jiffies + ";
+   emit_interval (s.op);
+diff --git a/tapset/linux/scsi.stp b/tapset/linux/scsi.stp
+index 44f686c..3577942 100644
+--- a/tapset/linux/scsi.stp
++++ b/tapset/linux/scsi.stp
+@@ -14,7 +14,7 @@
+ #include <scsi/scsi_cmnd.h>
+ #include <scsi/scsi_device.h>
+ #include <scsi/scsi_host.h>
+-#include <linux/timer.h>
++#include "linux/timer_compatibility.h"
+ #include <linux/blkdev.h>
+ %}
+ 
+-- 
+2.7.4
+
diff --git a/meta/recipes-kernel/systemtap/systemtap_git.inc b/meta/recipes-kernel/systemtap/systemtap_git.inc
index d122359..f51bd28 100644
--- a/meta/recipes-kernel/systemtap/systemtap_git.inc
+++ b/meta/recipes-kernel/systemtap/systemtap_git.inc
@@ -13,6 +13,7 @@ SRC_URI = "git://sourceware.org/git/systemtap.git \
            file://0001-Install-python-modules-to-correct-library-dir.patch \
            file://0001-buildrun-remove-quotes-around-I-include-line.patch \
            file://0001-staprun-stapbpf-don-t-support-installing-a-non-root.patch \
+           file://0001-Fix-PR22551-by-updating-the-use-of-timers-for-the-4..patch \
            "
 
 COMPATIBLE_HOST = '(x86_64|i.86|powerpc|arm|aarch64|microblazeel|mips).*-linux'
-- 
2.7.4



^ permalink raw reply related	[flat|nested] 4+ messages in thread

* ✗ patchtest: failure for "systemtap: supports mips start..." and 1 more
  2018-03-05 16:50 [PATCH 1/2] systemtap: supports mips starting with version 3.1 Victor Kamensky
  2018-03-05 16:50 ` [PATCH 2/2] systemtap: bring in PR22551 fix that addresses build against 4.15 kernel issue Victor Kamensky
@ 2018-03-05 17:35 ` Patchwork
  1 sibling, 0 replies; 4+ messages in thread
From: Patchwork @ 2018-03-05 17:35 UTC (permalink / raw)
  To: Victor Kamensky; +Cc: openembedded-core

== Series Details ==

Series: "systemtap: supports mips start..." and 1 more
Revision: 1
URL   : https://patchwork.openembedded.org/series/11250/
State : failure

== Summary ==


Thank you for submitting this patch series to OpenEmbedded Core. This is
an automated response. Several tests have been executed on the proposed
series by patchtest resulting in the following failures:



* Issue             A patch file has been added, but does not have a Signed-off-by tag [test_signed_off_by_presence] 
  Suggested fix    Sign off the added patch file (meta/recipes-kernel/systemtap/systemtap/0001-Fix-PR22551-by-updating-the-use-of-timers-for-the-4..patch)

* Issue             Added patch file is missing Upstream-Status in the header [test_upstream_status_presence_format] 
  Suggested fix    Add Upstream-Status: <Valid status> to the header of meta/recipes-kernel/systemtap/systemtap/0001-Fix-PR22551-by-updating-the-use-of-timers-for-the-4..patch
  Standard format  Upstream-Status: <Valid status>
  Valid status     Pending, Accepted, Backport, Denied, Inappropriate [reason], Submitted [where]



If you believe any of these test results are incorrect, please reply to the
mailing list (openembedded-core@lists.openembedded.org) raising your concerns.
Otherwise we would appreciate you correcting the issues and submitting a new
version of the patchset if applicable. Please ensure you add/increment the
version number when sending the new version (i.e. [PATCH] -> [PATCH v2] ->
[PATCH v3] -> ...).

---
Guidelines:     https://www.openembedded.org/wiki/Commit_Patch_Message_Guidelines
Test framework: http://git.yoctoproject.org/cgit/cgit.cgi/patchtest
Test suite:     http://git.yoctoproject.org/cgit/cgit.cgi/patchtest-oe



^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH 2/2] systemtap: bring in PR22551 fix that addresses build against 4.15 kernel issue
  2018-03-05 16:50 ` [PATCH 2/2] systemtap: bring in PR22551 fix that addresses build against 4.15 kernel issue Victor Kamensky
@ 2018-03-06  3:16   ` Khem Raj
  0 siblings, 0 replies; 4+ messages in thread
From: Khem Raj @ 2018-03-06  3:16 UTC (permalink / raw)
  To: Victor Kamensky; +Cc: Patches and discussions about the oe-core layer

On Mon, Mar 5, 2018 at 8:50 AM, Victor Kamensky <kamensky@cisco.com> wrote:
> With 4.15 kernel systemtap needs update to address systemtap module
> compilation issues. It is fixed in later version of systemtap by
> PR22551.
>


LGTM

> Upstream-Status: Backport
>
> Signed-off-by: Victor Kamensky <kamensky@cisco.com>
> ---
>  ...-by-updating-the-use-of-timers-for-the-4..patch | 273 +++++++++++++++++++++
>  meta/recipes-kernel/systemtap/systemtap_git.inc    |   1 +
>  2 files changed, 274 insertions(+)
>  create mode 100644 meta/recipes-kernel/systemtap/systemtap/0001-Fix-PR22551-by-updating-the-use-of-timers-for-the-4..patch
>
> diff --git a/meta/recipes-kernel/systemtap/systemtap/0001-Fix-PR22551-by-updating-the-use-of-timers-for-the-4..patch b/meta/recipes-kernel/systemtap/systemtap/0001-Fix-PR22551-by-updating-the-use-of-timers-for-the-4..patch
> new file mode 100644
> index 0000000..da30f8c
> --- /dev/null
> +++ b/meta/recipes-kernel/systemtap/systemtap/0001-Fix-PR22551-by-updating-the-use-of-timers-for-the-4..patch
> @@ -0,0 +1,273 @@
> +From fbb26e17a4c026f05a497fc5d584516bad3b6950 Mon Sep 17 00:00:00 2001
> +From: David Smith <dsmith@redhat.com>
> +Date: Wed, 6 Dec 2017 14:37:42 -0600
> +Subject: [PATCH] Fix PR22551 by updating the use of timers for the 4.15
> + kernel.
> +
> +* runtime/linux/timer_compatibility.h: New file.
> +* runtime/time.c: Update timer callback function parameter type. Update
> +  timer initialization.
> +* runtime/transport/relay_v2.c: Ditto.
> +* runtime/transport/transport.c: Ditto.
> +* tapset-timers.cxx (timer_derived_probe_group::emit_module_decls):
> +  Ditto. Handle old and new timer callback interface.
> +* runtime/linux/runtime.h: Include timer_compatibility.h instead of timer.h.
> +* tapset/linux/scsi.stp: Ditto.
> +---
> + runtime/linux/runtime.h             |  2 +-
> + runtime/linux/timer_compatibility.h | 76 +++++++++++++++++++++++++++++++++++++
> + runtime/time.c                      |  7 ++--
> + runtime/transport/relay_v2.c        |  8 ++--
> + runtime/transport/transport.c       | 13 +++----
> + tapset-timers.cxx                   | 14 +++++--
> + tapset/linux/scsi.stp               |  2 +-
> + 7 files changed, 100 insertions(+), 22 deletions(-)
> + create mode 100644 runtime/linux/timer_compatibility.h
> +
> +diff --git a/runtime/linux/runtime.h b/runtime/linux/runtime.h
> +index 9c585a2..df9b74c 100644
> +--- a/runtime/linux/runtime.h
> ++++ b/runtime/linux/runtime.h
> +@@ -34,7 +34,7 @@
> + #include <linux/compat.h>
> + #include <linux/sched.h>
> + #include <linux/mm.h>
> +-#include <linux/timer.h>
> ++#include "timer_compatibility.h"
> + #include <linux/delay.h>
> + #include <linux/profile.h>
> + #include <linux/rcupdate.h>
> +diff --git a/runtime/linux/timer_compatibility.h b/runtime/linux/timer_compatibility.h
> +new file mode 100644
> +index 0000000..ac03de9
> +--- /dev/null
> ++++ b/runtime/linux/timer_compatibility.h
> +@@ -0,0 +1,76 @@
> ++/*
> ++ * linux/timer.h compatibility defines and inlines
> ++ * Copyright (C) 2017 Red Hat Inc.
> ++ *
> ++ * This file is part of systemtap, and is free software.  You can
> ++ * redistribute it and/or modify it under the terms of the GNU General
> ++ * Public License (GPL); either version 2, or (at your option) any
> ++ * later version.
> ++ */
> ++
> ++#ifndef _TIMER_COMPATIBILITY_H_
> ++#define _TIMER_COMPATIBILITY_H_
> ++
> ++#include <linux/timer.h>
> ++
> ++/*
> ++ * Starting with the 4.15 kernel, the timer interface
> ++ * changed. Originally, you'd do something like:
> ++ *
> ++ *   static void timer_func(unsigned long val);
> ++ *
> ++ *   init_timer(&timer);
> ++ *   timer.expires = jiffies + STP_RELAY_TIMER_INTERVAL;
> ++ *   timer.function = timer_func;
> ++ *   timer.data = 0;
> ++ *   add_timer(&timer);
> ++ *
> ++ * The 'data' parameter would get passed to the callback
> ++ * function. Starting with 4.15, you'd do something like this:
> ++ *
> ++ *   static void timer_func(struct timer_list *val);
> ++ *
> ++ *   timer_setup(&timer, timer_func, 0);
> ++ *   timer.expires = jiffies + STP_RELAY_TIMER_INTERVAL;
> ++ *   add_timer(&timer);
> ++ *
> ++ * With the new code, the timer that caused the callback gets passed
> ++ * to the timer callback function. The 'data' field has been removed.
> ++ *
> ++ * So, we're going to use the new interface. To hide the differences
> ++ * between the callback function parameter type, we'll define a new
> ++ * type, 'stp_timer_callback_parameter_t'.
> ++ *
> ++ * If code needs to figure out the difference between the old and new
> ++ * interface, it should test the TIMER_TRACE_FLAGMASK define (which
> ++ * only exists in the new interface).
> ++ */
> ++
> ++#if defined(TIMER_TRACE_FLAGMASK)
> ++/* This is the >= 4.15 kernel interface. */
> ++
> ++typedef struct timer_list * stp_timer_callback_parameter_t;
> ++
> ++#else
> ++/* This is the < 4.15 kernel interface. */
> ++
> ++typedef unsigned long stp_timer_callback_parameter_t;
> ++
> ++/**
> ++ * timer_setup - prepare a timer for first use
> ++ * @timer: the timer in question
> ++ * @callback: the function to call when timer expires
> ++ * @flags: any TIMER_* flags (note that anything other than 0 is an
> ++ *       error, since this compatibility function can't support any
> ++ *       of the TIMER_* flags)
> ++ */
> ++#define timer_setup(timer, callback, flags)                   \
> ++      {                                                       \
> ++              init_timer((timer));                            \
> ++              (timer)->function = callback;                   \
> ++              (timer)->data = 0;                              \
> ++              BUILD_BUG_ON_ZERO((flags) != 0);                \
> ++      }
> ++#endif
> ++
> ++#endif /* _TIMER_COMPATIBILITY_H_ */
> +diff --git a/runtime/time.c b/runtime/time.c
> +index 2e666d5..91ceafa 100644
> +--- a/runtime/time.c
> ++++ b/runtime/time.c
> +@@ -168,10 +168,10 @@ __stp_time_smp_callback(void *val)
> +
> + /* The timer callback is in a softIRQ -- interrupts enabled. */
> + static void
> +-__stp_time_timer_callback(unsigned long val)
> ++__stp_time_timer_callback(stp_timer_callback_parameter_t unused)
> + {
> +     stp_time_t *time =__stp_time_local_update();
> +-    (void) val;
> ++    (void) unused;
> +
> +     /* PR6481: make sure IRQs are enabled before resetting the timer
> +        (IRQs are disabled and then reenabled in
> +@@ -200,9 +200,8 @@ __stp_init_time(void *info)
> +     time->freq = __stp_get_freq();
> +     __stp_time_local_update();
> +
> +-    init_timer(&time->timer);
> ++    timer_setup(&time->timer, __stp_time_timer_callback, 0);
> +     time->timer.expires = jiffies + STP_TIME_SYNC_INTERVAL;
> +-    time->timer.function = __stp_time_timer_callback;
> +
> + #ifndef STAPCONF_ADD_TIMER_ON
> +     add_timer(&time->timer);
> +diff --git a/runtime/transport/relay_v2.c b/runtime/transport/relay_v2.c
> +index f81d75d..135951a 100644
> +--- a/runtime/transport/relay_v2.c
> ++++ b/runtime/transport/relay_v2.c
> +@@ -30,7 +30,7 @@
> + #include <linux/debugfs.h>
> + #include <linux/mm.h>
> + #include <linux/relay.h>
> +-#include <linux/timer.h>
> ++#include "../linux/timer_compatibility.h"
> + #include "../uidgid_compatibility.h"
> + #include "relay_compat.h"
> +
> +@@ -120,7 +120,7 @@ static void __stp_relay_wakeup_readers(struct rchan_buf *buf)
> +               wake_up_interruptible(&buf->read_wait);
> + }
> +
> +-static void __stp_relay_wakeup_timer(unsigned long val)
> ++static void __stp_relay_wakeup_timer(stp_timer_callback_parameter_t unused)
> + {
> + #ifdef STP_BULKMODE
> +       int i;
> +@@ -151,10 +151,8 @@ static void __stp_relay_wakeup_timer(unsigned long val)
> + static void __stp_relay_timer_init(void)
> + {
> +       atomic_set(&_stp_relay_data.wakeup, 0);
> +-      init_timer(&_stp_relay_data.timer);
> ++      timer_setup(&_stp_relay_data.timer, __stp_relay_wakeup_timer, 0);
> +       _stp_relay_data.timer.expires = jiffies + STP_RELAY_TIMER_INTERVAL;
> +-      _stp_relay_data.timer.function = __stp_relay_wakeup_timer;
> +-      _stp_relay_data.timer.data = 0;
> +       add_timer(&_stp_relay_data.timer);
> +       smp_mb();
> + }
> +diff --git a/runtime/transport/transport.c b/runtime/transport/transport.c
> +index 3400f22..320fd18 100644
> +--- a/runtime/transport/transport.c
> ++++ b/runtime/transport/transport.c
> +@@ -311,7 +311,7 @@ static void _stp_detach(void)
> + }
> +
> +
> +-static void _stp_ctl_work_callback(unsigned long val);
> ++static void _stp_ctl_work_callback(stp_timer_callback_parameter_t unused);
> +
> + /*
> +  * Called when stapio opens the control channel.
> +@@ -320,13 +320,12 @@ static void _stp_attach(void)
> + {
> +       dbug_trans(1, "attach\n");
> +       _stp_pid = current->pid;
> +-  if (_stp_namespaces_pid < 1)
> +-    _stp_namespaces_pid = _stp_pid;
> ++      if (_stp_namespaces_pid < 1)
> ++              _stp_namespaces_pid = _stp_pid;
> +       _stp_transport_data_fs_overwrite(0);
> +-      init_timer(&_stp_ctl_work_timer);
> ++
> ++      timer_setup(&_stp_ctl_work_timer, _stp_ctl_work_callback, 0);
> +       _stp_ctl_work_timer.expires = jiffies + STP_CTL_TIMER_INTERVAL;
> +-      _stp_ctl_work_timer.function = _stp_ctl_work_callback;
> +-      _stp_ctl_work_timer.data= 0;
> +       add_timer(&_stp_ctl_work_timer);
> + }
> +
> +@@ -341,7 +340,7 @@ static void _stp_attach(void)
> +  *    notified. Reschedules itself if someone is still attached
> +  *    to the cmd channel.
> +  */
> +-static void _stp_ctl_work_callback(unsigned long val)
> ++static void _stp_ctl_work_callback(stp_timer_callback_parameter_t unused)
> + {
> +       int do_io = 0;
> +       unsigned long flags;
> +diff --git a/tapset-timers.cxx b/tapset-timers.cxx
> +index 1a40bcd..0ab4d69 100644
> +--- a/tapset-timers.cxx
> ++++ b/tapset-timers.cxx
> +@@ -122,9 +122,13 @@ timer_derived_probe_group::emit_module_decls (systemtap_session& s)
> +   s.op->newline(-1) << "};";
> +   s.op->newline();
> +
> +-  s.op->newline() << "static void enter_timer_probe (unsigned long val) {";
> ++  s.op->newline() << "static void enter_timer_probe (stp_timer_callback_parameter_t val) {";
> ++  s.op->newline() << "#if defined(TIMER_TRACE_FLAGMASK)";
> ++  s.op->newline(1) << "struct stap_timer_probe* stp = container_of(val, struct stap_timer_probe, timer_list);";
> ++  s.op->newline(-1) << "#else";
> +   s.op->newline(1) << "struct stap_timer_probe* stp = & stap_timer_probes [val];";
> +-  s.op->newline() << "if ((atomic_read (session_state()) == STAP_SESSION_STARTING) ||";
> ++  s.op->newline(-1) << "#endif";
> ++  s.op->newline(1) << "if ((atomic_read (session_state()) == STAP_SESSION_STARTING) ||";
> +   s.op->newline() << "    (atomic_read (session_state()) == STAP_SESSION_RUNNING))";
> +   s.op->newline(1) << "mod_timer (& stp->timer_list, jiffies + ";
> +   emit_interval (s.op);
> +@@ -148,9 +152,11 @@ timer_derived_probe_group::emit_module_init (systemtap_session& s)
> +   s.op->newline() << "for (i=0; i<" << probes.size() << "; i++) {";
> +   s.op->newline(1) << "struct stap_timer_probe* stp = & stap_timer_probes [i];";
> +   s.op->newline() << "probe_point = stp->probe->pp;";
> +-  s.op->newline() << "init_timer (& stp->timer_list);";
> +-  s.op->newline() << "stp->timer_list.function = & enter_timer_probe;";
> ++
> ++  s.op->newline() << "timer_setup (& stp->timer_list, enter_timer_probe, 0);";
> ++  s.op->newline() << "#if !defined(TIMER_TRACE_FLAGMASK)";
> +   s.op->newline() << "stp->timer_list.data = i;"; // NB: important!
> ++  s.op->newline() << "#endif";
> +   // copy timer renew calculations from above :-(
> +   s.op->newline() << "stp->timer_list.expires = jiffies + ";
> +   emit_interval (s.op);
> +diff --git a/tapset/linux/scsi.stp b/tapset/linux/scsi.stp
> +index 44f686c..3577942 100644
> +--- a/tapset/linux/scsi.stp
> ++++ b/tapset/linux/scsi.stp
> +@@ -14,7 +14,7 @@
> + #include <scsi/scsi_cmnd.h>
> + #include <scsi/scsi_device.h>
> + #include <scsi/scsi_host.h>
> +-#include <linux/timer.h>
> ++#include "linux/timer_compatibility.h"
> + #include <linux/blkdev.h>
> + %}
> +
> +--
> +2.7.4
> +
> diff --git a/meta/recipes-kernel/systemtap/systemtap_git.inc b/meta/recipes-kernel/systemtap/systemtap_git.inc
> index d122359..f51bd28 100644
> --- a/meta/recipes-kernel/systemtap/systemtap_git.inc
> +++ b/meta/recipes-kernel/systemtap/systemtap_git.inc
> @@ -13,6 +13,7 @@ SRC_URI = "git://sourceware.org/git/systemtap.git \
>             file://0001-Install-python-modules-to-correct-library-dir.patch \
>             file://0001-buildrun-remove-quotes-around-I-include-line.patch \
>             file://0001-staprun-stapbpf-don-t-support-installing-a-non-root.patch \
> +           file://0001-Fix-PR22551-by-updating-the-use-of-timers-for-the-4..patch \
>             "
>
>  COMPATIBLE_HOST = '(x86_64|i.86|powerpc|arm|aarch64|microblazeel|mips).*-linux'
> --
> 2.7.4
>
> --
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core@lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-core


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2018-03-06  3:16 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-03-05 16:50 [PATCH 1/2] systemtap: supports mips starting with version 3.1 Victor Kamensky
2018-03-05 16:50 ` [PATCH 2/2] systemtap: bring in PR22551 fix that addresses build against 4.15 kernel issue Victor Kamensky
2018-03-06  3:16   ` Khem Raj
2018-03-05 17:35 ` ✗ patchtest: failure for "systemtap: supports mips start..." and 1 more Patchwork

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox