summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Andrzej Siewior <bigeasy@linutronix.de>2021-08-16 10:00:20 +0200
committerSebastian Andrzej Siewior <bigeasy@linutronix.de>2021-08-16 10:00:20 +0200
commit1e5923812d3108f98464a1d9515c1b9c1550fd62 (patch)
tree31273c57572c03c832043c95e45bfd0ea24c10a4
parent21e34c207c446b467026bdbada46b8c7ca818021 (diff)
downloadlinux-rt-1e5923812d3108f98464a1d9515c1b9c1550fd62.tar.gz
[ANNOUNCE] v5.14-rc6-rt9v5.14-rc6-rt9-patches
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
-rw-r--r--patches/0001-io-wq-remove-GFP_ATOMIC-allocation-off-schedule-out-.patch37
-rw-r--r--patches/0002-io-wq-Don-t-mix-raw_spinlock_irq-spin_lock_irq.patch19
-rw-r--r--patches/Add_localversion_for_-RT_release.patch2
3 files changed, 28 insertions, 30 deletions
diff --git a/patches/0001-io-wq-remove-GFP_ATOMIC-allocation-off-schedule-out-.patch b/patches/0001-io-wq-remove-GFP_ATOMIC-allocation-off-schedule-out-.patch
index 893a0b0163d2..e07fe498e02c 100644
--- a/patches/0001-io-wq-remove-GFP_ATOMIC-allocation-off-schedule-out-.patch
+++ b/patches/0001-io-wq-remove-GFP_ATOMIC-allocation-off-schedule-out-.patch
@@ -52,8 +52,8 @@ Tested-by: Daniel Wagner <dwagner@suse.de>
Link: https://lore.kernel.org/r/a673a130-e0e4-5aa8-4165-f35d1262fc6a@kernel.dk
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
---
- fs/io-wq.c | 75 ++++++++++++++++++++++++++++++++++---------------------------
- 1 file changed, 42 insertions(+), 33 deletions(-)
+ fs/io-wq.c | 73 ++++++++++++++++++++++++++++++++++---------------------------
+ 1 file changed, 41 insertions(+), 32 deletions(-)
--- a/fs/io-wq.c
+++ b/fs/io-wq.c
@@ -68,7 +68,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
struct rcu_head rcu;
};
-@@ -270,50 +274,54 @@ static void io_wqe_inc_running(struct io
+@@ -272,24 +276,18 @@ static void io_wqe_inc_running(struct io
atomic_inc(&acct->nr_running);
}
@@ -85,29 +85,36 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
struct io_wq *wq;
struct io_wqe *wqe;
struct io_wqe_acct *acct;
+ bool do_create = false, first = false;
- cwd = container_of(cb, struct create_worker_data, work);
- wqe = cwd->wqe;
-- wq = wqe->wq;
-- acct = &wqe->acct[cwd->index];
+ worker = container_of(cb, struct io_worker, create_work);
+ wqe = worker->wqe;
-+ wq = worker->wq;
+ wq = wqe->wq;
+- acct = &wqe->acct[cwd->index];
+ acct = &wqe->acct[worker->create_index];
raw_spin_lock_irq(&wqe->lock);
- if (acct->nr_workers < acct->max_workers)
- acct->nr_workers++;
+ if (acct->nr_workers < acct->max_workers) {
+ if (!acct->nr_workers)
+@@ -299,33 +297,43 @@ static void create_worker_cb(struct call
+ }
raw_spin_unlock_irq(&wqe->lock);
-- create_io_worker(wq, cwd->wqe, cwd->index);
+ if (do_create) {
+- create_io_worker(wq, wqe, cwd->index, first);
++ create_io_worker(wq, wqe, worker->create_index, first);
+ } else {
+ atomic_dec(&acct->nr_running);
+ io_worker_ref_put(wq);
+ }
- kfree(cwd);
-+ create_io_worker(wq, wqe, worker->create_index);
+ clear_bit_unlock(0, &worker->create_state);
+ io_worker_release(worker);
}
-static void io_queue_worker_create(struct io_wqe *wqe, struct io_wqe_acct *acct)
-+static void io_queue_worker_create(struct io_wqe *wqe, struct io_worker
-+ *worker, struct io_wqe_acct *acct)
++static void io_queue_worker_create(struct io_wqe *wqe, struct io_worker *worker,
++ struct io_wqe_acct *acct)
{
- struct create_worker_data *cwd;
struct io_wq *wq = wqe->wq;
@@ -148,7 +155,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
fail:
atomic_dec(&acct->nr_running);
io_worker_ref_put(wq);
-@@ -331,7 +339,7 @@ static void io_wqe_dec_running(struct io
+@@ -343,7 +351,7 @@ static void io_wqe_dec_running(struct io
if (atomic_dec_and_test(&acct->nr_running) && io_wqe_run_queue(wqe)) {
atomic_inc(&acct->nr_running);
atomic_inc(&wqe->wq->worker_refs);
@@ -157,7 +164,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
}
}
-@@ -992,12 +1000,12 @@ struct io_wq *io_wq_create(unsigned boun
+@@ -1004,12 +1012,12 @@ struct io_wq *io_wq_create(unsigned boun
static bool io_task_work_match(struct callback_head *cb, void *data)
{
@@ -173,7 +180,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
}
void io_wq_exit_start(struct io_wq *wq)
-@@ -1014,12 +1022,13 @@ static void io_wq_exit_workers(struct io
+@@ -1026,12 +1034,13 @@ static void io_wq_exit_workers(struct io
return;
while ((cb = task_work_cancel_match(wq->task, io_task_work_match, wq)) != NULL) {
diff --git a/patches/0002-io-wq-Don-t-mix-raw_spinlock_irq-spin_lock_irq.patch b/patches/0002-io-wq-Don-t-mix-raw_spinlock_irq-spin_lock_irq.patch
index 67f36e9fe4ca..84d9ebdea7d6 100644
--- a/patches/0002-io-wq-Don-t-mix-raw_spinlock_irq-spin_lock_irq.patch
+++ b/patches/0002-io-wq-Don-t-mix-raw_spinlock_irq-spin_lock_irq.patch
@@ -5,21 +5,12 @@ Subject: [PATCH] io-wq: Don't mix raw_spinlock_irq() & spin_lock_irq().
https://lkml.kernel.org/r/7c946918-ae0d-6195-6a78-b019f9bc1fd3@kernel.dk
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
---
- fs/io-wq.c | 10 +++++-----
- 1 file changed, 5 insertions(+), 5 deletions(-)
+ fs/io-wq.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
--- a/fs/io-wq.c
+++ b/fs/io-wq.c
-@@ -283,7 +283,7 @@ static void create_worker_cb(struct call
-
- worker = container_of(cb, struct io_worker, create_work);
- wqe = worker->wqe;
-- wq = worker->wq;
-+ wq = worker->wqe->wq;
- acct = &wqe->acct[worker->create_index];
- raw_spin_lock_irq(&wqe->lock);
- if (acct->nr_workers < acct->max_workers)
-@@ -401,7 +401,7 @@ static void io_wait_on_hash(struct io_wq
+@@ -414,7 +414,7 @@ static void io_wait_on_hash(struct io_wq
{
struct io_wq *wq = wqe->wq;
@@ -28,7 +19,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
if (list_empty(&wqe->wait.entry)) {
__add_wait_queue(&wq->hash->wait, &wqe->wait);
if (!test_bit(hash, &wq->hash->map)) {
-@@ -409,7 +409,7 @@ static void io_wait_on_hash(struct io_wq
+@@ -422,7 +422,7 @@ static void io_wait_on_hash(struct io_wq
list_del_init(&wqe->wait.entry);
}
}
@@ -37,7 +28,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
}
static struct io_wq_work *io_get_next_work(struct io_wqe *wqe)
-@@ -447,9 +447,9 @@ static struct io_wq_work *io_get_next_wo
+@@ -460,9 +460,9 @@ static struct io_wq_work *io_get_next_wo
}
if (stall_hash != -1U) {
diff --git a/patches/Add_localversion_for_-RT_release.patch b/patches/Add_localversion_for_-RT_release.patch
index c8061e5a5d82..8b36fd73f91a 100644
--- a/patches/Add_localversion_for_-RT_release.patch
+++ b/patches/Add_localversion_for_-RT_release.patch
@@ -15,4 +15,4 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
--- /dev/null
+++ b/localversion-rt
@@ -0,0 +1 @@
-+-rt8
++-rt9