diff options
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.patch | 68 |
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 - |