summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2016-02-29 09:34:47 +0100
committerThomas Gleixner <tglx@linutronix.de>2016-02-29 12:21:06 +0100
commit02d11b73d8133f94f5384bcf80d82bb7df6eff95 (patch)
tree03a8f17bf2c65260e9f778077cbbbdfe79f3c785
parent1f5b31cf66208183133b983dc0ac196663418885 (diff)
download4.8-rt-patches-02d11b73d8133f94f5384bcf80d82bb7df6eff95.tar.gz
[ANNOUNCE] v4.4.3-rt9
Dear RT folks! I'm pleased to announce the v4.4.3-rt9 patch set. v4.4.2-rt7 and v4.4.3-rt8 are non-announced updates to incorporate the linux-4.4.y stable tree. There is one change caused by the 4.4.3 update: The relaxed handling of dump_stack() on RT has been dropped as there is actually a potential deadlock lurking around the corner. See: commit d7ce36924344 upstream. This does not effect the other facilities which gather stack traces. RT changes since v4.4.3-rt8: Clark Williams (1): rcu/torture: Comment out rcu_bh ops on PREEMPT_RT_FULL Josh Cartwright (1): sc16is7xx: Drop bogus use of IRQF_ONESHOT Mike Galbraith (4): sched,rt: __always_inline preemptible_lazy() locking/lglocks: Use preempt_enable/disable_nort() in lg_double_[un]lock drm,radeon,i915: Use preempt_disable/enable_rt() where recommended drm,i915: Use local_lock/unlock_irq() in intel_pipe_update_start/end() Sebastian Andrzej Siewior (1): kernel: sched: Fix preempt_disable_ip recording for preempt_disable() Thomas Gleixner (4): iommu/amd: Use WARN_ON_NORT in __attach_device() tick/broadcast: Make broadcast hrtimer irqsafe trace/writeback: Block cgroup path tracing on RT v4.4.3-rt9 Yang Shi (2): trace: Use rcuidle version for preemptoff_hist trace point f2fs: Mutex can't be used by down_write_nest_lock() Known issues: - bcache stays disabled - CPU hotplug is not better than before - The netlink_release() OOPS, reported by Clark, is still on the list, but unsolved due to lack of information The delta patch against 4.4.3-rt8 is appended below and can be found here: https://www.kernel.org/pub/linux/kernel/projects/rt/4.4/incr/patch-4.4.3-rt8-rt9.patch.xz You can get this release via the git tree at: git://git.kernel.org/pub/scm/linux/kernel/git/rt/linux-rt-devel.git v4.4.3-rt9 The RT patch against 4.4.3 can be found here: https://cdn.kernel.org/pub/linux/kernel/projects/rt/4.4/patch-4.4.3-rt9.patch.xz The split quilt queue is available at: https://cdn.kernel.org/pub/linux/kernel/projects/rt/4.4/patches-4.4.3-rt9.tar.xz Enjoy! tglx Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-rw-r--r--patches/drmi915_Use_local_lockunlock_irq()_in_intel_pipe_update_startend().patch112
-rw-r--r--patches/drmradeoni915_Use_preempt_disableenable_rt()_where_recommended.patch51
-rw-r--r--patches/f2fs_Mutex_cant_be_used_by_down_write_nest_lock().patch66
-rw-r--r--patches/iommu-amd--Use-WARN_ON_NORT.patch46
-rw-r--r--patches/kernel-sched-fix-preempt_disable_ip-recodring-for-pr.patch106
-rw-r--r--patches/localversion.patch4
-rw-r--r--patches/lockinglglocks_Use_preempt_enabledisable_nort()_in_lg_double_locklg_double_unlock.patch34
-rw-r--r--patches/preempt-lazy-check-preempt_schedule.patch8
-rw-r--r--patches/rcutorture-comment-out-rcu_bh-ops-on-PREEMPT_RT_FULL.patch36
-rw-r--r--patches/sc16is7xx_Drop_bogus_use_of_IRQF_ONESHOT.patch54
-rw-r--r--patches/series13
-rw-r--r--patches/tick-broadcast--Make-hrtimer-irqsafe.patch57
-rw-r--r--patches/trace-writeback--Block-cgroup-path-tracing-on-RT.patch55
-rw-r--r--patches/trace_Use_rcuidle_version_for_preemptoff_hist_trace_point.patch90
14 files changed, 726 insertions, 6 deletions
diff --git a/patches/drmi915_Use_local_lockunlock_irq()_in_intel_pipe_update_startend().patch b/patches/drmi915_Use_local_lockunlock_irq()_in_intel_pipe_update_startend().patch
new file mode 100644
index 00000000000000..a277bf8ce52451
--- /dev/null
+++ b/patches/drmi915_Use_local_lockunlock_irq()_in_intel_pipe_update_startend().patch
@@ -0,0 +1,112 @@
+Subject: drm,i915: Use local_lock/unlock_irq() in intel_pipe_update_start/end()
+From: Mike Galbraith <umgwanakikbuti@gmail.com>
+Date: Sat, 27 Feb 2016 09:01:42 +0100
+
+
+[ 8.014039] BUG: sleeping function called from invalid context at kernel/locking/rtmutex.c:918
+[ 8.014041] in_atomic(): 0, irqs_disabled(): 1, pid: 78, name: kworker/u4:4
+[ 8.014045] CPU: 1 PID: 78 Comm: kworker/u4:4 Not tainted 4.1.7-rt7 #5
+[ 8.014055] Workqueue: events_unbound async_run_entry_fn
+[ 8.014059] 0000000000000000 ffff880037153748 ffffffff815f32c9 0000000000000002
+[ 8.014063] ffff88013a50e380 ffff880037153768 ffffffff815ef075 ffff8800372c06c8
+[ 8.014066] ffff8800372c06c8 ffff880037153778 ffffffff8107c0b3 ffff880037153798
+[ 8.014067] Call Trace:
+[ 8.014074] [<ffffffff815f32c9>] dump_stack+0x4a/0x61
+[ 8.014078] [<ffffffff815ef075>] ___might_sleep.part.93+0xe9/0xee
+[ 8.014082] [<ffffffff8107c0b3>] ___might_sleep+0x53/0x80
+[ 8.014086] [<ffffffff815f9064>] rt_spin_lock+0x24/0x50
+[ 8.014090] [<ffffffff8109368b>] prepare_to_wait+0x2b/0xa0
+[ 8.014152] [<ffffffffa016c04c>] intel_pipe_update_start+0x17c/0x300 [i915]
+[ 8.014156] [<ffffffff81093b40>] ? prepare_to_wait_event+0x120/0x120
+[ 8.014201] [<ffffffffa0158f36>] intel_begin_crtc_commit+0x166/0x1e0 [i915]
+[ 8.014215] [<ffffffffa00c806d>] drm_atomic_helper_commit_planes+0x5d/0x1a0 [drm_kms_helper]
+[ 8.014260] [<ffffffffa0171e9b>] intel_atomic_commit+0xab/0xf0 [i915]
+[ 8.014288] [<ffffffffa00654c7>] drm_atomic_commit+0x37/0x60 [drm]
+[ 8.014298] [<ffffffffa00c6fcd>] drm_atomic_helper_plane_set_property+0x8d/0xd0 [drm_kms_helper]
+[ 8.014301] [<ffffffff815f77d9>] ? __ww_mutex_lock+0x39/0x40
+[ 8.014319] [<ffffffffa0053b3d>] drm_mode_plane_set_obj_prop+0x2d/0x90 [drm]
+[ 8.014328] [<ffffffffa00c8edb>] restore_fbdev_mode+0x6b/0xf0 [drm_kms_helper]
+[ 8.014337] [<ffffffffa00cae49>] drm_fb_helper_restore_fbdev_mode_unlocked+0x29/0x80 [drm_kms_helper]
+[ 8.014346] [<ffffffffa00caec2>] drm_fb_helper_set_par+0x22/0x50 [drm_kms_helper]
+[ 8.014390] [<ffffffffa016dfba>] intel_fbdev_set_par+0x1a/0x60 [i915]
+[ 8.014394] [<ffffffff81327dc4>] fbcon_init+0x4f4/0x580
+[ 8.014398] [<ffffffff8139ef4c>] visual_init+0xbc/0x120
+[ 8.014401] [<ffffffff813a1623>] do_bind_con_driver+0x163/0x330
+[ 8.014405] [<ffffffff813a1b2c>] do_take_over_console+0x11c/0x1c0
+[ 8.014408] [<ffffffff813236e3>] do_fbcon_takeover+0x63/0xd0
+[ 8.014410] [<ffffffff81328965>] fbcon_event_notify+0x785/0x8d0
+[ 8.014413] [<ffffffff8107c12d>] ? __might_sleep+0x4d/0x90
+[ 8.014416] [<ffffffff810775fe>] notifier_call_chain+0x4e/0x80
+[ 8.014419] [<ffffffff810779cd>] __blocking_notifier_call_chain+0x4d/0x70
+[ 8.014422] [<ffffffff81077a06>] blocking_notifier_call_chain+0x16/0x20
+[ 8.014425] [<ffffffff8132b48b>] fb_notifier_call_chain+0x1b/0x20
+[ 8.014428] [<ffffffff8132d8fa>] register_framebuffer+0x21a/0x350
+[ 8.014439] [<ffffffffa00cb164>] drm_fb_helper_initial_config+0x274/0x3e0 [drm_kms_helper]
+[ 8.014483] [<ffffffffa016f1cb>] intel_fbdev_initial_config+0x1b/0x20 [i915]
+[ 8.014486] [<ffffffff8107912c>] async_run_entry_fn+0x4c/0x160
+[ 8.014490] [<ffffffff81070ffa>] process_one_work+0x14a/0x470
+[ 8.014493] [<ffffffff81071489>] worker_thread+0x169/0x4c0
+[ 8.014496] [<ffffffff81071320>] ? process_one_work+0x470/0x470
+[ 8.014499] [<ffffffff81076606>] kthread+0xc6/0xe0
+[ 8.014502] [<ffffffff81070000>] ? queue_work_on+0x80/0x110
+[ 8.014506] [<ffffffff81076540>] ? kthread_worker_fn+0x1c0/0x1c0
+
+Signed-off-by: Mike Galbraith <umgwanakikbuti@gmail.com>
+Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Cc: linux-rt-users <linux-rt-users@vger.kernel.org>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ drivers/gpu/drm/i915/intel_sprite.c | 11 +++++++----
+ 1 file changed, 7 insertions(+), 4 deletions(-)
+
+--- a/drivers/gpu/drm/i915/intel_sprite.c
++++ b/drivers/gpu/drm/i915/intel_sprite.c
+@@ -38,6 +38,7 @@
+ #include "intel_drv.h"
+ #include <drm/i915_drm.h>
+ #include "i915_drv.h"
++#include <linux/locallock.h>
+
+ static bool
+ format_is_yuv(uint32_t format)
+@@ -64,6 +65,8 @@ static int usecs_to_scanlines(const stru
+ 1000 * adjusted_mode->crtc_htotal);
+ }
+
++static DEFINE_LOCAL_IRQ_LOCK(pipe_update_lock);
++
+ /**
+ * intel_pipe_update_start() - start update of a set of display registers
+ * @crtc: the crtc of which the registers are going to be updated
+@@ -96,7 +99,7 @@ void intel_pipe_update_start(struct inte
+ min = vblank_start - usecs_to_scanlines(adjusted_mode, 100);
+ max = vblank_start - 1;
+
+- local_irq_disable();
++ local_lock_irq(pipe_update_lock);
+
+ if (min <= 0 || max <= 0)
+ return;
+@@ -126,11 +129,11 @@ void intel_pipe_update_start(struct inte
+ break;
+ }
+
+- local_irq_enable();
++ local_unlock_irq(pipe_update_lock);
+
+ timeout = schedule_timeout(timeout);
+
+- local_irq_disable();
++ local_lock_irq(pipe_update_lock);
+ }
+
+ finish_wait(wq, &wait);
+@@ -164,7 +167,7 @@ void intel_pipe_update_end(struct intel_
+
+ trace_i915_pipe_update_end(crtc, end_vbl_count, scanline_end);
+
+- local_irq_enable();
++ local_unlock_irq(pipe_update_lock);
+
+ if (crtc->debug.start_vbl_count &&
+ crtc->debug.start_vbl_count != end_vbl_count) {
diff --git a/patches/drmradeoni915_Use_preempt_disableenable_rt()_where_recommended.patch b/patches/drmradeoni915_Use_preempt_disableenable_rt()_where_recommended.patch
new file mode 100644
index 00000000000000..89fa033e879a90
--- /dev/null
+++ b/patches/drmradeoni915_Use_preempt_disableenable_rt()_where_recommended.patch
@@ -0,0 +1,51 @@
+Subject: drm,radeon,i915: Use preempt_disable/enable_rt() where recommended
+From: Mike Galbraith <umgwanakikbuti@gmail.com>
+Date: Sat, 27 Feb 2016 08:09:11 +0100
+
+DRM folks identified the spots, so use them.
+
+Signed-off-by: Mike Galbraith <umgwanakikbuti@gmail.com>
+Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Cc: linux-rt-users <linux-rt-users@vger.kernel.org>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ drivers/gpu/drm/i915/i915_irq.c | 2 ++
+ drivers/gpu/drm/radeon/radeon_display.c | 2 ++
+ 2 files changed, 4 insertions(+)
+
+--- a/drivers/gpu/drm/i915/i915_irq.c
++++ b/drivers/gpu/drm/i915/i915_irq.c
+@@ -812,6 +812,7 @@ static int i915_get_crtc_scanoutpos(stru
+ spin_lock_irqsave(&dev_priv->uncore.lock, irqflags);
+
+ /* preempt_disable_rt() should go right here in PREEMPT_RT patchset. */
++ preempt_disable_rt();
+
+ /* Get optional system timestamp before query. */
+ if (stime)
+@@ -863,6 +864,7 @@ static int i915_get_crtc_scanoutpos(stru
+ *etime = ktime_get();
+
+ /* preempt_enable_rt() should go right here in PREEMPT_RT patchset. */
++ preempt_enable_rt();
+
+ spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags);
+
+--- a/drivers/gpu/drm/radeon/radeon_display.c
++++ b/drivers/gpu/drm/radeon/radeon_display.c
+@@ -1849,6 +1849,7 @@ int radeon_get_crtc_scanoutpos(struct dr
+ struct radeon_device *rdev = dev->dev_private;
+
+ /* preempt_disable_rt() should go right here in PREEMPT_RT patchset. */
++ preempt_disable_rt();
+
+ /* Get optional system timestamp before query. */
+ if (stime)
+@@ -1941,6 +1942,7 @@ int radeon_get_crtc_scanoutpos(struct dr
+ *etime = ktime_get();
+
+ /* preempt_enable_rt() should go right here in PREEMPT_RT patchset. */
++ preempt_enable_rt();
+
+ /* Decode into vertical and horizontal scanout position. */
+ *vpos = position & 0x1fff;
diff --git a/patches/f2fs_Mutex_cant_be_used_by_down_write_nest_lock().patch b/patches/f2fs_Mutex_cant_be_used_by_down_write_nest_lock().patch
new file mode 100644
index 00000000000000..070c842d6c2edb
--- /dev/null
+++ b/patches/f2fs_Mutex_cant_be_used_by_down_write_nest_lock().patch
@@ -0,0 +1,66 @@
+Subject: f2fs: Mutex can't be used by down_write_nest_lock()
+From: Yang Shi <yang.shi@linaro.org>
+Date: Fri, 26 Feb 2016 16:25:25 -0800
+
+fsf2_lock_all() calls down_write_nest_lock() to acquire a rw_sem and check
+a mutex, but down_write_nest_lock() is designed for two rw_sem accoring to the
+comment in include/linux/rwsem.h. And, other than f2fs, it is just called in
+mm/mmap.c with two rwsem.
+
+So, it looks it is used wrongly by f2fs. And, it causes the below compile
+warning on -rt kernel too.
+
+In file included from fs/f2fs/xattr.c:25:0:
+fs/f2fs/f2fs.h: In function 'f2fs_lock_all':
+fs/f2fs/f2fs.h:962:34: warning: passing argument 2 of 'down_write_nest_lock' from
+ incompatible pointer type [-Wincompatible-pointer-types]
+ f2fs_down_write(&sbi->cp_rwsem, &sbi->cp_mutex);
+ ^
+
+The nest annotation was anyway bogus as nested annotations for lockdep are
+only required if one nests two locks of the same lock class, which is not the
+case here.
+
+Signed-off-by: Yang Shi <yang.shi@linaro.org>
+Cc: cm224.lee@samsung.com
+Cc: chao2.yu@samsung.com
+Cc: linaro-kernel@lists.linaro.org
+Cc: linux-rt-users@vger.kernel.org
+Cc: bigeasy@linutronix.de
+Cc: rostedt@goodmis.org
+Cc: linux-f2fs-devel@lists.sourceforge.net
+Cc: linux-fsdevel@vger.kernel.org
+Cc: jaegeuk@kernel.org
+Link: http://lkml.kernel.org/r/1456532725-4126-1-git-send-email-yang.shi@linaro.org
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ fs/f2fs/f2fs.h | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+--- a/fs/f2fs/f2fs.h
++++ b/fs/f2fs/f2fs.h
+@@ -24,7 +24,6 @@
+
+ #ifdef CONFIG_F2FS_CHECK_FS
+ #define f2fs_bug_on(sbi, condition) BUG_ON(condition)
+-#define f2fs_down_write(x, y) down_write_nest_lock(x, y)
+ #else
+ #define f2fs_bug_on(sbi, condition) \
+ do { \
+@@ -33,7 +32,6 @@
+ set_sbi_flag(sbi, SBI_NEED_FSCK); \
+ } \
+ } while (0)
+-#define f2fs_down_write(x, y) down_write(x)
+ #endif
+
+ /*
+@@ -959,7 +957,7 @@ static inline void f2fs_unlock_op(struct
+
+ static inline void f2fs_lock_all(struct f2fs_sb_info *sbi)
+ {
+- f2fs_down_write(&sbi->cp_rwsem, &sbi->cp_mutex);
++ down_write(&sbi->cp_rwsem);
+ }
+
+ static inline void f2fs_unlock_all(struct f2fs_sb_info *sbi)
diff --git a/patches/iommu-amd--Use-WARN_ON_NORT.patch b/patches/iommu-amd--Use-WARN_ON_NORT.patch
new file mode 100644
index 00000000000000..32dcbd0b94f8ca
--- /dev/null
+++ b/patches/iommu-amd--Use-WARN_ON_NORT.patch
@@ -0,0 +1,46 @@
+Subject: iommu/amd: Use WARN_ON_NORT in __attach_device()
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Sat, 27 Feb 2016 10:22:23 +0100
+
+RT does not disable interrupts here, but the protection is still
+correct. Fixup the WARN_ON so it won't yell on RT.
+
+Note: This WARN_ON is bogus anyway. The real thing this needs to check is that
+amd_iommu_devtable_lock is held.
+
+Reported-by: DIXLOR <dixlor@gmail.com>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ drivers/iommu/amd_iommu.c | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+--- a/drivers/iommu/amd_iommu.c
++++ b/drivers/iommu/amd_iommu.c
+@@ -1952,10 +1952,10 @@ static int __attach_device(struct iommu_
+ int ret;
+
+ /*
+- * Must be called with IRQs disabled. Warn here to detect early
+- * when its not.
++ * Must be called with IRQs disabled on a non RT kernel. Warn here to
++ * detect early when its not.
+ */
+- WARN_ON(!irqs_disabled());
++ WARN_ON_NONRT(!irqs_disabled());
+
+ /* lock domain */
+ spin_lock(&domain->lock);
+@@ -2118,10 +2118,10 @@ static void __detach_device(struct iommu
+ struct protection_domain *domain;
+
+ /*
+- * Must be called with IRQs disabled. Warn here to detect early
+- * when its not.
++ * Must be called with IRQs disabled on a non RT kernel. Warn here to
++ * detect early when its not.
+ */
+- WARN_ON(!irqs_disabled());
++ WARN_ON_NONRT(!irqs_disabled());
+
+ if (WARN_ON(!dev_data->domain))
+ return;
diff --git a/patches/kernel-sched-fix-preempt_disable_ip-recodring-for-pr.patch b/patches/kernel-sched-fix-preempt_disable_ip-recodring-for-pr.patch
new file mode 100644
index 00000000000000..1729d528df3d20
--- /dev/null
+++ b/patches/kernel-sched-fix-preempt_disable_ip-recodring-for-pr.patch
@@ -0,0 +1,106 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Thu, 11 Feb 2016 22:06:28 +0100
+Subject: kernel: sched: Fix preempt_disable_ip recodring for preempt_disable()
+
+preempt_disable() invokes preempt_count_add() which saves the caller in
+current->preempt_disable_ip. It uses CALLER_ADDR1 which does not look for its
+caller but for the parent of the caller. Which means we get the correct caller
+for something like spin_lock() unless the architectures inlines those
+invocations. It is always wrong for preempt_disable() or local_bh_disable().
+
+This patch makes the function get_parent_ip() which tries CALLER_ADDR0,1,2 if
+the former is a locking function. This seems to record the preempt_disable()
+caller properly for preempt_disable() itself as well as for get_cpu_var() or
+local_bh_disable().
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ include/linux/ftrace.h | 12 ++++++++++++
+ include/linux/sched.h | 2 --
+ kernel/sched/core.c | 14 ++------------
+ kernel/softirq.c | 4 ++--
+ 4 files changed, 16 insertions(+), 16 deletions(-)
+
+--- a/include/linux/ftrace.h
++++ b/include/linux/ftrace.h
+@@ -694,6 +694,18 @@ static inline void __ftrace_enabled_rest
+ #define CALLER_ADDR5 ((unsigned long)ftrace_return_address(5))
+ #define CALLER_ADDR6 ((unsigned long)ftrace_return_address(6))
+
++static inline unsigned long get_lock_parent_ip(void)
++{
++ unsigned long addr = CALLER_ADDR0;
++
++ if (!in_lock_functions(addr))
++ return addr;
++ addr = CALLER_ADDR1;
++ if (!in_lock_functions(addr))
++ return addr;
++ return CALLER_ADDR2;
++}
++
+ #ifdef CONFIG_IRQSOFF_TRACER
+ extern void time_hardirqs_on(unsigned long a0, unsigned long a1);
+ extern void time_hardirqs_off(unsigned long a0, unsigned long a1);
+--- a/include/linux/sched.h
++++ b/include/linux/sched.h
+@@ -183,8 +183,6 @@ extern void update_cpu_load_nohz(void);
+ static inline void update_cpu_load_nohz(void) { }
+ #endif
+
+-extern unsigned long get_parent_ip(unsigned long addr);
+-
+ extern void dump_cpu_task(int cpu);
+
+ struct seq_file;
+--- a/kernel/sched/core.c
++++ b/kernel/sched/core.c
+@@ -3039,16 +3039,6 @@ u64 scheduler_tick_max_deferment(void)
+ }
+ #endif
+
+-notrace unsigned long get_parent_ip(unsigned long addr)
+-{
+- if (in_lock_functions(addr)) {
+- addr = CALLER_ADDR2;
+- if (in_lock_functions(addr))
+- addr = CALLER_ADDR3;
+- }
+- return addr;
+-}
+-
+ #if defined(CONFIG_PREEMPT) && (defined(CONFIG_DEBUG_PREEMPT) || \
+ defined(CONFIG_PREEMPT_TRACER))
+
+@@ -3070,7 +3060,7 @@ void preempt_count_add(int val)
+ PREEMPT_MASK - 10);
+ #endif
+ if (preempt_count() == val) {
+- unsigned long ip = get_parent_ip(CALLER_ADDR1);
++ unsigned long ip = get_lock_parent_ip();
+ #ifdef CONFIG_DEBUG_PREEMPT
+ current->preempt_disable_ip = ip;
+ #endif
+@@ -3097,7 +3087,7 @@ void preempt_count_sub(int val)
+ #endif
+
+ if (preempt_count() == val)
+- trace_preempt_on(CALLER_ADDR0, get_parent_ip(CALLER_ADDR1));
++ trace_preempt_on(CALLER_ADDR0, get_lock_parent_ip());
+ __preempt_count_sub(val);
+ }
+ EXPORT_SYMBOL(preempt_count_sub);
+--- a/kernel/softirq.c
++++ b/kernel/softirq.c
+@@ -287,9 +287,9 @@ void __local_bh_disable_ip(unsigned long
+
+ if (preempt_count() == cnt) {
+ #ifdef CONFIG_DEBUG_PREEMPT
+- current->preempt_disable_ip = get_parent_ip(CALLER_ADDR1);
++ current->preempt_disable_ip = get_lock_parent_ip();
+ #endif
+- trace_preempt_off(CALLER_ADDR0, get_parent_ip(CALLER_ADDR1));
++ trace_preempt_off(CALLER_ADDR0, get_lock_parent_ip());
+ }
+ }
+ EXPORT_SYMBOL(__local_bh_disable_ip);
diff --git a/patches/localversion.patch b/patches/localversion.patch
index 2f21b44007481e..cc6efb1dc58564 100644
--- a/patches/localversion.patch
+++ b/patches/localversion.patch
@@ -1,4 +1,4 @@
-Subject: v4.4.2-rt7
+Subject: v4.4.3-rt9
From: Thomas Gleixner <tglx@linutronix.de>
Date: Fri, 08 Jul 2011 20:25:16 +0200
@@ -10,4 +10,4 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
--- /dev/null
+++ b/localversion-rt
@@ -0,0 +1 @@
-+-rt8
++-rt9
diff --git a/patches/lockinglglocks_Use_preempt_enabledisable_nort()_in_lg_double_locklg_double_unlock.patch b/patches/lockinglglocks_Use_preempt_enabledisable_nort()_in_lg_double_locklg_double_unlock.patch
new file mode 100644
index 00000000000000..8c13841b08f44a
--- /dev/null
+++ b/patches/lockinglglocks_Use_preempt_enabledisable_nort()_in_lg_double_locklg_double_unlock.patch
@@ -0,0 +1,34 @@
+Subject: locking/lglocks: Use preempt_enable/disable_nort() in lg_double_[un]lock
+From: Mike Galbraith <umgwanakikbuti@gmail.com>
+Date: Sat, 27 Feb 2016 08:34:43 +0100
+
+Let's not do that when snagging an rtmutex.
+
+Signed-off-by: Mike Galbraith <umgwanakilbuti@gmail.com>
+Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Cc: linux-rt-users <linux-rt-users@vger.kernel.org>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ kernel/locking/lglock.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/kernel/locking/lglock.c
++++ b/kernel/locking/lglock.c
+@@ -86,7 +86,7 @@ void lg_double_lock(struct lglock *lg, i
+ if (cpu2 < cpu1)
+ swap(cpu1, cpu2);
+
+- preempt_disable();
++ preempt_disable_nort();
+ lock_acquire_shared(&lg->lock_dep_map, 0, 0, NULL, _RET_IP_);
+ lg_do_lock(per_cpu_ptr(lg->lock, cpu1));
+ lg_do_lock(per_cpu_ptr(lg->lock, cpu2));
+@@ -97,7 +97,7 @@ void lg_double_unlock(struct lglock *lg,
+ lock_release(&lg->lock_dep_map, 1, _RET_IP_);
+ lg_do_unlock(per_cpu_ptr(lg->lock, cpu1));
+ lg_do_unlock(per_cpu_ptr(lg->lock, cpu2));
+- preempt_enable();
++ preempt_enable_nort();
+ }
+
+ void lg_global_lock(struct lglock *lg)
diff --git a/patches/preempt-lazy-check-preempt_schedule.patch b/patches/preempt-lazy-check-preempt_schedule.patch
index cd3f869cdfd541..04036a9f4fdad0 100644
--- a/patches/preempt-lazy-check-preempt_schedule.patch
+++ b/patches/preempt-lazy-check-preempt_schedule.patch
@@ -13,7 +13,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
-@@ -3460,6 +3460,30 @@ static void __sched notrace preempt_sche
+@@ -3450,6 +3450,30 @@ static void __sched notrace preempt_sche
} while (need_resched());
}
@@ -23,7 +23,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+ * set by a RT task. Oterwise we try to avoid beeing scheduled out as long as
+ * preempt_lazy_count counter >0.
+ */
-+static int preemptible_lazy(void)
++static __always_inline int preemptible_lazy(void)
+{
+ if (test_thread_flag(TIF_NEED_RESCHED))
+ return 1;
@@ -44,7 +44,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
#ifdef CONFIG_PREEMPT
/*
* this is the entry point to schedule() from in-kernel preemption
-@@ -3474,6 +3498,8 @@ asmlinkage __visible void __sched notrac
+@@ -3464,6 +3488,8 @@ asmlinkage __visible void __sched notrac
*/
if (likely(!preemptible()))
return;
@@ -53,7 +53,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
preempt_schedule_common();
}
-@@ -3500,15 +3526,9 @@ asmlinkage __visible void __sched notrac
+@@ -3490,15 +3516,9 @@ asmlinkage __visible void __sched notrac
if (likely(!preemptible()))
return;
diff --git a/patches/rcutorture-comment-out-rcu_bh-ops-on-PREEMPT_RT_FULL.patch b/patches/rcutorture-comment-out-rcu_bh-ops-on-PREEMPT_RT_FULL.patch
new file mode 100644
index 00000000000000..9270dcbf6f30b8
--- /dev/null
+++ b/patches/rcutorture-comment-out-rcu_bh-ops-on-PREEMPT_RT_FULL.patch
@@ -0,0 +1,36 @@
+From: Clark Williams <williams@redhat.com>
+Date: Fri, 26 Feb 2016 13:19:20 -0600
+Subject: rcu/torture: Comment out rcu_bh ops on PREEMPT_RT_FULL
+
+RT has dropped support of rcu_bh, comment out in rcutorture.
+
+Signed-off-by: Clark Williams <williams@redhat.com>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ kernel/rcu/rcutorture.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+--- a/kernel/rcu/rcutorture.c
++++ b/kernel/rcu/rcutorture.c
+@@ -390,6 +390,7 @@ static struct rcu_torture_ops rcu_ops =
+ .name = "rcu"
+ };
+
++#ifndef CONFIG_PREEMPT_RT_FULL
+ /*
+ * Definitions for rcu_bh torture testing.
+ */
+@@ -429,6 +430,12 @@ static struct rcu_torture_ops rcu_bh_ops
+ .name = "rcu_bh"
+ };
+
++#else
++static struct rcu_torture_ops rcu_bh_ops = {
++ .ttype = INVALID_RCU_FLAVOR,
++};
++#endif
++
+ /*
+ * Don't even think about trying any of these in real life!!!
+ * The names includes "busted", and they really means it!
diff --git a/patches/sc16is7xx_Drop_bogus_use_of_IRQF_ONESHOT.patch b/patches/sc16is7xx_Drop_bogus_use_of_IRQF_ONESHOT.patch
new file mode 100644
index 00000000000000..b87293766678d3
--- /dev/null
+++ b/patches/sc16is7xx_Drop_bogus_use_of_IRQF_ONESHOT.patch
@@ -0,0 +1,54 @@
+Subject: sc16is7xx: Drop bogus use of IRQF_ONESHOT
+From: Josh Cartwright <joshc@ni.com>
+Date: Thu, 18 Feb 2016 11:26:12 -0600
+
+The use of IRQF_ONESHOT when registering an interrupt handler with
+request_irq() is non-sensical.
+
+Not only that, it also prevents the handler from being threaded when it
+otherwise should be w/ IRQ_FORCED_THREADING is enabled. This causes the
+following deadlock observed by Sean Nyekjaer on -rt:
+
+Internal error: Oops - BUG: 0 [#1] PREEMPT SMP ARM
+[..]
+ rt_spin_lock_slowlock from (queue_kthread_work+0x18/0x74)
+ queue_kthread_work) from (sc16is7xx_irq+0x10/0x18 [sc16is7xx])
+ sc16is7xx_irq [sc16is7xx]) from (handle_irq_event_percpu+0x70/0x158)
+ handle_irq_event_percpu) from (handle_irq_event+0x68/0xa8)
+ handle_irq_event) from (handle_level_irq+0x10c/0x184)
+ handle_level_irq) from (generic_handle_irq+0x2c/0x3c)
+ generic_handle_irq) from (mxc_gpio_irq_handler+0x3c/0x108)
+ mxc_gpio_irq_handler) from (mx3_gpio_irq_handler+0x80/0xcc)
+ mx3_gpio_irq_handler) from (generic_handle_irq+0x2c/0x3c)
+ generic_handle_irq) from (__handle_domain_irq+0x7c/0xe8)
+ __handle_domain_irq) from (gic_handle_irq+0x24/0x5c)
+ gic_handle_irq) from (__irq_svc+0x40/0x88)
+ (__irq_svc) from (rt_spin_unlock+0x1c/0x68)
+ (rt_spin_unlock) from (kthread_worker_fn+0x104/0x17c)
+ (kthread_worker_fn) from (kthread+0xd0/0xe8)
+ (kthread) from (ret_from_fork+0x14/0x2c)
+
+Fixes: 9e6f4ca3e567 ("sc16is7xx: use kthread_worker for tx_work and irq")
+Reported-by: Sean Nyekjaer <sean.nyekjaer@prevas.dk>
+Signed-off-by: Josh Cartwright <joshc@ni.com>
+Cc: linux-rt-users@vger.kernel.org
+Cc: Jakub Kicinski <moorray3@wp.pl>
+Cc: stable@vger.kernel.org
+Cc: linux-serial@vger.kernel.org
+Link: http://lkml.kernel.org/r/1455816372-13989-1-git-send-email-joshc@ni.com
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ drivers/tty/serial/sc16is7xx.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/tty/serial/sc16is7xx.c
++++ b/drivers/tty/serial/sc16is7xx.c
+@@ -1230,7 +1230,7 @@ static int sc16is7xx_probe(struct device
+
+ /* Setup interrupt */
+ ret = devm_request_irq(dev, irq, sc16is7xx_irq,
+- IRQF_ONESHOT | flags, dev_name(dev), s);
++ flags, dev_name(dev), s);
+ if (!ret)
+ return 0;
+
diff --git a/patches/series b/patches/series
index d74c34bd5902ed..1f378249fdc441 100644
--- a/patches/series
+++ b/patches/series
@@ -20,6 +20,8 @@ sched-use-tsk_cpus_allowed-instead-of-accessing-cpus.patch
sched-provide-a-tsk_nr_cpus_allowed-helper.patch
drivers-cpuidle-coupled-fix-warning-cpuidle_coupled_.patch
drivers-media-vsp1_video-fix-compile-error.patch
+sc16is7xx_Drop_bogus_use_of_IRQF_ONESHOT.patch
+f2fs_Mutex_cant_be_used_by_down_write_nest_lock().patch
############################################################
# Stuff which needs addressing upstream, but requires more
@@ -31,6 +33,11 @@ rfc-arm-smp-__cpu_disable-fix-sleeping-function-called-from-invalid-context.patc
# Stuff broken upstream, need to be sent
############################################################
rtmutex--Handle-non-enqueued-waiters-gracefully
+kernel-sched-fix-preempt_disable_ip-recodring-for-pr.patch
+
+# Wants a different fix for upstream
+iommu-amd--Use-WARN_ON_NORT.patch
+trace-writeback--Block-cgroup-path-tracing-on-RT.patch
############################################################
# Submitted on LKML
@@ -144,6 +151,7 @@ latencyhist-disable-jump-labels.patch
latency-hist.patch
latency_hist-update-sched_wakeup-probe.patch
trace-latency-hist-Consider-new-argument-when-probin.patch
+trace_Use_rcuidle_version_for_preemptoff_hist_trace_point.patch
# HW LATENCY DETECTOR - this really wants a rewrite
hwlatdetect.patch
@@ -263,6 +271,7 @@ hrtimer-fixup-hrtimer-callback-changes-for-preempt-r.patch
sched-deadline-dl_task_timer-has-to-be-irqsafe.patch
timer-fd-avoid-live-lock.patch
hrtimer-Move-schedule_work-call-to-helper-thread.patch
+tick-broadcast--Make-hrtimer-irqsafe.patch
# POSIX-CPU-TIMERS
posix-timers-thread-posix-cpu-timers-on-rt.patch
@@ -340,9 +349,11 @@ rcu-merge-rcu-bh-into-rcu-preempt-for-rt.patch
patch-to-introduce-rcu-bh-qs-where-safe-from-softirq.patch
rcutree-rcu_bh_qs-disable-irq-while-calling-rcu_pree.patch
rcu-disable-more-spots-of-rcu_bh.patch
+rcutorture-comment-out-rcu_bh-ops-on-PREEMPT_RT_FULL.patch
# LGLOCKS - lovely
lglocks-rt.patch
+lockinglglocks_Use_preempt_enabledisable_nort()_in_lg_double_locklg_double_unlock.patch
# STOP machine (depend on lglock & rtmutex)
stomp-machine-create-lg_global_trylock_relax-primiti.patch
@@ -565,6 +576,8 @@ cpufreq-drop-K8-s-driver-from-beeing-selected.patch
i915_compile_fix.patch
drm-i915-drop-trace_i915_gem_ring_dispatch-onrt.patch
i915-bogus-warning-from-i915-when-running-on-PREEMPT.patch
+drmradeoni915_Use_preempt_disableenable_rt()_where_recommended.patch
+drmi915_Use_local_lockunlock_irq()_in_intel_pipe_update_startend().patch
# CGROUPS
cgroups-use-simple-wait-in-css_release.patch
diff --git a/patches/tick-broadcast--Make-hrtimer-irqsafe.patch b/patches/tick-broadcast--Make-hrtimer-irqsafe.patch
new file mode 100644
index 00000000000000..1123a4de5e43df
--- /dev/null
+++ b/patches/tick-broadcast--Make-hrtimer-irqsafe.patch
@@ -0,0 +1,57 @@
+Subject: tick/broadcast: Make broadcast hrtimer irqsafe
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Sat, 27 Feb 2016 10:47:10 +0100
+
+Otherwise we end up with the following:
+
+|=================================
+|[ INFO: inconsistent lock state ]
+|4.4.2-rt7+ #5 Not tainted
+|---------------------------------
+|inconsistent {IN-HARDIRQ-W} -> {HARDIRQ-ON-W} usage.
+|ktimersoftd/0/4 [HC0[0]:SC0[0]:HE1:SE1] takes:
+| (tick_broadcast_lock){?.....}, at: [<ffffffc000150db4>] tick_handle_oneshot_broadcast+0x58/0x27c
+|{IN-HARDIRQ-W} state was registered at:
+| [<ffffffc000118198>] mark_lock+0x19c/0x6a0
+| [<ffffffc000119728>] __lock_acquire+0xb1c/0x2100
+| [<ffffffc00011b560>] lock_acquire+0xf8/0x230
+| [<ffffffc00061bf08>] _raw_spin_lock_irqsave+0x50/0x68
+| [<ffffffc000152188>] tick_broadcast_switch_to_oneshot+0x20/0x60
+| [<ffffffc0001529f4>] tick_switch_to_oneshot+0x64/0xd8
+| [<ffffffc000152b00>] tick_init_highres+0x1c/0x24
+| [<ffffffc000141e58>] hrtimer_run_queues+0x78/0x100
+| [<ffffffc00013f804>] update_process_times+0x38/0x74
+| [<ffffffc00014fc5c>] tick_periodic+0x60/0x140
+| [<ffffffc00014fd68>] tick_handle_periodic+0x2c/0x94
+| [<ffffffc00052b878>] arch_timer_handler_phys+0x3c/0x48
+| [<ffffffc00012d078>] handle_percpu_devid_irq+0x100/0x390
+| [<ffffffc000127f34>] generic_handle_irq+0x34/0x4c
+| [<ffffffc000128300>] __handle_domain_irq+0x90/0xf8
+| [<ffffffc000082554>] gic_handle_irq+0x5c/0xa4
+| [<ffffffc0000855ac>] el1_irq+0x6c/0xec
+| [<ffffffc000112bec>] default_idle_call+0x2c/0x44
+| [<ffffffc000113058>] cpu_startup_entry+0x3cc/0x410
+| [<ffffffc0006169f8>] rest_init+0x158/0x168
+| [<ffffffc000888954>] start_kernel+0x3a0/0x3b4
+| [<0000000080621000>] 0x80621000
+|irq event stamp: 18723
+|hardirqs last enabled at (18723): [<ffffffc00061c188>] _raw_spin_unlock_irq+0x38/0x80
+|hardirqs last disabled at (18722): [<ffffffc000140a4c>] run_hrtimer_softirq+0x2c/0x2f4
+|softirqs last enabled at (0): [<ffffffc0000c4744>] copy_process.isra.50+0x300/0x16d4
+|softirqs last disabled at (0): [< (null)>] (null)
+
+Reported-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ kernel/time/tick-broadcast-hrtimer.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/kernel/time/tick-broadcast-hrtimer.c
++++ b/kernel/time/tick-broadcast-hrtimer.c
+@@ -106,5 +106,6 @@ void tick_setup_hrtimer_broadcast(void)
+ {
+ hrtimer_init(&bctimer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
+ bctimer.function = bc_handler;
++ bctimer.irqsafe = true;
+ clockevents_register_device(&ce_broadcast_hrtimer);
+ }
diff --git a/patches/trace-writeback--Block-cgroup-path-tracing-on-RT.patch b/patches/trace-writeback--Block-cgroup-path-tracing-on-RT.patch
new file mode 100644
index 00000000000000..d3c45f35b1dd4d
--- /dev/null
+++ b/patches/trace-writeback--Block-cgroup-path-tracing-on-RT.patch
@@ -0,0 +1,55 @@
+Subject: trace/writeback: Block cgroup path tracing on RT
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Sun, 28 Feb 2016 15:14:43 +0100
+
+Yang reported that with CGROUP_WRITEBACK enabled the tracer triggers the
+following backtrace:
+
+BUG: sleeping function called from invalid context at kernel/locking/rtmutex.c:930
+in_atomic(): 1, irqs_disabled(): 0, pid: 625, name: kworker/u16:3
+INFO: lockdep is turned off.
+Preemption disabled at:[<ffffffc000374a5c>] wb_writeback+0xec/0x830
+
+CPU: 7 PID: 625 Comm: kworker/u16:3 Not tainted 4.4.1-rt5 #20
+Hardware name: Freescale Layerscape 2085a RDB Board (DT)
+Workqueue: writeback wb_workfn (flush-7:0)
+Call trace:
+[<ffffffc00008d708>] dump_backtrace+0x0/0x200
+[<ffffffc00008d92c>] show_stack+0x24/0x30
+[<ffffffc0007b0f40>] dump_stack+0x88/0xa8
+[<ffffffc000127d74>] ___might_sleep+0x2ec/0x300
+[<ffffffc000d5d550>] rt_spin_lock+0x38/0xb8
+[<ffffffc0003e0548>] kernfs_path_len+0x30/0x90
+[<ffffffc00036b360>] trace_event_raw_event_writeback_work_class+0xe8/0x2e8
+[<ffffffc000374f90>] wb_writeback+0x620/0x830
+[<ffffffc000376224>] wb_workfn+0x61c/0x950
+[<ffffffc000110adc>] process_one_work+0x3ac/0xb30
+[<ffffffc0001112fc>] worker_thread+0x9c/0x7a8
+[<ffffffc00011a9e8>] kthread+0x190/0x1b0
+[<ffffffc000086ca0>] ret_from_fork+0x10/0x30
+
+Yang proposed to provide an unlocked function for accessing the cgroup path,
+but that'd involve synchronize_sched() in a syscall, which is not desired
+either. There was some discussion about using the inode number or the cgroup
+id, but so far we have no working solution.
+
+Disable the CGROUP_WRITEBACK path tracing for now when RT is enabled.
+
+Reported-by: Yang Shi <yang.shi@linaro.org>
+Link: http://lkml.kernel.org/r/1456528481-15936-1-git-send-email-yang.shi@linaro.org
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+ include/trace/events/writeback.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/include/trace/events/writeback.h
++++ b/include/trace/events/writeback.h
+@@ -132,7 +132,7 @@ DEFINE_EVENT(writeback_dirty_inode_templ
+ );
+
+ #ifdef CREATE_TRACE_POINTS
+-#ifdef CONFIG_CGROUP_WRITEBACK
++#if defined(CONFIG_CGROUP_WRITEBACK) && !defined(CONFIG_PREEMPT_RT_FULL)
+
+ static inline size_t __trace_wb_cgroup_size(struct bdi_writeback *wb)
+ {
diff --git a/patches/trace_Use_rcuidle_version_for_preemptoff_hist_trace_point.patch b/patches/trace_Use_rcuidle_version_for_preemptoff_hist_trace_point.patch
new file mode 100644
index 00000000000000..cc2e0deed35ab1
--- /dev/null
+++ b/patches/trace_Use_rcuidle_version_for_preemptoff_hist_trace_point.patch
@@ -0,0 +1,90 @@
+Subject: trace: Use rcuidle version for preemptoff_hist trace point
+From: Yang Shi <yang.shi@windriver.com>
+Date: Tue, 23 Feb 2016 13:23:23 -0800
+
+When running -rt kernel with both PREEMPT_OFF_HIST and LOCKDEP enabled,
+the below error is reported:
+
+ [ INFO: suspicious RCU usage. ]
+ 4.4.1-rt6 #1 Not tainted
+ include/trace/events/hist.h:31 suspicious rcu_dereference_check() usage!
+
+ other info that might help us debug this:
+
+ RCU used illegally from idle CPU!
+ rcu_scheduler_active = 1, debug_locks = 0
+ RCU used illegally from extended quiescent state!
+ no locks held by swapper/0/0.
+
+ stack backtrace:
+ CPU: 0 PID: 0 Comm: swapper/0 Not tainted 4.4.1-rt6-WR8.0.0.0_standard #1
+ Stack : 0000000000000006 0000000000000000 ffffffff81ca8c38 ffffffff81c8fc80
+ ffffffff811bdd68 ffffffff81cb0000 0000000000000000 ffffffff81cb0000
+ 0000000000000000 0000000000000000 0000000000000004 0000000000000000
+ 0000000000000004 ffffffff811bdf50 0000000000000000 ffffffff82b60000
+ 0000000000000000 ffffffff812897ac ffffffff819f0000 000000000000000b
+ ffffffff811be460 ffffffff81b7c588 ffffffff81c8fc80 0000000000000000
+ 0000000000000000 ffffffff81ec7f88 ffffffff81d70000 ffffffff81b70000
+ ffffffff81c90000 ffffffff81c3fb00 ffffffff81c3fc28 ffffffff815e6f98
+ 0000000000000000 ffffffff81c8fa87 ffffffff81b70958 ffffffff811bf2c4
+ 0707fe32e8d60ca5 ffffffff81126d60 0000000000000000 0000000000000000
+ ...
+ Call Trace:
+ [<ffffffff81126d60>] show_stack+0xe8/0x108
+ [<ffffffff815e6f98>] dump_stack+0x88/0xb0
+ [<ffffffff8124b88c>] time_hardirqs_off+0x204/0x300
+ [<ffffffff811aa5dc>] trace_hardirqs_off_caller+0x24/0xe8
+ [<ffffffff811a4ec4>] cpu_startup_entry+0x39c/0x508
+ [<ffffffff81d7dc68>] start_kernel+0x584/0x5a0
+
+Replace regular trace_preemptoff_hist to rcuidle version to avoid the error.
+
+Signed-off-by: Yang Shi <yang.shi@windriver.com>
+Cc: bigeasy@linutronix.de
+Cc: rostedt@goodmis.org
+Cc: linux-rt-users@vger.kernel.org
+Link: http://lkml.kernel.org/r/1456262603-10075-1-git-send-email-yang.shi@windriver.com
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+---
+I recall the rcuidle version is used by 4.1-rt, but not sure why it is dropped
+in 4.4-rt. It looks such fix is still needed.
+
+ kernel/trace/trace_irqsoff.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+--- a/kernel/trace/trace_irqsoff.c
++++ b/kernel/trace/trace_irqsoff.c
+@@ -421,13 +421,13 @@ void start_critical_timings(void)
+ {
+ if (preempt_trace() || irq_trace())
+ start_critical_timing(CALLER_ADDR0, CALLER_ADDR1);
+- trace_preemptirqsoff_hist(TRACE_START, 1);
++ trace_preemptirqsoff_hist_rcuidle(TRACE_START, 1);
+ }
+ EXPORT_SYMBOL_GPL(start_critical_timings);
+
+ void stop_critical_timings(void)
+ {
+- trace_preemptirqsoff_hist(TRACE_STOP, 0);
++ trace_preemptirqsoff_hist_rcuidle(TRACE_STOP, 0);
+ if (preempt_trace() || irq_trace())
+ stop_critical_timing(CALLER_ADDR0, CALLER_ADDR1);
+ }
+@@ -437,7 +437,7 @@ EXPORT_SYMBOL_GPL(stop_critical_timings)
+ #ifdef CONFIG_PROVE_LOCKING
+ void time_hardirqs_on(unsigned long a0, unsigned long a1)
+ {
+- trace_preemptirqsoff_hist(IRQS_ON, 0);
++ trace_preemptirqsoff_hist_rcuidle(IRQS_ON, 0);
+ if (!preempt_trace() && irq_trace())
+ stop_critical_timing(a0, a1);
+ }
+@@ -446,7 +446,7 @@ void time_hardirqs_off(unsigned long a0,
+ {
+ if (!preempt_trace() && irq_trace())
+ start_critical_timing(a0, a1);
+- trace_preemptirqsoff_hist(IRQS_OFF, 1);
++ trace_preemptirqsoff_hist_rcuidle(IRQS_OFF, 1);
+ }
+
+ #else /* !CONFIG_PROVE_LOCKING */