core/linux-kirkwood fix a bug in BFQ and kernel >=3.10.8

This commit is contained in:
moonman 2013-08-22 03:07:19 -05:00
parent 812474fdc9
commit 7c16102cdf
2 changed files with 65 additions and 3 deletions

View file

@ -0,0 +1,59 @@
From 994451c7668678f1bf3ec86345bef1c1d549ba45 Mon Sep 17 00:00:00 2001
From: Arianna Avanzini <avanzini.arianna@gmail.com>
Date: Wed, 24 Jul 2013 21:43:47 +0200
Subject: [PATCH] block: Switch from BFQ-v6r2 for 3.10.0 to BFQ-v6r2 for
3.10.8-rc1.
---
block/bfq-iosched.c | 18 +++++++++++++++---
1 file changed, 15 insertions(+), 3 deletions(-)
diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c
index bc57923..bbe79fb 100644
--- a/block/bfq-iosched.c
+++ b/block/bfq-iosched.c
@@ -2930,14 +2930,22 @@ static void bfq_exit_queue(struct elevator_queue *e)
kfree(bfqd);
}
-static int bfq_init_queue(struct request_queue *q)
+static int bfq_init_queue(struct request_queue *q, struct elevator_type *e)
{
struct bfq_group *bfqg;
struct bfq_data *bfqd;
+ struct elevator_queue *eq;
+
+ eq = elevator_alloc(q, e);
+ if (eq == NULL)
+ return -ENOMEM;
bfqd = kmalloc_node(sizeof(*bfqd), GFP_KERNEL | __GFP_ZERO, q->node);
- if (bfqd == NULL)
+ if (bfqd == NULL) {
+ kobject_put(&eq->kobj);
return -ENOMEM;
+ }
+ eq->elevator_data = bfqd;
/*
* Our fallback bfqq if bfq_find_alloc_queue() runs into OOM issues.
@@ -2948,11 +2956,15 @@ static int bfq_init_queue(struct request_queue *q)
atomic_inc(&bfqd->oom_bfqq.ref);
bfqd->queue = q;
- q->elevator->elevator_data = bfqd;
+
+ spin_lock_irq(q->queue_lock);
+ q->elevator = eq;
+ spin_unlock_irq(q->queue_lock);
bfqg = bfq_alloc_root_group(bfqd, q->node);
if (bfqg == NULL) {
kfree(bfqd);
+ kobject_put(&eq->kobj);
return -ENOMEM;
}
--
1.8.1.4

View file

@ -9,7 +9,7 @@ pkgname=('linux-kirkwood' 'linux-headers-kirkwood')
_kernelname=${pkgname#linux}
_basekernel=3.10.9
pkgver=${_basekernel}
pkgrel=1
pkgrel=2
cryptover=1.6
bfqver=v6r2
arch=('arm')
@ -26,7 +26,8 @@ source=("ftp://ftp.kernel.org/pub/linux/kernel/v3.x/linux-${_basekernel}.tar.xz"
"http://download.gna.org/cryptodev-linux/cryptodev-linux-${cryptover}.tar.gz"
"http://algo.ing.unimo.it/people/paolo/disk_sched/patches/$(echo $_basekernel |cut -c 1-4).0-${bfqver}/0001-block-cgroups-kconfig-build-bits-for-BFQ-${bfqver}-$(echo $_basekernel | cut -c 1-4).patch"
"http://algo.ing.unimo.it/people/paolo/disk_sched/patches/$(echo $_basekernel |cut -c 1-4).0-${bfqver}/0002-block-introduce-the-BFQ-${bfqver}-I-O-sched-for-$(echo $_basekernel |cut -c 1-4).patch"
"http://algo.ing.unimo.it/people/paolo/disk_sched/patches/$(echo $_basekernel |cut -c 1-4).0-${bfqver}/0003-block-bfq-add-Early-Queue-Merge-EQM-to-BFQ-${bfqver}-for-$(echo $_basekernel |cut -c 1-4).0.patch")
"http://algo.ing.unimo.it/people/paolo/disk_sched/patches/$(echo $_basekernel |cut -c 1-4).0-${bfqver}/0003-block-bfq-add-Early-Queue-Merge-EQM-to-BFQ-${bfqver}-for-$(echo $_basekernel |cut -c 1-4).0.patch"
"0001-block-Switch-from-BFQ-v6r2-for-3.10.0-to-BFQ-v6r2-fo.patch")
md5sums=('28d1e1117c30fdd861f70ac0f9b677aa'
'6aa079410d6bd76847d4390a3da4db47'
@ -37,7 +38,8 @@ md5sums=('28d1e1117c30fdd861f70ac0f9b677aa'
'eade38998313c25fd7934719cdf8a2ea'
'f1a179be96469b27c21d114b55b521cb'
'a929da16edbd480d7d8f90a15eb8a548'
'b9e7cbbb21bbe08a4baea9f7e8bc8083')
'b9e7cbbb21bbe08a4baea9f7e8bc8083'
'ae3c4e30dc31f33abf7897c2a842f130')
build() {
msg "Patches"
@ -70,6 +72,7 @@ msg2 "Add BFQ patches"
patch -Np1 -i "${srcdir}/0001-block-cgroups-kconfig-build-bits-for-BFQ-${bfqver}-$(echo $_basekernel | cut -c 1-4).patch"
patch -Np1 -i "${srcdir}/0002-block-introduce-the-BFQ-${bfqver}-I-O-sched-for-$(echo $_basekernel |cut -c 1-4).patch"
patch -Np1 -i "${srcdir}/0003-block-bfq-add-Early-Queue-Merge-EQM-to-BFQ-${bfqver}-for-$(echo $_basekernel |cut -c 1-4).0.patch"
patch -Np1 -i "${srcdir}/0001-block-Switch-from-BFQ-v6r2-for-3.10.0-to-BFQ-v6r2-fo.patch"
# add latest fixes from stable queue, if needed
# http://git.kernel.org/?p=linux/kernel/git/stable/stable-queue.git