[linux] 01/01: [rt] remove unused patches

debian-kernel at lists.debian.org debian-kernel at lists.debian.org
Fri Dec 23 20:04:52 UTC 2016


This is an automated email from the git hooks/post-receive script.

ukleinek pushed a commit to branch sid
in repository linux.

commit f1a1bb5986e60153d5d8956334a3a7a7a37817fd
Author: Uwe Kleine-König <ukleinek at debian.org>
Date:   Fri Dec 23 21:04:39 2016 +0100

    [rt] remove unused patches
---
 ...e-lock-unlock-symetry-versus-pi_lock-and-.patch |  43 ----
 .../all/rt/ARM-imx-always-use-TWD-on-IMX6Q.patch   |  31 ---
 ...azy-preempt-add-TIF_NEED_RESCHED_LAZY-to-.patch |  77 ------
 ...rm-lazy-preempt-correct-resched-condition.patch |  32 ---
 .../all/rt/crypto-ccp-remove-rwlocks_types.h.patch |  23 --
 .../all/rt/drivers-net-fix-livelock-issues.patch   | 127 ----------
 .../i2c-omap-drop-the-lock-hard-irq-context.patch  |  34 ---
 .../patches/features/all/rt/i915_compile_fix.patch |  24 --
 .../infiniband-ulp-ipoib-remove-pkey_mutex.patch   |  26 --
 ...tex-only-warn-once-on-a-try-lock-from-bad.patch |  27 --
 ..._nort()_in_lg_double_locklg_double_unlock.patch |  35 ---
 .../all/rt/mm--rt--Fix-generic-kmap_atomic-for-RT  |  41 ----
 ...-Use-get-put_cpu_light-in-zs_map_object-z.patch | 165 -------------
 .../rt/net-tx-action-avoid-livelock-on-rt.patch    |  93 -------
 ...synchronize-rcu_expedited_conditional-on-non-rt |  36 ---
 .../rt/preempt-lazy-check-preempt_schedule.patch   |  74 ------
 .../all/rt/rcu-disable-more-spots-of-rcu_bh.patch  |  64 -----
 ...comment-out-rcu_bh-ops-on-PREEMPT_RT_FULL.patch |  37 ---
 ...rtmutex--Handle-non-enqueued-waiters-gracefully |  33 ---
 .../rt/rtmutex-Use-chainwalking-control-enum.patch |  28 ---
 ...sh-down-migrate_disable-into-rt_spin_lock.patch | 272 ---------------------
 ...d-preempt-Fix-preempt_count-manipulations.patch |  52 ----
 ...ched-provide-a-tsk_nr_cpus_allowed-helper.patch | 262 --------------------
 ...sk_cpus_allowed-instead-of-accessing-cpus.patch |  58 -----
 ...s-avoid-the-base-null-otptimization-on-rt.patch |  74 ------
 .../all/rt/timers-preempt-rt-support.patch         |  55 -----
 ...ct-off-by-one-while-recording-the-trace-e.patch |  50 ----
 27 files changed, 1873 deletions(-)

