summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Andrzej Siewior <bigeasy@linutronix.de>2016-05-06 11:45:16 +0200
committerSebastian Andrzej Siewior <bigeasy@linutronix.de>2016-05-06 11:45:16 +0200
commita52e3317edc58fd536845127ccd9e2e4174261d3 (patch)
tree65bb2b4f62669b578d6826996c71bd01e2e42548
parent67e59dd0c366160e17d4fd773b848394173c30a2 (diff)
download4.9-rt-patches-a52e3317edc58fd536845127ccd9e2e4174261d3.tar.gz
[ANNOUNCE] 4.4.9-rt17
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
-rw-r--r--patches/arm64-replace-read_lock-to-rcu-lock-in-call_step_hoo.patch93
-rw-r--r--patches/cgroups-scheduling-while-atomic-in-cgroup-code.patch2
-rw-r--r--patches/cgroups-use-simple-wait-in-css_release.patch6
-rw-r--r--patches/completion-use-simple-wait-queues.patch2
-rw-r--r--patches/fs-dcache-use-cpu-chill-in-trylock-loops.patch2
-rw-r--r--patches/iommu-amd--Use-WARN_ON_NORT.patch4
-rw-r--r--patches/localversion.patch4
-rw-r--r--patches/mm-memcontrol-Don-t-call-schedule_work_on-in-preempt.patch4
-rw-r--r--patches/mm-memcontrol-do_not_disable_irq.patch10
-rw-r--r--patches/net-wireless-warn-nort.patch2
-rw-r--r--patches/rt-add-rt-locks.patch6
-rw-r--r--patches/rtmutex-Make-wait_lock-irq-safe.patch8
-rw-r--r--patches/rtmutex-futex-prepare-rt.patch10
-rw-r--r--patches/series1
-rw-r--r--patches/skbufhead-raw-lock.patch2
-rw-r--r--patches/work-queue-work-around-irqsafe-timer-optimization.patch2
-rw-r--r--patches/workqueue-distangle-from-rq-lock.patch6
-rw-r--r--patches/workqueue-prevent-deadlock-stall.patch12
-rw-r--r--patches/workqueue-use-locallock.patch20
-rw-r--r--patches/workqueue-use-rcu.patch42
-rw-r--r--patches/x86-kvm-require-const-tsc-for-rt.patch2
21 files changed, 73 insertions, 167 deletions
diff --git a/patches/arm64-replace-read_lock-to-rcu-lock-in-call_step_hoo.patch b/patches/arm64-replace-read_lock-to-rcu-lock-in-call_step_hoo.patch
deleted file mode 100644
index 835fcae8ff92f0..00000000000000
--- a/patches/arm64-replace-read_lock-to-rcu-lock-in-call_step_hoo.patch
+++ /dev/null
@@ -1,93 +0,0 @@
-From: Yang Shi <yang.shi@linaro.org>
-Date: Mon, 8 Feb 2016 14:49:24 -0800
-Subject: arm64: replace read_lock to rcu lock in call_step_hook
-
-BUG: sleeping function called from invalid context at kernel/locking/rtmutex.c:917
-in_atomic(): 1, irqs_disabled(): 128, pid: 383, name: sh
-Preemption disabled at:[<ffff800000124c18>] kgdb_cpu_enter+0x158/0x6b8
-
-CPU: 3 PID: 383 Comm: sh Tainted: G W 4.1.13-rt13 #2
-Hardware name: Freescale Layerscape 2085a RDB Board (DT)
-Call trace:
-[<ffff8000000885e8>] dump_backtrace+0x0/0x128
-[<ffff800000088734>] show_stack+0x24/0x30
-[<ffff80000079a7c4>] dump_stack+0x80/0xa0
-[<ffff8000000bd324>] ___might_sleep+0x18c/0x1a0
-[<ffff8000007a20ac>] __rt_spin_lock+0x2c/0x40
-[<ffff8000007a2268>] rt_read_lock+0x40/0x58
-[<ffff800000085328>] single_step_handler+0x38/0xd8
-[<ffff800000082368>] do_debug_exception+0x58/0xb8
-Exception stack(0xffff80834a1e7c80 to 0xffff80834a1e7da0)
-7c80: ffffff9c ffffffff 92c23ba0 0000ffff 4a1e7e40 ffff8083 001bfcc4 ffff8000
-7ca0: f2000400 00000000 00000000 00000000 4a1e7d80 ffff8083 0049501c ffff8000
-7cc0: 00005402 00000000 00aaa210 ffff8000 4a1e7ea0 ffff8083 000833f4 ffff8000
-7ce0: ffffff9c ffffffff 92c23ba0 0000ffff 4a1e7ea0 ffff8083 001bfcc0 ffff8000
-7d00: 4a0fc400 ffff8083 00005402 00000000 4a1e7d40 ffff8083 00490324 ffff8000
-7d20: ffffff9c 00000000 92c23ba0 0000ffff 000a0000 00000000 00000000 00000000
-7d40: 00000008 00000000 00080000 00000000 92c23b8b 0000ffff 92c23b8e 0000ffff
-7d60: 00000038 00000000 00001cb2 00000000 00000005 00000000 92d7b498 0000ffff
-7d80: 01010101 01010101 92be9000 0000ffff 00000000 00000000 00000030 00000000
-[<ffff8000000833f4>] el1_dbg+0x18/0x6c
-
-This issue is similar with 62c6c61("arm64: replace read_lock to rcu lock in
-call_break_hook"), but comes to single_step_handler.
-
-This also solves kgdbts boot test silent hang issue on 4.4 -rt kernel.
-
-Cc: stable-rt@vger.kernel.org
-Signed-off-by: Yang Shi <yang.shi@linaro.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- arch/arm64/kernel/debug-monitors.c | 21 +++++++++++----------
- 1 file changed, 11 insertions(+), 10 deletions(-)
-
---- a/arch/arm64/kernel/debug-monitors.c
-+++ b/arch/arm64/kernel/debug-monitors.c
-@@ -186,20 +186,21 @@ static void clear_regs_spsr_ss(struct pt
-
- /* EL1 Single Step Handler hooks */
- static LIST_HEAD(step_hook);
--static DEFINE_RWLOCK(step_hook_lock);
-+static DEFINE_SPINLOCK(step_hook_lock);
-
- void register_step_hook(struct step_hook *hook)
- {
-- write_lock(&step_hook_lock);
-- list_add(&hook->node, &step_hook);
-- write_unlock(&step_hook_lock);
-+ spin_lock(&step_hook_lock);
-+ list_add_rcu(&hook->node, &step_hook);
-+ spin_unlock(&step_hook_lock);
- }
-
- void unregister_step_hook(struct step_hook *hook)
- {
-- write_lock(&step_hook_lock);
-- list_del(&hook->node);
-- write_unlock(&step_hook_lock);
-+ spin_lock(&step_hook_lock);
-+ list_del_rcu(&hook->node);
-+ spin_unlock(&step_hook_lock);
-+ synchronize_rcu();
- }
-
- /*
-@@ -213,15 +214,15 @@ static int call_step_hook(struct pt_regs
- struct step_hook *hook;
- int retval = DBG_HOOK_ERROR;
-
-- read_lock(&step_hook_lock);
-+ rcu_read_lock();
-
-- list_for_each_entry(hook, &step_hook, node) {
-+ list_for_each_entry_rcu(hook, &step_hook, node) {
- retval = hook->fn(regs, esr);
- if (retval == DBG_HOOK_HANDLED)
- break;
- }
-
-- read_unlock(&step_hook_lock);
-+ rcu_read_unlock();
-
- return retval;
- }
diff --git a/patches/cgroups-scheduling-while-atomic-in-cgroup-code.patch b/patches/cgroups-scheduling-while-atomic-in-cgroup-code.patch
index d1e4403850f3cc..c57144635c9d9f 100644
--- a/patches/cgroups-scheduling-while-atomic-in-cgroup-code.patch
+++ b/patches/cgroups-scheduling-while-atomic-in-cgroup-code.patch
@@ -42,7 +42,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
-@@ -1938,14 +1938,17 @@ static void drain_local_stock(struct wor
+@@ -1939,14 +1939,17 @@ static void drain_local_stock(struct wor
*/
static void refill_stock(struct mem_cgroup *memcg, unsigned int nr_pages)
{
diff --git a/patches/cgroups-use-simple-wait-in-css_release.patch b/patches/cgroups-use-simple-wait-in-css_release.patch
index 9e9708de4ea242..6982596fd9746b 100644
--- a/patches/cgroups-use-simple-wait-in-css_release.patch
+++ b/patches/cgroups-use-simple-wait-in-css_release.patch
@@ -52,7 +52,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
/*
--- a/kernel/cgroup.c
+++ b/kernel/cgroup.c
-@@ -4733,10 +4733,10 @@ static void css_free_rcu_fn(struct rcu_h
+@@ -4737,10 +4737,10 @@ static void css_free_rcu_fn(struct rcu_h
queue_work(cgroup_destroy_wq, &css->destroy_work);
}
@@ -65,7 +65,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
struct cgroup_subsys *ss = css->ss;
struct cgroup *cgrp = css->cgroup;
-@@ -4775,8 +4775,8 @@ static void css_release(struct percpu_re
+@@ -4779,8 +4779,8 @@ static void css_release(struct percpu_re
struct cgroup_subsys_state *css =
container_of(ref, struct cgroup_subsys_state, refcnt);
@@ -76,7 +76,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
}
static void init_and_link_css(struct cgroup_subsys_state *css,
-@@ -5392,6 +5392,7 @@ static int __init cgroup_wq_init(void)
+@@ -5396,6 +5396,7 @@ static int __init cgroup_wq_init(void)
*/
cgroup_destroy_wq = alloc_workqueue("cgroup_destroy", 0, 1);
BUG_ON(!cgroup_destroy_wq);
diff --git a/patches/completion-use-simple-wait-queues.patch b/patches/completion-use-simple-wait-queues.patch
index 10c178ec64b5be..2346eb9572ef57 100644
--- a/patches/completion-use-simple-wait-queues.patch
+++ b/patches/completion-use-simple-wait-queues.patch
@@ -35,7 +35,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
break;
--- a/drivers/usb/gadget/function/f_fs.c
+++ b/drivers/usb/gadget/function/f_fs.c
-@@ -1405,7 +1405,7 @@ static void ffs_data_put(struct ffs_data
+@@ -1404,7 +1404,7 @@ static void ffs_data_put(struct ffs_data
pr_info("%s(): freeing\n", __func__);
ffs_data_clear(ffs);
BUG_ON(waitqueue_active(&ffs->ev.waitq) ||
diff --git a/patches/fs-dcache-use-cpu-chill-in-trylock-loops.patch b/patches/fs-dcache-use-cpu-chill-in-trylock-loops.patch
index 5fa0de70046dcd..ead334bd603c2c 100644
--- a/patches/fs-dcache-use-cpu-chill-in-trylock-loops.patch
+++ b/patches/fs-dcache-use-cpu-chill-in-trylock-loops.patch
@@ -55,7 +55,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
return dentry; /* try again with same dentry */
}
-@@ -2388,7 +2389,7 @@ void d_delete(struct dentry * dentry)
+@@ -2391,7 +2392,7 @@ void d_delete(struct dentry * dentry)
if (dentry->d_lockref.count == 1) {
if (!spin_trylock(&inode->i_lock)) {
spin_unlock(&dentry->d_lock);
diff --git a/patches/iommu-amd--Use-WARN_ON_NORT.patch b/patches/iommu-amd--Use-WARN_ON_NORT.patch
index 32dcbd0b94f8ca..3bde9d093027cf 100644
--- a/patches/iommu-amd--Use-WARN_ON_NORT.patch
+++ b/patches/iommu-amd--Use-WARN_ON_NORT.patch
@@ -16,7 +16,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
--- a/drivers/iommu/amd_iommu.c
+++ b/drivers/iommu/amd_iommu.c
-@@ -1952,10 +1952,10 @@ static int __attach_device(struct iommu_
+@@ -2017,10 +2017,10 @@ static int __attach_device(struct iommu_
int ret;
/*
@@ -30,7 +30,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
/* lock domain */
spin_lock(&domain->lock);
-@@ -2118,10 +2118,10 @@ static void __detach_device(struct iommu
+@@ -2183,10 +2183,10 @@ static void __detach_device(struct iommu
struct protection_domain *domain;
/*
diff --git a/patches/localversion.patch b/patches/localversion.patch
index 35c628ed6d79e3..d061f44f02ca0f 100644
--- a/patches/localversion.patch
+++ b/patches/localversion.patch
@@ -1,4 +1,4 @@
-Subject: v4.4.7-rt16
+Subject: v4.4.9-rt17
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 @@
-+-rt16
++-rt17
diff --git a/patches/mm-memcontrol-Don-t-call-schedule_work_on-in-preempt.patch b/patches/mm-memcontrol-Don-t-call-schedule_work_on-in-preempt.patch
index 822cda34344af2..ee1066f21fc557 100644
--- a/patches/mm-memcontrol-Don-t-call-schedule_work_on-in-preempt.patch
+++ b/patches/mm-memcontrol-Don-t-call-schedule_work_on-in-preempt.patch
@@ -48,7 +48,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
-@@ -1958,7 +1958,7 @@ static void drain_all_stock(struct mem_c
+@@ -1959,7 +1959,7 @@ static void drain_all_stock(struct mem_c
return;
/* Notify other cpus that system-wide "drain" is running */
get_online_cpus();
@@ -57,7 +57,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
for_each_online_cpu(cpu) {
struct memcg_stock_pcp *stock = &per_cpu(memcg_stock, cpu);
struct mem_cgroup *memcg;
-@@ -1975,7 +1975,7 @@ static void drain_all_stock(struct mem_c
+@@ -1976,7 +1976,7 @@ static void drain_all_stock(struct mem_c
schedule_work_on(cpu, &stock->work);
}
}
diff --git a/patches/mm-memcontrol-do_not_disable_irq.patch b/patches/mm-memcontrol-do_not_disable_irq.patch
index ffc50724fa6327..9d7f3cc6e693b6 100644
--- a/patches/mm-memcontrol-do_not_disable_irq.patch
+++ b/patches/mm-memcontrol-do_not_disable_irq.patch
@@ -59,7 +59,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
static const char * const mem_cgroup_stat_names[] = {
"cache",
"rss",
-@@ -4617,12 +4620,12 @@ static int mem_cgroup_move_account(struc
+@@ -4618,12 +4621,12 @@ static int mem_cgroup_move_account(struc
ret = 0;
@@ -74,7 +74,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
out_unlock:
unlock_page(page);
out:
-@@ -5410,10 +5413,10 @@ void mem_cgroup_commit_charge(struct pag
+@@ -5411,10 +5414,10 @@ void mem_cgroup_commit_charge(struct pag
VM_BUG_ON_PAGE(!PageTransHuge(page), page);
}
@@ -87,7 +87,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
if (do_swap_account && PageSwapCache(page)) {
swp_entry_t entry = { .val = page_private(page) };
-@@ -5469,14 +5472,14 @@ static void uncharge_batch(struct mem_cg
+@@ -5470,14 +5473,14 @@ static void uncharge_batch(struct mem_cg
memcg_oom_recover(memcg);
}
@@ -104,7 +104,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
if (!mem_cgroup_is_root(memcg))
css_put_many(&memcg->css, nr_pages);
-@@ -5668,6 +5671,7 @@ void mem_cgroup_swapout(struct page *pag
+@@ -5669,6 +5672,7 @@ void mem_cgroup_swapout(struct page *pag
{
struct mem_cgroup *memcg;
unsigned short oldid;
@@ -112,7 +112,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
VM_BUG_ON_PAGE(PageLRU(page), page);
VM_BUG_ON_PAGE(page_count(page), page);
-@@ -5696,9 +5700,13 @@ void mem_cgroup_swapout(struct page *pag
+@@ -5697,9 +5701,13 @@ void mem_cgroup_swapout(struct page *pag
* important here to have the interrupts disabled because it is the
* only synchronisation we have for udpating the per-CPU variables.
*/
diff --git a/patches/net-wireless-warn-nort.patch b/patches/net-wireless-warn-nort.patch
index 688a8e0fbff4be..e3b49fc3a372a0 100644
--- a/patches/net-wireless-warn-nort.patch
+++ b/patches/net-wireless-warn-nort.patch
@@ -12,7 +12,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
-@@ -3573,7 +3573,7 @@ void ieee80211_rx_napi(struct ieee80211_
+@@ -3574,7 +3574,7 @@ void ieee80211_rx_napi(struct ieee80211_
struct ieee80211_supported_band *sband;
struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
diff --git a/patches/rt-add-rt-locks.patch b/patches/rt-add-rt-locks.patch
index 6d76a2329563e5..94ae7bc4d54608 100644
--- a/patches/rt-add-rt-locks.patch
+++ b/patches/rt-add-rt-locks.patch
@@ -922,7 +922,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
bool deboost;
int ret = 0;
-@@ -1268,7 +1269,8 @@ static int wake_futex_pi(u32 __user *uad
+@@ -1278,7 +1279,8 @@ static int wake_futex_pi(u32 __user *uad
raw_spin_unlock_irq(&pi_state->pi_mutex.wait_lock);
@@ -932,7 +932,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
/*
* First unlock HB so the waiter does not spin on it once he got woken
-@@ -1278,6 +1280,7 @@ static int wake_futex_pi(u32 __user *uad
+@@ -1288,6 +1290,7 @@ static int wake_futex_pi(u32 __user *uad
*/
spin_unlock(&hb->lock);
wake_up_q(&wake_q);
@@ -940,7 +940,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
if (deboost)
rt_mutex_adjust_prio(current);
-@@ -2709,10 +2712,7 @@ static int futex_wait_requeue_pi(u32 __u
+@@ -2728,10 +2731,7 @@ static int futex_wait_requeue_pi(u32 __u
* The waiter is allocated on our stack, manipulated by the requeue
* code while we sleep on uaddr.
*/
diff --git a/patches/rtmutex-Make-wait_lock-irq-safe.patch b/patches/rtmutex-Make-wait_lock-irq-safe.patch
index 7befb3baf97982..d36807b15a4b7d 100644
--- a/patches/rtmutex-Make-wait_lock-irq-safe.patch
+++ b/patches/rtmutex-Make-wait_lock-irq-safe.patch
@@ -51,9 +51,9 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
new_owner = rt_mutex_next_owner(&pi_state->pi_mutex);
/*
-@@ -1249,22 +1249,22 @@ static int wake_futex_pi(u32 __user *uad
- else if (curval != uval)
- ret = -EINVAL;
+@@ -1259,22 +1259,22 @@ static int wake_futex_pi(u32 __user *uad
+ ret = -EINVAL;
+ }
if (ret) {
- raw_spin_unlock(&pi_state->pi_mutex.wait_lock);
+ raw_spin_unlock_irq(&pi_state->pi_mutex.wait_lock);
@@ -80,7 +80,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
deboost = rt_mutex_futex_unlock(&pi_state->pi_mutex, &wake_q);
-@@ -2129,11 +2129,11 @@ static int fixup_owner(u32 __user *uaddr
+@@ -2139,11 +2139,11 @@ static int fixup_owner(u32 __user *uaddr
* we returned due to timeout or signal without taking the
* rt_mutex. Too late.
*/
diff --git a/patches/rtmutex-futex-prepare-rt.patch b/patches/rtmutex-futex-prepare-rt.patch
index 236ba8714e7f50..80f6adab1059d0 100644
--- a/patches/rtmutex-futex-prepare-rt.patch
+++ b/patches/rtmutex-futex-prepare-rt.patch
@@ -15,7 +15,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
--- a/kernel/futex.c
+++ b/kernel/futex.c
-@@ -1812,6 +1812,16 @@ static int futex_requeue(u32 __user *uad
+@@ -1822,6 +1822,16 @@ static int futex_requeue(u32 __user *uad
requeue_pi_wake_futex(this, &key2, hb2);
drop_count++;
continue;
@@ -32,7 +32,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
} else if (ret) {
/* -EDEADLK */
this->pi_state = NULL;
-@@ -2672,7 +2682,7 @@ static int futex_wait_requeue_pi(u32 __u
+@@ -2691,7 +2701,7 @@ static int futex_wait_requeue_pi(u32 __u
struct hrtimer_sleeper timeout, *to = NULL;
struct rt_mutex_waiter rt_waiter;
struct rt_mutex *pi_mutex = NULL;
@@ -41,7 +41,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
union futex_key key2 = FUTEX_KEY_INIT;
struct futex_q q = futex_q_init;
int res, ret;
-@@ -2731,20 +2741,55 @@ static int futex_wait_requeue_pi(u32 __u
+@@ -2750,20 +2760,55 @@ static int futex_wait_requeue_pi(u32 __u
/* Queue the futex_q, drop the hb lock, wait for wakeup. */
futex_wait_queue_me(hb, &q, to);
@@ -108,7 +108,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
/* Check if the requeue code acquired the second futex for us. */
if (!q.rt_waiter) {
-@@ -2753,14 +2798,15 @@ static int futex_wait_requeue_pi(u32 __u
+@@ -2772,14 +2817,15 @@ static int futex_wait_requeue_pi(u32 __u
* did a lock-steal - fix up the PI-state in that case.
*/
if (q.pi_state && (q.pi_state->owner != current)) {
@@ -126,7 +126,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
}
} else {
/*
-@@ -2773,7 +2819,8 @@ static int futex_wait_requeue_pi(u32 __u
+@@ -2792,7 +2838,8 @@ static int futex_wait_requeue_pi(u32 __u
ret = rt_mutex_finish_proxy_lock(pi_mutex, to, &rt_waiter);
debug_rt_mutex_free_waiter(&rt_waiter);
diff --git a/patches/series b/patches/series
index 6bce9da7dfb631..d754ddd9c918e6 100644
--- a/patches/series
+++ b/patches/series
@@ -6,7 +6,6 @@
# UPSTREAM changes queued
############################################################
rtmutex-Make-wait_lock-irq-safe.patch
-arm64-replace-read_lock-to-rcu-lock-in-call_step_hoo.patch
tracing-writeback-Replace-cgroup-path-to-cgroup-ino.patch
kvm-rt-change-async-pagefault-code-locking-for-PREEM.patch
panic-x86-Fix-re-entrance-problem-due-to-panic-on-NM.patch
diff --git a/patches/skbufhead-raw-lock.patch b/patches/skbufhead-raw-lock.patch
index 983b721b674a6c..fc2f5dcc3fece9 100644
--- a/patches/skbufhead-raw-lock.patch
+++ b/patches/skbufhead-raw-lock.patch
@@ -15,7 +15,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
-@@ -2546,6 +2546,7 @@ struct softnet_data {
+@@ -2564,6 +2564,7 @@ struct softnet_data {
unsigned int dropped;
struct sk_buff_head input_pkt_queue;
struct napi_struct backlog;
diff --git a/patches/work-queue-work-around-irqsafe-timer-optimization.patch b/patches/work-queue-work-around-irqsafe-timer-optimization.patch
index 1a2df1275485c0..9d123ada69abce 100644
--- a/patches/work-queue-work-around-irqsafe-timer-optimization.patch
+++ b/patches/work-queue-work-around-irqsafe-timer-optimization.patch
@@ -121,7 +121,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
#include "workqueue_internal.h"
-@@ -1256,7 +1257,7 @@ static int try_to_grab_pending(struct wo
+@@ -1285,7 +1286,7 @@ static int try_to_grab_pending(struct wo
local_unlock_irqrestore(pendingb_lock, *flags);
if (work_is_canceling(work))
return -ENOENT;
diff --git a/patches/workqueue-distangle-from-rq-lock.patch b/patches/workqueue-distangle-from-rq-lock.patch
index b243acb8abdfc6..30d1fd1d1b2152 100644
--- a/patches/workqueue-distangle-from-rq-lock.patch
+++ b/patches/workqueue-distangle-from-rq-lock.patch
@@ -155,7 +155,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
--- a/kernel/workqueue.c
+++ b/kernel/workqueue.c
-@@ -821,44 +821,31 @@ static void wake_up_worker(struct worker
+@@ -850,44 +850,31 @@ static void wake_up_worker(struct worker
}
/**
@@ -212,7 +212,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
struct worker_pool *pool;
/*
-@@ -867,14 +854,15 @@ struct task_struct *wq_worker_sleeping(s
+@@ -896,14 +883,15 @@ struct task_struct *wq_worker_sleeping(s
* checking NOT_RUNNING.
*/
if (worker->flags & WORKER_NOT_RUNNING)
@@ -232,7 +232,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
/*
* The counterpart of the following dec_and_test, implied mb,
* worklist not empty test sequence is in insert_work().
-@@ -887,9 +875,12 @@ struct task_struct *wq_worker_sleeping(s
+@@ -916,9 +904,12 @@ struct task_struct *wq_worker_sleeping(s
* lock is safe.
*/
if (atomic_dec_and_test(&pool->nr_running) &&
diff --git a/patches/workqueue-prevent-deadlock-stall.patch b/patches/workqueue-prevent-deadlock-stall.patch
index 4254cf6239f6a8..765da8c9d53023 100644
--- a/patches/workqueue-prevent-deadlock-stall.patch
+++ b/patches/workqueue-prevent-deadlock-stall.patch
@@ -111,7 +111,7 @@ Cc: Steven Rostedt <rostedt@goodmis.org>
#ifdef CONFIG_DEBUG_OBJECTS_WORK
static struct debug_obj_descr work_debug_descr;
-@@ -814,10 +844,16 @@ static struct worker *first_idle_worker(
+@@ -843,10 +873,16 @@ static struct worker *first_idle_worker(
*/
static void wake_up_worker(struct worker_pool *pool)
{
@@ -129,7 +129,7 @@ Cc: Steven Rostedt <rostedt@goodmis.org>
}
/**
-@@ -845,7 +881,7 @@ void wq_worker_running(struct task_struc
+@@ -874,7 +910,7 @@ void wq_worker_running(struct task_struc
*/
void wq_worker_sleeping(struct task_struct *task)
{
@@ -138,7 +138,7 @@ Cc: Steven Rostedt <rostedt@goodmis.org>
struct worker_pool *pool;
/*
-@@ -862,25 +898,18 @@ void wq_worker_sleeping(struct task_stru
+@@ -891,25 +927,18 @@ void wq_worker_sleeping(struct task_stru
return;
worker->sleeping = 1;
@@ -168,7 +168,7 @@ Cc: Steven Rostedt <rostedt@goodmis.org>
}
/**
-@@ -1571,7 +1600,9 @@ static void worker_enter_idle(struct wor
+@@ -1600,7 +1629,9 @@ static void worker_enter_idle(struct wor
worker->last_active = jiffies;
/* idle_list is LIFO */
@@ -178,7 +178,7 @@ Cc: Steven Rostedt <rostedt@goodmis.org>
if (too_many_workers(pool) && !timer_pending(&pool->idle_timer))
mod_timer(&pool->idle_timer, jiffies + IDLE_WORKER_TIMEOUT);
-@@ -1604,7 +1635,9 @@ static void worker_leave_idle(struct wor
+@@ -1633,7 +1664,9 @@ static void worker_leave_idle(struct wor
return;
worker_clr_flags(worker, WORKER_IDLE);
pool->nr_idle--;
@@ -188,7 +188,7 @@ Cc: Steven Rostedt <rostedt@goodmis.org>
}
static struct worker *alloc_worker(int node)
-@@ -1770,7 +1803,9 @@ static void destroy_worker(struct worker
+@@ -1799,7 +1832,9 @@ static void destroy_worker(struct worker
pool->nr_workers--;
pool->nr_idle--;
diff --git a/patches/workqueue-use-locallock.patch b/patches/workqueue-use-locallock.patch
index 44df5c5dedda3d..34761ce1f34141 100644
--- a/patches/workqueue-use-locallock.patch
+++ b/patches/workqueue-use-locallock.patch
@@ -29,7 +29,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
static int worker_thread(void *__worker);
static void workqueue_sysfs_unregister(struct workqueue_struct *wq);
-@@ -1082,9 +1085,9 @@ static void put_pwq_unlocked(struct pool
+@@ -1111,9 +1114,9 @@ static void put_pwq_unlocked(struct pool
* As both pwqs and pools are RCU protected, the
* following lock operations are safe.
*/
@@ -41,7 +41,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
}
}
-@@ -1186,7 +1189,7 @@ static int try_to_grab_pending(struct wo
+@@ -1215,7 +1218,7 @@ static int try_to_grab_pending(struct wo
struct worker_pool *pool;
struct pool_workqueue *pwq;
@@ -50,7 +50,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
/* try to steal the timer if it exists */
if (is_dwork) {
-@@ -1250,7 +1253,7 @@ static int try_to_grab_pending(struct wo
+@@ -1279,7 +1282,7 @@ static int try_to_grab_pending(struct wo
spin_unlock(&pool->lock);
fail:
rcu_read_unlock();
@@ -59,7 +59,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
if (work_is_canceling(work))
return -ENOENT;
cpu_relax();
-@@ -1322,7 +1325,7 @@ static void __queue_work(int cpu, struct
+@@ -1351,7 +1354,7 @@ static void __queue_work(int cpu, struct
* queued or lose PENDING. Grabbing PENDING and queueing should
* happen with IRQ disabled.
*/
@@ -68,7 +68,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
debug_work_activate(work);
-@@ -1427,14 +1430,14 @@ bool queue_work_on(int cpu, struct workq
+@@ -1456,14 +1459,14 @@ bool queue_work_on(int cpu, struct workq
bool ret = false;
unsigned long flags;
@@ -85,7 +85,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
return ret;
}
EXPORT_SYMBOL(queue_work_on);
-@@ -1501,14 +1504,14 @@ bool queue_delayed_work_on(int cpu, stru
+@@ -1530,14 +1533,14 @@ bool queue_delayed_work_on(int cpu, stru
unsigned long flags;
/* read the comment in __queue_work() */
@@ -102,7 +102,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
return ret;
}
EXPORT_SYMBOL(queue_delayed_work_on);
-@@ -1543,7 +1546,7 @@ bool mod_delayed_work_on(int cpu, struct
+@@ -1572,7 +1575,7 @@ bool mod_delayed_work_on(int cpu, struct
if (likely(ret >= 0)) {
__queue_delayed_work(cpu, wq, dwork, delay);
@@ -111,7 +111,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
}
/* -ENOENT from try_to_grab_pending() becomes %true */
-@@ -2817,7 +2820,7 @@ static bool __cancel_work_timer(struct w
+@@ -2846,7 +2849,7 @@ static bool __cancel_work_timer(struct w
/* tell other tasks trying to grab @work to back off */
mark_work_canceling(work);
@@ -120,7 +120,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
flush_work(work);
clear_work_data(work);
-@@ -2872,10 +2875,10 @@ EXPORT_SYMBOL_GPL(cancel_work_sync);
+@@ -2901,10 +2904,10 @@ EXPORT_SYMBOL_GPL(cancel_work_sync);
*/
bool flush_delayed_work(struct delayed_work *dwork)
{
@@ -133,7 +133,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
return flush_work(&dwork->work);
}
EXPORT_SYMBOL(flush_delayed_work);
-@@ -2910,7 +2913,7 @@ bool cancel_delayed_work(struct delayed_
+@@ -2939,7 +2942,7 @@ bool cancel_delayed_work(struct delayed_
set_work_pool_and_clear_pending(&dwork->work,
get_work_pool_id(&dwork->work));
diff --git a/patches/workqueue-use-rcu.patch b/patches/workqueue-use-rcu.patch
index 3a156db3d78380..8a70b6cb026ce8 100644
--- a/patches/workqueue-use-rcu.patch
+++ b/patches/workqueue-use-rcu.patch
@@ -104,7 +104,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
* read locked.
* If the pwq needs to be used beyond the locking in effect, the caller is
* responsible for guaranteeing that the pwq stays online.
-@@ -672,8 +672,8 @@ static struct pool_workqueue *get_work_p
+@@ -701,8 +701,8 @@ static struct pool_workqueue *get_work_p
* @work: the work item of interest
*
* Pools are created and destroyed under wq_pool_mutex, and allows read
@@ -115,7 +115,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
*
* All fields of the returned pool are accessible as long as the above
* mentioned locking is in effect. If the returned pool needs to be used
-@@ -1079,7 +1079,7 @@ static void put_pwq_unlocked(struct pool
+@@ -1108,7 +1108,7 @@ static void put_pwq_unlocked(struct pool
{
if (pwq) {
/*
@@ -124,7 +124,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
* following lock operations are safe.
*/
spin_lock_irq(&pwq->pool->lock);
-@@ -1205,6 +1205,7 @@ static int try_to_grab_pending(struct wo
+@@ -1234,6 +1234,7 @@ static int try_to_grab_pending(struct wo
if (!test_and_set_bit(WORK_STRUCT_PENDING_BIT, work_data_bits(work)))
return 0;
@@ -132,7 +132,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
/*
* The queueing is in progress, or it is already queued. Try to
* steal it from ->worklist without clearing WORK_STRUCT_PENDING.
-@@ -1243,10 +1244,12 @@ static int try_to_grab_pending(struct wo
+@@ -1272,10 +1273,12 @@ static int try_to_grab_pending(struct wo
set_work_pool_and_keep_pending(work, pool->id);
spin_unlock(&pool->lock);
@@ -145,7 +145,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
local_irq_restore(*flags);
if (work_is_canceling(work))
return -ENOENT;
-@@ -1327,6 +1330,8 @@ static void __queue_work(int cpu, struct
+@@ -1356,6 +1359,8 @@ static void __queue_work(int cpu, struct
if (unlikely(wq->flags & __WQ_DRAINING) &&
WARN_ON_ONCE(!is_chained_work(wq)))
return;
@@ -154,7 +154,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
retry:
if (req_cpu == WORK_CPU_UNBOUND)
cpu = raw_smp_processor_id();
-@@ -1383,10 +1388,8 @@ static void __queue_work(int cpu, struct
+@@ -1412,10 +1417,8 @@ static void __queue_work(int cpu, struct
/* pwq determined, queue */
trace_workqueue_queue_work(req_cpu, pwq, work);
@@ -167,7 +167,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
pwq->nr_in_flight[pwq->work_color]++;
work_flags = work_color_to_flags(pwq->work_color);
-@@ -1402,7 +1405,9 @@ static void __queue_work(int cpu, struct
+@@ -1431,7 +1434,9 @@ static void __queue_work(int cpu, struct
insert_work(pwq, work, worklist, work_flags);
@@ -177,7 +177,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
}
/**
-@@ -2687,14 +2692,14 @@ static bool start_flush_work(struct work
+@@ -2716,14 +2721,14 @@ static bool start_flush_work(struct work
might_sleep();
@@ -195,7 +195,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
/* see the comment in try_to_grab_pending() with the same code */
pwq = get_work_pwq(work);
if (pwq) {
-@@ -2721,10 +2726,11 @@ static bool start_flush_work(struct work
+@@ -2750,10 +2755,11 @@ static bool start_flush_work(struct work
else
lock_map_acquire_read(&pwq->wq->lockdep_map);
lock_map_release(&pwq->wq->lockdep_map);
@@ -208,7 +208,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
return false;
}
-@@ -3132,7 +3138,7 @@ static void rcu_free_pool(struct rcu_hea
+@@ -3161,7 +3167,7 @@ static void rcu_free_pool(struct rcu_hea
* put_unbound_pool - put a worker_pool
* @pool: worker_pool to put
*
@@ -217,7 +217,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
* safe manner. get_unbound_pool() calls this function on its failure path
* and this function should be able to release pools which went through,
* successfully or not, init_worker_pool().
-@@ -3186,8 +3192,8 @@ static void put_unbound_pool(struct work
+@@ -3215,8 +3221,8 @@ static void put_unbound_pool(struct work
del_timer_sync(&pool->idle_timer);
del_timer_sync(&pool->mayday_timer);
@@ -228,7 +228,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
}
/**
-@@ -3294,14 +3300,14 @@ static void pwq_unbound_release_workfn(s
+@@ -3323,14 +3329,14 @@ static void pwq_unbound_release_workfn(s
put_unbound_pool(pool);
mutex_unlock(&wq_pool_mutex);
@@ -245,7 +245,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
}
/**
-@@ -3954,7 +3960,7 @@ void destroy_workqueue(struct workqueue_
+@@ -3983,7 +3989,7 @@ void destroy_workqueue(struct workqueue_
* The base ref is never dropped on per-cpu pwqs. Directly
* schedule RCU free.
*/
@@ -254,7 +254,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
} else {
/*
* We're the sole accessor of @wq at this point. Directly
-@@ -4047,7 +4053,8 @@ bool workqueue_congested(int cpu, struct
+@@ -4076,7 +4082,8 @@ bool workqueue_congested(int cpu, struct
struct pool_workqueue *pwq;
bool ret;
@@ -264,7 +264,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
if (cpu == WORK_CPU_UNBOUND)
cpu = smp_processor_id();
-@@ -4058,7 +4065,8 @@ bool workqueue_congested(int cpu, struct
+@@ -4087,7 +4094,8 @@ bool workqueue_congested(int cpu, struct
pwq = unbound_pwq_by_node(wq, cpu_to_node(cpu));
ret = !list_empty(&pwq->delayed_works);
@@ -274,7 +274,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
return ret;
}
-@@ -4084,15 +4092,15 @@ unsigned int work_busy(struct work_struc
+@@ -4113,15 +4121,15 @@ unsigned int work_busy(struct work_struc
if (work_pending(work))
ret |= WORK_BUSY_PENDING;
@@ -294,7 +294,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
return ret;
}
-@@ -4281,7 +4289,7 @@ void show_workqueue_state(void)
+@@ -4310,7 +4318,7 @@ void show_workqueue_state(void)
unsigned long flags;
int pi;
@@ -303,7 +303,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
pr_info("Showing busy workqueues and worker pools:\n");
-@@ -4332,7 +4340,7 @@ void show_workqueue_state(void)
+@@ -4361,7 +4369,7 @@ void show_workqueue_state(void)
spin_unlock_irqrestore(&pool->lock, flags);
}
@@ -312,7 +312,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
}
/*
-@@ -4682,16 +4690,16 @@ bool freeze_workqueues_busy(void)
+@@ -4711,16 +4719,16 @@ bool freeze_workqueues_busy(void)
* nr_active is monotonically decreasing. It's safe
* to peek without lock.
*/
@@ -332,7 +332,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
}
out_unlock:
mutex_unlock(&wq_pool_mutex);
-@@ -4881,7 +4889,8 @@ static ssize_t wq_pool_ids_show(struct d
+@@ -4910,7 +4918,8 @@ static ssize_t wq_pool_ids_show(struct d
const char *delim = "";
int node, written = 0;
@@ -342,7 +342,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
for_each_node(node) {
written += scnprintf(buf + written, PAGE_SIZE - written,
"%s%d:%d", delim, node,
-@@ -4889,7 +4898,8 @@ static ssize_t wq_pool_ids_show(struct d
+@@ -4918,7 +4927,8 @@ static ssize_t wq_pool_ids_show(struct d
delim = " ";
}
written += scnprintf(buf + written, PAGE_SIZE - written, "\n");
diff --git a/patches/x86-kvm-require-const-tsc-for-rt.patch b/patches/x86-kvm-require-const-tsc-for-rt.patch
index 0df27e3f7e2a7e..5fa84b0893b128 100644
--- a/patches/x86-kvm-require-const-tsc-for-rt.patch
+++ b/patches/x86-kvm-require-const-tsc-for-rt.patch
@@ -14,7 +14,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
-@@ -5789,6 +5789,13 @@ int kvm_arch_init(void *opaque)
+@@ -5788,6 +5788,13 @@ int kvm_arch_init(void *opaque)
goto out;
}