aboutsummaryrefslogtreecommitdiffstats
path: root/features/rt/md-raid5-Make-raid5_percpu-handling-RT-aware.patch
diff options
context:
space:
mode:
Diffstat (limited to 'features/rt/md-raid5-Make-raid5_percpu-handling-RT-aware.patch')
-rw-r--r--features/rt/md-raid5-Make-raid5_percpu-handling-RT-aware.patch68
1 files changed, 0 insertions, 68 deletions
diff --git a/features/rt/md-raid5-Make-raid5_percpu-handling-RT-aware.patch b/features/rt/md-raid5-Make-raid5_percpu-handling-RT-aware.patch
deleted file mode 100644
index 43380924..00000000
--- a/features/rt/md-raid5-Make-raid5_percpu-handling-RT-aware.patch
+++ /dev/null
@@ -1,68 +0,0 @@
-From 28893cffb6465718d2196b201ec4dc9e41aca776 Mon Sep 17 00:00:00 2001
-From: Thomas Gleixner <tglx@linutronix.de>
-Date: Tue, 6 Apr 2010 16:51:31 +0200
-Subject: [PATCH 135/191] md: raid5: Make raid5_percpu handling RT aware
-
-__raid_run_ops() disables preemption with get_cpu() around the access
-to the raid5_percpu variables. That causes scheduling while atomic
-spews on RT.
-
-Serialize the access to the percpu data with a lock and keep the code
-preemptible.
-
-Reported-by: Udo van den Heuvel <udovdh@xs4all.nl>
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Tested-by: Udo van den Heuvel <udovdh@xs4all.nl>
----
- drivers/md/raid5.c | 7 +++++--
- drivers/md/raid5.h | 1 +
- 2 files changed, 6 insertions(+), 2 deletions(-)
-
-diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
-index 5d57a5bd171f..86d6a676a509 100644
---- a/drivers/md/raid5.c
-+++ b/drivers/md/raid5.c
-@@ -2216,8 +2216,9 @@ static void raid_run_ops(struct stripe_head *sh, unsigned long ops_request)
- struct raid5_percpu *percpu;
- unsigned long cpu;
-
-- cpu = get_cpu();
-+ cpu = get_cpu_light();
- percpu = per_cpu_ptr(conf->percpu, cpu);
-+ spin_lock(&percpu->lock);
- if (test_bit(STRIPE_OP_BIOFILL, &ops_request)) {
- ops_run_biofill(sh);
- overlap_clear++;
-@@ -2276,7 +2277,8 @@ static void raid_run_ops(struct stripe_head *sh, unsigned long ops_request)
- if (test_and_clear_bit(R5_Overlap, &dev->flags))
- wake_up(&sh->raid_conf->wait_for_overlap);
- }
-- put_cpu();
-+ spin_unlock(&percpu->lock);
-+ put_cpu_light();
- }
-
- static void free_stripe(struct kmem_cache *sc, struct stripe_head *sh)
-@@ -7079,6 +7081,7 @@ static int raid456_cpu_up_prepare(unsigned int cpu, struct hlist_node *node)
- __func__, cpu);
- return -ENOMEM;
- }
-+ spin_lock_init(&per_cpu_ptr(conf->percpu, cpu)->lock);
- return 0;
- }
-
-diff --git a/drivers/md/raid5.h b/drivers/md/raid5.h
-index 5c05acf20e1f..665fe138ab4f 100644
---- a/drivers/md/raid5.h
-+++ b/drivers/md/raid5.h
-@@ -635,6 +635,7 @@ struct r5conf {
- int recovery_disabled;
- /* per cpu variables */
- struct raid5_percpu {
-+ spinlock_t lock; /* Protection for -RT */
- struct page *spare_page; /* Used when checking P/Q in raid6 */
- void *scribble; /* space for constructing buffer
- * lists and performing address
---
-2.19.1
-