diff --git a/debian/patches/features/all/rt/0005-futex-Ensure-lock-unlock-symetry-versus-pi_lock-and-.patch b/debian/patches/features/all/rt/0005-futex-Ensure-lock-unlock-symetry-versus-pi_lock-and-.patch
deleted file mode 100644
index f01b906..0000000
--- a/debian/patches/features/all/rt/0005-futex-Ensure-lock-unlock-symetry-versus-pi_lock-and-.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From: Thomas Gleixner <tglx at linutronix.de>
-Date: Fri, 1 Mar 2013 11:17:42 +0100
-Subject: futex: Ensure lock/unlock symetry versus pi_lock and hash bucket lock
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.6/older/patches-4.6.2-rt5.tar.xz
-
-In exit_pi_state_list() we have the following locking construct:
-
-   spin_lock(&hb->lock);
-   raw_spin_lock_irq(&curr->pi_lock);
-
-   ...
-   spin_unlock(&hb->lock);
-
-In !RT this works, but on RT the migrate_enable() function which is
-called from spin_unlock() sees atomic context due to the held pi_lock
-and just decrements the migrate_disable_atomic counter of the
-task. Now the next call to migrate_disable() sees the counter being
-negative and issues a warning. That check should be in
-migrate_enable() already.
-
-Fix this by dropping pi_lock before unlocking hb->lock and reaquire
-pi_lock after that again. This is safe as the loop code reevaluates
-head again under the pi_lock.
-
-Reported-by: Yong Zhang <yong.zhang at windriver.com>
-Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy at linutronix.de>
----
- kernel/futex.c |    2 ++
- 1 file changed, 2 insertions(+)
-
---- a/kernel/futex.c
-+++ b/kernel/futex.c
-@@ -866,7 +866,9 @@ void exit_pi_state_list(struct task_stru
- 		 * task still owns the PI-state:
- 		 */
- 		if (head->next != next) {
-+			raw_spin_unlock_irq(&curr->pi_lock);
- 			spin_unlock(&hb->lock);
-+			raw_spin_lock_irq(&curr->pi_lock);
- 			continue;
- 		}
- 
diff --git a/debian/patches/features/all/rt/ARM-imx-always-use-TWD-on-IMX6Q.patch b/debian/patches/features/all/rt/ARM-imx-always-use-TWD-on-IMX6Q.patch
deleted file mode 100644
index 4ae196a..0000000
--- a/debian/patches/features/all/rt/ARM-imx-always-use-TWD-on-IMX6Q.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From: Sebastian Andrzej Siewior <bigeasy at linutronix.de>
-Date: Wed, 6 Apr 2016 17:30:28 +0200
-Subject: [PATCH] ARM: imx: always use TWD on IMX6Q
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.6/older/patches-4.6.2-rt5.tar.xz
-
-There is no reason to limit the TWD to be used on SMP kernels only if the
-hardware has it available.
-On Wandboard i.MX6SOLO, running PREEMPT-RT and cyclictest I see as max
-immediately after start in idle:
-UP : ~90us
-SMP: ~50us
-UP + TWD: ~20us.
-Based on this numbers I prefer the TWD over the slightly slower MXC
-timer.
-
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy at linutronix.de>
----
- arch/arm/mach-imx/Kconfig |    2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/arch/arm/mach-imx/Kconfig
-+++ b/arch/arm/mach-imx/Kconfig
-@@ -526,7 +526,7 @@ config SOC_IMX6Q
- 	bool "i.MX6 Quad/DualLite support"
- 	select ARM_ERRATA_764369 if SMP
- 	select HAVE_ARM_SCU if SMP
--	select HAVE_ARM_TWD if SMP
-+	select HAVE_ARM_TWD
- 	select PCI_DOMAINS if PCI
- 	select PINCTRL_IMX6Q
- 	select SOC_IMX6
diff --git a/debian/patches/features/all/rt/arm-arm64-lazy-preempt-add-TIF_NEED_RESCHED_LAZY-to-.patch b/debian/patches/features/all/rt/arm-arm64-lazy-preempt-add-TIF_NEED_RESCHED_LAZY-to-.patch
deleted file mode 100644
index 355d502..0000000
--- a/debian/patches/features/all/rt/arm-arm64-lazy-preempt-add-TIF_NEED_RESCHED_LAZY-to-.patch
+++ /dev/null
@@ -1,77 +0,0 @@
-From: Sebastian Andrzej Siewior <bigeasy at linutronix.de>
-Date: Fri, 22 Jan 2016 21:33:39 +0100
-Subject: arm+arm64: lazy-preempt: add TIF_NEED_RESCHED_LAZY to _TIF_WORK_MASK
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.6/older/patches-4.6.2-rt5.tar.xz
-
-_TIF_WORK_MASK is used to check for TIF_NEED_RESCHED so we need to check
-for TIF_NEED_RESCHED_LAZY here, too.
-
-Reported-by: Grygorii Strashko <grygorii.strashko at ti.com>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy at linutronix.de>
----
- arch/arm/include/asm/thread_info.h   |    7 ++++---
- arch/arm/kernel/entry-common.S       |    9 +++++++--
- arch/arm64/include/asm/thread_info.h |    3 ++-
- 3 files changed, 13 insertions(+), 6 deletions(-)
-
---- a/arch/arm/include/asm/thread_info.h
-+++ b/arch/arm/include/asm/thread_info.h
-@@ -143,8 +143,8 @@ extern int vfp_restore_user_hwstate(stru
- #define TIF_SYSCALL_TRACE	4	/* syscall trace active */
- #define TIF_SYSCALL_AUDIT	5	/* syscall auditing active */
- #define TIF_SYSCALL_TRACEPOINT	6	/* syscall tracepoint instrumentation */
--#define TIF_SECCOMP		7	/* seccomp syscall filtering active */
--#define TIF_NEED_RESCHED_LAZY	8
-+#define TIF_SECCOMP		8	/* seccomp syscall filtering active */
-+#define TIF_NEED_RESCHED_LAZY	7
- 
- #define TIF_NOHZ		12	/* in adaptive nohz mode */
- #define TIF_USING_IWMMXT	17
-@@ -170,7 +170,8 @@ extern int vfp_restore_user_hwstate(stru
-  * Change these and you break ASM code in entry-common.S
-  */
- #define _TIF_WORK_MASK		(_TIF_NEED_RESCHED | _TIF_SIGPENDING | \
--				 _TIF_NOTIFY_RESUME | _TIF_UPROBE)
-+				 _TIF_NOTIFY_RESUME | _TIF_UPROBE | \
-+				 _TIF_NEED_RESCHED_LAZY)
- 
- #endif /* __KERNEL__ */
- #endif /* __ASM_ARM_THREAD_INFO_H */
---- a/arch/arm/kernel/entry-common.S
-+++ b/arch/arm/kernel/entry-common.S
-@@ -36,7 +36,9 @@
-  UNWIND(.cantunwind	)
- 	disable_irq_notrace			@ disable interrupts
- 	ldr	r1, [tsk, #TI_FLAGS]		@ re-check for syscall tracing
--	tst	r1, #_TIF_SYSCALL_WORK | _TIF_WORK_MASK
-+	tst	r1, #((_TIF_SYSCALL_WORK | _TIF_WORK_MASK) & ~_TIF_SECCOMP)
-+	bne	fast_work_pending
-+	tst	r1, #_TIF_SECCOMP
- 	bne	fast_work_pending
- 
- 	/* perform architecture specific actions before user return */
-@@ -62,8 +64,11 @@ ENDPROC(ret_fast_syscall)
- 	str	r0, [sp, #S_R0 + S_OFF]!	@ save returned r0
- 	disable_irq_notrace			@ disable interrupts
- 	ldr	r1, [tsk, #TI_FLAGS]		@ re-check for syscall tracing
--	tst	r1, #_TIF_SYSCALL_WORK | _TIF_WORK_MASK
-+	tst	r1, #((_TIF_SYSCALL_WORK | _TIF_WORK_MASK) & ~_TIF_SECCOMP)
-+	bne 	do_slower_path
-+	tst	r1, #_TIF_SECCOMP
- 	beq	no_work_pending
-+do_slower_path:
-  UNWIND(.fnend		)
- ENDPROC(ret_fast_syscall)
- 
---- a/arch/arm64/include/asm/thread_info.h
-+++ b/arch/arm64/include/asm/thread_info.h
-@@ -135,7 +135,8 @@ static inline struct thread_info *curren
- #define _TIF_32BIT		(1 << TIF_32BIT)
- 
- #define _TIF_WORK_MASK		(_TIF_NEED_RESCHED | _TIF_SIGPENDING | \
--				 _TIF_NOTIFY_RESUME | _TIF_FOREIGN_FPSTATE)
-+				 _TIF_NOTIFY_RESUME | _TIF_FOREIGN_FPSTATE | \
-+				 _TIF_NEED_RESCHED_LAZY)
- 
- #define _TIF_SYSCALL_WORK	(_TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT | \
- 				 _TIF_SYSCALL_TRACEPOINT | _TIF_SECCOMP | \
diff --git a/debian/patches/features/all/rt/arm-lazy-preempt-correct-resched-condition.patch b/debian/patches/features/all/rt/arm-lazy-preempt-correct-resched-condition.patch
deleted file mode 100644
index 9dbdd84..0000000
--- a/debian/patches/features/all/rt/arm-lazy-preempt-correct-resched-condition.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From: Sebastian Andrzej Siewior <bigeasy at linutronix.de>
-Date: Tue, 24 May 2016 12:56:38 +0200
-Subject: [PATCH] arm: lazy preempt: correct resched condition
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.6/older/patches-4.6.2-rt5.tar.xz
-
-If we get out of preempt_schedule_irq() then we check for NEED_RESCHED
-and call the former function again if set because the preemption counter
-has be zero at this point.
-However the counter for lazy-preempt might not be zero therefore we have
-to check the counter before looking at the need_resched_lazy flag.
-
-Cc: stable-rt at vger.kernel.org
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy at linutronix.de>
----
- arch/arm/kernel/entry-armv.S |    6 +++++-
- 1 file changed, 5 insertions(+), 1 deletion(-)
-
---- a/arch/arm/kernel/entry-armv.S
-+++ b/arch/arm/kernel/entry-armv.S
-@@ -244,7 +244,11 @@ ENDPROC(__irq_svc)
- 	bne	1b
- 	tst	r0, #_TIF_NEED_RESCHED_LAZY
- 	reteq	r8				@ go again
--	b	1b
-+	ldr	r0, [tsk, #TI_PREEMPT_LAZY]	@ get preempt lazy count
-+	teq	r0, #0				@ if preempt lazy count != 0
-+	beq	1b
-+	ret	r8				@ go again
-+
- #endif
- 
- __und_fault:
diff --git a/debian/patches/features/all/rt/crypto-ccp-remove-rwlocks_types.h.patch b/debian/patches/features/all/rt/crypto-ccp-remove-rwlocks_types.h.patch
deleted file mode 100644
index ad9be73..0000000
--- a/debian/patches/features/all/rt/crypto-ccp-remove-rwlocks_types.h.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-From: Sebastian Andrzej Siewior <bigeasy at linutronix.de>
-Date: Wed, 11 May 2016 11:56:18 +0200
-Subject: crypto/ccp: remove rwlocks_types.h
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.6/older/patches-4.6.2-rt5.tar.xz
-
-Users of rwlocks should include spinlock.h instead including this
-header file. The current users of rwlocks_types.h are internal.
-
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy at linutronix.de>
----
- drivers/crypto/ccp/ccp-dev.c |    1 -
- 1 file changed, 1 deletion(-)
-
---- a/drivers/crypto/ccp/ccp-dev.c
-+++ b/drivers/crypto/ccp/ccp-dev.c
-@@ -16,7 +16,6 @@
- #include <linux/sched.h>
- #include <linux/interrupt.h>
- #include <linux/spinlock.h>
--#include <linux/rwlock_types.h>
- #include <linux/types.h>
- #include <linux/mutex.h>
- #include <linux/delay.h>
diff --git a/debian/patches/features/all/rt/drivers-net-fix-livelock-issues.patch b/debian/patches/features/all/rt/drivers-net-fix-livelock-issues.patch
deleted file mode 100644
index 5bc8aa9..0000000
--- a/debian/patches/features/all/rt/drivers-net-fix-livelock-issues.patch
+++ /dev/null
@@ -1,127 +0,0 @@
-From: Thomas Gleixner <tglx at linutronix.de>
-Date: Sat, 20 Jun 2009 11:36:54 +0200
-Subject: drivers/net: fix livelock issues
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.6/older/patches-4.6.2-rt5.tar.xz
-
-Preempt-RT runs into a live lock issue with the NETDEV_TX_LOCKED micro
-optimization. The reason is that the softirq thread is rescheduling
-itself on that return value. Depending on priorities it starts to
-monoplize the CPU and livelock on UP systems.
-
-Remove it.
-
-Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
-
----
- drivers/net/ethernet/atheros/atl1c/atl1c_main.c      |    6 +-----
- drivers/net/ethernet/atheros/atl1e/atl1e_main.c      |    3 +--
- drivers/net/ethernet/chelsio/cxgb/sge.c              |    3 +--
- drivers/net/ethernet/neterion/s2io.c                 |    7 +------
- drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c |    6 ++----
- drivers/net/ethernet/tehuti/tehuti.c                 |    9 ++-------
- drivers/net/rionet.c                                 |    6 +-----
- 7 files changed, 9 insertions(+), 31 deletions(-)
-
---- a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
-+++ b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
-@@ -2217,11 +2217,7 @@ static netdev_tx_t atl1c_xmit_frame(stru
- 	}
- 
- 	tpd_req = atl1c_cal_tpd_req(skb);
--	if (!spin_trylock_irqsave(&adapter->tx_lock, flags)) {
--		if (netif_msg_pktdata(adapter))
--			dev_info(&adapter->pdev->dev, "tx locked\n");
--		return NETDEV_TX_LOCKED;
--	}
-+	spin_lock_irqsave(&adapter->tx_lock, flags);
- 
- 	if (atl1c_tpd_avail(adapter, type) < tpd_req) {
- 		/* no enough descriptor, just stop queue */
---- a/drivers/net/ethernet/atheros/atl1e/atl1e_main.c
-+++ b/drivers/net/ethernet/atheros/atl1e/atl1e_main.c
-@@ -1880,8 +1880,7 @@ static netdev_tx_t atl1e_xmit_frame(stru
- 		return NETDEV_TX_OK;
- 	}
- 	tpd_req = atl1e_cal_tdp_req(skb);
--	if (!spin_trylock_irqsave(&adapter->tx_lock, flags))
--		return NETDEV_TX_LOCKED;
-+	spin_lock_irqsave(&adapter->tx_lock, flags);
- 
- 	if (atl1e_tpd_avail(adapter) < tpd_req) {
- 		/* no enough descriptor, just stop queue */
---- a/drivers/net/ethernet/chelsio/cxgb/sge.c
-+++ b/drivers/net/ethernet/chelsio/cxgb/sge.c
-@@ -1664,8 +1664,7 @@ static int t1_sge_tx(struct sk_buff *skb
- 	struct cmdQ *q = &sge->cmdQ[qid];
- 	unsigned int credits, pidx, genbit, count, use_sched_skb = 0;
- 
--	if (!spin_trylock(&q->lock))
--		return NETDEV_TX_LOCKED;
-+	spin_lock(&q->lock);
- 
- 	reclaim_completed_tx(sge, q);
- 
---- a/drivers/net/ethernet/neterion/s2io.c
-+++ b/drivers/net/ethernet/neterion/s2io.c
-@@ -4084,12 +4084,7 @@ static netdev_tx_t s2io_xmit(struct sk_b
- 			[skb->priority & (MAX_TX_FIFOS - 1)];
- 	fifo = &mac_control->fifos[queue];
- 
--	if (do_spin_lock)
--		spin_lock_irqsave(&fifo->tx_lock, flags);
--	else {
--		if (unlikely(!spin_trylock_irqsave(&fifo->tx_lock, flags)))
--			return NETDEV_TX_LOCKED;
--	}
-+	spin_lock_irqsave(&fifo->tx_lock, flags);
- 
- 	if (sp->config.multiq) {
- 		if (__netif_subqueue_stopped(dev, fifo->fifo_no)) {
---- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
-+++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
-@@ -2137,10 +2137,8 @@ static int pch_gbe_xmit_frame(struct sk_
- 	struct pch_gbe_tx_ring *tx_ring = adapter->tx_ring;
- 	unsigned long flags;
- 
--	if (!spin_trylock_irqsave(&tx_ring->tx_lock, flags)) {
--		/* Collision - tell upper layer to requeue */
--		return NETDEV_TX_LOCKED;
--	}
-+	spin_lock_irqsave(&tx_ring->tx_lock, flags);
-+
- 	if (unlikely(!PCH_GBE_DESC_UNUSED(tx_ring))) {
- 		netif_stop_queue(netdev);
- 		spin_unlock_irqrestore(&tx_ring->tx_lock, flags);
---- a/drivers/net/ethernet/tehuti/tehuti.c
-+++ b/drivers/net/ethernet/tehuti/tehuti.c
-@@ -1629,13 +1629,8 @@ static netdev_tx_t bdx_tx_transmit(struc
- 	unsigned long flags;
- 
- 	ENTER;
--	local_irq_save(flags);
--	if (!spin_trylock(&priv->tx_lock)) {
--		local_irq_restore(flags);
--		DBG("%s[%s]: TX locked, returning NETDEV_TX_LOCKED\n",
--		    BDX_DRV_NAME, ndev->name);
--		return NETDEV_TX_LOCKED;
--	}
-+
-+	spin_lock_irqsave(&priv->tx_lock, flags);
- 
- 	/* build tx descriptor */
- 	BDX_ASSERT(f->m.wptr >= f->m.memsz);	/* started with valid wptr */
---- a/drivers/net/rionet.c
-+++ b/drivers/net/rionet.c
-@@ -179,11 +179,7 @@ static int rionet_start_xmit(struct sk_b
- 	unsigned long flags;
- 	int add_num = 1;
- 
--	local_irq_save(flags);
--	if (!spin_trylock(&rnet->tx_lock)) {
--		local_irq_restore(flags);
--		return NETDEV_TX_LOCKED;
--	}
-+	spin_lock_irqsave(&rnet->tx_lock, flags);
- 
- 	if (is_multicast_ether_addr(eth->h_dest))
- 		add_num = nets[rnet->mport->id].nact;
diff --git a/debian/patches/features/all/rt/i2c-omap-drop-the-lock-hard-irq-context.patch b/debian/patches/features/all/rt/i2c-omap-drop-the-lock-hard-irq-context.patch
deleted file mode 100644
index 6a29586..0000000
--- a/debian/patches/features/all/rt/i2c-omap-drop-the-lock-hard-irq-context.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From: Sebastian Andrzej Siewior <bigeasy at linutronix.de>
-Date: Thu, 21 Mar 2013 11:35:49 +0100
-Subject: i2c/omap: drop the lock hard irq context
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.6/older/patches-4.6.2-rt5.tar.xz
-
-The lock is taken while reading two registers. On RT the first lock is
-taken in hard irq where it might sleep and in the threaded irq.
-The threaded irq runs in oneshot mode so the hard irq does not run until
-the thread the completes so there is no reason to grab the lock.
-
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy at linutronix.de>
----
- drivers/i2c/busses/i2c-omap.c |    5 +----
- 1 file changed, 1 insertion(+), 4 deletions(-)
-
---- a/drivers/i2c/busses/i2c-omap.c
-+++ b/drivers/i2c/busses/i2c-omap.c
-@@ -995,15 +995,12 @@ omap_i2c_isr(int irq, void *dev_id)
- 	u16 mask;
- 	u16 stat;
- 
--	spin_lock(&omap->lock);
--	mask = omap_i2c_read_reg(omap, OMAP_I2C_IE_REG);
- 	stat = omap_i2c_read_reg(omap, OMAP_I2C_STAT_REG);
-+	mask = omap_i2c_read_reg(omap, OMAP_I2C_IE_REG);
- 
- 	if (stat & mask)
- 		ret = IRQ_WAKE_THREAD;
- 
--	spin_unlock(&omap->lock);
--
- 	return ret;
- }
- 
diff --git a/debian/patches/features/all/rt/i915_compile_fix.patch b/debian/patches/features/all/rt/i915_compile_fix.patch
deleted file mode 100644
index 341d9fa..0000000
--- a/debian/patches/features/all/rt/i915_compile_fix.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-From: Sebastian Andrzej Siewior <bigeasy at linutronix.de>
-Date: Tue, 14 Jul 2015 14:26:34 +0200
-Subject: gpu/i915: don't open code these things
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.6/older/patches-4.6.2-rt5.tar.xz
-
-The opencode part is gone in 1f83fee0 ("drm/i915: clear up wedged transitions")
-the owner check is still there.
-
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy at linutronix.de>
----
- drivers/gpu/drm/i915/i915_gem_shrinker.c |    2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/drivers/gpu/drm/i915/i915_gem_shrinker.c
-+++ b/drivers/gpu/drm/i915/i915_gem_shrinker.c
-@@ -39,7 +39,7 @@ static bool mutex_is_locked_by(struct mu
- 	if (!mutex_is_locked(mutex))
- 		return false;
- 
--#if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_MUTEXES)
-+#if (defined(CONFIG_SMP) || defined(CONFIG_DEBUG_MUTEXES)) && !defined(CONFIG_PREEMPT_RT_BASE)
- 	return mutex->owner == task;
- #else
- 	/* Since UP may be pre-empted, we cannot assume that we own the lock */
diff --git a/debian/patches/features/all/rt/infiniband-ulp-ipoib-remove-pkey_mutex.patch b/debian/patches/features/all/rt/infiniband-ulp-ipoib-remove-pkey_mutex.patch
deleted file mode 100644
index aaa803c..0000000
--- a/debian/patches/features/all/rt/infiniband-ulp-ipoib-remove-pkey_mutex.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From: Sebastian Andrzej Siewior <bigeasy at linutronix.de>
-Date: Wed, 11 May 2016 11:52:23 +0200
-Subject: infiniband/ulp/ipoib: remove pkey_mutex
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.6/older/patches-4.6.2-rt5.tar.xz
-
-The last user of pkey_mutex was removed in db84f8803759 ("IB/ipoib: Use
-P_Key change event instead of P_Key polling mechanism") but the lock
-remained.
-This patch removes it.
-
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy at linutronix.de>
----
- drivers/infiniband/ulp/ipoib/ipoib_ib.c |    2 --
- 1 file changed, 2 deletions(-)
-
---- a/drivers/infiniband/ulp/ipoib/ipoib_ib.c
-+++ b/drivers/infiniband/ulp/ipoib/ipoib_ib.c
-@@ -51,8 +51,6 @@ MODULE_PARM_DESC(data_debug_level,
- 		 "Enable data path debug tracing if > 0");
- #endif
- 
--static DEFINE_MUTEX(pkey_mutex);
--
- struct ipoib_ah *ipoib_create_ah(struct net_device *dev,
- 				 struct ib_pd *pd, struct ib_ah_attr *attr)
- {
diff --git a/debian/patches/features/all/rt/kernel-rtmutex-only-warn-once-on-a-try-lock-from-bad.patch b/debian/patches/features/all/rt/kernel-rtmutex-only-warn-once-on-a-try-lock-from-bad.patch
deleted file mode 100644
index 69b921b..0000000
--- a/debian/patches/features/all/rt/kernel-rtmutex-only-warn-once-on-a-try-lock-from-bad.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From: Sebastian Andrzej Siewior <bigeasy at linutronix.de>
-Date: Thu, 19 May 2016 17:12:34 +0200
-Subject: [PATCH] kernel/rtmutex: only warn once on a try lock from bad
- context
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.6/older/patches-4.6.2-rt5.tar.xz
-
-One warning should be enough to get one motivated to fix this. It is
-possible that this happens more than once and so starts flooding the
-output. Later the prints will be suppressed so we only get half of it.
-Depending on the console system used it might not be helpfull.
-
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy at linutronix.de>
----
- kernel/locking/rtmutex.c |    2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/kernel/locking/rtmutex.c
-+++ b/kernel/locking/rtmutex.c
-@@ -1479,7 +1479,7 @@ EXPORT_SYMBOL_GPL(rt_mutex_timed_lock);
- int __sched rt_mutex_trylock(struct rt_mutex *lock)
- {
- #ifdef CONFIG_PREEMPT_RT_FULL
--	if (WARN_ON(in_irq() || in_nmi()))
-+	if (WARN_ON_ONCE(in_irq() || in_nmi()))
- #else
- 	if (WARN_ON(in_irq() || in_nmi() || in_serving_softirq()))
- #endif
diff --git a/debian/patches/features/all/rt/lockinglglocks_Use_preempt_enabledisable_nort()_in_lg_double_locklg_double_unlock.patch b/debian/patches/features/all/rt/lockinglglocks_Use_preempt_enabledisable_nort()_in_lg_double_locklg_double_unlock.patch
deleted file mode 100644
index 606b1cb..0000000
--- a/debian/patches/features/all/rt/lockinglglocks_Use_preempt_enabledisable_nort()_in_lg_double_locklg_double_unlock.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-Subject: locking/lglocks: Use preempt_enable/disable_nort() in lg_double_[un]lock
-From: Mike Galbraith <umgwanakikbuti at gmail.com>
-Date: Sat, 27 Feb 2016 08:34:43 +0100
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.6/older/patches-4.6.2-rt5.tar.xz
-
-Let's not do that when snagging an rtmutex.
-
-Signed-off-by: Mike Galbraith <umgwanakilbuti at gmail.com>
-Cc: Sebastian Andrzej Siewior <bigeasy at linutronix.de>
-Cc: linux-rt-users <linux-rt-users at vger.kernel.org>
-Signed-off-by: Thomas Gleixner <tglx at 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/debian/patches/features/all/rt/mm--rt--Fix-generic-kmap_atomic-for-RT b/debian/patches/features/all/rt/mm--rt--Fix-generic-kmap_atomic-for-RT
deleted file mode 100644
index a43e023..0000000
--- a/debian/patches/features/all/rt/mm--rt--Fix-generic-kmap_atomic-for-RT
+++ /dev/null
@@ -1,41 +0,0 @@
-Subject: mm: rt: Fix generic kmap_atomic for RT
-From: Thomas Gleixner <tglx at linutronix.de>
-Date: Sat, 19 Sep 2015 10:15:00 +0200
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.4/patches-4.4.1-rt5.tar.xz
-
-The update to 4.1 brought in the mainline variant of the pagefault
-disable distangling from preempt count. That introduced a
-preempt_disable/enable pair in the generic kmap_atomic/kunmap_atomic
-implementations which got not converted to the _nort() variant.
-
-That results in massive 'scheduling while atomic/sleeping function
-called from invalid context' splats.
-
-Fix that up.
-
-Reported-and-tested-by: Juergen Borleis <jbe at pengutronix.de>
-Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
----
- include/linux/highmem.h |    4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
---- a/include/linux/highmem.h
-+++ b/include/linux/highmem.h
-@@ -65,7 +65,7 @@ static inline void kunmap(struct page *p
- 
- static inline void *kmap_atomic(struct page *page)
- {
--	preempt_disable();
-+	preempt_disable_nort();
- 	pagefault_disable();
- 	return page_address(page);
- }
-@@ -74,7 +74,7 @@ static inline void *kmap_atomic(struct p
- static inline void __kunmap_atomic(void *addr)
- {
- 	pagefault_enable();
--	preempt_enable();
-+	preempt_enable_nort();
- }
- 
- #define kmap_atomic_pfn(pfn)	kmap_atomic(pfn_to_page(pfn))
diff --git a/debian/patches/features/all/rt/mm-zsmalloc-Use-get-put_cpu_light-in-zs_map_object-z.patch b/debian/patches/features/all/rt/mm-zsmalloc-Use-get-put_cpu_light-in-zs_map_object-z.patch
deleted file mode 100644
index a9df21d..0000000
--- a/debian/patches/features/all/rt/mm-zsmalloc-Use-get-put_cpu_light-in-zs_map_object-z.patch
+++ /dev/null
@@ -1,165 +0,0 @@
-From: Mike Galbraith <umgwanakikbuti at gmail.com>
-Date: Tue, 22 Mar 2016 11:16:09 +0100
-Subject: [PATCH] mm/zsmalloc: Use get/put_cpu_light in
- zs_map_object()/zs_unmap_object()
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.8/older/patches-4.8.2-rt2.tar.xz
-
-Otherwise, we get a ___might_sleep() splat.
-
-
-Signed-off-by: Mike Galbraith <umgwanakikbuti at gmail.com>
-[bigeasy: replace the bitspin_lock() with a mutex]
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy at linutronix.de>
----
- mm/zsmalloc.c |   73 ++++++++++++++++++++++++++++++++++++++++++++++++++++++----
- 1 file changed, 69 insertions(+), 4 deletions(-)
-
---- a/mm/zsmalloc.c
-+++ b/mm/zsmalloc.c
-@@ -71,7 +71,19 @@
- #define ZS_MAX_ZSPAGE_ORDER 2
- #define ZS_MAX_PAGES_PER_ZSPAGE (_AC(1, UL) << ZS_MAX_ZSPAGE_ORDER)
- 
-+#ifdef CONFIG_PREEMPT_RT_BASE
-+
-+struct zsmalloc_handle {
-+	unsigned long addr;
-+	struct mutex lock;
-+};
-+
-+#define ZS_HANDLE_SIZE (sizeof(struct zsmalloc_handle))
-+
-+#else
-+
- #define ZS_HANDLE_SIZE (sizeof(unsigned long))
-+#endif
- 
- /*
-  * Object location (<PFN>, <obj_idx>) is encoded as
-@@ -351,9 +363,26 @@ static void destroy_cache(struct zs_pool
- 
- static unsigned long cache_alloc_handle(struct zs_pool *pool, gfp_t gfp)
- {
--	return (unsigned long)kmem_cache_alloc(pool->handle_cachep,
--			gfp & ~(__GFP_HIGHMEM|__GFP_MOVABLE));
-+	void *p;
-+
-+	p = kmem_cache_alloc(pool->handle_cachep,
-+			     gfp & ~(__GFP_HIGHMEM|__GFP_MOVABLE));
-+#ifdef CONFIG_PREEMPT_RT_BASE
-+	if (p) {
-+		struct zsmalloc_handle *zh = p;
-+
-+		mutex_init(&zh->lock);
-+	}
-+#endif
-+	return (unsigned long)p;
-+}
-+
-+#ifdef CONFIG_PREEMPT_RT_BASE
-+static struct zsmalloc_handle *zs_get_pure_handle(unsigned long handle)
-+{
-+	return (void *)(handle &~((1 << OBJ_TAG_BITS) - 1));
- }
-+#endif
- 
- static void cache_free_handle(struct zs_pool *pool, unsigned long handle)
- {
-@@ -373,12 +402,18 @@ static void cache_free_zspage(struct zs_
- 
- static void record_obj(unsigned long handle, unsigned long obj)
- {
-+#ifdef CONFIG_PREEMPT_RT_BASE
-+	struct zsmalloc_handle *zh = zs_get_pure_handle(handle);
-+
-+	WRITE_ONCE(zh->addr, obj);
-+#else
- 	/*
- 	 * lsb of @obj represents handle lock while other bits
- 	 * represent object value the handle is pointing so
- 	 * updating shouldn't do store tearing.
- 	 */
- 	WRITE_ONCE(*(unsigned long *)handle, obj);
-+#endif
- }
- 
- /* zpool driver */
-@@ -902,7 +937,13 @@ static unsigned long location_to_obj(str
- 
- static unsigned long handle_to_obj(unsigned long handle)
- {
-+#ifdef CONFIG_PREEMPT_RT_BASE
-+	struct zsmalloc_handle *zh = zs_get_pure_handle(handle);
-+
-+	return zh->addr;
-+#else
- 	return *(unsigned long *)handle;
-+#endif
- }
- 
- static unsigned long obj_to_head(struct page *page, void *obj)
-@@ -916,22 +957,46 @@ static unsigned long obj_to_head(struct
- 
- static inline int testpin_tag(unsigned long handle)
- {
-+#ifdef CONFIG_PREEMPT_RT_BASE
-+	struct zsmalloc_handle *zh = zs_get_pure_handle(handle);
-+
-+	return mutex_is_locked(&zh->lock);
-+#else
- 	return bit_spin_is_locked(HANDLE_PIN_BIT, (unsigned long *)handle);
-+#endif
- }
- 
- static inline int trypin_tag(unsigned long handle)
- {
-+#ifdef CONFIG_PREEMPT_RT_BASE
-+	struct zsmalloc_handle *zh = zs_get_pure_handle(handle);
-+
-+	return mutex_trylock(&zh->lock);
-+#else
- 	return bit_spin_trylock(HANDLE_PIN_BIT, (unsigned long *)handle);
-+#endif
- }
- 
- static void pin_tag(unsigned long handle)
- {
-+#ifdef CONFIG_PREEMPT_RT_BASE
-+	struct zsmalloc_handle *zh = zs_get_pure_handle(handle);
-+
-+	return mutex_lock(&zh->lock);
-+#else
- 	bit_spin_lock(HANDLE_PIN_BIT, (unsigned long *)handle);
-+#endif
- }
- 
- static void unpin_tag(unsigned long handle)
- {
-+#ifdef CONFIG_PREEMPT_RT_BASE
-+	struct zsmalloc_handle *zh = zs_get_pure_handle(handle);
-+
-+	return mutex_unlock(&zh->lock);
-+#else
- 	bit_spin_unlock(HANDLE_PIN_BIT, (unsigned long *)handle);
-+#endif
- }
- 
- static void reset_page(struct page *page)
-@@ -1423,7 +1488,7 @@ void *zs_map_object(struct zs_pool *pool
- 	class = pool->size_class[class_idx];
- 	off = (class->size * obj_idx) & ~PAGE_MASK;
- 
--	area = &get_cpu_var(zs_map_area);
-+	area = per_cpu_ptr(&zs_map_area, get_cpu_light());
- 	area->vm_mm = mm;
- 	if (off + class->size <= PAGE_SIZE) {
- 		/* this object is contained entirely within a page */
-@@ -1477,7 +1542,7 @@ void zs_unmap_object(struct zs_pool *poo
- 
- 		__zs_unmap_object(area, pages, off, class->size);
- 	}
--	put_cpu_var(zs_map_area);
-+	put_cpu_light();
- 
- 	migrate_read_unlock(zspage);
- 	unpin_tag(handle);
diff --git a/debian/patches/features/all/rt/net-tx-action-avoid-livelock-on-rt.patch b/debian/patches/features/all/rt/net-tx-action-avoid-livelock-on-rt.patch
deleted file mode 100644
index 418b2af..0000000
--- a/debian/patches/features/all/rt/net-tx-action-avoid-livelock-on-rt.patch
+++ /dev/null
@@ -1,93 +0,0 @@
-Subject: net: Avoid livelock in net_tx_action() on RT
-From: Steven Rostedt <srostedt at redhat.com>
-Date: Thu, 06 Oct 2011 10:48:39 -0400
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.6/older/patches-4.6.2-rt5.tar.xz
-
-qdisc_lock is taken w/o disabling interrupts or bottom halfs. So code
-holding a qdisc_lock() can be interrupted and softirqs can run on the
-return of interrupt in !RT.
-
-The spin_trylock() in net_tx_action() makes sure, that the softirq
-does not deadlock. When the lock can't be acquired q is requeued and
-the NET_TX softirq is raised. That causes the softirq to run over and
-over.
-
-That works in mainline as do_softirq() has a retry loop limit and
-leaves the softirq processing in the interrupt return path and
-schedules ksoftirqd. The task which holds qdisc_lock cannot be
-preempted, so the lock is released and either ksoftirqd or the next
-softirq in the return from interrupt path can proceed. Though it's a
-bit strange to actually run MAX_SOFTIRQ_RESTART (10) loops before it
-decides to bail out even if it's clear in the first iteration :)
-
-On RT all softirq processing is done in a FIFO thread and we don't
-have a loop limit, so ksoftirqd preempts the lock holder forever and
-unqueues and requeues until the reset button is hit.
-
-Due to the forced threading of ksoftirqd on RT we actually cannot
-deadlock on qdisc_lock because it's a "sleeping lock". So it's safe to
-replace the spin_trylock() with a spin_lock(). When contended,
-ksoftirqd is scheduled out and the lock holder can proceed.
-
-[ tglx: Massaged changelog and code comments ]
-
-Solved-by: Thomas Gleixner <tglx at linuxtronix.de>
-Signed-off-by: Steven Rostedt <rostedt at goodmis.org>
-Tested-by: Carsten Emde <cbe at osadl.org>
-Cc: Clark Williams <williams at redhat.com>
-Cc: John Kacur <jkacur at redhat.com>
-Cc: Luis Claudio R. Goncalves <lclaudio at redhat.com>
-Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
-
----
- net/core/dev.c |   32 +++++++++++++++++++++++++++++++-
- 1 file changed, 31 insertions(+), 1 deletion(-)
-
---- a/net/core/dev.c
-+++ b/net/core/dev.c
-@@ -3848,6 +3848,36 @@ int netif_rx_ni(struct sk_buff *skb)
- }
- EXPORT_SYMBOL(netif_rx_ni);
- 
-+#ifdef CONFIG_PREEMPT_RT_FULL
-+/*
-+ * RT runs ksoftirqd as a real time thread and the root_lock is a
-+ * "sleeping spinlock". If the trylock fails then we can go into an
-+ * infinite loop when ksoftirqd preempted the task which actually
-+ * holds the lock, because we requeue q and raise NET_TX softirq
-+ * causing ksoftirqd to loop forever.
-+ *
-+ * It's safe to use spin_lock on RT here as softirqs run in thread
-+ * context and cannot deadlock against the thread which is holding
-+ * root_lock.
-+ *
-+ * On !RT the trylock might fail, but there we bail out from the
-+ * softirq loop after 10 attempts which we can't do on RT. And the
-+ * task holding root_lock cannot be preempted, so the only downside of
-+ * that trylock is that we need 10 loops to decide that we should have
-+ * given up in the first one :)
-+ */
-+static inline int take_root_lock(spinlock_t *lock)
-+{
-+	spin_lock(lock);
-+	return 1;
-+}
-+#else
-+static inline int take_root_lock(spinlock_t *lock)
-+{
-+	return spin_trylock(lock);
-+}
-+#endif
-+
- static void net_tx_action(struct softirq_action *h)
- {
- 	struct softnet_data *sd = this_cpu_ptr(&softnet_data);
-@@ -3895,7 +3925,7 @@ static void net_tx_action(struct softirq
- 			head = head->next_sched;
- 
- 			root_lock = qdisc_lock(q);
--			if (spin_trylock(root_lock)) {
-+			if (take_root_lock(root_lock)) {
- 				smp_mb__before_atomic();
- 				clear_bit(__QDISC_STATE_SCHED,
- 					  &q->state);
diff --git a/debian/patches/features/all/rt/net__Make_synchronize-rcu_expedited_conditional-on-non-rt b/debian/patches/features/all/rt/net__Make_synchronize-rcu_expedited_conditional-on-non-rt
deleted file mode 100644
index 0debdb6..0000000
--- a/debian/patches/features/all/rt/net__Make_synchronize-rcu_expedited_conditional-on-non-rt
+++ /dev/null
@@ -1,36 +0,0 @@
-Date: Tue, 27 Oct 2015 07:31:53 -0500
-From: Josh Cartwright <joshc at ni.com>
-Subject: net: Make synchronize_rcu_expedited() conditional on !RT_FULL
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.4/patches-4.4.1-rt5.tar.xz
-
-While the use of synchronize_rcu_expedited() might make
-synchronize_net() "faster", it does so at significant cost on RT
-systems, as expediting a grace period forcibly preempts any
-high-priority RT tasks (via the stop_machine() mechanism).
-
-Without this change, we can observe a latency spike up to 30us with
-cyclictest by rapidly unplugging/reestablishing an ethernet link.
-
-Suggested-by: Paul E. McKenney <paulmck at linux.vnet.ibm.com>
-Signed-off-by: Josh Cartwright <joshc at ni.com>
-Cc: bigeasy at linutronix.de
-Acked-by: Eric Dumazet <eric.dumazet at gmail.com>
-Acked-by: David S. Miller <davem at davemloft.net>
-Cc: Paul E. McKenney <paulmck at linux.vnet.ibm.com>
-Link: http://lkml.kernel.org/r/20151027123153.GG8245@jcartwri.amer.corp.natinst.com
-Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
----
- net/core/dev.c |    2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/net/core/dev.c
-+++ b/net/core/dev.c
-@@ -7217,7 +7217,7 @@ EXPORT_SYMBOL(free_netdev);
- void synchronize_net(void)
- {
- 	might_sleep();
--	if (rtnl_is_locked())
-+	if (rtnl_is_locked() && !IS_ENABLED(CONFIG_PREEMPT_RT_FULL))
- 		synchronize_rcu_expedited();
- 	else
- 		synchronize_rcu();
diff --git a/debian/patches/features/all/rt/preempt-lazy-check-preempt_schedule.patch b/debian/patches/features/all/rt/preempt-lazy-check-preempt_schedule.patch
deleted file mode 100644
index 86d3b2c..0000000
--- a/debian/patches/features/all/rt/preempt-lazy-check-preempt_schedule.patch
+++ /dev/null
@@ -1,74 +0,0 @@
-From: Sebastian Andrzej Siewior <bigeasy at linutronix.de>
-Date: Wed, 20 Jan 2016 15:13:30 +0100
-Subject: preempt-lazy: Add the lazy-preemption check to preempt_schedule()
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.6/older/patches-4.6.2-rt5.tar.xz
-
-Probably in the rebase onto v4.1 this check got moved into less commonly used
-preempt_schedule_notrace(). This patch ensures that both functions use it.
-
-Reported-by: Mike Galbraith <umgwanakikbuti at gmail.com>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy at linutronix.de>
----
- kernel/sched/core.c |   36 ++++++++++++++++++++++++++++--------
- 1 file changed, 28 insertions(+), 8 deletions(-)
-
---- a/kernel/sched/core.c
-+++ b/kernel/sched/core.c
-@@ -3500,6 +3500,30 @@ static void __sched notrace preempt_sche
- 	} while (need_resched());
- }
- 
-+#ifdef CONFIG_PREEMPT_LAZY
-+/*
-+ * If TIF_NEED_RESCHED is then we allow to be scheduled away since this is
-+ * set by a RT task. Oterwise we try to avoid beeing scheduled out as long as
-+ * preempt_lazy_count counter >0.
-+ */
-+static __always_inline int preemptible_lazy(void)
-+{
-+	if (test_thread_flag(TIF_NEED_RESCHED))
-+		return 1;
-+	if (current_thread_info()->preempt_lazy_count)
-+		return 0;
-+	return 1;
-+}
-+
-+#else
-+
-+static int preemptible_lazy(void)
-+{
-+	return 1;
-+}
-+
-+#endif
-+
- #ifdef CONFIG_PREEMPT
- /*
-  * this is the entry point to schedule() from in-kernel preemption
-@@ -3514,6 +3538,8 @@ asmlinkage __visible void __sched notrac
- 	 */
- 	if (likely(!preemptible()))
- 		return;
-+	if (!preemptible_lazy())
-+		return;
- 
- 	preempt_schedule_common();
- }
-@@ -3540,15 +3566,9 @@ asmlinkage __visible void __sched notrac
- 
- 	if (likely(!preemptible()))
- 		return;
--
--#ifdef CONFIG_PREEMPT_LAZY
--	/*
--	 * Check for lazy preemption
--	 */
--	if (current_thread_info()->preempt_lazy_count &&
--	    !test_thread_flag(TIF_NEED_RESCHED))
-+	if (!preemptible_lazy())
- 		return;
--#endif
-+
- 	do {
- 		preempt_disable_notrace();
- 		/*
diff --git a/debian/patches/features/all/rt/rcu-disable-more-spots-of-rcu_bh.patch b/debian/patches/features/all/rt/rcu-disable-more-spots-of-rcu_bh.patch
deleted file mode 100644
index d55b9c1..0000000
--- a/debian/patches/features/all/rt/rcu-disable-more-spots-of-rcu_bh.patch
+++ /dev/null
@@ -1,64 +0,0 @@
-From: Sebastian Andrzej Siewior <bigeasy at linutronix.de>
-Date: Wed, 10 Feb 2016 18:30:56 +0100
-Subject: rcu: disable more spots of rcu_bh
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.6/older/patches-4.6.2-rt5.tar.xz
-
-We don't use ru_bh on -RT but we still fork a thread for it and keep it
-as a flavour. No more.
-
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy at linutronix.de>
----
- kernel/rcu/tree.c |    6 ++++++
- kernel/rcu/tree.h |    2 ++
- 2 files changed, 8 insertions(+)
-
---- a/kernel/rcu/tree.c
-+++ b/kernel/rcu/tree.c
-@@ -440,11 +440,13 @@ EXPORT_SYMBOL_GPL(rcu_batches_started_sc
- /*
-  * Return the number of RCU BH batches started thus far for debug & stats.
-  */
-+#ifndef CONFIG_PREEMPT_RT_FULL
- unsigned long rcu_batches_started_bh(void)
- {
- 	return rcu_bh_state.gpnum;
- }
- EXPORT_SYMBOL_GPL(rcu_batches_started_bh);
-+#endif
- 
- /*
-  * Return the number of RCU batches completed thus far for debug & stats.
-@@ -549,9 +551,11 @@ void rcutorture_get_gp_data(enum rcutort
- 	case RCU_FLAVOR:
- 		rsp = rcu_state_p;
- 		break;
-+#ifndef CONFIG_PREEMPT_RT_FULL
- 	case RCU_BH_FLAVOR:
- 		rsp = &rcu_bh_state;
- 		break;
-+#endif
- 	case RCU_SCHED_FLAVOR:
- 		rsp = &rcu_sched_state;
- 		break;
-@@ -4637,7 +4641,9 @@ void __init rcu_init(void)
- 
- 	rcu_bootup_announce();
- 	rcu_init_geometry();
-+#ifndef CONFIG_PREEMPT_RT_FULL
- 	rcu_init_one(&rcu_bh_state);
-+#endif
- 	rcu_init_one(&rcu_sched_state);
- 	if (dump_tree)
- 		rcu_dump_rcu_node_tree(&rcu_sched_state);
---- a/kernel/rcu/tree.h
-+++ b/kernel/rcu/tree.h
-@@ -572,7 +572,9 @@ extern struct list_head rcu_struct_flavo
-  */
- extern struct rcu_state rcu_sched_state;
- 
-+#ifndef CONFIG_PREEMPT_RT_FULL
- extern struct rcu_state rcu_bh_state;
-+#endif
- 
- #ifdef CONFIG_PREEMPT_RCU
- extern struct rcu_state rcu_preempt_state;
diff --git a/debian/patches/features/all/rt/rcutorture-comment-out-rcu_bh-ops-on-PREEMPT_RT_FULL.patch b/debian/patches/features/all/rt/rcutorture-comment-out-rcu_bh-ops-on-PREEMPT_RT_FULL.patch
deleted file mode 100644
index ecdfb55..0000000
--- a/debian/patches/features/all/rt/rcutorture-comment-out-rcu_bh-ops-on-PREEMPT_RT_FULL.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From: Clark Williams <williams at redhat.com>
-Date: Fri, 26 Feb 2016 13:19:20 -0600
-Subject: rcu/torture: Comment out rcu_bh ops on PREEMPT_RT_FULL
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.6/older/patches-4.6.2-rt5.tar.xz
-
-RT has dropped support of rcu_bh, comment out in rcutorture.
-
-Signed-off-by: Clark Williams <williams at redhat.com>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy at linutronix.de>
-Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
----
- kernel/rcu/rcutorture.c |    7 +++++++
- 1 file changed, 7 insertions(+)
-
---- a/kernel/rcu/rcutorture.c
-+++ b/kernel/rcu/rcutorture.c
-@@ -409,6 +409,7 @@ static struct rcu_torture_ops rcu_ops =
- 	.name		= "rcu"
- };
- 
-+#ifndef CONFIG_PREEMPT_RT_FULL
- /*
-  * Definitions for rcu_bh torture testing.
-  */
-@@ -448,6 +449,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/debian/patches/features/all/rt/rtmutex--Handle-non-enqueued-waiters-gracefully b/debian/patches/features/all/rt/rtmutex--Handle-non-enqueued-waiters-gracefully
deleted file mode 100644
index 2b0b2ff..0000000
--- a/debian/patches/features/all/rt/rtmutex--Handle-non-enqueued-waiters-gracefully
+++ /dev/null
@@ -1,33 +0,0 @@
-Subject: rtmutex: Handle non enqueued waiters gracefully
-From: Thomas Gleixner <tglx at linutronix.de>
-Date: Fri, 06 Nov 2015 18:51:03 +0100
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.4/patches-4.4.1-rt5.tar.xz
-
-Yimin debugged that in case of a PI wakeup in progress when
-rt_mutex_start_proxy_lock() calls task_blocks_on_rt_mutex() the latter
-returns -EAGAIN and in consequence the remove_waiter() call runs into
-a BUG_ON() because there is nothing to remove.
-
-Guard it with rt_mutex_has_waiters(). This is a quick fix which is
-easy to backport. The proper fix is to have a central check in
-remove_waiter() so we can call it unconditionally.
-
-Reported-and-debugged-by: Yimin Deng <yimin11.deng at gmail.com>
-Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
-Cc: stable-rt at vger.kernel.org
-
----
- kernel/locking/rtmutex.c |    2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/kernel/locking/rtmutex.c
-+++ b/kernel/locking/rtmutex.c
-@@ -1617,7 +1617,7 @@ int rt_mutex_start_proxy_lock(struct rt_
- 		ret = 0;
- 	}
- 
--	if (unlikely(ret))
-+	if (ret && rt_mutex_has_waiters(lock))
- 		remove_waiter(lock, waiter);
- 
- 	raw_spin_unlock(&lock->wait_lock);
diff --git a/debian/patches/features/all/rt/rtmutex-Use-chainwalking-control-enum.patch b/debian/patches/features/all/rt/rtmutex-Use-chainwalking-control-enum.patch
deleted file mode 100644
index 7ce43cf..0000000
--- a/debian/patches/features/all/rt/rtmutex-Use-chainwalking-control-enum.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From: "bmouring at ni.com" <bmouring at ni.com>
-Date: Tue, 15 Dec 2015 17:07:30 -0600
-Subject: rtmutex: Use chainwalking control enum
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.6/older/patches-4.6.2-rt5.tar.xz
-
-In 8930ed80 (rtmutex: Cleanup deadlock detector debug logic),
-chainwalking control enums were introduced to limit the deadlock
-detection logic. One of the calls to task_blocks_on_rt_mutex was
-missed when converting to use the enums.
-
-Cc: Thomas Gleixner <tglx at linutronix.de>
-Signed-off-by: Brad Mouring <brad.mouring at ni.com>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy at linutronix.de>
----
- kernel/locking/rtmutex.c |    2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/kernel/locking/rtmutex.c
-+++ b/kernel/locking/rtmutex.c
-@@ -1017,7 +1017,7 @@ static void  noinline __sched rt_spin_lo
- 	__set_current_state_no_track(TASK_UNINTERRUPTIBLE);
- 	raw_spin_unlock(&self->pi_lock);
- 
--	ret = task_blocks_on_rt_mutex(lock, &waiter, self, 0);
-+	ret = task_blocks_on_rt_mutex(lock, &waiter, self, RT_MUTEX_MIN_CHAINWALK);
- 	BUG_ON(ret);
- 
- 	for (;;) {
diff --git a/debian/patches/features/all/rt/rtmutex-push-down-migrate_disable-into-rt_spin_lock.patch b/debian/patches/features/all/rt/rtmutex-push-down-migrate_disable-into-rt_spin_lock.patch
deleted file mode 100644
index 8aa01f2..0000000
--- a/debian/patches/features/all/rt/rtmutex-push-down-migrate_disable-into-rt_spin_lock.patch
+++ /dev/null
@@ -1,272 +0,0 @@
-From: Sebastian Andrzej Siewior <bigeasy at linutronix.de>
-Date: Fri, 5 Feb 2016 18:26:11 +0100
-Subject: rtmutex: push down migrate_disable() into rt_spin_lock()
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.6/older/patches-4.6.2-rt5.tar.xz
-
-No point in having the migrate disable/enable invocations in all the
-macro/inlines. That's just more code for no win as we do a function
-call anyway. Move it to the core code and save quite some text size.
-
-    text      data        bss        dec        filename
-11034127   3676912   14901248   29612287  vmlinux.before
-10990437   3676848   14901248   29568533  vmlinux.after
-
-~-40KiB
-
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy at linutronix.de>
----
- include/linux/locallock.h   |    6 +++---
- include/linux/spinlock_rt.h |   25 +++++++------------------
- kernel/cpu.c                |    4 ++--
- kernel/locking/lglock.c     |    2 +-
- kernel/locking/rt.c         |    2 --
- kernel/locking/rtmutex.c    |   44 +++++++++++++++++++++++++++++++++++++++++---
- 6 files changed, 54 insertions(+), 29 deletions(-)
-
---- a/include/linux/locallock.h
-+++ b/include/linux/locallock.h
-@@ -43,9 +43,9 @@ struct local_irq_lock {
-  * for CONFIG_PREEMPT_BASE map to the normal spin_* calls.
-  */
- #ifdef CONFIG_PREEMPT_RT_FULL
--# define spin_lock_local(lock)			rt_spin_lock(lock)
--# define spin_trylock_local(lock)		rt_spin_trylock(lock)
--# define spin_unlock_local(lock)		rt_spin_unlock(lock)
-+# define spin_lock_local(lock)			rt_spin_lock__no_mg(lock)
-+# define spin_trylock_local(lock)		rt_spin_trylock__no_mg(lock)
-+# define spin_unlock_local(lock)		rt_spin_unlock__no_mg(lock)
- #else
- # define spin_lock_local(lock)			spin_lock(lock)
- # define spin_trylock_local(lock)		spin_trylock(lock)
---- a/include/linux/spinlock_rt.h
-+++ b/include/linux/spinlock_rt.h
-@@ -18,6 +18,10 @@ do {							\
- 	__rt_spin_lock_init(slock, #slock, &__key);	\
- } while (0)
- 
-+void __lockfunc rt_spin_lock__no_mg(spinlock_t *lock);
-+void __lockfunc rt_spin_unlock__no_mg(spinlock_t *lock);
-+int __lockfunc rt_spin_trylock__no_mg(spinlock_t *lock);
-+
- extern void __lockfunc rt_spin_lock(spinlock_t *lock);
- extern unsigned long __lockfunc rt_spin_lock_trace_flags(spinlock_t *lock);
- extern void __lockfunc rt_spin_lock_nested(spinlock_t *lock, int subclass);
-@@ -32,20 +36,16 @@ extern int atomic_dec_and_spin_lock(atom
-  * lockdep-less calls, for derived types like rwlock:
-  * (for trylock they can use rt_mutex_trylock() directly.
-  */
-+extern void __lockfunc __rt_spin_lock__no_mg(struct rt_mutex *lock);
- extern void __lockfunc __rt_spin_lock(struct rt_mutex *lock);
- extern void __lockfunc __rt_spin_unlock(struct rt_mutex *lock);
- extern int __lockfunc __rt_spin_trylock(struct rt_mutex *lock);
- 
--#define spin_lock(lock)				\
--	do {					\
--		migrate_disable();		\
--		rt_spin_lock(lock);		\
--	} while (0)
-+#define spin_lock(lock)			rt_spin_lock(lock)
- 
- #define spin_lock_bh(lock)			\
- 	do {					\
- 		local_bh_disable();		\
--		migrate_disable();		\
- 		rt_spin_lock(lock);		\
- 	} while (0)
- 
-@@ -56,24 +56,19 @@ extern int __lockfunc __rt_spin_trylock(
- #define spin_trylock(lock)			\
- ({						\
- 	int __locked;				\
--	migrate_disable();			\
- 	__locked = spin_do_trylock(lock);	\
--	if (!__locked)				\
--		migrate_enable();		\
- 	__locked;				\
- })
- 
- #ifdef CONFIG_LOCKDEP
- # define spin_lock_nested(lock, subclass)		\
- 	do {						\
--		migrate_disable();			\
- 		rt_spin_lock_nested(lock, subclass);	\
- 	} while (0)
- 
- #define spin_lock_bh_nested(lock, subclass)		\
- 	do {						\
- 		local_bh_disable();			\
--		migrate_disable();			\
- 		rt_spin_lock_nested(lock, subclass);	\
- 	} while (0)
- 
-@@ -81,7 +76,6 @@ extern int __lockfunc __rt_spin_trylock(
- 	do {						 \
- 		typecheck(unsigned long, flags);	 \
- 		flags = 0;				 \
--		migrate_disable();			 \
- 		rt_spin_lock_nested(lock, subclass);	 \
- 	} while (0)
- #else
-@@ -117,16 +111,11 @@ static inline unsigned long spin_lock_tr
- /* FIXME: we need rt_spin_lock_nest_lock */
- #define spin_lock_nest_lock(lock, nest_lock) spin_lock_nested(lock, 0)
- 
--#define spin_unlock(lock)				\
--	do {						\
--		rt_spin_unlock(lock);			\
--		migrate_enable();			\
--	} while (0)
-+#define spin_unlock(lock)			rt_spin_unlock(lock)
- 
- #define spin_unlock_bh(lock)				\
- 	do {						\
- 		rt_spin_unlock(lock);			\
--		migrate_enable();			\
- 		local_bh_enable();			\
- 	} while (0)
- 
---- a/kernel/cpu.c
-+++ b/kernel/cpu.c
-@@ -204,8 +204,8 @@ struct hotplug_pcp {
- };
- 
- #ifdef CONFIG_PREEMPT_RT_FULL
--# define hotplug_lock(hp) rt_spin_lock(&(hp)->lock)
--# define hotplug_unlock(hp) rt_spin_unlock(&(hp)->lock)
-+# define hotplug_lock(hp) rt_spin_lock__no_mg(&(hp)->lock)
-+# define hotplug_unlock(hp) rt_spin_unlock__no_mg(&(hp)->lock)
- #else
- # define hotplug_lock(hp) mutex_lock(&(hp)->mutex)
- # define hotplug_unlock(hp) mutex_unlock(&(hp)->mutex)
---- a/kernel/locking/lglock.c
-+++ b/kernel/locking/lglock.c
-@@ -10,7 +10,7 @@
- # define lg_do_unlock(l)	arch_spin_unlock(l)
- #else
- # define lg_lock_ptr		struct rt_mutex
--# define lg_do_lock(l)		__rt_spin_lock(l)
-+# define lg_do_lock(l)		__rt_spin_lock__no_mg(l)
- # define lg_do_unlock(l)	__rt_spin_unlock(l)
- #endif
- /*
---- a/kernel/locking/rt.c
-+++ b/kernel/locking/rt.c
-@@ -235,7 +235,6 @@ EXPORT_SYMBOL(rt_read_trylock);
- void __lockfunc rt_write_lock(rwlock_t *rwlock)
- {
- 	rwlock_acquire(&rwlock->dep_map, 0, 0, _RET_IP_);
--	migrate_disable();
- 	__rt_spin_lock(&rwlock->lock);
- }
- EXPORT_SYMBOL(rt_write_lock);
-@@ -249,7 +248,6 @@ void __lockfunc rt_read_lock(rwlock_t *r
- 	 * recursive read locks succeed when current owns the lock
- 	 */
- 	if (rt_mutex_owner(lock) != current) {
--		migrate_disable();
- 		rwlock_acquire(&rwlock->dep_map, 0, 0, _RET_IP_);
- 		__rt_spin_lock(lock);
- 	}
---- a/kernel/locking/rtmutex.c
-+++ b/kernel/locking/rtmutex.c
-@@ -1103,8 +1103,16 @@ static void  noinline __sched rt_spin_lo
- 	rt_mutex_adjust_prio(current);
- }
- 
-+void __lockfunc rt_spin_lock__no_mg(spinlock_t *lock)
-+{
-+	rt_spin_lock_fastlock(&lock->lock, rt_spin_lock_slowlock);
-+	spin_acquire(&lock->dep_map, 0, 0, _RET_IP_);
-+}
-+EXPORT_SYMBOL(rt_spin_lock__no_mg);
-+
- void __lockfunc rt_spin_lock(spinlock_t *lock)
- {
-+	migrate_disable();
- 	rt_spin_lock_fastlock(&lock->lock, rt_spin_lock_slowlock);
- 	spin_acquire(&lock->dep_map, 0, 0, _RET_IP_);
- }
-@@ -1112,24 +1120,41 @@ EXPORT_SYMBOL(rt_spin_lock);
- 
- void __lockfunc __rt_spin_lock(struct rt_mutex *lock)
- {
-+	migrate_disable();
- 	rt_spin_lock_fastlock(lock, rt_spin_lock_slowlock);
- }
- EXPORT_SYMBOL(__rt_spin_lock);
- 
-+void __lockfunc __rt_spin_lock__no_mg(struct rt_mutex *lock)
-+{
-+	rt_spin_lock_fastlock(lock, rt_spin_lock_slowlock);
-+}
-+EXPORT_SYMBOL(__rt_spin_lock__no_mg);
-+
- #ifdef CONFIG_DEBUG_LOCK_ALLOC
- void __lockfunc rt_spin_lock_nested(spinlock_t *lock, int subclass)
- {
-+	migrate_disable();
- 	rt_spin_lock_fastlock(&lock->lock, rt_spin_lock_slowlock);
- 	spin_acquire(&lock->dep_map, subclass, 0, _RET_IP_);
- }
- EXPORT_SYMBOL(rt_spin_lock_nested);
- #endif
- 
-+void __lockfunc rt_spin_unlock__no_mg(spinlock_t *lock)
-+{
-+	/* NOTE: we always pass in '1' for nested, for simplicity */
-+	spin_release(&lock->dep_map, 1, _RET_IP_);
-+	rt_spin_lock_fastunlock(&lock->lock, rt_spin_lock_slowunlock);
-+}
-+EXPORT_SYMBOL(rt_spin_unlock__no_mg);
-+
- void __lockfunc rt_spin_unlock(spinlock_t *lock)
- {
- 	/* NOTE: we always pass in '1' for nested, for simplicity */
- 	spin_release(&lock->dep_map, 1, _RET_IP_);
- 	rt_spin_lock_fastunlock(&lock->lock, rt_spin_lock_slowunlock);
-+	migrate_enable();
- }
- EXPORT_SYMBOL(rt_spin_unlock);
- 
-@@ -1156,12 +1181,27 @@ int __lockfunc __rt_spin_trylock(struct
- 	return rt_mutex_trylock(lock);
- }
- 
-+int __lockfunc rt_spin_trylock__no_mg(spinlock_t *lock)
-+{
-+	int ret;
-+
-+	ret = rt_mutex_trylock(&lock->lock);
-+	if (ret)
-+		spin_acquire(&lock->dep_map, 0, 1, _RET_IP_);
-+	return ret;
-+}
-+EXPORT_SYMBOL(rt_spin_trylock__no_mg);
-+
- int __lockfunc rt_spin_trylock(spinlock_t *lock)
- {
--	int ret = rt_mutex_trylock(&lock->lock);
-+	int ret;
- 
-+	migrate_disable();
-+	ret = rt_mutex_trylock(&lock->lock);
- 	if (ret)
- 		spin_acquire(&lock->dep_map, 0, 1, _RET_IP_);
-+	else
-+		migrate_enable();
- 	return ret;
- }
- EXPORT_SYMBOL(rt_spin_trylock);
-@@ -1200,12 +1240,10 @@ int atomic_dec_and_spin_lock(atomic_t *a
- 	/* Subtract 1 from counter unless that drops it to 0 (ie. it was 1) */
- 	if (atomic_add_unless(atomic, -1, 1))
- 		return 0;
--	migrate_disable();
- 	rt_spin_lock(lock);
- 	if (atomic_dec_and_test(atomic))
- 		return 1;
- 	rt_spin_unlock(lock);
--	migrate_enable();
- 	return 0;
- }
- EXPORT_SYMBOL(atomic_dec_and_spin_lock);
diff --git a/debian/patches/features/all/rt/sched-preempt-Fix-preempt_count-manipulations.patch b/debian/patches/features/all/rt/sched-preempt-Fix-preempt_count-manipulations.patch
deleted file mode 100644
index 608c694..0000000
--- a/debian/patches/features/all/rt/sched-preempt-Fix-preempt_count-manipulations.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-From: Peter Zijlstra <peterz at infradead.org>
-Date: Mon, 16 May 2016 15:01:11 +0200
-Subject: [PATCH] sched,preempt: Fix preempt_count manipulations
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.6/older/patches-4.6.2-rt5.tar.xz
-
-Vikram reported that his ARM64 compiler managed to 'optimize' away the
-preempt_count manipulations in code like:
-
-	preempt_enable_no_resched();
-	put_user();
-	preempt_disable();
-
-Irrespective of that fact that that is horrible code that should be
-fixed for many reasons, it does highlight a deficiency in the generic
-preempt_count manipulators. As it is never right to combine/elide
-preempt_count manipulations like this.
-
-Therefore sprinkle some volatile in the two generic accessors to
-ensure the compiler is aware of the fact that the preempt_count is
-observed outside of the regular program-order view and thus cannot be
-optimized away like this.
-
-x86; the only arch not using the generic code is not affected as we
-do all this in asm in order to use the segment base per-cpu stuff.
-
-Cc: stable at vger.kernel.org
-Cc: stable-rt at vger.kernel.org
-Cc: Thomas Gleixner <tglx at linutronix.de>
-Fixes: a787870924db ("sched, arch: Create asm/preempt.h")
-Reported-by: Vikram Mulukutla <markivx at codeaurora.org>
-Tested-by: Vikram Mulukutla <markivx at codeaurora.org>
-Signed-off-by: Peter Zijlstra (Intel) <peterz at infradead.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy at linutronix.de>
----
- include/asm-generic/preempt.h |    4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
---- a/include/asm-generic/preempt.h
-+++ b/include/asm-generic/preempt.h
-@@ -7,10 +7,10 @@
- 
- static __always_inline int preempt_count(void)
- {
--	return current_thread_info()->preempt_count;
-+	return READ_ONCE(current_thread_info()->preempt_count);
- }
- 
--static __always_inline int *preempt_count_ptr(void)
-+static __always_inline volatile int *preempt_count_ptr(void)
- {
- 	return &current_thread_info()->preempt_count;
- }
diff --git a/debian/patches/features/all/rt/sched-provide-a-tsk_nr_cpus_allowed-helper.patch b/debian/patches/features/all/rt/sched-provide-a-tsk_nr_cpus_allowed-helper.patch
deleted file mode 100644
index c59bc15..0000000
--- a/debian/patches/features/all/rt/sched-provide-a-tsk_nr_cpus_allowed-helper.patch
+++ /dev/null
@@ -1,262 +0,0 @@
-From: Thomas Gleixner <tglx at linutronix.de>
-Date: Mon, 18 Jan 2016 17:21:59 +0100
-Subject: sched: provide a tsk_nr_cpus_allowed() helper
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.6/older/patches-4.6.2-rt5.tar.xz
-
-tsk_nr_cpus_allowed() is an accessor for task->nr_cpus_allowed which allows
-us to change the representation of ->nr_cpus_allowed if required.
-
-Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy at linutronix.de>
----
- include/linux/sched.h   |    5 +++++
- kernel/sched/core.c     |    2 +-
- kernel/sched/deadline.c |   28 ++++++++++++++--------------
- kernel/sched/rt.c       |   24 ++++++++++++------------
- 4 files changed, 32 insertions(+), 27 deletions(-)
-
---- a/include/linux/sched.h
-+++ b/include/linux/sched.h
-@@ -1871,6 +1871,11 @@ extern int arch_task_struct_size __read_
- /* Future-safe accessor for struct task_struct's cpus_allowed. */
- #define tsk_cpus_allowed(tsk) (&(tsk)->cpus_allowed)
- 
-+static inline int tsk_nr_cpus_allowed(struct task_struct *p)
-+{
-+	return p->nr_cpus_allowed;
-+}
-+
- #define TNF_MIGRATED	0x01
- #define TNF_NO_GROUP	0x02
- #define TNF_SHARED	0x04
---- a/kernel/sched/core.c
-+++ b/kernel/sched/core.c
-@@ -1515,7 +1515,7 @@ int select_task_rq(struct task_struct *p
- {
- 	lockdep_assert_held(&p->pi_lock);
- 
--	if (p->nr_cpus_allowed > 1)
-+	if (tsk_nr_cpus_allowed(p) > 1)
- 		cpu = p->sched_class->select_task_rq(p, cpu, sd_flags, wake_flags);
- 
- 	/*
---- a/kernel/sched/deadline.c
-+++ b/kernel/sched/deadline.c
-@@ -134,7 +134,7 @@ static void inc_dl_migration(struct sche
- {
- 	struct task_struct *p = dl_task_of(dl_se);
- 
--	if (p->nr_cpus_allowed > 1)
-+	if (tsk_nr_cpus_allowed(p) > 1)
- 		dl_rq->dl_nr_migratory++;
- 
- 	update_dl_migration(dl_rq);
-@@ -144,7 +144,7 @@ static void dec_dl_migration(struct sche
- {
- 	struct task_struct *p = dl_task_of(dl_se);
- 
--	if (p->nr_cpus_allowed > 1)
-+	if (tsk_nr_cpus_allowed(p) > 1)
- 		dl_rq->dl_nr_migratory--;
- 
- 	update_dl_migration(dl_rq);
-@@ -966,7 +966,7 @@ static void enqueue_task_dl(struct rq *r
- 
- 	enqueue_dl_entity(&p->dl, pi_se, flags);
- 
--	if (!task_current(rq, p) && p->nr_cpus_allowed > 1)
-+	if (!task_current(rq, p) && tsk_nr_cpus_allowed(p) > 1)
- 		enqueue_pushable_dl_task(rq, p);
- }
- 
-@@ -1040,9 +1040,9 @@ select_task_rq_dl(struct task_struct *p,
- 	 * try to make it stay here, it might be important.
- 	 */
- 	if (unlikely(dl_task(curr)) &&
--	    (curr->nr_cpus_allowed < 2 ||
-+	    (tsk_nr_cpus_allowed(curr) < 2 ||
- 	     !dl_entity_preempt(&p->dl, &curr->dl)) &&
--	    (p->nr_cpus_allowed > 1)) {
-+	    (tsk_nr_cpus_allowed(p) > 1)) {
- 		int target = find_later_rq(p);
- 
- 		if (target != -1 &&
-@@ -1063,7 +1063,7 @@ static void check_preempt_equal_dl(struc
- 	 * Current can't be migrated, useless to reschedule,
- 	 * let's hope p can move out.
- 	 */
--	if (rq->curr->nr_cpus_allowed == 1 ||
-+	if (tsk_nr_cpus_allowed(rq->curr) == 1 ||
- 	    cpudl_find(&rq->rd->cpudl, rq->curr, NULL) == -1)
- 		return;
- 
-@@ -1071,7 +1071,7 @@ static void check_preempt_equal_dl(struc
- 	 * p is migratable, so let's not schedule it and
- 	 * see if it is pushed or pulled somewhere else.
- 	 */
--	if (p->nr_cpus_allowed != 1 &&
-+	if (tsk_nr_cpus_allowed(p) != 1 &&
- 	    cpudl_find(&rq->rd->cpudl, p, NULL) != -1)
- 		return;
- 
-@@ -1185,7 +1185,7 @@ static void put_prev_task_dl(struct rq *
- {
- 	update_curr_dl(rq);
- 
--	if (on_dl_rq(&p->dl) && p->nr_cpus_allowed > 1)
-+	if (on_dl_rq(&p->dl) && tsk_nr_cpus_allowed(p) > 1)
- 		enqueue_pushable_dl_task(rq, p);
- }
- 
-@@ -1286,7 +1286,7 @@ static int find_later_rq(struct task_str
- 	if (unlikely(!later_mask))
- 		return -1;
- 
--	if (task->nr_cpus_allowed == 1)
-+	if (tsk_nr_cpus_allowed(task) == 1)
- 		return -1;
- 
- 	/*
-@@ -1432,7 +1432,7 @@ static struct task_struct *pick_next_pus
- 
- 	BUG_ON(rq->cpu != task_cpu(p));
- 	BUG_ON(task_current(rq, p));
--	BUG_ON(p->nr_cpus_allowed <= 1);
-+	BUG_ON(tsk_nr_cpus_allowed(p) <= 1);
- 
- 	BUG_ON(!task_on_rq_queued(p));
- 	BUG_ON(!dl_task(p));
-@@ -1471,7 +1471,7 @@ static int push_dl_task(struct rq *rq)
- 	 */
- 	if (dl_task(rq->curr) &&
- 	    dl_time_before(next_task->dl.deadline, rq->curr->dl.deadline) &&
--	    rq->curr->nr_cpus_allowed > 1) {
-+	    tsk_nr_cpus_allowed(rq->curr) > 1) {
- 		resched_curr(rq);
- 		return 0;
- 	}
-@@ -1618,9 +1618,9 @@ static void task_woken_dl(struct rq *rq,
- {
- 	if (!task_running(rq, p) &&
- 	    !test_tsk_need_resched(rq->curr) &&
--	    p->nr_cpus_allowed > 1 &&
-+	    tsk_nr_cpus_allowed(p) > 1 &&
- 	    dl_task(rq->curr) &&
--	    (rq->curr->nr_cpus_allowed < 2 ||
-+	    (tsk_nr_cpus_allowed(rq->curr) < 2 ||
- 	     !dl_entity_preempt(&p->dl, &rq->curr->dl))) {
- 		push_dl_tasks(rq);
- 	}
-@@ -1724,7 +1724,7 @@ static void switched_to_dl(struct rq *rq
- 
- 	if (task_on_rq_queued(p) && rq->curr != p) {
- #ifdef CONFIG_SMP
--		if (p->nr_cpus_allowed > 1 && rq->dl.overloaded)
-+		if (tsk_nr_cpus_allowed(p) > 1 && rq->dl.overloaded)
- 			queue_push_tasks(rq);
- #else
- 		if (dl_task(rq->curr))
---- a/kernel/sched/rt.c
-+++ b/kernel/sched/rt.c
-@@ -334,7 +334,7 @@ static void inc_rt_migration(struct sche
- 	rt_rq = &rq_of_rt_rq(rt_rq)->rt;
- 
- 	rt_rq->rt_nr_total++;
--	if (p->nr_cpus_allowed > 1)
-+	if (tsk_nr_cpus_allowed(p) > 1)
- 		rt_rq->rt_nr_migratory++;
- 
- 	update_rt_migration(rt_rq);
-@@ -351,7 +351,7 @@ static void dec_rt_migration(struct sche
- 	rt_rq = &rq_of_rt_rq(rt_rq)->rt;
- 
- 	rt_rq->rt_nr_total--;
--	if (p->nr_cpus_allowed > 1)
-+	if (tsk_nr_cpus_allowed(p) > 1)
- 		rt_rq->rt_nr_migratory--;
- 
- 	update_rt_migration(rt_rq);
-@@ -1324,7 +1324,7 @@ enqueue_task_rt(struct rq *rq, struct ta
- 
- 	enqueue_rt_entity(rt_se, flags);
- 
--	if (!task_current(rq, p) && p->nr_cpus_allowed > 1)
-+	if (!task_current(rq, p) && tsk_nr_cpus_allowed(p) > 1)
- 		enqueue_pushable_task(rq, p);
- }
- 
-@@ -1413,7 +1413,7 @@ select_task_rq_rt(struct task_struct *p,
- 	 * will have to sort it out.
- 	 */
- 	if (curr && unlikely(rt_task(curr)) &&
--	    (curr->nr_cpus_allowed < 2 ||
-+	    (tsk_nr_cpus_allowed(curr) < 2 ||
- 	     curr->prio <= p->prio)) {
- 		int target = find_lowest_rq(p);
- 
-@@ -1437,7 +1437,7 @@ static void check_preempt_equal_prio(str
- 	 * Current can't be migrated, useless to reschedule,
- 	 * let's hope p can move out.
- 	 */
--	if (rq->curr->nr_cpus_allowed == 1 ||
-+	if (tsk_nr_cpus_allowed(rq->curr) == 1 ||
- 	    !cpupri_find(&rq->rd->cpupri, rq->curr, NULL))
- 		return;
- 
-@@ -1445,7 +1445,7 @@ static void check_preempt_equal_prio(str
- 	 * p is migratable, so let's not schedule it and
- 	 * see if it is pushed or pulled somewhere else.
- 	 */
--	if (p->nr_cpus_allowed != 1
-+	if (tsk_nr_cpus_allowed(p) != 1
- 	    && cpupri_find(&rq->rd->cpupri, p, NULL))
- 		return;
- 
-@@ -1579,7 +1579,7 @@ static void put_prev_task_rt(struct rq *
- 	 * The previous task needs to be made eligible for pushing
- 	 * if it is still active
- 	 */
--	if (on_rt_rq(&p->rt) && p->nr_cpus_allowed > 1)
-+	if (on_rt_rq(&p->rt) && tsk_nr_cpus_allowed(p) > 1)
- 		enqueue_pushable_task(rq, p);
- }
- 
-@@ -1629,7 +1629,7 @@ static int find_lowest_rq(struct task_st
- 	if (unlikely(!lowest_mask))
- 		return -1;
- 
--	if (task->nr_cpus_allowed == 1)
-+	if (tsk_nr_cpus_allowed(task) == 1)
- 		return -1; /* No other targets possible */
- 
- 	if (!cpupri_find(&task_rq(task)->rd->cpupri, task, lowest_mask))
-@@ -1762,7 +1762,7 @@ static struct task_struct *pick_next_pus
- 
- 	BUG_ON(rq->cpu != task_cpu(p));
- 	BUG_ON(task_current(rq, p));
--	BUG_ON(p->nr_cpus_allowed <= 1);
-+	BUG_ON(tsk_nr_cpus_allowed(p) <= 1);
- 
- 	BUG_ON(!task_on_rq_queued(p));
- 	BUG_ON(!rt_task(p));
-@@ -2122,9 +2122,9 @@ static void task_woken_rt(struct rq *rq,
- {
- 	if (!task_running(rq, p) &&
- 	    !test_tsk_need_resched(rq->curr) &&
--	    p->nr_cpus_allowed > 1 &&
-+	    tsk_nr_cpus_allowed(p) > 1 &&
- 	    (dl_task(rq->curr) || rt_task(rq->curr)) &&
--	    (rq->curr->nr_cpus_allowed < 2 ||
-+	    (tsk_nr_cpus_allowed(rq->curr) < 2 ||
- 	     rq->curr->prio <= p->prio))
- 		push_rt_tasks(rq);
- }
-@@ -2197,7 +2197,7 @@ static void switched_to_rt(struct rq *rq
- 	 */
- 	if (task_on_rq_queued(p) && rq->curr != p) {
- #ifdef CONFIG_SMP
--		if (p->nr_cpus_allowed > 1 && rq->rt.overloaded)
-+		if (tsk_nr_cpus_allowed(p) > 1 && rq->rt.overloaded)
- 			queue_push_tasks(rq);
- #else
- 		if (p->prio < rq->curr->prio)
diff --git a/debian/patches/features/all/rt/sched-use-tsk_cpus_allowed-instead-of-accessing-cpus.patch b/debian/patches/features/all/rt/sched-use-tsk_cpus_allowed-instead-of-accessing-cpus.patch
deleted file mode 100644
index cd65b92..0000000
--- a/debian/patches/features/all/rt/sched-use-tsk_cpus_allowed-instead-of-accessing-cpus.patch
+++ /dev/null
@@ -1,58 +0,0 @@
-From: Thomas Gleixner <tglx at linutronix.de>
-Date: Mon, 18 Jan 2016 17:10:39 +0100
-Subject: sched: use tsk_cpus_allowed() instead of accessing
- ->cpus_allowed
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.6/older/patches-4.6.2-rt5.tar.xz
-
-Use the future-safe accessor for struct task_struct's.
-
-Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy at linutronix.de>
----
- kernel/sched/cpudeadline.c |    4 ++--
- kernel/sched/cpupri.c      |    4 ++--
- kernel/sched/deadline.c    |    2 +-
- 3 files changed, 5 insertions(+), 5 deletions(-)
-
---- a/kernel/sched/cpudeadline.c
-+++ b/kernel/sched/cpudeadline.c
-@@ -103,10 +103,10 @@ int cpudl_find(struct cpudl *cp, struct
- 	const struct sched_dl_entity *dl_se = &p->dl;
- 
- 	if (later_mask &&
--	    cpumask_and(later_mask, cp->free_cpus, &p->cpus_allowed)) {
-+	    cpumask_and(later_mask, cp->free_cpus, tsk_cpus_allowed(p))) {
- 		best_cpu = cpumask_any(later_mask);
- 		goto out;
--	} else if (cpumask_test_cpu(cpudl_maximum(cp), &p->cpus_allowed) &&
-+	} else if (cpumask_test_cpu(cpudl_maximum(cp), tsk_cpus_allowed(p)) &&
- 			dl_time_before(dl_se->deadline, cp->elements[0].dl)) {
- 		best_cpu = cpudl_maximum(cp);
- 		if (later_mask)
---- a/kernel/sched/cpupri.c
-+++ b/kernel/sched/cpupri.c
-@@ -103,11 +103,11 @@ int cpupri_find(struct cpupri *cp, struc
- 		if (skip)
- 			continue;
- 
--		if (cpumask_any_and(&p->cpus_allowed, vec->mask) >= nr_cpu_ids)
-+		if (cpumask_any_and(tsk_cpus_allowed(p), vec->mask) >= nr_cpu_ids)
- 			continue;
- 
- 		if (lowest_mask) {
--			cpumask_and(lowest_mask, &p->cpus_allowed, vec->mask);
-+			cpumask_and(lowest_mask, tsk_cpus_allowed(p), vec->mask);
- 
- 			/*
- 			 * We have to ensure that we have at least one bit
---- a/kernel/sched/deadline.c
-+++ b/kernel/sched/deadline.c
-@@ -1392,7 +1392,7 @@ static struct rq *find_lock_later_rq(str
- 		if (double_lock_balance(rq, later_rq)) {
- 			if (unlikely(task_rq(task) != rq ||
- 				     !cpumask_test_cpu(later_rq->cpu,
--				                       &task->cpus_allowed) ||
-+				                       tsk_cpus_allowed(task)) ||
- 				     task_running(rq, task) ||
- 				     !dl_task(task) ||
- 				     !task_on_rq_queued(task))) {
diff --git a/debian/patches/features/all/rt/timers-avoid-the-base-null-otptimization-on-rt.patch b/debian/patches/features/all/rt/timers-avoid-the-base-null-otptimization-on-rt.patch
deleted file mode 100644
index 5c44fe5..0000000
--- a/debian/patches/features/all/rt/timers-avoid-the-base-null-otptimization-on-rt.patch
+++ /dev/null
@@ -1,74 +0,0 @@
-Subject: timers: Avoid the switch timers base set to NULL trick on RT
-From: Thomas Gleixner <tglx at linutronix.de>
-Date: Thu, 21 Jul 2011 15:23:39 +0200
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.6/older/patches-4.6.2-rt5.tar.xz
-
-On RT that code is preemptible, so we cannot assign NULL to timers
-base as a preempter would spin forever in lock_timer_base().
-
-Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
----
- kernel/time/timer.c |   45 +++++++++++++++++++++++++++++++++++----------
- 1 file changed, 35 insertions(+), 10 deletions(-)
-
---- a/kernel/time/timer.c
-+++ b/kernel/time/timer.c
-@@ -780,6 +780,39 @@ static struct tvec_base *lock_timer_base
- 		cpu_relax();
- 	}
- }
-+#ifdef CONFIG_PREEMPT_RT_FULL
-+static inline struct tvec_base *switch_timer_base(struct timer_list *timer,
-+						  struct tvec_base *old,
-+						  struct tvec_base *new)
-+{
-+	/*
-+	 * We cannot do the below because we might be preempted and
-+	 * then the preempter would see NULL and loop forever.
-+	 */
-+	if (spin_trylock(&new->lock)) {
-+		WRITE_ONCE(timer->flags,
-+			   (timer->flags & ~TIMER_BASEMASK) | new->cpu);
-+		spin_unlock(&old->lock);
-+		return new;
-+	}
-+	return old;
-+}
-+
-+#else
-+static inline struct tvec_base *switch_timer_base(struct timer_list *timer,
-+						  struct tvec_base *old,
-+						  struct tvec_base *new)
-+{
-+	/* See the comment in lock_timer_base() */
-+	timer->flags |= TIMER_MIGRATING;
-+
-+	spin_unlock(&old->lock);
-+	spin_lock(&new->lock);
-+	WRITE_ONCE(timer->flags,
-+		   (timer->flags & ~TIMER_BASEMASK) | new->cpu);
-+	return new;
-+}
-+#endif
- 
- static inline int
- __mod_timer(struct timer_list *timer, unsigned long expires,
-@@ -810,16 +843,8 @@ static inline int
- 		 * handler yet has not finished. This also guarantees that
- 		 * the timer is serialized wrt itself.
- 		 */
--		if (likely(base->running_timer != timer)) {
--			/* See the comment in lock_timer_base() */
--			timer->flags |= TIMER_MIGRATING;
--
--			spin_unlock(&base->lock);
--			base = new_base;
--			spin_lock(&base->lock);
--			WRITE_ONCE(timer->flags,
--				   (timer->flags & ~TIMER_BASEMASK) | base->cpu);
--		}
-+		if (likely(base->running_timer != timer))
-+			base = switch_timer_base(timer, base, new_base);
- 	}
- 
- 	timer->expires = expires;
diff --git a/debian/patches/features/all/rt/timers-preempt-rt-support.patch b/debian/patches/features/all/rt/timers-preempt-rt-support.patch
deleted file mode 100644
index 863ca5e..0000000
--- a/debian/patches/features/all/rt/timers-preempt-rt-support.patch
+++ /dev/null
@@ -1,55 +0,0 @@
-From: Ingo Molnar <mingo at elte.hu>
-Date: Fri, 3 Jul 2009 08:30:20 -0500
-Subject: timers: Preempt-rt support
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.6/older/patches-4.6.2-rt5.tar.xz
-
-The base->lock is a sleeping lock. Try not to workaround with a
-spin_trylock(). The rt-mutex lock is not irq save even the try-lock
-due to way how the inner lock accessed. Even with this fixed have the
-problem that the owner is not the current process on the CPU but his
-pid is used while taking the lock.  Therefore we go with ext jiffy for
-the wakeup. Also drop preempt_disable() usage since we need just to
-ensure not to switch CPUs (the data structures have own locks).
-
-[bigeasy: dropped that spin try lock]
-Signed-off-by: Ingo Molnar <mingo at elte.hu>
-Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
----
- kernel/time/timer.c |   12 ++++++++++--
- 1 file changed, 10 insertions(+), 2 deletions(-)
-
---- a/kernel/time/timer.c
-+++ b/kernel/time/timer.c
-@@ -1422,6 +1422,14 @@ u64 get_next_timer_interrupt(unsigned lo
- 	if (cpu_is_offline(smp_processor_id()))
- 		return expires;
- 
-+#ifdef CONFIG_PREEMPT_RT_FULL
-+	/*
-+	 * On PREEMPT_RT we cannot sleep here. As a result we can't take
-+	 * the base lock to check when the next timer is pending and so
-+	 * we assume the next jiffy.
-+	 */
-+	return basem + TICK_NSEC;
-+#endif
- 	spin_lock(&base->lock);
- 	if (base->active_timers) {
- 		if (time_before_eq(base->next_timer, base->timer_jiffies))
-@@ -1632,7 +1640,7 @@ static void migrate_timers(int cpu)
- 
- 	BUG_ON(cpu_online(cpu));
- 	old_base = per_cpu_ptr(&tvec_bases, cpu);
--	new_base = get_cpu_ptr(&tvec_bases);
-+	new_base = get_local_ptr(&tvec_bases);
- 	/*
- 	 * The caller is globally serialized and nobody else
- 	 * takes two locks at once, deadlock is not possible.
-@@ -1656,7 +1664,7 @@ static void migrate_timers(int cpu)
- 
- 	spin_unlock(&old_base->lock);
- 	spin_unlock_irq(&new_base->lock);
--	put_cpu_ptr(&tvec_bases);
-+	put_local_ptr(&tvec_bases);
- }
- 
- static int timer_cpu_notify(struct notifier_block *self,
diff --git a/debian/patches/features/all/rt/trace-correct-off-by-one-while-recording-the-trace-e.patch b/debian/patches/features/all/rt/trace-correct-off-by-one-while-recording-the-trace-e.patch
deleted file mode 100644
index 64d7a5e..0000000
--- a/debian/patches/features/all/rt/trace-correct-off-by-one-while-recording-the-trace-e.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-From: Sebastian Andrzej Siewior <bigeasy at linutronix.de>
-Date: Wed, 25 May 2016 14:03:50 +0200
-Subject: [PATCH] trace: correct off by one while recording the trace-event
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.6/older/patches-4.6.2-rt5.tar.xz
-
-Trace events like raw_syscalls show always a preempt code of one. The
-reason is that on PREEMPT kernels rcu_read_lock_sched_notrace()
-increases the preemption counter and the function recording the counter
-is caller within the RCU section.
-
-Cc: stable-rt at vger.kernel.org
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy at linutronix.de>
----
- include/linux/tracepoint.h  |   13 +++++++++++++
- kernel/trace/trace_events.c |    2 +-
- 2 files changed, 14 insertions(+), 1 deletion(-)
-
---- a/include/linux/tracepoint.h
-+++ b/include/linux/tracepoint.h
-@@ -33,6 +33,19 @@ struct trace_enum_map {
- 
- #define TRACEPOINT_DEFAULT_PRIO	10
- 
-+/*
-+ * The preempt count recorded in trace_event_raw_event_# are off by one due to
-+ * rcu_read_lock_sched_notrace() in __DO_TRACE. This is corrected here.
-+ */
-+static inline int event_preempt_count(void)
-+{
-+#ifdef CONFIG_PREEMPT
-+	return preempt_count() - 1;
-+#else
-+	return 0;
-+#endif
-+}
-+
- extern int
- tracepoint_probe_register(struct tracepoint *tp, void *probe, void *data);
- extern int
---- a/kernel/trace/trace_events.c
-+++ b/kernel/trace/trace_events.c
-@@ -243,7 +243,7 @@ void *trace_event_buffer_reserve(struct
- 		return NULL;
- 
- 	local_save_flags(fbuffer->flags);
--	fbuffer->pc = preempt_count();
-+	fbuffer->pc = event_preempt_count();
- 	fbuffer->trace_file = trace_file;
- 
- 	fbuffer->event =

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/kernel/linux.git



More information about the Kernel-svn-changes mailing list