[rt] Update to 3.4.2-rt10 (no functional change)
svn path=/dists/trunk/linux/; revision=19163
This commit is contained in:
parent
57e93f5d03
commit
aec4f5775d
|
@ -8,6 +8,7 @@ linux (3.4.3-1~experimental.1) UNRELEASED; urgency=low
|
|||
* [ia64] Export <asm/cmpxchg.h> to userland (fixes FTBFS)
|
||||
* [x86] Enable BATTERY_SBS as module (Closes: #662902)
|
||||
* team: Enable NET_TEAM_MODE_LOADBALANCE as module
|
||||
* [rt] Update to 3.4.2-rt10 (no functional change)
|
||||
|
||||
-- Ben Hutchings <ben@decadent.org.uk> Thu, 07 Jun 2012 04:45:03 +0100
|
||||
|
||||
|
|
|
@ -1,20 +1,23 @@
|
|||
From: Ben Hutchings <ben@decadent.org.uk>
|
||||
Date: Thu, 31 May 2012 02:58:44 +0100
|
||||
Subject: [PATCH] Revert "workqueue: skip nr_running sanity check in
|
||||
From 176459e7ddb8f43845817a1c9341cacaeb9cad36 Mon Sep 17 00:00:00 2001
|
||||
From: Steven Rostedt <rostedt@goodmis.org>
|
||||
Date: Thu, 7 Jun 2012 09:49:40 -0400
|
||||
Subject: [001/254] Revert "workqueue: skip nr_running sanity check in
|
||||
worker_enter_idle() if trustee is active"
|
||||
|
||||
This reverts commit 5d79c6f64a904afc92a329f80abe693e3ae105fe.
|
||||
It conflicts with, and appears to be unnecessary for, the PREEMPT_RT
|
||||
series.
|
||||
This reverts commit 24312d34c95702e51240f58c073db30630170fbf.
|
||||
|
||||
Reported-by: Ibrahim Umar <iambaim@gmail.com>
|
||||
|
||||
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
|
||||
---
|
||||
kernel/workqueue.c | 9 ++-------
|
||||
1 file changed, 2 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/kernel/workqueue.c b/kernel/workqueue.c
|
||||
index 7947e16..bb425b1 100644
|
||||
index 7da267c..5abf42f 100644
|
||||
--- a/kernel/workqueue.c
|
||||
+++ b/kernel/workqueue.c
|
||||
@@ -1215,13 +1215,8 @@ static void worker_enter_idle(struct worker *worker)
|
||||
@@ -1210,13 +1210,8 @@ static void worker_enter_idle(struct worker *worker)
|
||||
} else
|
||||
wake_up_all(&gcwq->trustee_wait);
|
||||
|
||||
|
@ -30,6 +33,3 @@ index 7947e16..bb425b1 100644
|
|||
atomic_read(get_gcwq_nr_running(gcwq->cpu)));
|
||||
}
|
||||
|
||||
--
|
||||
1.7.10
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
Subject: slab, lockdep: Annotate all slab caches
|
||||
From 989ca95e14eeb781f5bb57334ab626cfe13d9ec7 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Zijlstra <a.p.zijlstra@chello.nl>
|
||||
Date: Mon Nov 28 19:51:51 CET 2011
|
||||
Date: Mon, 28 Nov 2011 19:51:51 +0100
|
||||
Subject: [002/254] slab, lockdep: Annotate all slab caches
|
||||
|
||||
Currently we only annotate the kmalloc caches, annotate all of them.
|
||||
|
||||
|
@ -17,10 +18,11 @@ Link: http://lkml.kernel.org/n/tip-10bey2cgpcvtbdkgigaoab8w@git.kernel.org
|
|||
---
|
||||
mm/slab.c | 52 ++++++++++++++++++++++++++++------------------------
|
||||
1 file changed, 28 insertions(+), 24 deletions(-)
|
||||
Index: linux-3.4/mm/slab.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/mm/slab.c
|
||||
+++ linux-3.4/mm/slab.c
|
||||
|
||||
diff --git a/mm/slab.c b/mm/slab.c
|
||||
index e901a36..1fd4b4d 100644
|
||||
--- a/mm/slab.c
|
||||
+++ b/mm/slab.c
|
||||
@@ -611,6 +611,12 @@ int slab_is_available(void)
|
||||
return g_cpucache_up >= EARLY;
|
||||
}
|
||||
|
@ -34,7 +36,7 @@ Index: linux-3.4/mm/slab.c
|
|||
#ifdef CONFIG_LOCKDEP
|
||||
|
||||
/*
|
||||
@@ -672,38 +678,41 @@ static void slab_set_debugobj_lock_class
|
||||
@@ -672,38 +678,41 @@ static void slab_set_debugobj_lock_classes(struct kmem_cache *cachep)
|
||||
slab_set_debugobj_lock_classes_node(cachep, node);
|
||||
}
|
||||
|
||||
|
@ -90,7 +92,7 @@ Index: linux-3.4/mm/slab.c
|
|||
{
|
||||
}
|
||||
|
||||
@@ -716,12 +725,6 @@ static void slab_set_debugobj_lock_class
|
||||
@@ -716,12 +725,6 @@ static void slab_set_debugobj_lock_classes(struct kmem_cache *cachep)
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -121,7 +123,7 @@ Index: linux-3.4/mm/slab.c
|
|||
mutex_unlock(&cache_chain_mutex);
|
||||
|
||||
/* Done! */
|
||||
@@ -2544,6 +2546,8 @@ kmem_cache_create (const char *name, siz
|
||||
@@ -2544,6 +2546,8 @@ kmem_cache_create (const char *name, size_t size, size_t align,
|
||||
slab_set_debugobj_lock_classes(cachep);
|
||||
}
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
Subject: x86: kprobes: Remove remove bogus preempt_enable
|
||||
From 225cd7102e5afa8216538cba9362a906d5343c05 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Thu, 17 Mar 2011 11:02:15 +0100
|
||||
Subject: [003/254] x86: kprobes: Remove remove bogus preempt_enable
|
||||
|
||||
The CONFIG_PREEMPT=n section of setup_singlestep() contains:
|
||||
|
||||
|
@ -15,11 +16,11 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
|||
arch/x86/kernel/kprobes.c | 1 -
|
||||
1 file changed, 1 deletion(-)
|
||||
|
||||
Index: linux-3.4/arch/x86/kernel/kprobes.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/x86/kernel/kprobes.c
|
||||
+++ linux-3.4/arch/x86/kernel/kprobes.c
|
||||
@@ -486,7 +486,6 @@ setup_singlestep(struct kprobe *p, struc
|
||||
diff --git a/arch/x86/kernel/kprobes.c b/arch/x86/kernel/kprobes.c
|
||||
index e213fc8..b9edf1a 100644
|
||||
--- a/arch/x86/kernel/kprobes.c
|
||||
+++ b/arch/x86/kernel/kprobes.c
|
||||
@@ -486,7 +486,6 @@ setup_singlestep(struct kprobe *p, struct pt_regs *regs, struct kprobe_ctlblk *k
|
||||
* stepping.
|
||||
*/
|
||||
regs->ip = (unsigned long)p->ainsn.insn;
|
|
@ -1,34 +1,35 @@
|
|||
From 59d39f2e52b8956a0d66e69ccd0aaeb80041c22d Mon Sep 17 00:00:00 2001
|
||||
From: Mike Galbraith <mgalbraith@suse.de>
|
||||
Date: Tue May 8 12:20:58 2012 +0200
|
||||
Subject: tick: Add tick skew boot option
|
||||
|
||||
Date: Tue, 8 May 2012 12:20:58 +0200
|
||||
Subject: [004/254] tick: Add tick skew boot option
|
||||
|
||||
Let the user decide whether power consumption or jitter is the
|
||||
more important consideration for their machines.
|
||||
|
||||
Quoting removal commit af5ab277ded04bd9bc6b048c5a2f0e7d70ef0867:
|
||||
|
||||
|
||||
"Historically, Linux has tried to make the regular timer tick on the
|
||||
various CPUs not happen at the same time, to avoid contention on
|
||||
xtime_lock.
|
||||
|
||||
|
||||
Nowadays, with the tickless kernel, this contention no longer happens
|
||||
since time keeping and updating are done differently. In addition,
|
||||
this skew is actually hurting power consumption in a measurable way on
|
||||
many-core systems."
|
||||
|
||||
|
||||
Problems:
|
||||
|
||||
|
||||
- Contrary to the above, systems do encounter contention on both
|
||||
xtime_lock and RCU structure locks when the tick is synchronized.
|
||||
|
||||
|
||||
- Moderate sized RT systems suffer intolerable jitter due to the tick
|
||||
being synchronized.
|
||||
|
||||
|
||||
- SGI reports the same for their large systems.
|
||||
|
||||
|
||||
- Fully utilized systems reap no power saving benefit from skew removal,
|
||||
but do suffer from resulting induced lock contention.
|
||||
|
||||
|
||||
- 0209f649 rcu: limit rcu_node leaf-level fanout
|
||||
This patch was born to combat lock contention which testing showed
|
||||
to have been _induced by_ skew removal. Skew the tick, contention
|
||||
|
@ -39,17 +40,16 @@ Problems:
|
|||
Signed-off-by: Mike Galbraith <mgalbraith@suse.de>
|
||||
Link: http://lkml.kernel.org/r/1336472458.21924.78.camel@marge.simpson.net
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
|
||||
---
|
||||
Documentation/kernel-parameters.txt | 9 +++++++++
|
||||
kernel/time/tick-sched.c | 18 ++++++++++++++++++
|
||||
2 files changed, 27 insertions(+)
|
||||
|
||||
Index: linux-3.4/Documentation/kernel-parameters.txt
|
||||
===================================================================
|
||||
--- linux-3.4.orig/Documentation/kernel-parameters.txt
|
||||
+++ linux-3.4/Documentation/kernel-parameters.txt
|
||||
@@ -2426,6 +2426,15 @@ bytes respectively. Such letter suffixes
|
||||
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
|
||||
index c1601e5..1e0150e 100644
|
||||
--- a/Documentation/kernel-parameters.txt
|
||||
+++ b/Documentation/kernel-parameters.txt
|
||||
@@ -2426,6 +2426,15 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
||||
|
||||
sched_debug [KNL] Enables verbose scheduler debug messages.
|
||||
|
||||
|
@ -65,11 +65,11 @@ Index: linux-3.4/Documentation/kernel-parameters.txt
|
|||
security= [SECURITY] Choose a security module to enable at boot.
|
||||
If this boot parameter is not specified, only the first
|
||||
security module asking for security registration will be
|
||||
Index: linux-3.4/kernel/time/tick-sched.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/kernel/time/tick-sched.c
|
||||
+++ linux-3.4/kernel/time/tick-sched.c
|
||||
@@ -814,6 +814,16 @@ static enum hrtimer_restart tick_sched_t
|
||||
diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c
|
||||
index 6a3a5b9..efd3866 100644
|
||||
--- a/kernel/time/tick-sched.c
|
||||
+++ b/kernel/time/tick-sched.c
|
||||
@@ -814,6 +814,16 @@ static enum hrtimer_restart tick_sched_timer(struct hrtimer *timer)
|
||||
return HRTIMER_RESTART;
|
||||
}
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
Subject: x86: hpet: Disable MSI on Lenovo W510
|
||||
From 7fcd0c26f510056502801b98c8aac381a5041813 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Fri, 30 Sep 2011 20:03:37 +0200
|
||||
Subject: [005/254] x86: hpet: Disable MSI on Lenovo W510
|
||||
|
||||
MSI based per cpu timers lose interrupts when intel_idle() is enabled
|
||||
- independent of the c-state. With idle=poll the problem cannot be
|
||||
|
@ -12,10 +13,10 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
|||
arch/x86/kernel/hpet.c | 27 +++++++++++++++++++++++++++
|
||||
1 file changed, 27 insertions(+)
|
||||
|
||||
Index: linux-3.4/arch/x86/kernel/hpet.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/x86/kernel/hpet.c
|
||||
+++ linux-3.4/arch/x86/kernel/hpet.c
|
||||
diff --git a/arch/x86/kernel/hpet.c b/arch/x86/kernel/hpet.c
|
||||
index ad0de0c..230a200 100644
|
||||
--- a/arch/x86/kernel/hpet.c
|
||||
+++ b/arch/x86/kernel/hpet.c
|
||||
@@ -8,6 +8,7 @@
|
||||
#include <linux/slab.h>
|
||||
#include <linux/hpet.h>
|
||||
|
@ -24,7 +25,7 @@ Index: linux-3.4/arch/x86/kernel/hpet.c
|
|||
#include <linux/cpu.h>
|
||||
#include <linux/pm.h>
|
||||
#include <linux/io.h>
|
||||
@@ -570,6 +571,30 @@ static void init_one_hpet_msi_clockevent
|
||||
@@ -570,6 +571,30 @@ static void init_one_hpet_msi_clockevent(struct hpet_dev *hdev, int cpu)
|
||||
#define RESERVE_TIMERS 0
|
||||
#endif
|
||||
|
||||
|
@ -55,7 +56,7 @@ Index: linux-3.4/arch/x86/kernel/hpet.c
|
|||
static void hpet_msi_capability_lookup(unsigned int start_timer)
|
||||
{
|
||||
unsigned int id;
|
||||
@@ -577,6 +602,8 @@ static void hpet_msi_capability_lookup(u
|
||||
@@ -577,6 +602,8 @@ static void hpet_msi_capability_lookup(unsigned int start_timer)
|
||||
unsigned int num_timers_used = 0;
|
||||
int i;
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
Subject: block: Shorten interrupt disabled regions
|
||||
From 4c4eaef1d39d975749f3c7da11aca53749b99052 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Wed, 22 Jun 2011 19:47:02 +0200
|
||||
Subject: [006/254] block: Shorten interrupt disabled regions
|
||||
|
||||
Moving the blk_sched_flush_plug() call out of the interrupt/preempt
|
||||
disabled region in the scheduler allows us to replace
|
||||
|
@ -46,11 +47,11 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
|||
block/blk-core.c | 20 ++++++++------------
|
||||
1 file changed, 8 insertions(+), 12 deletions(-)
|
||||
|
||||
Index: linux-3.4/block/blk-core.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/block/blk-core.c
|
||||
+++ linux-3.4/block/blk-core.c
|
||||
@@ -302,7 +302,11 @@ void __blk_run_queue(struct request_queu
|
||||
diff --git a/block/blk-core.c b/block/blk-core.c
|
||||
index 1f61b74..0d947d0 100644
|
||||
--- a/block/blk-core.c
|
||||
+++ b/block/blk-core.c
|
||||
@@ -302,7 +302,11 @@ void __blk_run_queue(struct request_queue *q)
|
||||
{
|
||||
if (unlikely(blk_queue_stopped(q)))
|
||||
return;
|
||||
|
@ -63,7 +64,7 @@ Index: linux-3.4/block/blk-core.c
|
|||
q->request_fn(q);
|
||||
}
|
||||
EXPORT_SYMBOL(__blk_run_queue);
|
||||
@@ -2779,11 +2783,11 @@ static void queue_unplugged(struct reque
|
||||
@@ -2779,11 +2783,11 @@ static void queue_unplugged(struct request_queue *q, unsigned int depth,
|
||||
* this lock).
|
||||
*/
|
||||
if (from_schedule) {
|
||||
|
@ -77,7 +78,7 @@ Index: linux-3.4/block/blk-core.c
|
|||
}
|
||||
|
||||
}
|
||||
@@ -2809,7 +2813,6 @@ static void flush_plug_callbacks(struct
|
||||
@@ -2809,7 +2813,6 @@ static void flush_plug_callbacks(struct blk_plug *plug)
|
||||
void blk_flush_plug_list(struct blk_plug *plug, bool from_schedule)
|
||||
{
|
||||
struct request_queue *q;
|
||||
|
@ -85,7 +86,7 @@ Index: linux-3.4/block/blk-core.c
|
|||
struct request *rq;
|
||||
LIST_HEAD(list);
|
||||
unsigned int depth;
|
||||
@@ -2830,11 +2833,6 @@ void blk_flush_plug_list(struct blk_plug
|
||||
@@ -2830,11 +2833,6 @@ void blk_flush_plug_list(struct blk_plug *plug, bool from_schedule)
|
||||
q = NULL;
|
||||
depth = 0;
|
||||
|
||||
|
@ -97,7 +98,7 @@ Index: linux-3.4/block/blk-core.c
|
|||
while (!list_empty(&list)) {
|
||||
rq = list_entry_rq(list.next);
|
||||
list_del_init(&rq->queuelist);
|
||||
@@ -2847,7 +2845,7 @@ void blk_flush_plug_list(struct blk_plug
|
||||
@@ -2847,7 +2845,7 @@ void blk_flush_plug_list(struct blk_plug *plug, bool from_schedule)
|
||||
queue_unplugged(q, depth, from_schedule);
|
||||
q = rq->q;
|
||||
depth = 0;
|
||||
|
@ -106,7 +107,7 @@ Index: linux-3.4/block/blk-core.c
|
|||
}
|
||||
|
||||
/*
|
||||
@@ -2874,8 +2872,6 @@ void blk_flush_plug_list(struct blk_plug
|
||||
@@ -2874,8 +2872,6 @@ void blk_flush_plug_list(struct blk_plug *plug, bool from_schedule)
|
||||
*/
|
||||
if (q)
|
||||
queue_unplugged(q, depth, from_schedule);
|
|
@ -1,6 +1,7 @@
|
|||
Subject: sched: Distangle worker accounting from rq-%3Elock
|
||||
From e4f147b16e6d02bb5b48247893c6df70bf018132 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Wed, 22 Jun 2011 19:47:03 +0200
|
||||
Subject: [007/254] sched: Distangle worker accounting from rq-%3Elock
|
||||
|
||||
The worker accounting for cpu bound workers is plugged into the core
|
||||
scheduler code and the wakeup code. This is not a hard requirement and
|
||||
|
@ -23,16 +24,16 @@ Cc: Linus Torvalds <torvalds@linux-foundation.org>
|
|||
Link: http://lkml.kernel.org/r/20110622174919.135236139@linutronix.de
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
---
|
||||
kernel/sched/core.c | 66 ++++++++++----------------------------------
|
||||
kernel/workqueue.c | 69 +++++++++++++++++++++--------------------------
|
||||
kernel/workqueue_sched.h | 5 +--
|
||||
3 files changed, 48 insertions(+), 92 deletions(-)
|
||||
kernel/sched/core.c | 66 +++++++++++----------------------------------
|
||||
kernel/workqueue.c | 67 +++++++++++++++++++++-------------------------
|
||||
kernel/workqueue_sched.h | 5 ++--
|
||||
3 files changed, 47 insertions(+), 91 deletions(-)
|
||||
|
||||
Index: linux-3.4/kernel/sched/core.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/kernel/sched/core.c
|
||||
+++ linux-3.4/kernel/sched/core.c
|
||||
@@ -1399,10 +1399,6 @@ static void ttwu_activate(struct rq *rq,
|
||||
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
|
||||
index e5212ae..f5f9134 100644
|
||||
--- a/kernel/sched/core.c
|
||||
+++ b/kernel/sched/core.c
|
||||
@@ -1399,10 +1399,6 @@ static void ttwu_activate(struct rq *rq, struct task_struct *p, int en_flags)
|
||||
{
|
||||
activate_task(rq, p, en_flags);
|
||||
p->on_rq = 1;
|
||||
|
@ -104,7 +105,7 @@ Index: linux-3.4/kernel/sched/core.c
|
|||
}
|
||||
switch_count = &prev->nvcsw;
|
||||
}
|
||||
@@ -3255,6 +3204,14 @@ static inline void sched_submit_work(str
|
||||
@@ -3255,6 +3204,14 @@ static inline void sched_submit_work(struct task_struct *tsk)
|
||||
{
|
||||
if (!tsk->state || tsk_is_pi_blocked(tsk))
|
||||
return;
|
||||
|
@ -119,7 +120,7 @@ Index: linux-3.4/kernel/sched/core.c
|
|||
/*
|
||||
* If we are going to sleep and we have plugged IO queued,
|
||||
* make sure to submit it to avoid deadlocks.
|
||||
@@ -3263,12 +3220,19 @@ static inline void sched_submit_work(str
|
||||
@@ -3263,12 +3220,19 @@ static inline void sched_submit_work(struct task_struct *tsk)
|
||||
blk_schedule_flush_plug(tsk);
|
||||
}
|
||||
|
||||
|
@ -139,10 +140,10 @@ Index: linux-3.4/kernel/sched/core.c
|
|||
}
|
||||
EXPORT_SYMBOL(schedule);
|
||||
|
||||
Index: linux-3.4/kernel/workqueue.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/kernel/workqueue.c
|
||||
+++ linux-3.4/kernel/workqueue.c
|
||||
diff --git a/kernel/workqueue.c b/kernel/workqueue.c
|
||||
index 5abf42f..50e0d00 100644
|
||||
--- a/kernel/workqueue.c
|
||||
+++ b/kernel/workqueue.c
|
||||
@@ -137,6 +137,7 @@ struct worker {
|
||||
unsigned int flags; /* X: flags */
|
||||
int id; /* I: worker id */
|
||||
|
@ -151,7 +152,7 @@ Index: linux-3.4/kernel/workqueue.c
|
|||
};
|
||||
|
||||
/*
|
||||
@@ -655,66 +656,58 @@ static void wake_up_worker(struct global
|
||||
@@ -655,66 +656,58 @@ static void wake_up_worker(struct global_cwq *gcwq)
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -212,14 +213,14 @@ Index: linux-3.4/kernel/workqueue.c
|
|||
if (worker->flags & WORKER_NOT_RUNNING)
|
||||
- return NULL;
|
||||
+ return;
|
||||
|
||||
- /* this can only happen on the local cpu */
|
||||
- BUG_ON(cpu != raw_smp_processor_id());
|
||||
+
|
||||
+ if (WARN_ON_ONCE(worker->sleeping))
|
||||
+ return;
|
||||
|
||||
- /* this can only happen on the local cpu */
|
||||
- BUG_ON(cpu != raw_smp_processor_id());
|
||||
+ worker->sleeping = 1;
|
||||
+
|
||||
|
||||
+ cpu = smp_processor_id();
|
||||
+ gcwq = get_gcwq(cpu);
|
||||
+ spin_lock_irq(&gcwq->lock);
|
||||
|
@ -233,11 +234,10 @@ Index: linux-3.4/kernel/workqueue.c
|
|||
- * and preemption disabled, which in turn means that none else
|
||||
- * could be manipulating idle_list, so dereferencing idle_list
|
||||
- * without gcwq lock is safe.
|
||||
- */
|
||||
*/
|
||||
- if (atomic_dec_and_test(nr_running) && !list_empty(&gcwq->worklist))
|
||||
- to_wakeup = first_worker(gcwq);
|
||||
- return to_wakeup ? to_wakeup->task : NULL;
|
||||
+ */
|
||||
+ if (atomic_dec_and_test(get_gcwq_nr_running(cpu)) &&
|
||||
+ !list_empty(&gcwq->worklist)) {
|
||||
+ worker = first_worker(gcwq);
|
||||
|
@ -248,10 +248,10 @@ Index: linux-3.4/kernel/workqueue.c
|
|||
}
|
||||
|
||||
/**
|
||||
Index: linux-3.4/kernel/workqueue_sched.h
|
||||
===================================================================
|
||||
--- linux-3.4.orig/kernel/workqueue_sched.h
|
||||
+++ linux-3.4/kernel/workqueue_sched.h
|
||||
diff --git a/kernel/workqueue_sched.h b/kernel/workqueue_sched.h
|
||||
index 2d10fc9..3bf73e2 100644
|
||||
--- a/kernel/workqueue_sched.h
|
||||
+++ b/kernel/workqueue_sched.h
|
||||
@@ -4,6 +4,5 @@
|
||||
* Scheduler hooks for concurrency managed workqueue. Only to be
|
||||
* included from sched.c and workqueue.c.
|
|
@ -1,17 +1,18 @@
|
|||
Subject: mips-enable-interrupts-in-signal.patch
|
||||
From 4f192cb00877ecec7541354d32fe2f6fafd72f18 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Mon, 18 Jul 2011 21:32:10 +0200
|
||||
Subject: [008/254] mips-enable-interrupts-in-signal.patch
|
||||
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
---
|
||||
arch/mips/kernel/signal.c | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
Index: linux-3.4/arch/mips/kernel/signal.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/mips/kernel/signal.c
|
||||
+++ linux-3.4/arch/mips/kernel/signal.c
|
||||
@@ -605,6 +605,9 @@ static void do_signal(struct pt_regs *re
|
||||
diff --git a/arch/mips/kernel/signal.c b/arch/mips/kernel/signal.c
|
||||
index d5a338a..ab4e20a 100644
|
||||
--- a/arch/mips/kernel/signal.c
|
||||
+++ b/arch/mips/kernel/signal.c
|
||||
@@ -588,6 +588,9 @@ static void do_signal(struct pt_regs *regs)
|
||||
if (!user_mode(regs))
|
||||
return;
|
||||
|
|
@ -1,17 +1,18 @@
|
|||
Subject: arm-enable-interrupts-in-signal-code.patch
|
||||
From fdd53448185582426cac212539692a8cb631e52a Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Sat, 16 Jul 2011 16:27:13 +0200
|
||||
Subject: [009/254] arm-enable-interrupts-in-signal-code.patch
|
||||
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
---
|
||||
arch/arm/kernel/signal.c | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
Index: linux-3.4/arch/arm/kernel/signal.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/arm/kernel/signal.c
|
||||
+++ linux-3.4/arch/arm/kernel/signal.c
|
||||
@@ -664,6 +664,9 @@ static void do_signal(struct pt_regs *re
|
||||
diff --git a/arch/arm/kernel/signal.c b/arch/arm/kernel/signal.c
|
||||
index d68d1b6..13db45b 100644
|
||||
--- a/arch/arm/kernel/signal.c
|
||||
+++ b/arch/arm/kernel/signal.c
|
||||
@@ -617,6 +617,9 @@ static void do_signal(struct pt_regs *regs, int syscall)
|
||||
if (!user_mode(regs))
|
||||
return;
|
||||
|
|
@ -1,17 +1,18 @@
|
|||
Subject: seqlock: Remove unused functions
|
||||
From 205a191ae6521607bae4e78101d2f4aae0118414 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Sat, 16 Jul 2011 18:38:22 +0200
|
||||
Subject: [010/254] seqlock: Remove unused functions
|
||||
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
---
|
||||
include/linux/seqlock.h | 21 ---------------------
|
||||
1 file changed, 21 deletions(-)
|
||||
|
||||
Index: linux-3.4/include/linux/seqlock.h
|
||||
===================================================================
|
||||
--- linux-3.4.orig/include/linux/seqlock.h
|
||||
+++ linux-3.4/include/linux/seqlock.h
|
||||
@@ -69,17 +69,6 @@ static inline void write_sequnlock(seqlo
|
||||
diff --git a/include/linux/seqlock.h b/include/linux/seqlock.h
|
||||
index 600060e2..cb0599c 100644
|
||||
--- a/include/linux/seqlock.h
|
||||
+++ b/include/linux/seqlock.h
|
||||
@@ -69,17 +69,6 @@ static inline void write_sequnlock(seqlock_t *sl)
|
||||
spin_unlock(&sl->lock);
|
||||
}
|
||||
|
||||
|
@ -29,7 +30,7 @@ Index: linux-3.4/include/linux/seqlock.h
|
|||
/* Start of read calculation -- fetch last complete writer token */
|
||||
static __always_inline unsigned read_seqbegin(const seqlock_t *sl)
|
||||
{
|
||||
@@ -248,14 +237,4 @@ static inline void write_seqcount_barrie
|
||||
@@ -269,14 +258,4 @@ static inline void write_seqcount_barrier(seqcount_t *s)
|
||||
#define write_sequnlock_bh(lock) \
|
||||
do { write_sequnlock(lock); local_bh_enable(); } while(0)
|
||||
|
|
@ -1,18 +1,19 @@
|
|||
Subject: seqlock: Use seqcount
|
||||
From 39e342612eb4ced8aa77bacdc270147941a38b36 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Sat, 16 Jul 2011 18:40:26 +0200
|
||||
Subject: [011/254] seqlock: Use seqcount
|
||||
|
||||
No point in having different implementations for the same thing.
|
||||
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
---
|
||||
include/linux/seqlock.h | 176 +++++++++++++++++++++++++-----------------------
|
||||
1 file changed, 93 insertions(+), 83 deletions(-)
|
||||
include/linux/seqlock.h | 174 +++++++++++++++++++++++++----------------------
|
||||
1 file changed, 92 insertions(+), 82 deletions(-)
|
||||
|
||||
Index: linux-3.4/include/linux/seqlock.h
|
||||
===================================================================
|
||||
--- linux-3.4.orig/include/linux/seqlock.h
|
||||
+++ linux-3.4/include/linux/seqlock.h
|
||||
diff --git a/include/linux/seqlock.h b/include/linux/seqlock.h
|
||||
index cb0599c..1829905 100644
|
||||
--- a/include/linux/seqlock.h
|
||||
+++ b/include/linux/seqlock.h
|
||||
@@ -30,81 +30,12 @@
|
||||
#include <linux/preempt.h>
|
||||
#include <asm/processor.h>
|
||||
|
@ -95,7 +96,7 @@ Index: linux-3.4/include/linux/seqlock.h
|
|||
typedef struct seqcount {
|
||||
unsigned sequence;
|
||||
} seqcount_t;
|
||||
@@ -186,7 +117,6 @@ static inline int __read_seqcount_retry(
|
||||
@@ -207,7 +138,6 @@ static inline int __read_seqcount_retry(const seqcount_t *s, unsigned start)
|
||||
static inline int read_seqcount_retry(const seqcount_t *s, unsigned start)
|
||||
{
|
||||
smp_rmb();
|
||||
|
@ -103,7 +104,7 @@ Index: linux-3.4/include/linux/seqlock.h
|
|||
return __read_seqcount_retry(s, start);
|
||||
}
|
||||
|
||||
@@ -220,21 +150,101 @@ static inline void write_seqcount_barrie
|
||||
@@ -241,21 +171,101 @@ static inline void write_seqcount_barrier(seqcount_t *s)
|
||||
s->sequence+=2;
|
||||
}
|
||||
|
||||
|
@ -112,11 +113,10 @@ Index: linux-3.4/include/linux/seqlock.h
|
|||
+ spinlock_t lock;
|
||||
+} seqlock_t;
|
||||
+
|
||||
/*
|
||||
- * Possible sw/hw IRQ protected versions of the interfaces.
|
||||
+/*
|
||||
+ * These macros triggered gcc-3.x compile-time problems. We think these are
|
||||
+ * OK now. Be cautious.
|
||||
*/
|
||||
+ */
|
||||
+#define __SEQLOCK_UNLOCKED(lockname) \
|
||||
+ { \
|
||||
+ .seqcount = SEQCNT_ZERO, \
|
||||
|
@ -145,11 +145,12 @@ Index: linux-3.4/include/linux/seqlock.h
|
|||
+ return read_seqcount_retry(&sl->seqcount, start);
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
/*
|
||||
- * Possible sw/hw IRQ protected versions of the interfaces.
|
||||
+ * Lock out other writers and update the count.
|
||||
+ * Acts like a normal spin_lock/unlock.
|
||||
+ * Don't need preempt_disable() because that is in the spin_lock already.
|
||||
+ */
|
||||
*/
|
||||
+static inline void write_seqlock(seqlock_t *sl)
|
||||
+{
|
||||
+ spin_lock(&sl->lock);
|
||||
|
@ -201,15 +202,14 @@ Index: linux-3.4/include/linux/seqlock.h
|
|||
- do { local_irq_disable(); write_seqlock(lock); } while (0)
|
||||
-#define write_seqlock_bh(lock) \
|
||||
- do { local_bh_disable(); write_seqlock(lock); } while (0)
|
||||
-
|
||||
+ do { flags = __write_seqlock_irqsave(lock); } while (0)
|
||||
|
||||
-#define write_sequnlock_irqrestore(lock, flags) \
|
||||
- do { write_sequnlock(lock); local_irq_restore(flags); } while(0)
|
||||
-#define write_sequnlock_irq(lock) \
|
||||
- do { write_sequnlock(lock); local_irq_enable(); } while(0)
|
||||
-#define write_sequnlock_bh(lock) \
|
||||
- do { write_sequnlock(lock); local_bh_enable(); } while(0)
|
||||
+ do { flags = __write_seqlock_irqsave(lock); } while (0)
|
||||
+
|
||||
+static inline void
|
||||
+write_sequnlock_irqrestore(seqlock_t *sl, unsigned long flags)
|
||||
+{
|
|
@ -1,6 +1,7 @@
|
|||
Subject: timekeeping: Split xtime_lock
|
||||
From f66aa661bcd8201092bd9e7f9f1c243627b42fe4 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Thu, 01 Mar 2012 15:14:06 +0100
|
||||
Date: Thu, 1 Mar 2012 15:14:06 +0100
|
||||
Subject: [012/254] timekeeping: Split xtime_lock
|
||||
|
||||
xtime_lock is going to be split apart in mainline, so we can shorten
|
||||
the seqcount protected regions and avoid updating seqcount in some
|
||||
|
@ -9,17 +10,17 @@ whole mess with raw seqlocks for RT.
|
|||
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
---
|
||||
kernel/time/jiffies.c | 4 -
|
||||
kernel/time/tick-common.c | 10 ++-
|
||||
kernel/time/tick-internal.h | 3 -
|
||||
kernel/time/jiffies.c | 4 +-
|
||||
kernel/time/tick-common.c | 10 ++--
|
||||
kernel/time/tick-internal.h | 3 +-
|
||||
kernel/time/tick-sched.c | 16 +++---
|
||||
kernel/time/timekeeping.c | 114 +++++++++++++++++++++++++-------------------
|
||||
kernel/time/timekeeping.c | 114 +++++++++++++++++++++++++------------------
|
||||
5 files changed, 87 insertions(+), 60 deletions(-)
|
||||
|
||||
Index: linux-3.4/kernel/time/jiffies.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/kernel/time/jiffies.c
|
||||
+++ linux-3.4/kernel/time/jiffies.c
|
||||
diff --git a/kernel/time/jiffies.c b/kernel/time/jiffies.c
|
||||
index a470154..21940eb 100644
|
||||
--- a/kernel/time/jiffies.c
|
||||
+++ b/kernel/time/jiffies.c
|
||||
@@ -74,9 +74,9 @@ u64 get_jiffies_64(void)
|
||||
u64 ret;
|
||||
|
||||
|
@ -32,10 +33,10 @@ Index: linux-3.4/kernel/time/jiffies.c
|
|||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL(get_jiffies_64);
|
||||
Index: linux-3.4/kernel/time/tick-common.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/kernel/time/tick-common.c
|
||||
+++ linux-3.4/kernel/time/tick-common.c
|
||||
diff --git a/kernel/time/tick-common.c b/kernel/time/tick-common.c
|
||||
index da6c9ec..39de540 100644
|
||||
--- a/kernel/time/tick-common.c
|
||||
+++ b/kernel/time/tick-common.c
|
||||
@@ -63,13 +63,15 @@ int tick_is_oneshot_available(void)
|
||||
static void tick_periodic(int cpu)
|
||||
{
|
||||
|
@ -54,7 +55,7 @@ Index: linux-3.4/kernel/time/tick-common.c
|
|||
}
|
||||
|
||||
update_process_times(user_mode(get_irq_regs()));
|
||||
@@ -130,9 +132,9 @@ void tick_setup_periodic(struct clock_ev
|
||||
@@ -130,9 +132,9 @@ void tick_setup_periodic(struct clock_event_device *dev, int broadcast)
|
||||
ktime_t next;
|
||||
|
||||
do {
|
||||
|
@ -66,22 +67,22 @@ Index: linux-3.4/kernel/time/tick-common.c
|
|||
|
||||
clockevents_set_mode(dev, CLOCK_EVT_MODE_ONESHOT);
|
||||
|
||||
Index: linux-3.4/kernel/time/tick-internal.h
|
||||
===================================================================
|
||||
--- linux-3.4.orig/kernel/time/tick-internal.h
|
||||
+++ linux-3.4/kernel/time/tick-internal.h
|
||||
@@ -141,4 +141,5 @@ static inline int tick_device_is_functio
|
||||
diff --git a/kernel/time/tick-internal.h b/kernel/time/tick-internal.h
|
||||
index 4e265b9..c91100d 100644
|
||||
--- a/kernel/time/tick-internal.h
|
||||
+++ b/kernel/time/tick-internal.h
|
||||
@@ -141,4 +141,5 @@ static inline int tick_device_is_functional(struct clock_event_device *dev)
|
||||
#endif
|
||||
|
||||
extern void do_timer(unsigned long ticks);
|
||||
-extern seqlock_t xtime_lock;
|
||||
+extern raw_spinlock_t xtime_lock;
|
||||
+extern seqcount_t xtime_seq;
|
||||
Index: linux-3.4/kernel/time/tick-sched.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/kernel/time/tick-sched.c
|
||||
+++ linux-3.4/kernel/time/tick-sched.c
|
||||
@@ -56,7 +56,8 @@ static void tick_do_update_jiffies64(kti
|
||||
diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c
|
||||
index efd3866..a607a7c 100644
|
||||
--- a/kernel/time/tick-sched.c
|
||||
+++ b/kernel/time/tick-sched.c
|
||||
@@ -56,7 +56,8 @@ static void tick_do_update_jiffies64(ktime_t now)
|
||||
return;
|
||||
|
||||
/* Reevalute with xtime_lock held */
|
||||
|
@ -91,7 +92,7 @@ Index: linux-3.4/kernel/time/tick-sched.c
|
|||
|
||||
delta = ktime_sub(now, last_jiffies_update);
|
||||
if (delta.tv64 >= tick_period.tv64) {
|
||||
@@ -79,7 +80,8 @@ static void tick_do_update_jiffies64(kti
|
||||
@@ -79,7 +80,8 @@ static void tick_do_update_jiffies64(ktime_t now)
|
||||
/* Keep the tick_next_period variable up to date */
|
||||
tick_next_period = ktime_add(last_jiffies_update, tick_period);
|
||||
}
|
||||
|
@ -101,7 +102,7 @@ Index: linux-3.4/kernel/time/tick-sched.c
|
|||
}
|
||||
|
||||
/*
|
||||
@@ -89,12 +91,14 @@ static ktime_t tick_init_jiffy_update(vo
|
||||
@@ -89,12 +91,14 @@ static ktime_t tick_init_jiffy_update(void)
|
||||
{
|
||||
ktime_t period;
|
||||
|
||||
|
@ -118,7 +119,7 @@ Index: linux-3.4/kernel/time/tick-sched.c
|
|||
return period;
|
||||
}
|
||||
|
||||
@@ -316,11 +320,11 @@ static void tick_nohz_stop_sched_tick(st
|
||||
@@ -316,11 +320,11 @@ static void tick_nohz_stop_sched_tick(struct tick_sched *ts)
|
||||
ts->idle_calls++;
|
||||
/* Read jiffies and the time when jiffies were updated last */
|
||||
do {
|
||||
|
@ -132,10 +133,10 @@ Index: linux-3.4/kernel/time/tick-sched.c
|
|||
|
||||
if (rcu_needs_cpu(cpu) || printk_needs_cpu(cpu) ||
|
||||
arch_needs_cpu(cpu)) {
|
||||
Index: linux-3.4/kernel/time/timekeeping.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/kernel/time/timekeeping.c
|
||||
+++ linux-3.4/kernel/time/timekeeping.c
|
||||
diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c
|
||||
index d66b213..56e151b 100644
|
||||
--- a/kernel/time/timekeeping.c
|
||||
+++ b/kernel/time/timekeeping.c
|
||||
@@ -70,8 +70,9 @@ struct timekeeper {
|
||||
/* The raw monotonic time for the CLOCK_MONOTONIC_RAW posix clock. */
|
||||
struct timespec raw_time;
|
||||
|
@ -211,7 +212,7 @@ Index: linux-3.4/kernel/time/timekeeping.c
|
|||
|
||||
set_normalized_timespec(ts, ts->tv_sec + tomono.tv_sec,
|
||||
ts->tv_nsec + tomono.tv_nsec + nsecs);
|
||||
@@ -321,7 +323,7 @@ void getnstime_raw_and_real(struct times
|
||||
@@ -321,7 +323,7 @@ void getnstime_raw_and_real(struct timespec *ts_raw, struct timespec *ts_real)
|
||||
do {
|
||||
u32 arch_offset;
|
||||
|
||||
|
@ -220,7 +221,7 @@ Index: linux-3.4/kernel/time/timekeeping.c
|
|||
|
||||
*ts_raw = timekeeper.raw_time;
|
||||
*ts_real = timekeeper.xtime;
|
||||
@@ -334,7 +336,7 @@ void getnstime_raw_and_real(struct times
|
||||
@@ -334,7 +336,7 @@ void getnstime_raw_and_real(struct timespec *ts_raw, struct timespec *ts_real)
|
||||
nsecs_raw += arch_offset;
|
||||
nsecs_real += arch_offset;
|
||||
|
||||
|
@ -229,7 +230,7 @@ Index: linux-3.4/kernel/time/timekeeping.c
|
|||
|
||||
timespec_add_ns(ts_raw, nsecs_raw);
|
||||
timespec_add_ns(ts_real, nsecs_real);
|
||||
@@ -373,7 +375,8 @@ int do_settimeofday(const struct timespe
|
||||
@@ -373,7 +375,8 @@ int do_settimeofday(const struct timespec *tv)
|
||||
if ((unsigned long)tv->tv_nsec >= NSEC_PER_SEC)
|
||||
return -EINVAL;
|
||||
|
||||
|
@ -239,7 +240,7 @@ Index: linux-3.4/kernel/time/timekeeping.c
|
|||
|
||||
timekeeping_forward_now();
|
||||
|
||||
@@ -385,7 +388,8 @@ int do_settimeofday(const struct timespe
|
||||
@@ -385,7 +388,8 @@ int do_settimeofday(const struct timespec *tv)
|
||||
timekeeper.xtime = *tv;
|
||||
timekeeping_update(true);
|
||||
|
||||
|
@ -249,7 +250,7 @@ Index: linux-3.4/kernel/time/timekeeping.c
|
|||
|
||||
/* signal hrtimers about time change */
|
||||
clock_was_set();
|
||||
@@ -409,7 +413,8 @@ int timekeeping_inject_offset(struct tim
|
||||
@@ -409,7 +413,8 @@ int timekeeping_inject_offset(struct timespec *ts)
|
||||
if ((unsigned long)ts->tv_nsec >= NSEC_PER_SEC)
|
||||
return -EINVAL;
|
||||
|
||||
|
@ -259,7 +260,7 @@ Index: linux-3.4/kernel/time/timekeeping.c
|
|||
|
||||
timekeeping_forward_now();
|
||||
|
||||
@@ -419,7 +424,8 @@ int timekeeping_inject_offset(struct tim
|
||||
@@ -419,7 +424,8 @@ int timekeeping_inject_offset(struct timespec *ts)
|
||||
|
||||
timekeeping_update(true);
|
||||
|
||||
|
@ -269,7 +270,7 @@ Index: linux-3.4/kernel/time/timekeeping.c
|
|||
|
||||
/* signal hrtimers about time change */
|
||||
clock_was_set();
|
||||
@@ -440,7 +446,8 @@ static int change_clocksource(void *data
|
||||
@@ -440,7 +446,8 @@ static int change_clocksource(void *data)
|
||||
|
||||
new = (struct clocksource *) data;
|
||||
|
||||
|
@ -279,7 +280,7 @@ Index: linux-3.4/kernel/time/timekeeping.c
|
|||
|
||||
timekeeping_forward_now();
|
||||
if (!new->enable || new->enable(new) == 0) {
|
||||
@@ -451,7 +458,8 @@ static int change_clocksource(void *data
|
||||
@@ -451,7 +458,8 @@ static int change_clocksource(void *data)
|
||||
}
|
||||
timekeeping_update(true);
|
||||
|
||||
|
@ -289,7 +290,7 @@ Index: linux-3.4/kernel/time/timekeeping.c
|
|||
|
||||
return 0;
|
||||
}
|
||||
@@ -498,11 +506,11 @@ void getrawmonotonic(struct timespec *ts
|
||||
@@ -498,11 +506,11 @@ void getrawmonotonic(struct timespec *ts)
|
||||
s64 nsecs;
|
||||
|
||||
do {
|
||||
|
@ -357,7 +358,7 @@ Index: linux-3.4/kernel/time/timekeeping.c
|
|||
}
|
||||
|
||||
/* time in seconds when suspend began */
|
||||
@@ -657,7 +668,8 @@ void timekeeping_inject_sleeptime(struct
|
||||
@@ -657,7 +668,8 @@ void timekeeping_inject_sleeptime(struct timespec *delta)
|
||||
if (!(ts.tv_sec == 0 && ts.tv_nsec == 0))
|
||||
return;
|
||||
|
||||
|
@ -367,7 +368,7 @@ Index: linux-3.4/kernel/time/timekeeping.c
|
|||
|
||||
timekeeping_forward_now();
|
||||
|
||||
@@ -665,7 +677,8 @@ void timekeeping_inject_sleeptime(struct
|
||||
@@ -665,7 +677,8 @@ void timekeeping_inject_sleeptime(struct timespec *delta)
|
||||
|
||||
timekeeping_update(true);
|
||||
|
||||
|
@ -438,7 +439,7 @@ Index: linux-3.4/kernel/time/timekeeping.c
|
|||
}
|
||||
|
||||
/**
|
||||
@@ -1131,13 +1149,13 @@ void get_monotonic_boottime(struct times
|
||||
@@ -1131,13 +1149,13 @@ void get_monotonic_boottime(struct timespec *ts)
|
||||
WARN_ON(timekeeping_suspended);
|
||||
|
||||
do {
|
||||
|
@ -454,7 +455,7 @@ Index: linux-3.4/kernel/time/timekeeping.c
|
|||
|
||||
set_normalized_timespec(ts, ts->tv_sec + tomono.tv_sec + sleep.tv_sec,
|
||||
ts->tv_nsec + tomono.tv_nsec + sleep.tv_nsec + nsecs);
|
||||
@@ -1188,10 +1206,10 @@ struct timespec current_kernel_time(void
|
||||
@@ -1188,10 +1206,10 @@ struct timespec current_kernel_time(void)
|
||||
unsigned long seq;
|
||||
|
||||
do {
|
||||
|
@ -467,7 +468,7 @@ Index: linux-3.4/kernel/time/timekeeping.c
|
|||
|
||||
return now;
|
||||
}
|
||||
@@ -1203,11 +1221,11 @@ struct timespec get_monotonic_coarse(voi
|
||||
@@ -1203,11 +1221,11 @@ struct timespec get_monotonic_coarse(void)
|
||||
unsigned long seq;
|
||||
|
||||
do {
|
||||
|
@ -481,7 +482,7 @@ Index: linux-3.4/kernel/time/timekeeping.c
|
|||
|
||||
set_normalized_timespec(&now, now.tv_sec + mono.tv_sec,
|
||||
now.tv_nsec + mono.tv_nsec);
|
||||
@@ -1239,11 +1257,11 @@ void get_xtime_and_monotonic_and_sleep_o
|
||||
@@ -1239,11 +1257,11 @@ void get_xtime_and_monotonic_and_sleep_offset(struct timespec *xtim,
|
||||
unsigned long seq;
|
||||
|
||||
do {
|
||||
|
@ -507,7 +508,7 @@ Index: linux-3.4/kernel/time/timekeeping.c
|
|||
|
||||
return timespec_to_ktime(wtom);
|
||||
}
|
||||
@@ -1272,7 +1290,9 @@ EXPORT_SYMBOL_GPL(ktime_get_monotonic_of
|
||||
@@ -1272,7 +1290,9 @@ EXPORT_SYMBOL_GPL(ktime_get_monotonic_offset);
|
||||
*/
|
||||
void xtime_update(unsigned long ticks)
|
||||
{
|
|
@ -1,6 +1,7 @@
|
|||
Subject: intel_idle: Convert i7300_idle_lock to raw spinlock
|
||||
From 99fb563d464c8de15fa05e11a22372ca24505eee Mon Sep 17 00:00:00 2001
|
||||
From: Mike Galbraith <efault@gmx.de>
|
||||
Date: Wed, 07 Dec 2011 12:48:42 +0100
|
||||
Date: Wed, 7 Dec 2011 12:48:42 +0100
|
||||
Subject: [013/254] intel_idle: Convert i7300_idle_lock to raw spinlock
|
||||
|
||||
24 core Intel box's first exposure to 3.0.12-rt30-rc3 didn't go well.
|
||||
|
||||
|
@ -22,15 +23,14 @@ Signed-off-by: Mike Galbraith <efault@gmx.de>
|
|||
Cc: Steven Rostedt <rostedt@goodmis.org>
|
||||
Link: http://lkml.kernel.org/r/1323258522.5057.73.camel@marge.simson.net
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
|
||||
---
|
||||
drivers/idle/i7300_idle.c | 8 ++++----
|
||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
Index: linux-3.4/drivers/idle/i7300_idle.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/drivers/idle/i7300_idle.c
|
||||
+++ linux-3.4/drivers/idle/i7300_idle.c
|
||||
diff --git a/drivers/idle/i7300_idle.c b/drivers/idle/i7300_idle.c
|
||||
index fa080eb..ffeebc7 100644
|
||||
--- a/drivers/idle/i7300_idle.c
|
||||
+++ b/drivers/idle/i7300_idle.c
|
||||
@@ -75,7 +75,7 @@ static unsigned long past_skip;
|
||||
|
||||
static struct pci_dev *fbd_dev;
|
||||
|
@ -40,7 +40,7 @@ Index: linux-3.4/drivers/idle/i7300_idle.c
|
|||
static int i7300_idle_active;
|
||||
|
||||
static u8 i7300_idle_thrtctl_saved;
|
||||
@@ -457,7 +457,7 @@ static int i7300_idle_notifier(struct no
|
||||
@@ -457,7 +457,7 @@ static int i7300_idle_notifier(struct notifier_block *nb, unsigned long val,
|
||||
idle_begin_time = ktime_get();
|
||||
}
|
||||
|
||||
|
@ -49,7 +49,7 @@ Index: linux-3.4/drivers/idle/i7300_idle.c
|
|||
if (val == IDLE_START) {
|
||||
|
||||
cpumask_set_cpu(smp_processor_id(), idle_cpumask);
|
||||
@@ -506,7 +506,7 @@ static int i7300_idle_notifier(struct no
|
||||
@@ -506,7 +506,7 @@ static int i7300_idle_notifier(struct notifier_block *nb, unsigned long val,
|
||||
}
|
||||
}
|
||||
end:
|
|
@ -1,6 +1,7 @@
|
|||
From 61b1c33b6d12d65542c65955b7d629ebc16e3578 Mon Sep 17 00:00:00 2001
|
||||
From: Steven Rostedt <rostedt@goodmis.org>
|
||||
Date: Thu, 29 Sep 2011 12:24:30 -0500
|
||||
Subject: tracing: Account for preempt off in preempt_schedule()
|
||||
Subject: [014/254] tracing: Account for preempt off in preempt_schedule()
|
||||
|
||||
The preempt_schedule() uses the preempt_disable_notrace() version
|
||||
because it can cause infinite recursion by the function tracer as
|
||||
|
@ -25,11 +26,11 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
|||
kernel/sched/core.c | 9 +++++++++
|
||||
1 file changed, 9 insertions(+)
|
||||
|
||||
Index: linux-3.4/kernel/sched/core.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/kernel/sched/core.c
|
||||
+++ linux-3.4/kernel/sched/core.c
|
||||
@@ -3312,7 +3312,16 @@ asmlinkage void __sched notrace preempt_
|
||||
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
|
||||
index f5f9134..7274881 100644
|
||||
--- a/kernel/sched/core.c
|
||||
+++ b/kernel/sched/core.c
|
||||
@@ -3312,7 +3312,16 @@ asmlinkage void __sched notrace preempt_schedule(void)
|
||||
|
||||
do {
|
||||
add_preempt_count_notrace(PREEMPT_ACTIVE);
|
|
@ -1,17 +1,18 @@
|
|||
Subject: signal-revert-ptrace-preempt-magic.patch
|
||||
From ce29223d82ddf224b15b87f2b732285cc8ce546c Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Wed, 21 Sep 2011 19:57:12 +0200
|
||||
Subject: [015/254] signal-revert-ptrace-preempt-magic.patch
|
||||
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
---
|
||||
kernel/signal.c | 8 --------
|
||||
1 file changed, 8 deletions(-)
|
||||
|
||||
Index: linux-3.4/kernel/signal.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/kernel/signal.c
|
||||
+++ linux-3.4/kernel/signal.c
|
||||
@@ -1909,15 +1909,7 @@ static void ptrace_stop(int exit_code, i
|
||||
diff --git a/kernel/signal.c b/kernel/signal.c
|
||||
index 17afcaf..6b5071f 100644
|
||||
--- a/kernel/signal.c
|
||||
+++ b/kernel/signal.c
|
||||
@@ -1909,15 +1909,7 @@ static void ptrace_stop(int exit_code, int why, int clear_code, siginfo_t *info)
|
||||
if (gstop_done && ptrace_reparented(current))
|
||||
do_notify_parent_cldstop(current, false, why);
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
Subject: arm: Mark pmu interupt IRQF_NO_THREAD
|
||||
From 494ef822b0148cd2e44c5a99b9c4fb8a939f5e98 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Wed, 16 Mar 2011 14:45:31 +0100
|
||||
Subject: [016/254] arm: Mark pmu interupt IRQF_NO_THREAD
|
||||
|
||||
PMU interrupt must not be threaded. Remove IRQF_DISABLED while at it
|
||||
as we run all handlers with interrupts disabled anyway.
|
||||
|
@ -10,11 +11,11 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
|||
arch/arm/kernel/perf_event.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
Index: linux-3.4/arch/arm/kernel/perf_event.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/arm/kernel/perf_event.c
|
||||
+++ linux-3.4/arch/arm/kernel/perf_event.c
|
||||
@@ -433,7 +433,7 @@ armpmu_reserve_hardware(struct arm_pmu *
|
||||
diff --git a/arch/arm/kernel/perf_event.c b/arch/arm/kernel/perf_event.c
|
||||
index 186c8cb..b2216b7 100644
|
||||
--- a/arch/arm/kernel/perf_event.c
|
||||
+++ b/arch/arm/kernel/perf_event.c
|
||||
@@ -433,7 +433,7 @@ armpmu_reserve_hardware(struct arm_pmu *armpmu)
|
||||
}
|
||||
|
||||
err = request_irq(irq, handle_irq,
|
|
@ -1,6 +1,7 @@
|
|||
Subject: arm: Allow forced irq threading
|
||||
From 1db2129a0b2e662a400f1fdda7d4481a8facc8e2 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Sat, 16 Jul 2011 13:15:20 +0200
|
||||
Subject: [017/254] arm: Allow forced irq threading
|
||||
|
||||
All timer interrupts and the perf interrupt are marked NO_THREAD, so
|
||||
its safe to allow forced interrupt threading.
|
||||
|
@ -10,10 +11,10 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
|||
arch/arm/Kconfig | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
Index: linux-3.4/arch/arm/Kconfig
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/arm/Kconfig
|
||||
+++ linux-3.4/arch/arm/Kconfig
|
||||
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
|
||||
index 7a8660a..f6fa4db 100644
|
||||
--- a/arch/arm/Kconfig
|
||||
+++ b/arch/arm/Kconfig
|
||||
@@ -31,6 +31,7 @@ config ARM
|
||||
select HAVE_C_RECORDMCOUNT
|
||||
select HAVE_GENERIC_HARDIRQS
|
|
@ -1,7 +1,7 @@
|
|||
Subject: preempt-rt: Convert arm boot_lock to raw
|
||||
From 63fe8261cee647b1edbb92b3c271e1cc6442a0bf Mon Sep 17 00:00:00 2001
|
||||
From: Frank Rowand <frank.rowand@am.sony.com>
|
||||
Date: Mon, 19 Sep 2011 14:51:14 -0700
|
||||
|
||||
Subject: [018/254] preempt-rt: Convert arm boot_lock to raw
|
||||
|
||||
The arm boot_lock is used by the secondary processor startup code. The locking
|
||||
task is the idle thread, which has idle->sched_class == &idle_sched_class.
|
||||
|
@ -27,10 +27,10 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
|||
arch/arm/plat-versatile/platsmp.c | 10 +++++-----
|
||||
5 files changed, 26 insertions(+), 26 deletions(-)
|
||||
|
||||
Index: linux-3.4/arch/arm/mach-exynos/platsmp.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/arm/mach-exynos/platsmp.c
|
||||
+++ linux-3.4/arch/arm/mach-exynos/platsmp.c
|
||||
diff --git a/arch/arm/mach-exynos/platsmp.c b/arch/arm/mach-exynos/platsmp.c
|
||||
index 36c3984..77499ea 100644
|
||||
--- a/arch/arm/mach-exynos/platsmp.c
|
||||
+++ b/arch/arm/mach-exynos/platsmp.c
|
||||
@@ -62,7 +62,7 @@ static void __iomem *scu_base_addr(void)
|
||||
return (void __iomem *)(S5P_VA_SCU);
|
||||
}
|
||||
|
@ -40,7 +40,7 @@ Index: linux-3.4/arch/arm/mach-exynos/platsmp.c
|
|||
|
||||
void __cpuinit platform_secondary_init(unsigned int cpu)
|
||||
{
|
||||
@@ -82,8 +82,8 @@ void __cpuinit platform_secondary_init(u
|
||||
@@ -82,8 +82,8 @@ void __cpuinit platform_secondary_init(unsigned int cpu)
|
||||
/*
|
||||
* Synchronise with the boot thread.
|
||||
*/
|
||||
|
@ -51,7 +51,7 @@ Index: linux-3.4/arch/arm/mach-exynos/platsmp.c
|
|||
}
|
||||
|
||||
int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
|
||||
@@ -94,7 +94,7 @@ int __cpuinit boot_secondary(unsigned in
|
||||
@@ -94,7 +94,7 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
|
||||
* Set synchronisation state between this boot processor
|
||||
* and the secondary one
|
||||
*/
|
||||
|
@ -60,7 +60,7 @@ Index: linux-3.4/arch/arm/mach-exynos/platsmp.c
|
|||
|
||||
/*
|
||||
* The secondary processor is waiting to be released from
|
||||
@@ -123,7 +123,7 @@ int __cpuinit boot_secondary(unsigned in
|
||||
@@ -123,7 +123,7 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
|
||||
|
||||
if (timeout == 0) {
|
||||
printk(KERN_ERR "cpu1 power enable failed");
|
||||
|
@ -69,7 +69,7 @@ Index: linux-3.4/arch/arm/mach-exynos/platsmp.c
|
|||
return -ETIMEDOUT;
|
||||
}
|
||||
}
|
||||
@@ -151,7 +151,7 @@ int __cpuinit boot_secondary(unsigned in
|
||||
@@ -151,7 +151,7 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
|
||||
* now the secondary core is starting up let it run its
|
||||
* calibrations, then wait for it to finish
|
||||
*/
|
||||
|
@ -78,10 +78,10 @@ Index: linux-3.4/arch/arm/mach-exynos/platsmp.c
|
|||
|
||||
return pen_release != -1 ? -ENOSYS : 0;
|
||||
}
|
||||
Index: linux-3.4/arch/arm/mach-msm/platsmp.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/arm/mach-msm/platsmp.c
|
||||
+++ linux-3.4/arch/arm/mach-msm/platsmp.c
|
||||
diff --git a/arch/arm/mach-msm/platsmp.c b/arch/arm/mach-msm/platsmp.c
|
||||
index db0117e..87daf5f 100644
|
||||
--- a/arch/arm/mach-msm/platsmp.c
|
||||
+++ b/arch/arm/mach-msm/platsmp.c
|
||||
@@ -40,7 +40,7 @@ extern void msm_secondary_startup(void);
|
||||
*/
|
||||
volatile int pen_release = -1;
|
||||
|
@ -91,7 +91,7 @@ Index: linux-3.4/arch/arm/mach-msm/platsmp.c
|
|||
|
||||
static inline int get_core_count(void)
|
||||
{
|
||||
@@ -70,8 +70,8 @@ void __cpuinit platform_secondary_init(u
|
||||
@@ -70,8 +70,8 @@ void __cpuinit platform_secondary_init(unsigned int cpu)
|
||||
/*
|
||||
* Synchronise with the boot thread.
|
||||
*/
|
||||
|
@ -102,7 +102,7 @@ Index: linux-3.4/arch/arm/mach-msm/platsmp.c
|
|||
}
|
||||
|
||||
static __cpuinit void prepare_cold_cpu(unsigned int cpu)
|
||||
@@ -108,7 +108,7 @@ int __cpuinit boot_secondary(unsigned in
|
||||
@@ -108,7 +108,7 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
|
||||
* set synchronisation state between this boot processor
|
||||
* and the secondary one
|
||||
*/
|
||||
|
@ -111,7 +111,7 @@ Index: linux-3.4/arch/arm/mach-msm/platsmp.c
|
|||
|
||||
/*
|
||||
* The secondary processor is waiting to be released from
|
||||
@@ -142,7 +142,7 @@ int __cpuinit boot_secondary(unsigned in
|
||||
@@ -142,7 +142,7 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
|
||||
* now the secondary core is starting up let it run its
|
||||
* calibrations, then wait for it to finish
|
||||
*/
|
||||
|
@ -120,10 +120,10 @@ Index: linux-3.4/arch/arm/mach-msm/platsmp.c
|
|||
|
||||
return pen_release != -1 ? -ENOSYS : 0;
|
||||
}
|
||||
Index: linux-3.4/arch/arm/mach-omap2/omap-smp.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/arm/mach-omap2/omap-smp.c
|
||||
+++ linux-3.4/arch/arm/mach-omap2/omap-smp.c
|
||||
diff --git a/arch/arm/mach-omap2/omap-smp.c b/arch/arm/mach-omap2/omap-smp.c
|
||||
index deffbf1..81ca676 100644
|
||||
--- a/arch/arm/mach-omap2/omap-smp.c
|
||||
+++ b/arch/arm/mach-omap2/omap-smp.c
|
||||
@@ -34,7 +34,7 @@
|
||||
/* SCU base address */
|
||||
static void __iomem *scu_base;
|
||||
|
@ -133,7 +133,7 @@ Index: linux-3.4/arch/arm/mach-omap2/omap-smp.c
|
|||
|
||||
void __iomem *omap4_get_scu_base(void)
|
||||
{
|
||||
@@ -65,8 +65,8 @@ void __cpuinit platform_secondary_init(u
|
||||
@@ -65,8 +65,8 @@ void __cpuinit platform_secondary_init(unsigned int cpu)
|
||||
/*
|
||||
* Synchronise with the boot thread.
|
||||
*/
|
||||
|
@ -144,7 +144,7 @@ Index: linux-3.4/arch/arm/mach-omap2/omap-smp.c
|
|||
}
|
||||
|
||||
int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
|
||||
@@ -77,7 +77,7 @@ int __cpuinit boot_secondary(unsigned in
|
||||
@@ -77,7 +77,7 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
|
||||
* Set synchronisation state between this boot processor
|
||||
* and the secondary one
|
||||
*/
|
||||
|
@ -153,7 +153,7 @@ Index: linux-3.4/arch/arm/mach-omap2/omap-smp.c
|
|||
|
||||
/*
|
||||
* Update the AuxCoreBoot0 with boot state for secondary core.
|
||||
@@ -117,7 +117,7 @@ int __cpuinit boot_secondary(unsigned in
|
||||
@@ -117,7 +117,7 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
|
||||
* Now the secondary core is starting up let it run its
|
||||
* calibrations, then wait for it to finish
|
||||
*/
|
||||
|
@ -162,10 +162,10 @@ Index: linux-3.4/arch/arm/mach-omap2/omap-smp.c
|
|||
|
||||
return 0;
|
||||
}
|
||||
Index: linux-3.4/arch/arm/mach-ux500/platsmp.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/arm/mach-ux500/platsmp.c
|
||||
+++ linux-3.4/arch/arm/mach-ux500/platsmp.c
|
||||
diff --git a/arch/arm/mach-ux500/platsmp.c b/arch/arm/mach-ux500/platsmp.c
|
||||
index eff5842..acc9da2 100644
|
||||
--- a/arch/arm/mach-ux500/platsmp.c
|
||||
+++ b/arch/arm/mach-ux500/platsmp.c
|
||||
@@ -58,7 +58,7 @@ static void __iomem *scu_base_addr(void)
|
||||
return NULL;
|
||||
}
|
||||
|
@ -175,7 +175,7 @@ Index: linux-3.4/arch/arm/mach-ux500/platsmp.c
|
|||
|
||||
void __cpuinit platform_secondary_init(unsigned int cpu)
|
||||
{
|
||||
@@ -78,8 +78,8 @@ void __cpuinit platform_secondary_init(u
|
||||
@@ -78,8 +78,8 @@ void __cpuinit platform_secondary_init(unsigned int cpu)
|
||||
/*
|
||||
* Synchronise with the boot thread.
|
||||
*/
|
||||
|
@ -186,7 +186,7 @@ Index: linux-3.4/arch/arm/mach-ux500/platsmp.c
|
|||
}
|
||||
|
||||
int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
|
||||
@@ -90,7 +90,7 @@ int __cpuinit boot_secondary(unsigned in
|
||||
@@ -90,7 +90,7 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
|
||||
* set synchronisation state between this boot processor
|
||||
* and the secondary one
|
||||
*/
|
||||
|
@ -195,7 +195,7 @@ Index: linux-3.4/arch/arm/mach-ux500/platsmp.c
|
|||
|
||||
/*
|
||||
* The secondary processor is waiting to be released from
|
||||
@@ -111,7 +111,7 @@ int __cpuinit boot_secondary(unsigned in
|
||||
@@ -111,7 +111,7 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
|
||||
* now the secondary core is starting up let it run its
|
||||
* calibrations, then wait for it to finish
|
||||
*/
|
||||
|
@ -204,11 +204,11 @@ Index: linux-3.4/arch/arm/mach-ux500/platsmp.c
|
|||
|
||||
return pen_release != -1 ? -ENOSYS : 0;
|
||||
}
|
||||
Index: linux-3.4/arch/arm/plat-versatile/platsmp.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/arm/plat-versatile/platsmp.c
|
||||
+++ linux-3.4/arch/arm/plat-versatile/platsmp.c
|
||||
@@ -38,7 +38,7 @@ static void __cpuinit write_pen_release(
|
||||
diff --git a/arch/arm/plat-versatile/platsmp.c b/arch/arm/plat-versatile/platsmp.c
|
||||
index 49c7db4..1f7a3d2 100644
|
||||
--- a/arch/arm/plat-versatile/platsmp.c
|
||||
+++ b/arch/arm/plat-versatile/platsmp.c
|
||||
@@ -38,7 +38,7 @@ static void __cpuinit write_pen_release(int val)
|
||||
outer_clean_range(__pa(&pen_release), __pa(&pen_release + 1));
|
||||
}
|
||||
|
||||
|
@ -217,7 +217,7 @@ Index: linux-3.4/arch/arm/plat-versatile/platsmp.c
|
|||
|
||||
void __cpuinit platform_secondary_init(unsigned int cpu)
|
||||
{
|
||||
@@ -58,8 +58,8 @@ void __cpuinit platform_secondary_init(u
|
||||
@@ -58,8 +58,8 @@ void __cpuinit platform_secondary_init(unsigned int cpu)
|
||||
/*
|
||||
* Synchronise with the boot thread.
|
||||
*/
|
||||
|
@ -228,7 +228,7 @@ Index: linux-3.4/arch/arm/plat-versatile/platsmp.c
|
|||
}
|
||||
|
||||
int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
|
||||
@@ -70,7 +70,7 @@ int __cpuinit boot_secondary(unsigned in
|
||||
@@ -70,7 +70,7 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
|
||||
* Set synchronisation state between this boot processor
|
||||
* and the secondary one
|
||||
*/
|
||||
|
@ -237,7 +237,7 @@ Index: linux-3.4/arch/arm/plat-versatile/platsmp.c
|
|||
|
||||
/*
|
||||
* This is really belt and braces; we hold unintended secondary
|
||||
@@ -100,7 +100,7 @@ int __cpuinit boot_secondary(unsigned in
|
||||
@@ -100,7 +100,7 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
|
||||
* now the secondary core is starting up let it run its
|
||||
* calibrations, then wait for it to finish
|
||||
*/
|
|
@ -1,16 +1,17 @@
|
|||
Subject: arm-omap-make-wakeupgen_lock-raw.patch
|
||||
From a63eb39f602d7b49f9b42e1eba23f9b87afe6197 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Wed, 11 Apr 2012 11:26:38 +0200
|
||||
Subject: [019/254] arm-omap-make-wakeupgen_lock-raw.patch
|
||||
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
---
|
||||
arch/arm/mach-omap2/omap-wakeupgen.c | 14 +++++++-------
|
||||
1 file changed, 7 insertions(+), 7 deletions(-)
|
||||
|
||||
Index: linux-3.4/arch/arm/mach-omap2/omap-wakeupgen.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/arm/mach-omap2/omap-wakeupgen.c
|
||||
+++ linux-3.4/arch/arm/mach-omap2/omap-wakeupgen.c
|
||||
diff --git a/arch/arm/mach-omap2/omap-wakeupgen.c b/arch/arm/mach-omap2/omap-wakeupgen.c
|
||||
index 42cd7fb..dbc2914 100644
|
||||
--- a/arch/arm/mach-omap2/omap-wakeupgen.c
|
||||
+++ b/arch/arm/mach-omap2/omap-wakeupgen.c
|
||||
@@ -43,7 +43,7 @@
|
||||
|
||||
static void __iomem *wakeupgen_base;
|
||||
|
@ -20,7 +21,7 @@ Index: linux-3.4/arch/arm/mach-omap2/omap-wakeupgen.c
|
|||
static unsigned int irq_target_cpu[NR_IRQS];
|
||||
|
||||
/*
|
||||
@@ -128,9 +128,9 @@ static void wakeupgen_mask(struct irq_da
|
||||
@@ -128,9 +128,9 @@ static void wakeupgen_mask(struct irq_data *d)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
|
@ -32,7 +33,7 @@ Index: linux-3.4/arch/arm/mach-omap2/omap-wakeupgen.c
|
|||
}
|
||||
|
||||
/*
|
||||
@@ -140,9 +140,9 @@ static void wakeupgen_unmask(struct irq_
|
||||
@@ -140,9 +140,9 @@ static void wakeupgen_unmask(struct irq_data *d)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
|
@ -44,7 +45,7 @@ Index: linux-3.4/arch/arm/mach-omap2/omap-wakeupgen.c
|
|||
}
|
||||
|
||||
#ifdef CONFIG_HOTPLUG_CPU
|
||||
@@ -183,7 +183,7 @@ static void wakeupgen_irqmask_all(unsign
|
||||
@@ -183,7 +183,7 @@ static void wakeupgen_irqmask_all(unsigned int cpu, unsigned int set)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
|
@ -53,7 +54,7 @@ Index: linux-3.4/arch/arm/mach-omap2/omap-wakeupgen.c
|
|||
if (set) {
|
||||
_wakeupgen_save_masks(cpu);
|
||||
_wakeupgen_set_all(cpu, WKG_MASK_ALL);
|
||||
@@ -191,7 +191,7 @@ static void wakeupgen_irqmask_all(unsign
|
||||
@@ -191,7 +191,7 @@ static void wakeupgen_irqmask_all(unsigned int cpu, unsigned int set)
|
||||
_wakeupgen_set_all(cpu, WKG_UNMASK_ALL);
|
||||
_wakeupgen_restore_masks(cpu);
|
||||
}
|
|
@ -1,21 +1,21 @@
|
|||
From 184153eb2296afaa1476309dd606c9ab6bd49a46 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Fri, 3 Jul 2009 08:44:44 -0500
|
||||
Subject: signals: Do not wakeup self
|
||||
Subject: [020/254] signals: Do not wakeup self
|
||||
|
||||
Signals which are delivered by current to current can do without
|
||||
waking up current :)
|
||||
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
|
||||
---
|
||||
kernel/signal.c | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
Index: linux-3.4/kernel/signal.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/kernel/signal.c
|
||||
+++ linux-3.4/kernel/signal.c
|
||||
@@ -683,6 +683,9 @@ void signal_wake_up(struct task_struct *
|
||||
diff --git a/kernel/signal.c b/kernel/signal.c
|
||||
index 6b5071f..099746c 100644
|
||||
--- a/kernel/signal.c
|
||||
+++ b/kernel/signal.c
|
||||
@@ -683,6 +683,9 @@ void signal_wake_up(struct task_struct *t, int resume)
|
||||
|
||||
set_tsk_thread_flag(t, TIF_SIGPENDING);
|
||||
|
|
@ -1,21 +1,21 @@
|
|||
From b8cfcd946b83608a19dfc1ebced4d3b91d5653db Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Fri, 3 Jul 2009 08:29:20 -0500
|
||||
Subject: posix-timers: Prevent broadcast signals
|
||||
Subject: [021/254] posix-timers: Prevent broadcast signals
|
||||
|
||||
Posix timers should not send broadcast signals and kernel only
|
||||
signals. Prevent it.
|
||||
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
|
||||
---
|
||||
kernel/posix-timers.c | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
Index: linux-3.4/kernel/posix-timers.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/kernel/posix-timers.c
|
||||
+++ linux-3.4/kernel/posix-timers.c
|
||||
@@ -439,6 +439,7 @@ static enum hrtimer_restart posix_timer_
|
||||
diff --git a/kernel/posix-timers.c b/kernel/posix-timers.c
|
||||
index 69185ae..7b73c34 100644
|
||||
--- a/kernel/posix-timers.c
|
||||
+++ b/kernel/posix-timers.c
|
||||
@@ -439,6 +439,7 @@ static enum hrtimer_restart posix_timer_fn(struct hrtimer *timer)
|
||||
static struct pid *good_sigevent(sigevent_t * event)
|
||||
{
|
||||
struct task_struct *rtn = current->group_leader;
|
||||
|
@ -23,7 +23,7 @@ Index: linux-3.4/kernel/posix-timers.c
|
|||
|
||||
if ((event->sigev_notify & SIGEV_THREAD_ID ) &&
|
||||
(!(rtn = find_task_by_vpid(event->sigev_notify_thread_id)) ||
|
||||
@@ -447,7 +448,8 @@ static struct pid *good_sigevent(sigeven
|
||||
@@ -447,7 +448,8 @@ static struct pid *good_sigevent(sigevent_t * event)
|
||||
return NULL;
|
||||
|
||||
if (((event->sigev_notify & ~SIGEV_THREAD_ID) != SIGEV_NONE) &&
|
|
@ -1,24 +1,24 @@
|
|||
From e2e370e3538853ac9c8d2e66e072515f059ceb9c Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Fri, 3 Jul 2009 08:44:56 -0500
|
||||
Subject: signals: Allow rt tasks to cache one sigqueue struct
|
||||
Subject: [022/254] signals: Allow rt tasks to cache one sigqueue struct
|
||||
|
||||
To avoid allocation allow rt tasks to cache one sigqueue struct in
|
||||
task struct.
|
||||
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
|
||||
---
|
||||
include/linux/sched.h | 1
|
||||
include/linux/signal.h | 1
|
||||
kernel/exit.c | 2 -
|
||||
kernel/fork.c | 1
|
||||
kernel/signal.c | 83 ++++++++++++++++++++++++++++++++++++++++++++++---
|
||||
include/linux/sched.h | 1 +
|
||||
include/linux/signal.h | 1 +
|
||||
kernel/exit.c | 2 +-
|
||||
kernel/fork.c | 1 +
|
||||
kernel/signal.c | 83 +++++++++++++++++++++++++++++++++++++++++++++---
|
||||
5 files changed, 83 insertions(+), 5 deletions(-)
|
||||
|
||||
Index: linux-3.4/include/linux/sched.h
|
||||
===================================================================
|
||||
--- linux-3.4.orig/include/linux/sched.h
|
||||
+++ linux-3.4/include/linux/sched.h
|
||||
diff --git a/include/linux/sched.h b/include/linux/sched.h
|
||||
index 81a173c..b546194 100644
|
||||
--- a/include/linux/sched.h
|
||||
+++ b/include/linux/sched.h
|
||||
@@ -1435,6 +1435,7 @@ struct task_struct {
|
||||
/* signal handlers */
|
||||
struct signal_struct *signal;
|
||||
|
@ -27,11 +27,11 @@ Index: linux-3.4/include/linux/sched.h
|
|||
|
||||
sigset_t blocked, real_blocked;
|
||||
sigset_t saved_sigmask; /* restored if set_restore_sigmask() was used */
|
||||
Index: linux-3.4/include/linux/signal.h
|
||||
===================================================================
|
||||
--- linux-3.4.orig/include/linux/signal.h
|
||||
+++ linux-3.4/include/linux/signal.h
|
||||
@@ -229,6 +229,7 @@ static inline void init_sigpending(struc
|
||||
diff --git a/include/linux/signal.h b/include/linux/signal.h
|
||||
index 7987ce74..24cc7a4 100644
|
||||
--- a/include/linux/signal.h
|
||||
+++ b/include/linux/signal.h
|
||||
@@ -229,6 +229,7 @@ static inline void init_sigpending(struct sigpending *sig)
|
||||
}
|
||||
|
||||
extern void flush_sigqueue(struct sigpending *queue);
|
||||
|
@ -39,11 +39,11 @@ Index: linux-3.4/include/linux/signal.h
|
|||
|
||||
/* Test if 'sig' is valid signal. Use this instead of testing _NSIG directly */
|
||||
static inline int valid_signal(unsigned long sig)
|
||||
Index: linux-3.4/kernel/exit.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/kernel/exit.c
|
||||
+++ linux-3.4/kernel/exit.c
|
||||
@@ -143,7 +143,7 @@ static void __exit_signal(struct task_st
|
||||
diff --git a/kernel/exit.c b/kernel/exit.c
|
||||
index d8bd3b42..35ab292 100644
|
||||
--- a/kernel/exit.c
|
||||
+++ b/kernel/exit.c
|
||||
@@ -143,7 +143,7 @@ static void __exit_signal(struct task_struct *tsk)
|
||||
* Do this under ->siglock, we can race with another thread
|
||||
* doing sigqueue_free() if we have SIGQUEUE_PREALLOC signals.
|
||||
*/
|
||||
|
@ -52,11 +52,11 @@ Index: linux-3.4/kernel/exit.c
|
|||
tsk->sighand = NULL;
|
||||
spin_unlock(&sighand->siglock);
|
||||
|
||||
Index: linux-3.4/kernel/fork.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/kernel/fork.c
|
||||
+++ linux-3.4/kernel/fork.c
|
||||
@@ -1204,6 +1204,7 @@ static struct task_struct *copy_process(
|
||||
diff --git a/kernel/fork.c b/kernel/fork.c
|
||||
index 8163333..b767e68 100644
|
||||
--- a/kernel/fork.c
|
||||
+++ b/kernel/fork.c
|
||||
@@ -1206,6 +1206,7 @@ static struct task_struct *copy_process(unsigned long clone_flags,
|
||||
spin_lock_init(&p->alloc_lock);
|
||||
|
||||
init_sigpending(&p->pending);
|
||||
|
@ -64,11 +64,11 @@ Index: linux-3.4/kernel/fork.c
|
|||
|
||||
p->utime = p->stime = p->gtime = 0;
|
||||
p->utimescaled = p->stimescaled = 0;
|
||||
Index: linux-3.4/kernel/signal.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/kernel/signal.c
|
||||
+++ linux-3.4/kernel/signal.c
|
||||
@@ -345,13 +345,45 @@ static bool task_participate_group_stop(
|
||||
diff --git a/kernel/signal.c b/kernel/signal.c
|
||||
index 099746c..a05a4db 100644
|
||||
--- a/kernel/signal.c
|
||||
+++ b/kernel/signal.c
|
||||
@@ -345,13 +345,45 @@ static bool task_participate_group_stop(struct task_struct *task)
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -115,7 +115,7 @@ Index: linux-3.4/kernel/signal.c
|
|||
{
|
||||
struct sigqueue *q = NULL;
|
||||
struct user_struct *user;
|
||||
@@ -368,7 +400,10 @@ __sigqueue_alloc(int sig, struct task_st
|
||||
@@ -368,7 +400,10 @@ __sigqueue_alloc(int sig, struct task_struct *t, gfp_t flags, int override_rlimi
|
||||
if (override_rlimit ||
|
||||
atomic_read(&user->sigpending) <=
|
||||
task_rlimit(t, RLIMIT_SIGPENDING)) {
|
||||
|
@ -127,7 +127,7 @@ Index: linux-3.4/kernel/signal.c
|
|||
} else {
|
||||
print_dropped_signal(sig);
|
||||
}
|
||||
@@ -385,6 +420,13 @@ __sigqueue_alloc(int sig, struct task_st
|
||||
@@ -385,6 +420,13 @@ __sigqueue_alloc(int sig, struct task_struct *t, gfp_t flags, int override_rlimi
|
||||
return q;
|
||||
}
|
||||
|
||||
|
@ -141,7 +141,7 @@ Index: linux-3.4/kernel/signal.c
|
|||
static void __sigqueue_free(struct sigqueue *q)
|
||||
{
|
||||
if (q->flags & SIGQUEUE_PREALLOC)
|
||||
@@ -394,6 +436,21 @@ static void __sigqueue_free(struct sigqu
|
||||
@@ -394,6 +436,21 @@ static void __sigqueue_free(struct sigqueue *q)
|
||||
kmem_cache_free(sigqueue_cachep, q);
|
||||
}
|
||||
|
||||
|
@ -163,7 +163,7 @@ Index: linux-3.4/kernel/signal.c
|
|||
void flush_sigqueue(struct sigpending *queue)
|
||||
{
|
||||
struct sigqueue *q;
|
||||
@@ -407,6 +464,21 @@ void flush_sigqueue(struct sigpending *q
|
||||
@@ -407,6 +464,21 @@ void flush_sigqueue(struct sigpending *queue)
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -185,7 +185,7 @@ Index: linux-3.4/kernel/signal.c
|
|||
* Flush all pending signals for a task.
|
||||
*/
|
||||
void __flush_signals(struct task_struct *t)
|
||||
@@ -555,7 +627,7 @@ static void collect_signal(int sig, stru
|
||||
@@ -555,7 +627,7 @@ static void collect_signal(int sig, struct sigpending *list, siginfo_t *info)
|
||||
still_pending:
|
||||
list_del_init(&first->list);
|
||||
copy_siginfo(info, &first->info);
|
||||
|
@ -194,7 +194,7 @@ Index: linux-3.4/kernel/signal.c
|
|||
} else {
|
||||
/*
|
||||
* Ok, it wasn't in the queue. This must be
|
||||
@@ -601,6 +673,8 @@ int dequeue_signal(struct task_struct *t
|
||||
@@ -601,6 +673,8 @@ int dequeue_signal(struct task_struct *tsk, sigset_t *mask, siginfo_t *info)
|
||||
{
|
||||
int signr;
|
||||
|
|
@ -1,5 +1,7 @@
|
|||
Subject: signal/x86: Delay calling signals in atomic
|
||||
From c86d77f9c967e46077b1c33526ea9e781b48a09b Mon Sep 17 00:00:00 2001
|
||||
From: Oleg Nesterov <oleg@redhat.com>
|
||||
Date: Thu, 7 Jun 2012 07:46:44 -0400
|
||||
Subject: [023/254] signal/x86: Delay calling signals in atomic
|
||||
|
||||
On x86_64 we must disable preemption before we enable interrupts
|
||||
for stack faults, int3 and debugging, because the current task is using
|
||||
|
@ -28,17 +30,16 @@ Signed-off-by: Oleg Nesterov <oleg@redhat.com>
|
|||
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
---
|
||||
|
||||
arch/x86/include/asm/signal.h | 13 +++++++++++++
|
||||
arch/x86/kernel/signal.c | 9 +++++++++
|
||||
include/linux/sched.h | 4 ++++
|
||||
kernel/signal.c | 37 +++++++++++++++++++++++++++++++++++--
|
||||
4 files changed, 61 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: linux-3.4/arch/x86/include/asm/signal.h
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/x86/include/asm/signal.h
|
||||
+++ linux-3.4/arch/x86/include/asm/signal.h
|
||||
diff --git a/arch/x86/include/asm/signal.h b/arch/x86/include/asm/signal.h
|
||||
index 598457c..1213ebd 100644
|
||||
--- a/arch/x86/include/asm/signal.h
|
||||
+++ b/arch/x86/include/asm/signal.h
|
||||
@@ -31,6 +31,19 @@ typedef struct {
|
||||
unsigned long sig[_NSIG_WORDS];
|
||||
} sigset_t;
|
||||
|
@ -59,11 +60,11 @@ Index: linux-3.4/arch/x86/include/asm/signal.h
|
|||
#else
|
||||
/* Here we must cater to libcs that poke about in kernel headers. */
|
||||
|
||||
Index: linux-3.4/arch/x86/kernel/signal.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/x86/kernel/signal.c
|
||||
+++ linux-3.4/arch/x86/kernel/signal.c
|
||||
@@ -824,6 +824,15 @@ do_notify_resume(struct pt_regs *regs, v
|
||||
diff --git a/arch/x86/kernel/signal.c b/arch/x86/kernel/signal.c
|
||||
index 115eac4..c67d83f 100644
|
||||
--- a/arch/x86/kernel/signal.c
|
||||
+++ b/arch/x86/kernel/signal.c
|
||||
@@ -824,6 +824,15 @@ do_notify_resume(struct pt_regs *regs, void *unused, __u32 thread_info_flags)
|
||||
mce_notify_process();
|
||||
#endif /* CONFIG_X86_64 && CONFIG_X86_MCE */
|
||||
|
||||
|
@ -79,10 +80,10 @@ Index: linux-3.4/arch/x86/kernel/signal.c
|
|||
/* deal with pending signal delivery */
|
||||
if (thread_info_flags & _TIF_SIGPENDING)
|
||||
do_signal(regs);
|
||||
Index: linux-3.4/include/linux/sched.h
|
||||
===================================================================
|
||||
--- linux-3.4.orig/include/linux/sched.h
|
||||
+++ linux-3.4/include/linux/sched.h
|
||||
diff --git a/include/linux/sched.h b/include/linux/sched.h
|
||||
index b546194..bd5caa1 100644
|
||||
--- a/include/linux/sched.h
|
||||
+++ b/include/linux/sched.h
|
||||
@@ -1440,6 +1440,10 @@ struct task_struct {
|
||||
sigset_t blocked, real_blocked;
|
||||
sigset_t saved_sigmask; /* restored if set_restore_sigmask() was used */
|
||||
|
@ -94,11 +95,11 @@ Index: linux-3.4/include/linux/sched.h
|
|||
|
||||
unsigned long sas_ss_sp;
|
||||
size_t sas_ss_size;
|
||||
Index: linux-3.4/kernel/signal.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/kernel/signal.c
|
||||
+++ linux-3.4/kernel/signal.c
|
||||
@@ -1312,8 +1312,8 @@ int do_send_sig_info(int sig, struct sig
|
||||
diff --git a/kernel/signal.c b/kernel/signal.c
|
||||
index a05a4db..65cb5b4 100644
|
||||
--- a/kernel/signal.c
|
||||
+++ b/kernel/signal.c
|
||||
@@ -1312,8 +1312,8 @@ int do_send_sig_info(int sig, struct siginfo *info, struct task_struct *p,
|
||||
* We don't want to have recursive SIGSEGV's etc, for example,
|
||||
* that is why we also clear SIGNAL_UNKILLABLE.
|
||||
*/
|
||||
|
@ -109,7 +110,7 @@ Index: linux-3.4/kernel/signal.c
|
|||
{
|
||||
unsigned long int flags;
|
||||
int ret, blocked, ignored;
|
||||
@@ -1338,6 +1338,39 @@ force_sig_info(int sig, struct siginfo *
|
||||
@@ -1338,6 +1338,39 @@ force_sig_info(int sig, struct siginfo *info, struct task_struct *t)
|
||||
return ret;
|
||||
}
|
||||
|
|
@ -1,21 +1,21 @@
|
|||
From 22951f58867044b17bbb29de105cbd528e7963e0 Mon Sep 17 00:00:00 2001
|
||||
From: Ingo Molnar <mingo@elte.hu>
|
||||
Date: Fri, 3 Jul 2009 08:29:30 -0500
|
||||
Subject: generic: Use raw local irq variant for generic cmpxchg
|
||||
Subject: [024/254] generic: Use raw local irq variant for generic cmpxchg
|
||||
|
||||
No point in tracing those.
|
||||
|
||||
Signed-off-by: Ingo Molnar <mingo@elte.hu>
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
|
||||
---
|
||||
include/asm-generic/cmpxchg-local.h | 8 ++++----
|
||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
Index: linux-3.4/include/asm-generic/cmpxchg-local.h
|
||||
===================================================================
|
||||
--- linux-3.4.orig/include/asm-generic/cmpxchg-local.h
|
||||
+++ linux-3.4/include/asm-generic/cmpxchg-local.h
|
||||
@@ -21,7 +21,7 @@ static inline unsigned long __cmpxchg_lo
|
||||
diff --git a/include/asm-generic/cmpxchg-local.h b/include/asm-generic/cmpxchg-local.h
|
||||
index 2533fdd..d8d4c89 100644
|
||||
--- a/include/asm-generic/cmpxchg-local.h
|
||||
+++ b/include/asm-generic/cmpxchg-local.h
|
||||
@@ -21,7 +21,7 @@ static inline unsigned long __cmpxchg_local_generic(volatile void *ptr,
|
||||
if (size == 8 && sizeof(unsigned long) != 8)
|
||||
wrong_size_cmpxchg(ptr);
|
||||
|
||||
|
@ -24,7 +24,7 @@ Index: linux-3.4/include/asm-generic/cmpxchg-local.h
|
|||
switch (size) {
|
||||
case 1: prev = *(u8 *)ptr;
|
||||
if (prev == old)
|
||||
@@ -42,7 +42,7 @@ static inline unsigned long __cmpxchg_lo
|
||||
@@ -42,7 +42,7 @@ static inline unsigned long __cmpxchg_local_generic(volatile void *ptr,
|
||||
default:
|
||||
wrong_size_cmpxchg(ptr);
|
||||
}
|
||||
|
@ -33,7 +33,7 @@ Index: linux-3.4/include/asm-generic/cmpxchg-local.h
|
|||
return prev;
|
||||
}
|
||||
|
||||
@@ -55,11 +55,11 @@ static inline u64 __cmpxchg64_local_gene
|
||||
@@ -55,11 +55,11 @@ static inline u64 __cmpxchg64_local_generic(volatile void *ptr,
|
||||
u64 prev;
|
||||
unsigned long flags;
|
||||
|
|
@ -1,21 +1,21 @@
|
|||
From 03d583ea3c9f9efc3987f92f3ecbcda37f186c22 Mon Sep 17 00:00:00 2001
|
||||
From: Ingo Molnar <mingo@elte.hu>
|
||||
Date: Fri, 3 Jul 2009 08:29:30 -0500
|
||||
Subject: drivers: random: Reduce preempt disabled region
|
||||
Subject: [025/254] drivers: random: Reduce preempt disabled region
|
||||
|
||||
No need to keep preemption disabled across the whole function.
|
||||
|
||||
Signed-off-by: Ingo Molnar <mingo@elte.hu>
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
|
||||
---
|
||||
drivers/char/random.c | 9 +++++----
|
||||
1 file changed, 5 insertions(+), 4 deletions(-)
|
||||
|
||||
Index: linux-3.4/drivers/char/random.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/drivers/char/random.c
|
||||
+++ linux-3.4/drivers/char/random.c
|
||||
@@ -633,8 +633,11 @@ static void add_timer_randomness(struct
|
||||
diff --git a/drivers/char/random.c b/drivers/char/random.c
|
||||
index 4ec04a7..1e37cf4 100644
|
||||
--- a/drivers/char/random.c
|
||||
+++ b/drivers/char/random.c
|
||||
@@ -633,8 +633,11 @@ static void add_timer_randomness(struct timer_rand_state *state, unsigned num)
|
||||
preempt_disable();
|
||||
/* if over the trickle threshold, use only 1 in 4096 samples */
|
||||
if (input_pool.entropy_count > trickle_thresh &&
|
||||
|
@ -29,7 +29,7 @@ Index: linux-3.4/drivers/char/random.c
|
|||
|
||||
sample.jiffies = jiffies;
|
||||
|
||||
@@ -680,8 +683,6 @@ static void add_timer_randomness(struct
|
||||
@@ -680,8 +683,6 @@ static void add_timer_randomness(struct timer_rand_state *state, unsigned num)
|
||||
credit_entropy_bits(&input_pool,
|
||||
min_t(int, fls(delta>>1), 11));
|
||||
}
|
|
@ -1,6 +1,8 @@
|
|||
From 32fd981d72873c06b1295170f212229d6c2f9a8e Mon Sep 17 00:00:00 2001
|
||||
From: Benedikt Spranger <b.spranger@linutronix.de>
|
||||
Date: Sat, 6 Mar 2010 17:47:10 +0100
|
||||
Subject: ARM: AT91: PIT: Remove irq handler when clock event is unused
|
||||
Subject: [026/254] ARM: AT91: PIT: Remove irq handler when clock event is
|
||||
unused
|
||||
|
||||
Setup and remove the interrupt handler in clock event mode selection.
|
||||
This avoids calling the (shared) interrupt handler when the device is
|
||||
|
@ -8,17 +10,16 @@ not used.
|
|||
|
||||
Signed-off-by: Benedikt Spranger <b.spranger@linutronix.de>
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
|
||||
---
|
||||
arch/arm/mach-at91/at91rm9200_time.c | 1 +
|
||||
arch/arm/mach-at91/at91sam926x_time.c | 5 ++++-
|
||||
2 files changed, 5 insertions(+), 1 deletion(-)
|
||||
|
||||
Index: linux-3.4/arch/arm/mach-at91/at91rm9200_time.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/arm/mach-at91/at91rm9200_time.c
|
||||
+++ linux-3.4/arch/arm/mach-at91/at91rm9200_time.c
|
||||
@@ -130,6 +130,7 @@ clkevt32k_mode(enum clock_event_mode mod
|
||||
diff --git a/arch/arm/mach-at91/at91rm9200_time.c b/arch/arm/mach-at91/at91rm9200_time.c
|
||||
index 104ca40..49aea48 100644
|
||||
--- a/arch/arm/mach-at91/at91rm9200_time.c
|
||||
+++ b/arch/arm/mach-at91/at91rm9200_time.c
|
||||
@@ -130,6 +130,7 @@ clkevt32k_mode(enum clock_event_mode mode, struct clock_event_device *dev)
|
||||
break;
|
||||
case CLOCK_EVT_MODE_SHUTDOWN:
|
||||
case CLOCK_EVT_MODE_UNUSED:
|
||||
|
@ -26,10 +27,10 @@ Index: linux-3.4/arch/arm/mach-at91/at91rm9200_time.c
|
|||
case CLOCK_EVT_MODE_RESUME:
|
||||
irqmask = 0;
|
||||
break;
|
||||
Index: linux-3.4/arch/arm/mach-at91/at91sam926x_time.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/arm/mach-at91/at91sam926x_time.c
|
||||
+++ linux-3.4/arch/arm/mach-at91/at91sam926x_time.c
|
||||
diff --git a/arch/arm/mach-at91/at91sam926x_time.c b/arch/arm/mach-at91/at91sam926x_time.c
|
||||
index a94758b..dd300f3 100644
|
||||
--- a/arch/arm/mach-at91/at91sam926x_time.c
|
||||
+++ b/arch/arm/mach-at91/at91sam926x_time.c
|
||||
@@ -67,7 +67,7 @@ static struct clocksource pit_clk = {
|
||||
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
|
||||
};
|
||||
|
@ -39,7 +40,7 @@ Index: linux-3.4/arch/arm/mach-at91/at91sam926x_time.c
|
|||
/*
|
||||
* Clockevent device: interrupts every 1/HZ (== pit_cycles * MCK/16)
|
||||
*/
|
||||
@@ -76,6 +76,8 @@ pit_clkevt_mode(enum clock_event_mode mo
|
||||
@@ -76,6 +76,8 @@ pit_clkevt_mode(enum clock_event_mode mode, struct clock_event_device *dev)
|
||||
{
|
||||
switch (mode) {
|
||||
case CLOCK_EVT_MODE_PERIODIC:
|
||||
|
@ -48,7 +49,7 @@ Index: linux-3.4/arch/arm/mach-at91/at91sam926x_time.c
|
|||
/* update clocksource counter */
|
||||
pit_cnt += pit_cycle * PIT_PICNT(pit_read(AT91_PIT_PIVR));
|
||||
pit_write(AT91_PIT_MR, (pit_cycle - 1) | AT91_PIT_PITEN
|
||||
@@ -88,6 +90,7 @@ pit_clkevt_mode(enum clock_event_mode mo
|
||||
@@ -88,6 +90,7 @@ pit_clkevt_mode(enum clock_event_mode mode, struct clock_event_device *dev)
|
||||
case CLOCK_EVT_MODE_UNUSED:
|
||||
/* disable irq, leaving the clocksource active */
|
||||
pit_write(AT91_PIT_MR, (pit_cycle - 1) | AT91_PIT_PITEN);
|
|
@ -1,22 +1,23 @@
|
|||
From 3d82c18855252176159e8023076f631d83e4a2da Mon Sep 17 00:00:00 2001
|
||||
From: Benedikt Spranger <b.spranger@linutronix.de>
|
||||
Date: Mon, 8 Mar 2010 18:57:04 +0100
|
||||
Subject: clocksource: TCLIB: Allow higher clock rates for clock events
|
||||
Subject: [027/254] clocksource: TCLIB: Allow higher clock rates for clock
|
||||
events
|
||||
|
||||
As default the TCLIB uses the 32KiHz base clock rate for clock events.
|
||||
Add a compile time selection to allow higher clock resulution.
|
||||
|
||||
Signed-off-by: Benedikt Spranger <b.spranger@linutronix.de>
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
|
||||
---
|
||||
drivers/clocksource/tcb_clksrc.c | 44 +++++++++++++++++++++++----------------
|
||||
drivers/misc/Kconfig | 11 +++++++--
|
||||
drivers/clocksource/tcb_clksrc.c | 44 ++++++++++++++++++++++----------------
|
||||
drivers/misc/Kconfig | 11 ++++++++--
|
||||
2 files changed, 35 insertions(+), 20 deletions(-)
|
||||
|
||||
Index: linux-3.4/drivers/clocksource/tcb_clksrc.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/drivers/clocksource/tcb_clksrc.c
|
||||
+++ linux-3.4/drivers/clocksource/tcb_clksrc.c
|
||||
diff --git a/drivers/clocksource/tcb_clksrc.c b/drivers/clocksource/tcb_clksrc.c
|
||||
index 32cb929..ac0bb2e 100644
|
||||
--- a/drivers/clocksource/tcb_clksrc.c
|
||||
+++ b/drivers/clocksource/tcb_clksrc.c
|
||||
@@ -23,8 +23,7 @@
|
||||
* this 32 bit free-running counter. the second channel is not used.
|
||||
*
|
||||
|
@ -35,7 +36,7 @@ Index: linux-3.4/drivers/clocksource/tcb_clksrc.c
|
|||
void __iomem *regs;
|
||||
};
|
||||
|
||||
@@ -82,13 +82,6 @@ static struct tc_clkevt_device *to_tc_cl
|
||||
@@ -82,13 +82,6 @@ static struct tc_clkevt_device *to_tc_clkevt(struct clock_event_device *clkevt)
|
||||
return container_of(clkevt, struct tc_clkevt_device, clkevt);
|
||||
}
|
||||
|
||||
|
@ -49,7 +50,7 @@ Index: linux-3.4/drivers/clocksource/tcb_clksrc.c
|
|||
static u32 timer_clock;
|
||||
|
||||
static void tc_mode(enum clock_event_mode m, struct clock_event_device *d)
|
||||
@@ -111,11 +104,12 @@ static void tc_mode(enum clock_event_mod
|
||||
@@ -111,11 +104,12 @@ static void tc_mode(enum clock_event_mode m, struct clock_event_device *d)
|
||||
case CLOCK_EVT_MODE_PERIODIC:
|
||||
clk_enable(tcd->clk);
|
||||
|
||||
|
@ -64,7 +65,7 @@ Index: linux-3.4/drivers/clocksource/tcb_clksrc.c
|
|||
|
||||
/* Enable clock and interrupts on RC compare */
|
||||
__raw_writel(ATMEL_TC_CPCS, regs + ATMEL_TC_REG(2, IER));
|
||||
@@ -128,7 +122,7 @@ static void tc_mode(enum clock_event_mod
|
||||
@@ -128,7 +122,7 @@ static void tc_mode(enum clock_event_mode m, struct clock_event_device *d)
|
||||
case CLOCK_EVT_MODE_ONESHOT:
|
||||
clk_enable(tcd->clk);
|
||||
|
||||
|
@ -73,7 +74,7 @@ Index: linux-3.4/drivers/clocksource/tcb_clksrc.c
|
|||
__raw_writel(timer_clock | ATMEL_TC_CPCSTOP
|
||||
| ATMEL_TC_WAVE | ATMEL_TC_WAVESEL_UP_AUTO,
|
||||
regs + ATMEL_TC_REG(2, CMR));
|
||||
@@ -158,8 +152,12 @@ static struct tc_clkevt_device clkevt =
|
||||
@@ -158,8 +152,12 @@ static struct tc_clkevt_device clkevt = {
|
||||
.features = CLOCK_EVT_FEAT_PERIODIC
|
||||
| CLOCK_EVT_FEAT_ONESHOT,
|
||||
.shift = 32,
|
||||
|
@ -97,7 +98,7 @@ Index: linux-3.4/drivers/clocksource/tcb_clksrc.c
|
|||
struct clk *t2_clk = tc->clk[2];
|
||||
int irq = tc->irq[2];
|
||||
|
||||
@@ -194,11 +193,17 @@ static void __init setup_clkevents(struc
|
||||
@@ -194,11 +193,17 @@ static void __init setup_clkevents(struct atmel_tc *tc, int clk32k_divisor_idx)
|
||||
clkevt.clk = t2_clk;
|
||||
tc_irqaction.dev_id = &clkevt;
|
||||
|
||||
|
@ -132,10 +133,10 @@ Index: linux-3.4/drivers/clocksource/tcb_clksrc.c
|
|||
return 0;
|
||||
}
|
||||
arch_initcall(tcb_clksrc_init);
|
||||
Index: linux-3.4/drivers/misc/Kconfig
|
||||
===================================================================
|
||||
--- linux-3.4.orig/drivers/misc/Kconfig
|
||||
+++ linux-3.4/drivers/misc/Kconfig
|
||||
diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
|
||||
index c779509..504daa3 100644
|
||||
--- a/drivers/misc/Kconfig
|
||||
+++ b/drivers/misc/Kconfig
|
||||
@@ -87,8 +87,7 @@ config ATMEL_TCB_CLKSRC
|
||||
are combined to make a single 32-bit timer.
|
||||
|
|
@ -1,21 +1,22 @@
|
|||
From b88c1dd98e031a24f3767c6c706a87fc84ec0dda Mon Sep 17 00:00:00 2001
|
||||
From: Ingo Molnar <mingo@elte.hu>
|
||||
Date: Fri, 3 Jul 2009 08:30:18 -0500
|
||||
Subject: drivers/net: tulip_remove_one needs to call pci_disable_device()
|
||||
Subject: [028/254] drivers/net: tulip_remove_one needs to call
|
||||
pci_disable_device()
|
||||
|
||||
Otherwise the device is not completely shut down.
|
||||
|
||||
Signed-off-by: Ingo Molnar <mingo@elte.hu>
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
|
||||
---
|
||||
drivers/net/ethernet/dec/tulip/tulip_core.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
Index: linux-3.4/drivers/net/ethernet/dec/tulip/tulip_core.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/drivers/net/ethernet/dec/tulip/tulip_core.c
|
||||
+++ linux-3.4/drivers/net/ethernet/dec/tulip/tulip_core.c
|
||||
@@ -1946,6 +1946,7 @@ static void __devexit tulip_remove_one (
|
||||
diff --git a/drivers/net/ethernet/dec/tulip/tulip_core.c b/drivers/net/ethernet/dec/tulip/tulip_core.c
|
||||
index fea3641..d9a5fe0 100644
|
||||
--- a/drivers/net/ethernet/dec/tulip/tulip_core.c
|
||||
+++ b/drivers/net/ethernet/dec/tulip/tulip_core.c
|
||||
@@ -1946,6 +1946,7 @@ static void __devexit tulip_remove_one (struct pci_dev *pdev)
|
||||
pci_iounmap(pdev, tp->base_addr);
|
||||
free_netdev (dev);
|
||||
pci_release_regions (pdev);
|
|
@ -1,22 +1,22 @@
|
|||
From af77a6725797d4be5948ac0272ff74c44ef1acd4 Mon Sep 17 00:00:00 2001
|
||||
From: Ingo Molnar <mingo@elte.hu>
|
||||
Date: Fri, 3 Jul 2009 08:29:24 -0500
|
||||
Subject: drivers/net: Use disable_irq_nosync() in 8139too
|
||||
Subject: [029/254] drivers/net: Use disable_irq_nosync() in 8139too
|
||||
|
||||
Use disable_irq_nosync() instead of disable_irq() as this might be
|
||||
called in atomic context with netpoll.
|
||||
|
||||
Signed-off-by: Ingo Molnar <mingo@elte.hu>
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
|
||||
---
|
||||
drivers/net/ethernet/realtek/8139too.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
Index: linux-3.4/drivers/net/ethernet/realtek/8139too.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/drivers/net/ethernet/realtek/8139too.c
|
||||
+++ linux-3.4/drivers/net/ethernet/realtek/8139too.c
|
||||
@@ -2240,7 +2240,7 @@ static irqreturn_t rtl8139_interrupt (in
|
||||
diff --git a/drivers/net/ethernet/realtek/8139too.c b/drivers/net/ethernet/realtek/8139too.c
|
||||
index df7fd8d..7ce74f6 100644
|
||||
--- a/drivers/net/ethernet/realtek/8139too.c
|
||||
+++ b/drivers/net/ethernet/realtek/8139too.c
|
||||
@@ -2240,7 +2240,7 @@ static irqreturn_t rtl8139_interrupt (int irq, void *dev_instance)
|
||||
*/
|
||||
static void rtl8139_poll_controller(struct net_device *dev)
|
||||
{
|
|
@ -1,6 +1,8 @@
|
|||
From ea097b3400c3e296b0f048156f5fa8f56c9cefe9 Mon Sep 17 00:00:00 2001
|
||||
From: Darren Hart <dvhltc@us.ibm.com>
|
||||
Date: Tue, 18 May 2010 14:33:07 -0700
|
||||
Subject: drivers: net: ehea: Make rx irq handler non-threaded (IRQF_NO_THREAD)
|
||||
Subject: [030/254] drivers: net: ehea: Make rx irq handler non-threaded
|
||||
(IRQF_NO_THREAD)
|
||||
|
||||
The underlying hardware is edge triggered but presented by XICS as level
|
||||
triggered. The edge triggered interrupts are not reissued after masking. This
|
||||
|
@ -33,16 +35,15 @@ Cc: Michael Ellerman <ellerman@au1.ibm.com>
|
|||
Cc: Doug Maxey <doug.maxey@us.ibm.com>
|
||||
LKML-Reference: <4BF30793.5070300@us.ibm.com>
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
|
||||
---
|
||||
drivers/net/ethernet/ibm/ehea/ehea_main.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
Index: linux-3.4/drivers/net/ethernet/ibm/ehea/ehea_main.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/drivers/net/ethernet/ibm/ehea/ehea_main.c
|
||||
+++ linux-3.4/drivers/net/ethernet/ibm/ehea/ehea_main.c
|
||||
@@ -1306,7 +1306,7 @@ static int ehea_reg_interrupts(struct ne
|
||||
diff --git a/drivers/net/ethernet/ibm/ehea/ehea_main.c b/drivers/net/ethernet/ibm/ehea/ehea_main.c
|
||||
index f4d2da0..a4cb742 100644
|
||||
--- a/drivers/net/ethernet/ibm/ehea/ehea_main.c
|
||||
+++ b/drivers/net/ethernet/ibm/ehea/ehea_main.c
|
||||
@@ -1308,7 +1308,7 @@ static int ehea_reg_interrupts(struct net_device *dev)
|
||||
"%s-queue%d", dev->name, i);
|
||||
ret = ibmebus_request_irq(pr->eq->attr.ist1,
|
||||
ehea_recv_irq_handler,
|
|
@ -1,6 +1,7 @@
|
|||
From 875d4985f695102c4e380e4f697c57c935da2c05 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Tue, 17 Nov 2009 12:02:43 +0100
|
||||
Subject: drivers: net: at91_ether: Make mdio protection -rt safe
|
||||
Subject: [031/254] drivers: net: at91_ether: Make mdio protection -rt safe
|
||||
|
||||
Neither the phy interrupt nor the timer callback which updates the
|
||||
link status in absense of a phy interrupt are taking lp->lock which
|
||||
|
@ -13,16 +14,15 @@ Fix this by adding proper locking to at91ether_phy_interrupt() and
|
|||
at91_check_ether() which serializes the access on -rt.
|
||||
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
|
||||
---
|
||||
drivers/net/ethernet/cadence/at91_ether.c | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
Index: linux-3.4/drivers/net/ethernet/cadence/at91_ether.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/drivers/net/ethernet/cadence/at91_ether.c
|
||||
+++ linux-3.4/drivers/net/ethernet/cadence/at91_ether.c
|
||||
@@ -201,7 +201,9 @@ static irqreturn_t at91ether_phy_interru
|
||||
diff --git a/drivers/net/ethernet/cadence/at91_ether.c b/drivers/net/ethernet/cadence/at91_ether.c
|
||||
index 9061170..6b9e006 100644
|
||||
--- a/drivers/net/ethernet/cadence/at91_ether.c
|
||||
+++ b/drivers/net/ethernet/cadence/at91_ether.c
|
||||
@@ -201,7 +201,9 @@ static irqreturn_t at91ether_phy_interrupt(int irq, void *dev_id)
|
||||
struct net_device *dev = (struct net_device *) dev_id;
|
||||
struct at91_private *lp = netdev_priv(dev);
|
||||
unsigned int phy;
|
||||
|
@ -32,7 +32,7 @@ Index: linux-3.4/drivers/net/ethernet/cadence/at91_ether.c
|
|||
/*
|
||||
* This hander is triggered on both edges, but the PHY chips expect
|
||||
* level-triggering. We therefore have to check if the PHY actually has
|
||||
@@ -243,6 +245,7 @@ static irqreturn_t at91ether_phy_interru
|
||||
@@ -243,6 +245,7 @@ static irqreturn_t at91ether_phy_interrupt(int irq, void *dev_id)
|
||||
|
||||
done:
|
||||
disable_mdi();
|
||||
|
@ -40,7 +40,7 @@ Index: linux-3.4/drivers/net/ethernet/cadence/at91_ether.c
|
|||
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
@@ -399,9 +402,11 @@ static void at91ether_check_link(unsigne
|
||||
@@ -399,9 +402,11 @@ static void at91ether_check_link(unsigned long dev_id)
|
||||
struct net_device *dev = (struct net_device *) dev_id;
|
||||
struct at91_private *lp = netdev_priv(dev);
|
||||
|
|
@ -1,13 +1,13 @@
|
|||
From 69181f2ef2ee3ef5f638c925216133e9d47abbfe Mon Sep 17 00:00:00 2001
|
||||
From: Ingo Molnar <mingo@elte.hu>
|
||||
Date: Fri, 3 Jul 2009 08:30:37 -0500
|
||||
Subject: mm: Prepare decoupling the page fault disabling logic
|
||||
Subject: [032/254] mm: Prepare decoupling the page fault disabling logic
|
||||
|
||||
Add a pagefault_disabled variable to task_struct to allow decoupling
|
||||
the pagefault-disabled logic from the preempt count.
|
||||
|
||||
Signed-off-by: Ingo Molnar <mingo@elte.hu>
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
|
||||
---
|
||||
include/linux/sched.h | 1 +
|
||||
include/linux/uaccess.h | 33 +++------------------------------
|
||||
|
@ -15,10 +15,10 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
|||
mm/memory.c | 29 +++++++++++++++++++++++++++++
|
||||
4 files changed, 34 insertions(+), 30 deletions(-)
|
||||
|
||||
Index: linux-3.4/include/linux/sched.h
|
||||
===================================================================
|
||||
--- linux-3.4.orig/include/linux/sched.h
|
||||
+++ linux-3.4/include/linux/sched.h
|
||||
diff --git a/include/linux/sched.h b/include/linux/sched.h
|
||||
index bd5caa1..f0ee37f 100644
|
||||
--- a/include/linux/sched.h
|
||||
+++ b/include/linux/sched.h
|
||||
@@ -1478,6 +1478,7 @@ struct task_struct {
|
||||
/* mutex deadlock detection */
|
||||
struct mutex_waiter *blocked_on;
|
||||
|
@ -27,10 +27,10 @@ Index: linux-3.4/include/linux/sched.h
|
|||
#ifdef CONFIG_TRACE_IRQFLAGS
|
||||
unsigned int irq_events;
|
||||
unsigned long hardirq_enable_ip;
|
||||
Index: linux-3.4/include/linux/uaccess.h
|
||||
===================================================================
|
||||
--- linux-3.4.orig/include/linux/uaccess.h
|
||||
+++ linux-3.4/include/linux/uaccess.h
|
||||
diff --git a/include/linux/uaccess.h b/include/linux/uaccess.h
|
||||
index 5ca0951..9414a1b 100644
|
||||
--- a/include/linux/uaccess.h
|
||||
+++ b/include/linux/uaccess.h
|
||||
@@ -6,37 +6,10 @@
|
||||
|
||||
/*
|
||||
|
@ -72,11 +72,11 @@ Index: linux-3.4/include/linux/uaccess.h
|
|||
|
||||
#ifndef ARCH_HAS_NOCACHE_UACCESS
|
||||
|
||||
Index: linux-3.4/kernel/fork.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/kernel/fork.c
|
||||
+++ linux-3.4/kernel/fork.c
|
||||
@@ -1263,6 +1263,7 @@ static struct task_struct *copy_process(
|
||||
diff --git a/kernel/fork.c b/kernel/fork.c
|
||||
index b767e68..fdf0795 100644
|
||||
--- a/kernel/fork.c
|
||||
+++ b/kernel/fork.c
|
||||
@@ -1265,6 +1265,7 @@ static struct task_struct *copy_process(unsigned long clone_flags,
|
||||
p->hardirq_context = 0;
|
||||
p->softirq_context = 0;
|
||||
#endif
|
||||
|
@ -84,10 +84,10 @@ Index: linux-3.4/kernel/fork.c
|
|||
#ifdef CONFIG_LOCKDEP
|
||||
p->lockdep_depth = 0; /* no locks held yet */
|
||||
p->curr_chain_key = 0;
|
||||
Index: linux-3.4/mm/memory.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/mm/memory.c
|
||||
+++ linux-3.4/mm/memory.c
|
||||
diff --git a/mm/memory.c b/mm/memory.c
|
||||
index 6105f47..c3b9c80 100644
|
||||
--- a/mm/memory.c
|
||||
+++ b/mm/memory.c
|
||||
@@ -3467,6 +3467,35 @@ unlock:
|
||||
return 0;
|
||||
}
|
|
@ -1,6 +1,8 @@
|
|||
Subject: mm: Fixup all fault handlers to check current->pagefault_disable
|
||||
From 5b99982803b4684529e5f5e0340b133ec0fa3a3e Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Thu, 17 Mar 2011 11:32:28 +0100
|
||||
Subject: [033/254] mm: Fixup all fault handlers to check
|
||||
current->pagefault_disable
|
||||
|
||||
Necessary for decoupling pagefault disable from preempt count.
|
||||
|
||||
|
@ -30,11 +32,11 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
|||
arch/xtensa/mm/fault.c | 2 +-
|
||||
22 files changed, 27 insertions(+), 24 deletions(-)
|
||||
|
||||
Index: linux-3.4/arch/alpha/mm/fault.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/alpha/mm/fault.c
|
||||
+++ linux-3.4/arch/alpha/mm/fault.c
|
||||
@@ -106,7 +106,7 @@ do_page_fault(unsigned long address, uns
|
||||
diff --git a/arch/alpha/mm/fault.c b/arch/alpha/mm/fault.c
|
||||
index 5eecab1..0ddf6c0 100644
|
||||
--- a/arch/alpha/mm/fault.c
|
||||
+++ b/arch/alpha/mm/fault.c
|
||||
@@ -106,7 +106,7 @@ do_page_fault(unsigned long address, unsigned long mmcsr,
|
||||
|
||||
/* If we're in an interrupt context, or have no user context,
|
||||
we must not take the fault. */
|
||||
|
@ -43,11 +45,11 @@ Index: linux-3.4/arch/alpha/mm/fault.c
|
|||
goto no_context;
|
||||
|
||||
#ifdef CONFIG_ALPHA_LARGE_VMALLOC
|
||||
Index: linux-3.4/arch/arm/mm/fault.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/arm/mm/fault.c
|
||||
+++ linux-3.4/arch/arm/mm/fault.c
|
||||
@@ -277,7 +277,7 @@ do_page_fault(unsigned long addr, unsign
|
||||
diff --git a/arch/arm/mm/fault.c b/arch/arm/mm/fault.c
|
||||
index 5bb4835..40bd40f 100644
|
||||
--- a/arch/arm/mm/fault.c
|
||||
+++ b/arch/arm/mm/fault.c
|
||||
@@ -279,7 +279,7 @@ do_page_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
|
||||
* If we're in an interrupt or have no user
|
||||
* context, we must not take the fault..
|
||||
*/
|
||||
|
@ -56,11 +58,11 @@ Index: linux-3.4/arch/arm/mm/fault.c
|
|||
goto no_context;
|
||||
|
||||
/*
|
||||
Index: linux-3.4/arch/avr32/mm/fault.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/avr32/mm/fault.c
|
||||
+++ linux-3.4/arch/avr32/mm/fault.c
|
||||
@@ -81,7 +81,8 @@ asmlinkage void do_page_fault(unsigned l
|
||||
diff --git a/arch/avr32/mm/fault.c b/arch/avr32/mm/fault.c
|
||||
index f7040a1..623a027 100644
|
||||
--- a/arch/avr32/mm/fault.c
|
||||
+++ b/arch/avr32/mm/fault.c
|
||||
@@ -81,7 +81,8 @@ asmlinkage void do_page_fault(unsigned long ecr, struct pt_regs *regs)
|
||||
* If we're in an interrupt or have no user context, we must
|
||||
* not take the fault...
|
||||
*/
|
||||
|
@ -70,11 +72,11 @@ Index: linux-3.4/arch/avr32/mm/fault.c
|
|||
goto no_context;
|
||||
|
||||
local_irq_enable();
|
||||
Index: linux-3.4/arch/cris/mm/fault.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/cris/mm/fault.c
|
||||
+++ linux-3.4/arch/cris/mm/fault.c
|
||||
@@ -112,7 +112,7 @@ do_page_fault(unsigned long address, str
|
||||
diff --git a/arch/cris/mm/fault.c b/arch/cris/mm/fault.c
|
||||
index b4760d8..1c1630e 100644
|
||||
--- a/arch/cris/mm/fault.c
|
||||
+++ b/arch/cris/mm/fault.c
|
||||
@@ -112,7 +112,7 @@ do_page_fault(unsigned long address, struct pt_regs *regs,
|
||||
* user context, we must not take the fault.
|
||||
*/
|
||||
|
||||
|
@ -83,11 +85,11 @@ Index: linux-3.4/arch/cris/mm/fault.c
|
|||
goto no_context;
|
||||
|
||||
down_read(&mm->mmap_sem);
|
||||
Index: linux-3.4/arch/frv/mm/fault.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/frv/mm/fault.c
|
||||
+++ linux-3.4/arch/frv/mm/fault.c
|
||||
@@ -78,7 +78,7 @@ asmlinkage void do_page_fault(int datamm
|
||||
diff --git a/arch/frv/mm/fault.c b/arch/frv/mm/fault.c
|
||||
index 331c1e2..6372088 100644
|
||||
--- a/arch/frv/mm/fault.c
|
||||
+++ b/arch/frv/mm/fault.c
|
||||
@@ -78,7 +78,7 @@ asmlinkage void do_page_fault(int datammu, unsigned long esr0, unsigned long ear
|
||||
* If we're in an interrupt or have no user
|
||||
* context, we must not take the fault..
|
||||
*/
|
||||
|
@ -96,11 +98,11 @@ Index: linux-3.4/arch/frv/mm/fault.c
|
|||
goto no_context;
|
||||
|
||||
down_read(&mm->mmap_sem);
|
||||
Index: linux-3.4/arch/ia64/mm/fault.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/ia64/mm/fault.c
|
||||
+++ linux-3.4/arch/ia64/mm/fault.c
|
||||
@@ -88,7 +88,7 @@ ia64_do_page_fault (unsigned long addres
|
||||
diff --git a/arch/ia64/mm/fault.c b/arch/ia64/mm/fault.c
|
||||
index 02d29c2..721dbb9 100644
|
||||
--- a/arch/ia64/mm/fault.c
|
||||
+++ b/arch/ia64/mm/fault.c
|
||||
@@ -88,7 +88,7 @@ ia64_do_page_fault (unsigned long address, unsigned long isr, struct pt_regs *re
|
||||
/*
|
||||
* If we're in an interrupt or have no user context, we must not take the fault..
|
||||
*/
|
||||
|
@ -109,11 +111,11 @@ Index: linux-3.4/arch/ia64/mm/fault.c
|
|||
goto no_context;
|
||||
|
||||
#ifdef CONFIG_VIRTUAL_MEM_MAP
|
||||
Index: linux-3.4/arch/m32r/mm/fault.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/m32r/mm/fault.c
|
||||
+++ linux-3.4/arch/m32r/mm/fault.c
|
||||
@@ -114,7 +114,7 @@ asmlinkage void do_page_fault(struct pt_
|
||||
diff --git a/arch/m32r/mm/fault.c b/arch/m32r/mm/fault.c
|
||||
index 3cdfa9c..1eec8af 100644
|
||||
--- a/arch/m32r/mm/fault.c
|
||||
+++ b/arch/m32r/mm/fault.c
|
||||
@@ -114,7 +114,7 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long error_code,
|
||||
* If we're in an interrupt or have no user context or are running in an
|
||||
* atomic region then we must not take the fault..
|
||||
*/
|
||||
|
@ -122,11 +124,11 @@ Index: linux-3.4/arch/m32r/mm/fault.c
|
|||
goto bad_area_nosemaphore;
|
||||
|
||||
/* When running in the kernel we expect faults to occur only to
|
||||
Index: linux-3.4/arch/m68k/mm/fault.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/m68k/mm/fault.c
|
||||
+++ linux-3.4/arch/m68k/mm/fault.c
|
||||
@@ -84,7 +84,7 @@ int do_page_fault(struct pt_regs *regs,
|
||||
diff --git a/arch/m68k/mm/fault.c b/arch/m68k/mm/fault.c
|
||||
index 6b020a8..7a4cc68 100644
|
||||
--- a/arch/m68k/mm/fault.c
|
||||
+++ b/arch/m68k/mm/fault.c
|
||||
@@ -84,7 +84,7 @@ int do_page_fault(struct pt_regs *regs, unsigned long address,
|
||||
* If we're in an interrupt or have no user
|
||||
* context, we must not take the fault..
|
||||
*/
|
||||
|
@ -135,11 +137,11 @@ Index: linux-3.4/arch/m68k/mm/fault.c
|
|||
goto no_context;
|
||||
|
||||
down_read(&mm->mmap_sem);
|
||||
Index: linux-3.4/arch/microblaze/mm/fault.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/microblaze/mm/fault.c
|
||||
+++ linux-3.4/arch/microblaze/mm/fault.c
|
||||
@@ -106,7 +106,7 @@ void do_page_fault(struct pt_regs *regs,
|
||||
diff --git a/arch/microblaze/mm/fault.c b/arch/microblaze/mm/fault.c
|
||||
index c38a265..621ad49 100644
|
||||
--- a/arch/microblaze/mm/fault.c
|
||||
+++ b/arch/microblaze/mm/fault.c
|
||||
@@ -106,7 +106,7 @@ void do_page_fault(struct pt_regs *regs, unsigned long address,
|
||||
if ((error_code & 0x13) == 0x13 || (error_code & 0x11) == 0x11)
|
||||
is_write = 0;
|
||||
|
||||
|
@ -148,11 +150,11 @@ Index: linux-3.4/arch/microblaze/mm/fault.c
|
|||
if (kernel_mode(regs))
|
||||
goto bad_area_nosemaphore;
|
||||
|
||||
Index: linux-3.4/arch/mips/mm/fault.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/mips/mm/fault.c
|
||||
+++ linux-3.4/arch/mips/mm/fault.c
|
||||
@@ -89,7 +89,7 @@ asmlinkage void __kprobes do_page_fault(
|
||||
diff --git a/arch/mips/mm/fault.c b/arch/mips/mm/fault.c
|
||||
index c14f6df..3468e69 100644
|
||||
--- a/arch/mips/mm/fault.c
|
||||
+++ b/arch/mips/mm/fault.c
|
||||
@@ -89,7 +89,7 @@ asmlinkage void __kprobes do_page_fault(struct pt_regs *regs, unsigned long writ
|
||||
* If we're in an interrupt or have no user
|
||||
* context, we must not take the fault..
|
||||
*/
|
||||
|
@ -161,11 +163,11 @@ Index: linux-3.4/arch/mips/mm/fault.c
|
|||
goto bad_area_nosemaphore;
|
||||
|
||||
retry:
|
||||
Index: linux-3.4/arch/mn10300/mm/fault.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/mn10300/mm/fault.c
|
||||
+++ linux-3.4/arch/mn10300/mm/fault.c
|
||||
@@ -167,7 +167,7 @@ asmlinkage void do_page_fault(struct pt_
|
||||
diff --git a/arch/mn10300/mm/fault.c b/arch/mn10300/mm/fault.c
|
||||
index 90f346f..ff5acf5 100644
|
||||
--- a/arch/mn10300/mm/fault.c
|
||||
+++ b/arch/mn10300/mm/fault.c
|
||||
@@ -167,7 +167,7 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long fault_code,
|
||||
* If we're in an interrupt or have no user
|
||||
* context, we must not take the fault..
|
||||
*/
|
||||
|
@ -174,11 +176,11 @@ Index: linux-3.4/arch/mn10300/mm/fault.c
|
|||
goto no_context;
|
||||
|
||||
down_read(&mm->mmap_sem);
|
||||
Index: linux-3.4/arch/parisc/mm/fault.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/parisc/mm/fault.c
|
||||
+++ linux-3.4/arch/parisc/mm/fault.c
|
||||
@@ -176,7 +176,7 @@ void do_page_fault(struct pt_regs *regs,
|
||||
diff --git a/arch/parisc/mm/fault.c b/arch/parisc/mm/fault.c
|
||||
index 18162ce..09ecc8a 100644
|
||||
--- a/arch/parisc/mm/fault.c
|
||||
+++ b/arch/parisc/mm/fault.c
|
||||
@@ -176,7 +176,7 @@ void do_page_fault(struct pt_regs *regs, unsigned long code,
|
||||
unsigned long acc_type;
|
||||
int fault;
|
||||
|
||||
|
@ -187,11 +189,11 @@ Index: linux-3.4/arch/parisc/mm/fault.c
|
|||
goto no_context;
|
||||
|
||||
down_read(&mm->mmap_sem);
|
||||
Index: linux-3.4/arch/powerpc/mm/fault.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/powerpc/mm/fault.c
|
||||
+++ linux-3.4/arch/powerpc/mm/fault.c
|
||||
@@ -261,7 +261,7 @@ int __kprobes do_page_fault(struct pt_re
|
||||
diff --git a/arch/powerpc/mm/fault.c b/arch/powerpc/mm/fault.c
|
||||
index 08ffcf5..6642dff 100644
|
||||
--- a/arch/powerpc/mm/fault.c
|
||||
+++ b/arch/powerpc/mm/fault.c
|
||||
@@ -261,7 +261,7 @@ int __kprobes do_page_fault(struct pt_regs *regs, unsigned long address,
|
||||
if (!arch_irq_disabled_regs(regs))
|
||||
local_irq_enable();
|
||||
|
||||
|
@ -200,11 +202,11 @@ Index: linux-3.4/arch/powerpc/mm/fault.c
|
|||
if (!user_mode(regs))
|
||||
return SIGSEGV;
|
||||
/* in_atomic() in user mode is really bad,
|
||||
Index: linux-3.4/arch/s390/mm/fault.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/s390/mm/fault.c
|
||||
+++ linux-3.4/arch/s390/mm/fault.c
|
||||
@@ -283,7 +283,8 @@ static inline int do_exception(struct pt
|
||||
diff --git a/arch/s390/mm/fault.c b/arch/s390/mm/fault.c
|
||||
index 4e66860..f7d796f 100644
|
||||
--- a/arch/s390/mm/fault.c
|
||||
+++ b/arch/s390/mm/fault.c
|
||||
@@ -283,7 +283,8 @@ static inline int do_exception(struct pt_regs *regs, int access)
|
||||
* user context.
|
||||
*/
|
||||
fault = VM_FAULT_BADCONTEXT;
|
||||
|
@ -214,7 +216,7 @@ Index: linux-3.4/arch/s390/mm/fault.c
|
|||
goto out;
|
||||
|
||||
address = trans_exc_code & __FAIL_ADDR_MASK;
|
||||
@@ -415,7 +416,8 @@ void __kprobes do_asce_exception(struct
|
||||
@@ -415,7 +416,8 @@ void __kprobes do_asce_exception(struct pt_regs *regs)
|
||||
unsigned long trans_exc_code;
|
||||
|
||||
trans_exc_code = regs->int_parm_long;
|
||||
|
@ -224,11 +226,11 @@ Index: linux-3.4/arch/s390/mm/fault.c
|
|||
goto no_context;
|
||||
|
||||
down_read(&mm->mmap_sem);
|
||||
Index: linux-3.4/arch/score/mm/fault.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/score/mm/fault.c
|
||||
+++ linux-3.4/arch/score/mm/fault.c
|
||||
@@ -72,7 +72,7 @@ asmlinkage void do_page_fault(struct pt_
|
||||
diff --git a/arch/score/mm/fault.c b/arch/score/mm/fault.c
|
||||
index 47b600e..4c12824 100644
|
||||
--- a/arch/score/mm/fault.c
|
||||
+++ b/arch/score/mm/fault.c
|
||||
@@ -72,7 +72,7 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long write,
|
||||
* If we're in an interrupt or have no user
|
||||
* context, we must not take the fault..
|
||||
*/
|
||||
|
@ -237,11 +239,11 @@ Index: linux-3.4/arch/score/mm/fault.c
|
|||
goto bad_area_nosemaphore;
|
||||
|
||||
down_read(&mm->mmap_sem);
|
||||
Index: linux-3.4/arch/sh/mm/fault_32.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/sh/mm/fault_32.c
|
||||
+++ linux-3.4/arch/sh/mm/fault_32.c
|
||||
@@ -166,7 +166,7 @@ asmlinkage void __kprobes do_page_fault(
|
||||
diff --git a/arch/sh/mm/fault_32.c b/arch/sh/mm/fault_32.c
|
||||
index e99b104..8c3ae42 100644
|
||||
--- a/arch/sh/mm/fault_32.c
|
||||
+++ b/arch/sh/mm/fault_32.c
|
||||
@@ -166,7 +166,7 @@ asmlinkage void __kprobes do_page_fault(struct pt_regs *regs,
|
||||
* If we're in an interrupt, have no user context or are running
|
||||
* in an atomic region then we must not take the fault:
|
||||
*/
|
||||
|
@ -250,11 +252,11 @@ Index: linux-3.4/arch/sh/mm/fault_32.c
|
|||
goto no_context;
|
||||
|
||||
down_read(&mm->mmap_sem);
|
||||
Index: linux-3.4/arch/sparc/mm/fault_32.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/sparc/mm/fault_32.c
|
||||
+++ linux-3.4/arch/sparc/mm/fault_32.c
|
||||
@@ -248,8 +248,8 @@ asmlinkage void do_sparc_fault(struct pt
|
||||
diff --git a/arch/sparc/mm/fault_32.c b/arch/sparc/mm/fault_32.c
|
||||
index df3155a..ffaa99e 100644
|
||||
--- a/arch/sparc/mm/fault_32.c
|
||||
+++ b/arch/sparc/mm/fault_32.c
|
||||
@@ -248,8 +248,8 @@ asmlinkage void do_sparc_fault(struct pt_regs *regs, int text_fault, int write,
|
||||
* If we're in an interrupt or have no user
|
||||
* context, we must not take the fault..
|
||||
*/
|
||||
|
@ -265,11 +267,11 @@ Index: linux-3.4/arch/sparc/mm/fault_32.c
|
|||
|
||||
perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address);
|
||||
|
||||
Index: linux-3.4/arch/sparc/mm/fault_64.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/sparc/mm/fault_64.c
|
||||
+++ linux-3.4/arch/sparc/mm/fault_64.c
|
||||
@@ -323,7 +323,7 @@ asmlinkage void __kprobes do_sparc64_fau
|
||||
diff --git a/arch/sparc/mm/fault_64.c b/arch/sparc/mm/fault_64.c
|
||||
index 1fe0429..fbd5e11 100644
|
||||
--- a/arch/sparc/mm/fault_64.c
|
||||
+++ b/arch/sparc/mm/fault_64.c
|
||||
@@ -323,7 +323,7 @@ asmlinkage void __kprobes do_sparc64_fault(struct pt_regs *regs)
|
||||
* If we're in an interrupt or have no user
|
||||
* context, we must not take the fault..
|
||||
*/
|
||||
|
@ -278,11 +280,11 @@ Index: linux-3.4/arch/sparc/mm/fault_64.c
|
|||
goto intr_or_no_mm;
|
||||
|
||||
perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address);
|
||||
Index: linux-3.4/arch/tile/mm/fault.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/tile/mm/fault.c
|
||||
+++ linux-3.4/arch/tile/mm/fault.c
|
||||
@@ -355,7 +355,7 @@ static int handle_page_fault(struct pt_r
|
||||
diff --git a/arch/tile/mm/fault.c b/arch/tile/mm/fault.c
|
||||
index 22e58f5..f683aad 100644
|
||||
--- a/arch/tile/mm/fault.c
|
||||
+++ b/arch/tile/mm/fault.c
|
||||
@@ -355,7 +355,7 @@ static int handle_page_fault(struct pt_regs *regs,
|
||||
* If we're in an interrupt, have no user context or are running in an
|
||||
* atomic region then we must not take the fault.
|
||||
*/
|
||||
|
@ -291,11 +293,11 @@ Index: linux-3.4/arch/tile/mm/fault.c
|
|||
vma = NULL; /* happy compiler */
|
||||
goto bad_area_nosemaphore;
|
||||
}
|
||||
Index: linux-3.4/arch/um/kernel/trap.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/um/kernel/trap.c
|
||||
+++ linux-3.4/arch/um/kernel/trap.c
|
||||
@@ -37,7 +37,7 @@ int handle_page_fault(unsigned long addr
|
||||
diff --git a/arch/um/kernel/trap.c b/arch/um/kernel/trap.c
|
||||
index dafc947..a283400 100644
|
||||
--- a/arch/um/kernel/trap.c
|
||||
+++ b/arch/um/kernel/trap.c
|
||||
@@ -37,7 +37,7 @@ int handle_page_fault(unsigned long address, unsigned long ip,
|
||||
* If the fault was during atomic operation, don't take the fault, just
|
||||
* fail.
|
||||
*/
|
||||
|
@ -304,11 +306,11 @@ Index: linux-3.4/arch/um/kernel/trap.c
|
|||
goto out_nosemaphore;
|
||||
|
||||
down_read(&mm->mmap_sem);
|
||||
Index: linux-3.4/arch/x86/mm/fault.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/x86/mm/fault.c
|
||||
+++ linux-3.4/arch/x86/mm/fault.c
|
||||
@@ -1094,7 +1094,7 @@ do_page_fault(struct pt_regs *regs, unsi
|
||||
diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c
|
||||
index 3ecfd1a..bb891f2 100644
|
||||
--- a/arch/x86/mm/fault.c
|
||||
+++ b/arch/x86/mm/fault.c
|
||||
@@ -1094,7 +1094,7 @@ do_page_fault(struct pt_regs *regs, unsigned long error_code)
|
||||
* If we're in an interrupt, have no user context or are running
|
||||
* in an atomic region then we must not take the fault:
|
||||
*/
|
||||
|
@ -317,10 +319,10 @@ Index: linux-3.4/arch/x86/mm/fault.c
|
|||
bad_area_nosemaphore(regs, error_code, address);
|
||||
return;
|
||||
}
|
||||
Index: linux-3.4/arch/xtensa/mm/fault.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/xtensa/mm/fault.c
|
||||
+++ linux-3.4/arch/xtensa/mm/fault.c
|
||||
diff --git a/arch/xtensa/mm/fault.c b/arch/xtensa/mm/fault.c
|
||||
index b17885a..cc58b7c 100644
|
||||
--- a/arch/xtensa/mm/fault.c
|
||||
+++ b/arch/xtensa/mm/fault.c
|
||||
@@ -56,7 +56,7 @@ void do_page_fault(struct pt_regs *regs)
|
||||
/* If we're in an interrupt or have no user
|
||||
* context, we must not take the fault..
|
|
@ -1,6 +1,7 @@
|
|||
Subject: mm: pagefault_disabled()
|
||||
From 3d3bf4ea98185b3fec5fe75e16e576a957375a80 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Zijlstra <a.p.zijlstra@chello.nl>
|
||||
Date: Thu Aug 11 15:31:31 CEST 2011
|
||||
Date: Thu, 11 Aug 2011 15:31:31 +0200
|
||||
Subject: [034/254] mm: pagefault_disabled()
|
||||
|
||||
Wrap the test for pagefault_disabled() into a helper, this allows us
|
||||
to remove the need for current->pagefault_disabled on !-rt kernels.
|
||||
|
@ -34,11 +35,11 @@ Link: http://lkml.kernel.org/n/tip-3yy517m8zsi9fpsf14xfaqkw@git.kernel.org
|
|||
kernel/fork.c | 2 ++
|
||||
24 files changed, 40 insertions(+), 25 deletions(-)
|
||||
|
||||
Index: linux-3.4/arch/alpha/mm/fault.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/alpha/mm/fault.c
|
||||
+++ linux-3.4/arch/alpha/mm/fault.c
|
||||
@@ -106,7 +106,7 @@ do_page_fault(unsigned long address, uns
|
||||
diff --git a/arch/alpha/mm/fault.c b/arch/alpha/mm/fault.c
|
||||
index 0ddf6c0..ab6b9d13 100644
|
||||
--- a/arch/alpha/mm/fault.c
|
||||
+++ b/arch/alpha/mm/fault.c
|
||||
@@ -106,7 +106,7 @@ do_page_fault(unsigned long address, unsigned long mmcsr,
|
||||
|
||||
/* If we're in an interrupt context, or have no user context,
|
||||
we must not take the fault. */
|
||||
|
@ -47,11 +48,11 @@ Index: linux-3.4/arch/alpha/mm/fault.c
|
|||
goto no_context;
|
||||
|
||||
#ifdef CONFIG_ALPHA_LARGE_VMALLOC
|
||||
Index: linux-3.4/arch/arm/mm/fault.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/arm/mm/fault.c
|
||||
+++ linux-3.4/arch/arm/mm/fault.c
|
||||
@@ -277,7 +277,7 @@ do_page_fault(unsigned long addr, unsign
|
||||
diff --git a/arch/arm/mm/fault.c b/arch/arm/mm/fault.c
|
||||
index 40bd40f..17a9f4a 100644
|
||||
--- a/arch/arm/mm/fault.c
|
||||
+++ b/arch/arm/mm/fault.c
|
||||
@@ -279,7 +279,7 @@ do_page_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
|
||||
* If we're in an interrupt or have no user
|
||||
* context, we must not take the fault..
|
||||
*/
|
||||
|
@ -60,11 +61,11 @@ Index: linux-3.4/arch/arm/mm/fault.c
|
|||
goto no_context;
|
||||
|
||||
/*
|
||||
Index: linux-3.4/arch/avr32/mm/fault.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/avr32/mm/fault.c
|
||||
+++ linux-3.4/arch/avr32/mm/fault.c
|
||||
@@ -81,8 +81,7 @@ asmlinkage void do_page_fault(unsigned l
|
||||
diff --git a/arch/avr32/mm/fault.c b/arch/avr32/mm/fault.c
|
||||
index 623a027..155ad8d 100644
|
||||
--- a/arch/avr32/mm/fault.c
|
||||
+++ b/arch/avr32/mm/fault.c
|
||||
@@ -81,8 +81,7 @@ asmlinkage void do_page_fault(unsigned long ecr, struct pt_regs *regs)
|
||||
* If we're in an interrupt or have no user context, we must
|
||||
* not take the fault...
|
||||
*/
|
||||
|
@ -74,11 +75,11 @@ Index: linux-3.4/arch/avr32/mm/fault.c
|
|||
goto no_context;
|
||||
|
||||
local_irq_enable();
|
||||
Index: linux-3.4/arch/cris/mm/fault.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/cris/mm/fault.c
|
||||
+++ linux-3.4/arch/cris/mm/fault.c
|
||||
@@ -112,7 +112,7 @@ do_page_fault(unsigned long address, str
|
||||
diff --git a/arch/cris/mm/fault.c b/arch/cris/mm/fault.c
|
||||
index 1c1630e..886be8e 100644
|
||||
--- a/arch/cris/mm/fault.c
|
||||
+++ b/arch/cris/mm/fault.c
|
||||
@@ -112,7 +112,7 @@ do_page_fault(unsigned long address, struct pt_regs *regs,
|
||||
* user context, we must not take the fault.
|
||||
*/
|
||||
|
||||
|
@ -87,11 +88,11 @@ Index: linux-3.4/arch/cris/mm/fault.c
|
|||
goto no_context;
|
||||
|
||||
down_read(&mm->mmap_sem);
|
||||
Index: linux-3.4/arch/frv/mm/fault.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/frv/mm/fault.c
|
||||
+++ linux-3.4/arch/frv/mm/fault.c
|
||||
@@ -78,7 +78,7 @@ asmlinkage void do_page_fault(int datamm
|
||||
diff --git a/arch/frv/mm/fault.c b/arch/frv/mm/fault.c
|
||||
index 6372088..e87972c 100644
|
||||
--- a/arch/frv/mm/fault.c
|
||||
+++ b/arch/frv/mm/fault.c
|
||||
@@ -78,7 +78,7 @@ asmlinkage void do_page_fault(int datammu, unsigned long esr0, unsigned long ear
|
||||
* If we're in an interrupt or have no user
|
||||
* context, we must not take the fault..
|
||||
*/
|
||||
|
@ -100,11 +101,11 @@ Index: linux-3.4/arch/frv/mm/fault.c
|
|||
goto no_context;
|
||||
|
||||
down_read(&mm->mmap_sem);
|
||||
Index: linux-3.4/arch/ia64/mm/fault.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/ia64/mm/fault.c
|
||||
+++ linux-3.4/arch/ia64/mm/fault.c
|
||||
@@ -88,7 +88,7 @@ ia64_do_page_fault (unsigned long addres
|
||||
diff --git a/arch/ia64/mm/fault.c b/arch/ia64/mm/fault.c
|
||||
index 721dbb9..8ca850e 100644
|
||||
--- a/arch/ia64/mm/fault.c
|
||||
+++ b/arch/ia64/mm/fault.c
|
||||
@@ -88,7 +88,7 @@ ia64_do_page_fault (unsigned long address, unsigned long isr, struct pt_regs *re
|
||||
/*
|
||||
* If we're in an interrupt or have no user context, we must not take the fault..
|
||||
*/
|
||||
|
@ -113,11 +114,11 @@ Index: linux-3.4/arch/ia64/mm/fault.c
|
|||
goto no_context;
|
||||
|
||||
#ifdef CONFIG_VIRTUAL_MEM_MAP
|
||||
Index: linux-3.4/arch/m32r/mm/fault.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/m32r/mm/fault.c
|
||||
+++ linux-3.4/arch/m32r/mm/fault.c
|
||||
@@ -114,7 +114,7 @@ asmlinkage void do_page_fault(struct pt_
|
||||
diff --git a/arch/m32r/mm/fault.c b/arch/m32r/mm/fault.c
|
||||
index 1eec8af..6945056 100644
|
||||
--- a/arch/m32r/mm/fault.c
|
||||
+++ b/arch/m32r/mm/fault.c
|
||||
@@ -114,7 +114,7 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long error_code,
|
||||
* If we're in an interrupt or have no user context or are running in an
|
||||
* atomic region then we must not take the fault..
|
||||
*/
|
||||
|
@ -126,11 +127,11 @@ Index: linux-3.4/arch/m32r/mm/fault.c
|
|||
goto bad_area_nosemaphore;
|
||||
|
||||
/* When running in the kernel we expect faults to occur only to
|
||||
Index: linux-3.4/arch/m68k/mm/fault.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/m68k/mm/fault.c
|
||||
+++ linux-3.4/arch/m68k/mm/fault.c
|
||||
@@ -84,7 +84,7 @@ int do_page_fault(struct pt_regs *regs,
|
||||
diff --git a/arch/m68k/mm/fault.c b/arch/m68k/mm/fault.c
|
||||
index 7a4cc68..46b8cce 100644
|
||||
--- a/arch/m68k/mm/fault.c
|
||||
+++ b/arch/m68k/mm/fault.c
|
||||
@@ -84,7 +84,7 @@ int do_page_fault(struct pt_regs *regs, unsigned long address,
|
||||
* If we're in an interrupt or have no user
|
||||
* context, we must not take the fault..
|
||||
*/
|
||||
|
@ -139,11 +140,11 @@ Index: linux-3.4/arch/m68k/mm/fault.c
|
|||
goto no_context;
|
||||
|
||||
down_read(&mm->mmap_sem);
|
||||
Index: linux-3.4/arch/microblaze/mm/fault.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/microblaze/mm/fault.c
|
||||
+++ linux-3.4/arch/microblaze/mm/fault.c
|
||||
@@ -106,7 +106,7 @@ void do_page_fault(struct pt_regs *regs,
|
||||
diff --git a/arch/microblaze/mm/fault.c b/arch/microblaze/mm/fault.c
|
||||
index 621ad49..a438434 100644
|
||||
--- a/arch/microblaze/mm/fault.c
|
||||
+++ b/arch/microblaze/mm/fault.c
|
||||
@@ -106,7 +106,7 @@ void do_page_fault(struct pt_regs *regs, unsigned long address,
|
||||
if ((error_code & 0x13) == 0x13 || (error_code & 0x11) == 0x11)
|
||||
is_write = 0;
|
||||
|
||||
|
@ -152,11 +153,11 @@ Index: linux-3.4/arch/microblaze/mm/fault.c
|
|||
if (kernel_mode(regs))
|
||||
goto bad_area_nosemaphore;
|
||||
|
||||
Index: linux-3.4/arch/mips/mm/fault.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/mips/mm/fault.c
|
||||
+++ linux-3.4/arch/mips/mm/fault.c
|
||||
@@ -89,7 +89,7 @@ asmlinkage void __kprobes do_page_fault(
|
||||
diff --git a/arch/mips/mm/fault.c b/arch/mips/mm/fault.c
|
||||
index 3468e69..39a3180 100644
|
||||
--- a/arch/mips/mm/fault.c
|
||||
+++ b/arch/mips/mm/fault.c
|
||||
@@ -89,7 +89,7 @@ asmlinkage void __kprobes do_page_fault(struct pt_regs *regs, unsigned long writ
|
||||
* If we're in an interrupt or have no user
|
||||
* context, we must not take the fault..
|
||||
*/
|
||||
|
@ -165,11 +166,11 @@ Index: linux-3.4/arch/mips/mm/fault.c
|
|||
goto bad_area_nosemaphore;
|
||||
|
||||
retry:
|
||||
Index: linux-3.4/arch/mn10300/mm/fault.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/mn10300/mm/fault.c
|
||||
+++ linux-3.4/arch/mn10300/mm/fault.c
|
||||
@@ -167,7 +167,7 @@ asmlinkage void do_page_fault(struct pt_
|
||||
diff --git a/arch/mn10300/mm/fault.c b/arch/mn10300/mm/fault.c
|
||||
index ff5acf5..5d9e10f 100644
|
||||
--- a/arch/mn10300/mm/fault.c
|
||||
+++ b/arch/mn10300/mm/fault.c
|
||||
@@ -167,7 +167,7 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long fault_code,
|
||||
* If we're in an interrupt or have no user
|
||||
* context, we must not take the fault..
|
||||
*/
|
||||
|
@ -178,11 +179,11 @@ Index: linux-3.4/arch/mn10300/mm/fault.c
|
|||
goto no_context;
|
||||
|
||||
down_read(&mm->mmap_sem);
|
||||
Index: linux-3.4/arch/parisc/mm/fault.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/parisc/mm/fault.c
|
||||
+++ linux-3.4/arch/parisc/mm/fault.c
|
||||
@@ -176,7 +176,7 @@ void do_page_fault(struct pt_regs *regs,
|
||||
diff --git a/arch/parisc/mm/fault.c b/arch/parisc/mm/fault.c
|
||||
index 09ecc8a..df22f39 100644
|
||||
--- a/arch/parisc/mm/fault.c
|
||||
+++ b/arch/parisc/mm/fault.c
|
||||
@@ -176,7 +176,7 @@ void do_page_fault(struct pt_regs *regs, unsigned long code,
|
||||
unsigned long acc_type;
|
||||
int fault;
|
||||
|
||||
|
@ -191,11 +192,11 @@ Index: linux-3.4/arch/parisc/mm/fault.c
|
|||
goto no_context;
|
||||
|
||||
down_read(&mm->mmap_sem);
|
||||
Index: linux-3.4/arch/powerpc/mm/fault.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/powerpc/mm/fault.c
|
||||
+++ linux-3.4/arch/powerpc/mm/fault.c
|
||||
@@ -261,7 +261,7 @@ int __kprobes do_page_fault(struct pt_re
|
||||
diff --git a/arch/powerpc/mm/fault.c b/arch/powerpc/mm/fault.c
|
||||
index 6642dff..7bd8f27 100644
|
||||
--- a/arch/powerpc/mm/fault.c
|
||||
+++ b/arch/powerpc/mm/fault.c
|
||||
@@ -261,7 +261,7 @@ int __kprobes do_page_fault(struct pt_regs *regs, unsigned long address,
|
||||
if (!arch_irq_disabled_regs(regs))
|
||||
local_irq_enable();
|
||||
|
||||
|
@ -204,11 +205,11 @@ Index: linux-3.4/arch/powerpc/mm/fault.c
|
|||
if (!user_mode(regs))
|
||||
return SIGSEGV;
|
||||
/* in_atomic() in user mode is really bad,
|
||||
Index: linux-3.4/arch/s390/mm/fault.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/s390/mm/fault.c
|
||||
+++ linux-3.4/arch/s390/mm/fault.c
|
||||
@@ -283,8 +283,8 @@ static inline int do_exception(struct pt
|
||||
diff --git a/arch/s390/mm/fault.c b/arch/s390/mm/fault.c
|
||||
index f7d796f..e2994cb 100644
|
||||
--- a/arch/s390/mm/fault.c
|
||||
+++ b/arch/s390/mm/fault.c
|
||||
@@ -283,8 +283,8 @@ static inline int do_exception(struct pt_regs *regs, int access)
|
||||
* user context.
|
||||
*/
|
||||
fault = VM_FAULT_BADCONTEXT;
|
||||
|
@ -219,7 +220,7 @@ Index: linux-3.4/arch/s390/mm/fault.c
|
|||
goto out;
|
||||
|
||||
address = trans_exc_code & __FAIL_ADDR_MASK;
|
||||
@@ -417,7 +417,7 @@ void __kprobes do_asce_exception(struct
|
||||
@@ -417,7 +417,7 @@ void __kprobes do_asce_exception(struct pt_regs *regs)
|
||||
|
||||
trans_exc_code = regs->int_parm_long;
|
||||
if (unlikely(!user_space_fault(trans_exc_code) || in_atomic() || !mm ||
|
||||
|
@ -228,11 +229,11 @@ Index: linux-3.4/arch/s390/mm/fault.c
|
|||
goto no_context;
|
||||
|
||||
down_read(&mm->mmap_sem);
|
||||
Index: linux-3.4/arch/score/mm/fault.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/score/mm/fault.c
|
||||
+++ linux-3.4/arch/score/mm/fault.c
|
||||
@@ -72,7 +72,7 @@ asmlinkage void do_page_fault(struct pt_
|
||||
diff --git a/arch/score/mm/fault.c b/arch/score/mm/fault.c
|
||||
index 4c12824..59fccbe 100644
|
||||
--- a/arch/score/mm/fault.c
|
||||
+++ b/arch/score/mm/fault.c
|
||||
@@ -72,7 +72,7 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long write,
|
||||
* If we're in an interrupt or have no user
|
||||
* context, we must not take the fault..
|
||||
*/
|
||||
|
@ -241,11 +242,11 @@ Index: linux-3.4/arch/score/mm/fault.c
|
|||
goto bad_area_nosemaphore;
|
||||
|
||||
down_read(&mm->mmap_sem);
|
||||
Index: linux-3.4/arch/sh/mm/fault_32.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/sh/mm/fault_32.c
|
||||
+++ linux-3.4/arch/sh/mm/fault_32.c
|
||||
@@ -166,7 +166,7 @@ asmlinkage void __kprobes do_page_fault(
|
||||
diff --git a/arch/sh/mm/fault_32.c b/arch/sh/mm/fault_32.c
|
||||
index 8c3ae42..1aca948 100644
|
||||
--- a/arch/sh/mm/fault_32.c
|
||||
+++ b/arch/sh/mm/fault_32.c
|
||||
@@ -166,7 +166,7 @@ asmlinkage void __kprobes do_page_fault(struct pt_regs *regs,
|
||||
* If we're in an interrupt, have no user context or are running
|
||||
* in an atomic region then we must not take the fault:
|
||||
*/
|
||||
|
@ -254,11 +255,11 @@ Index: linux-3.4/arch/sh/mm/fault_32.c
|
|||
goto no_context;
|
||||
|
||||
down_read(&mm->mmap_sem);
|
||||
Index: linux-3.4/arch/sparc/mm/fault_32.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/sparc/mm/fault_32.c
|
||||
+++ linux-3.4/arch/sparc/mm/fault_32.c
|
||||
@@ -248,7 +248,7 @@ asmlinkage void do_sparc_fault(struct pt
|
||||
diff --git a/arch/sparc/mm/fault_32.c b/arch/sparc/mm/fault_32.c
|
||||
index ffaa99e..77b37e0 100644
|
||||
--- a/arch/sparc/mm/fault_32.c
|
||||
+++ b/arch/sparc/mm/fault_32.c
|
||||
@@ -248,7 +248,7 @@ asmlinkage void do_sparc_fault(struct pt_regs *regs, int text_fault, int write,
|
||||
* If we're in an interrupt or have no user
|
||||
* context, we must not take the fault..
|
||||
*/
|
||||
|
@ -267,11 +268,11 @@ Index: linux-3.4/arch/sparc/mm/fault_32.c
|
|||
goto no_context;
|
||||
|
||||
perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address);
|
||||
Index: linux-3.4/arch/sparc/mm/fault_64.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/sparc/mm/fault_64.c
|
||||
+++ linux-3.4/arch/sparc/mm/fault_64.c
|
||||
@@ -323,7 +323,7 @@ asmlinkage void __kprobes do_sparc64_fau
|
||||
diff --git a/arch/sparc/mm/fault_64.c b/arch/sparc/mm/fault_64.c
|
||||
index fbd5e11..ea4e14b 100644
|
||||
--- a/arch/sparc/mm/fault_64.c
|
||||
+++ b/arch/sparc/mm/fault_64.c
|
||||
@@ -323,7 +323,7 @@ asmlinkage void __kprobes do_sparc64_fault(struct pt_regs *regs)
|
||||
* If we're in an interrupt or have no user
|
||||
* context, we must not take the fault..
|
||||
*/
|
||||
|
@ -280,11 +281,11 @@ Index: linux-3.4/arch/sparc/mm/fault_64.c
|
|||
goto intr_or_no_mm;
|
||||
|
||||
perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address);
|
||||
Index: linux-3.4/arch/tile/mm/fault.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/tile/mm/fault.c
|
||||
+++ linux-3.4/arch/tile/mm/fault.c
|
||||
@@ -355,7 +355,7 @@ static int handle_page_fault(struct pt_r
|
||||
diff --git a/arch/tile/mm/fault.c b/arch/tile/mm/fault.c
|
||||
index f683aad..3e85178 100644
|
||||
--- a/arch/tile/mm/fault.c
|
||||
+++ b/arch/tile/mm/fault.c
|
||||
@@ -355,7 +355,7 @@ static int handle_page_fault(struct pt_regs *regs,
|
||||
* If we're in an interrupt, have no user context or are running in an
|
||||
* atomic region then we must not take the fault.
|
||||
*/
|
||||
|
@ -293,11 +294,11 @@ Index: linux-3.4/arch/tile/mm/fault.c
|
|||
vma = NULL; /* happy compiler */
|
||||
goto bad_area_nosemaphore;
|
||||
}
|
||||
Index: linux-3.4/arch/um/kernel/trap.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/um/kernel/trap.c
|
||||
+++ linux-3.4/arch/um/kernel/trap.c
|
||||
@@ -37,7 +37,7 @@ int handle_page_fault(unsigned long addr
|
||||
diff --git a/arch/um/kernel/trap.c b/arch/um/kernel/trap.c
|
||||
index a283400..7878069 100644
|
||||
--- a/arch/um/kernel/trap.c
|
||||
+++ b/arch/um/kernel/trap.c
|
||||
@@ -37,7 +37,7 @@ int handle_page_fault(unsigned long address, unsigned long ip,
|
||||
* If the fault was during atomic operation, don't take the fault, just
|
||||
* fail.
|
||||
*/
|
||||
|
@ -306,11 +307,11 @@ Index: linux-3.4/arch/um/kernel/trap.c
|
|||
goto out_nosemaphore;
|
||||
|
||||
down_read(&mm->mmap_sem);
|
||||
Index: linux-3.4/arch/x86/mm/fault.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/x86/mm/fault.c
|
||||
+++ linux-3.4/arch/x86/mm/fault.c
|
||||
@@ -1094,7 +1094,7 @@ do_page_fault(struct pt_regs *regs, unsi
|
||||
diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c
|
||||
index bb891f2..9d57357 100644
|
||||
--- a/arch/x86/mm/fault.c
|
||||
+++ b/arch/x86/mm/fault.c
|
||||
@@ -1094,7 +1094,7 @@ do_page_fault(struct pt_regs *regs, unsigned long error_code)
|
||||
* If we're in an interrupt, have no user context or are running
|
||||
* in an atomic region then we must not take the fault:
|
||||
*/
|
||||
|
@ -319,10 +320,10 @@ Index: linux-3.4/arch/x86/mm/fault.c
|
|||
bad_area_nosemaphore(regs, error_code, address);
|
||||
return;
|
||||
}
|
||||
Index: linux-3.4/arch/xtensa/mm/fault.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/xtensa/mm/fault.c
|
||||
+++ linux-3.4/arch/xtensa/mm/fault.c
|
||||
diff --git a/arch/xtensa/mm/fault.c b/arch/xtensa/mm/fault.c
|
||||
index cc58b7c..93d33ee 100644
|
||||
--- a/arch/xtensa/mm/fault.c
|
||||
+++ b/arch/xtensa/mm/fault.c
|
||||
@@ -56,7 +56,7 @@ void do_page_fault(struct pt_regs *regs)
|
||||
/* If we're in an interrupt or have no user
|
||||
* context, we must not take the fault..
|
||||
|
@ -332,10 +333,10 @@ Index: linux-3.4/arch/xtensa/mm/fault.c
|
|||
bad_page_fault(regs, address, SIGSEGV);
|
||||
return;
|
||||
}
|
||||
Index: linux-3.4/include/linux/sched.h
|
||||
===================================================================
|
||||
--- linux-3.4.orig/include/linux/sched.h
|
||||
+++ linux-3.4/include/linux/sched.h
|
||||
diff --git a/include/linux/sched.h b/include/linux/sched.h
|
||||
index f0ee37f..f14b965 100644
|
||||
--- a/include/linux/sched.h
|
||||
+++ b/include/linux/sched.h
|
||||
@@ -90,6 +90,7 @@ struct sched_param {
|
||||
#include <linux/latencytop.h>
|
||||
#include <linux/cred.h>
|
||||
|
@ -372,11 +373,11 @@ Index: linux-3.4/include/linux/sched.h
|
|||
/*
|
||||
* Priority of a process goes from 0..MAX_PRIO-1, valid RT
|
||||
* priority is 0..MAX_RT_PRIO-1, and SCHED_NORMAL/SCHED_BATCH
|
||||
Index: linux-3.4/kernel/fork.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/kernel/fork.c
|
||||
+++ linux-3.4/kernel/fork.c
|
||||
@@ -1263,7 +1263,9 @@ static struct task_struct *copy_process(
|
||||
diff --git a/kernel/fork.c b/kernel/fork.c
|
||||
index fdf0795..4c9def3 100644
|
||||
--- a/kernel/fork.c
|
||||
+++ b/kernel/fork.c
|
||||
@@ -1265,7 +1265,9 @@ static struct task_struct *copy_process(unsigned long clone_flags,
|
||||
p->hardirq_context = 0;
|
||||
p->softirq_context = 0;
|
||||
#endif
|
|
@ -1,6 +1,7 @@
|
|||
Subject: mm: raw_pagefault_disable
|
||||
From 7fe5eed8f44908770c8aa922e1e7aeca4f355f6e Mon Sep 17 00:00:00 2001
|
||||
From: Peter Zijlstra <a.p.zijlstra@chello.nl>
|
||||
Date: Fri Aug 05 17:16:58 CEST 2011
|
||||
Date: Fri, 5 Aug 2011 17:16:58 +0200
|
||||
Subject: [035/254] mm: raw_pagefault_disable
|
||||
|
||||
Adding migrate_disable() to pagefault_disable() to preserve the
|
||||
per-cpu thing for kmap_atomic might not have been the best of choices.
|
||||
|
@ -70,7 +71,6 @@ that up by adding raw_pagefault_disable().
|
|||
[<ffffffff814ffb38>] smp_apic_timer_interrupt+0x85/0x98
|
||||
[<ffffffff814fef13>] apic_timer_interrupt+0x13/0x20
|
||||
|
||||
|
||||
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
|
||||
Link: http://lkml.kernel.org/n/tip-31keae8mkjiv8esq4rl76cib@git.kernel.org
|
||||
---
|
||||
|
@ -78,10 +78,10 @@ Link: http://lkml.kernel.org/n/tip-31keae8mkjiv8esq4rl76cib@git.kernel.org
|
|||
mm/memory.c | 2 ++
|
||||
2 files changed, 30 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: linux-3.4/include/linux/uaccess.h
|
||||
===================================================================
|
||||
--- linux-3.4.orig/include/linux/uaccess.h
|
||||
+++ linux-3.4/include/linux/uaccess.h
|
||||
diff --git a/include/linux/uaccess.h b/include/linux/uaccess.h
|
||||
index 9414a1b..44b3751 100644
|
||||
--- a/include/linux/uaccess.h
|
||||
+++ b/include/linux/uaccess.h
|
||||
@@ -8,8 +8,34 @@
|
||||
* These routines enable/disable the pagefault handler in that
|
||||
* it will not take any MM locks and go straight to the fixup table.
|
||||
|
@ -117,7 +117,7 @@ Index: linux-3.4/include/linux/uaccess.h
|
|||
|
||||
#ifndef ARCH_HAS_NOCACHE_UACCESS
|
||||
|
||||
@@ -50,9 +76,9 @@ static inline unsigned long __copy_from_
|
||||
@@ -50,9 +76,9 @@ static inline unsigned long __copy_from_user_nocache(void *to,
|
||||
mm_segment_t old_fs = get_fs(); \
|
||||
\
|
||||
set_fs(KERNEL_DS); \
|
||||
|
@ -129,10 +129,10 @@ Index: linux-3.4/include/linux/uaccess.h
|
|||
set_fs(old_fs); \
|
||||
ret; \
|
||||
})
|
||||
Index: linux-3.4/mm/memory.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/mm/memory.c
|
||||
+++ linux-3.4/mm/memory.c
|
||||
diff --git a/mm/memory.c b/mm/memory.c
|
||||
index c3b9c80..e996afe 100644
|
||||
--- a/mm/memory.c
|
||||
+++ b/mm/memory.c
|
||||
@@ -3467,6 +3467,7 @@ unlock:
|
||||
return 0;
|
||||
}
|
|
@ -1,6 +1,7 @@
|
|||
Subject: filemap-fix-up.patch
|
||||
From bc5dddc79dfd7918fe170111b9f09c92408739c2 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Fri, 17 Jun 2011 18:56:24 +0200
|
||||
Subject: [036/254] filemap-fix-up.patch
|
||||
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
Wrecked-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
|
||||
|
@ -9,11 +10,11 @@ Link: http://lkml.kernel.org/n/tip-m6yuzd6ul717hlnl2gj6p3ou@git.kernel.org
|
|||
mm/filemap.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
Index: linux-3.4/mm/filemap.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/mm/filemap.c
|
||||
+++ linux-3.4/mm/filemap.c
|
||||
@@ -2036,7 +2036,7 @@ size_t iov_iter_copy_from_user_atomic(st
|
||||
diff --git a/mm/filemap.c b/mm/filemap.c
|
||||
index 79c4b2b..51c34c0 100644
|
||||
--- a/mm/filemap.c
|
||||
+++ b/mm/filemap.c
|
||||
@@ -2036,7 +2036,7 @@ size_t iov_iter_copy_from_user_atomic(struct page *page,
|
||||
char *kaddr;
|
||||
size_t copied;
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
From 5adbe7138fa5471a76afc78ed6da9a830683e9d6 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Sat, 25 Jul 2009 22:06:27 +0200
|
||||
Subject: mm: Remove preempt count from pagefault disable/enable
|
||||
Subject: [037/254] mm: Remove preempt count from pagefault disable/enable
|
||||
|
||||
Now that all users are cleaned up, we can remove the preemption count.
|
||||
|
||||
|
@ -9,10 +10,10 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
|||
mm/memory.c | 7 -------
|
||||
1 file changed, 7 deletions(-)
|
||||
|
||||
Index: linux-3.4/mm/memory.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/mm/memory.c
|
||||
+++ linux-3.4/mm/memory.c
|
||||
diff --git a/mm/memory.c b/mm/memory.c
|
||||
index e996afe..346246c 100644
|
||||
--- a/mm/memory.c
|
||||
+++ b/mm/memory.c
|
||||
@@ -3470,7 +3470,6 @@ unlock:
|
||||
#ifdef CONFIG_PREEMPT_RT_FULL
|
||||
void pagefault_disable(void)
|
|
@ -1,22 +1,22 @@
|
|||
From 9121461eb6ca676f87a8871ef8b45601953cf8d2 Mon Sep 17 00:00:00 2001
|
||||
From: Ingo Molnar <mingo@elte.hu>
|
||||
Date: Fri, 3 Jul 2009 08:29:25 -0500
|
||||
Subject: x86: highmem: Replace BUG_ON by WARN_ON
|
||||
Subject: [038/254] x86: highmem: Replace BUG_ON by WARN_ON
|
||||
|
||||
The machine might survive that problem and be at least in a state
|
||||
which allows us to get more information about the problem.
|
||||
|
||||
Signed-off-by: Ingo Molnar <mingo@elte.hu>
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
|
||||
---
|
||||
arch/x86/mm/highmem_32.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
Index: linux-3.4/arch/x86/mm/highmem_32.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/x86/mm/highmem_32.c
|
||||
+++ linux-3.4/arch/x86/mm/highmem_32.c
|
||||
@@ -43,7 +43,7 @@ void *kmap_atomic_prot(struct page *page
|
||||
diff --git a/arch/x86/mm/highmem_32.c b/arch/x86/mm/highmem_32.c
|
||||
index 6f31ee5..ab8683a 100644
|
||||
--- a/arch/x86/mm/highmem_32.c
|
||||
+++ b/arch/x86/mm/highmem_32.c
|
||||
@@ -43,7 +43,7 @@ void *kmap_atomic_prot(struct page *page, pgprot_t prot)
|
||||
type = kmap_atomic_idx_push();
|
||||
idx = type + KM_TYPE_NR*smp_processor_id();
|
||||
vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx);
|
|
@ -1,6 +1,7 @@
|
|||
From 91ecc11b80a93a7363ea04f1ecf3690539f60464 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Thu, 15 Jul 2010 10:29:00 +0200
|
||||
Subject: suspend: Prevent might sleep splats
|
||||
Subject: [039/254] suspend: Prevent might sleep splats
|
||||
|
||||
timekeeping suspend/resume calls read_persistant_clock() which takes
|
||||
rtc_lock. That results in might sleep warnings because at that point
|
||||
|
@ -16,17 +17,16 @@ and restoring it to SYSTEM_RUNNING afer sysdev_resume().
|
|||
Needs to be revisited.
|
||||
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
|
||||
---
|
||||
include/linux/kernel.h | 2 +-
|
||||
kernel/power/hibernate.c | 7 +++++++
|
||||
kernel/power/suspend.c | 4 ++++
|
||||
3 files changed, 12 insertions(+), 1 deletion(-)
|
||||
|
||||
Index: linux-3.4/include/linux/kernel.h
|
||||
===================================================================
|
||||
--- linux-3.4.orig/include/linux/kernel.h
|
||||
+++ linux-3.4/include/linux/kernel.h
|
||||
diff --git a/include/linux/kernel.h b/include/linux/kernel.h
|
||||
index 645231c..e43a4a2 100644
|
||||
--- a/include/linux/kernel.h
|
||||
+++ b/include/linux/kernel.h
|
||||
@@ -374,7 +374,7 @@ extern enum system_states {
|
||||
SYSTEM_HALT,
|
||||
SYSTEM_POWER_OFF,
|
||||
|
@ -36,11 +36,11 @@ Index: linux-3.4/include/linux/kernel.h
|
|||
} system_state;
|
||||
|
||||
#define TAINT_PROPRIETARY_MODULE 0
|
||||
Index: linux-3.4/kernel/power/hibernate.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/kernel/power/hibernate.c
|
||||
+++ linux-3.4/kernel/power/hibernate.c
|
||||
@@ -270,6 +270,8 @@ static int create_image(int platform_mod
|
||||
diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c
|
||||
index e09dfbf..1aa6e1f 100644
|
||||
--- a/kernel/power/hibernate.c
|
||||
+++ b/kernel/power/hibernate.c
|
||||
@@ -270,6 +270,8 @@ static int create_image(int platform_mode)
|
||||
|
||||
local_irq_disable();
|
||||
|
||||
|
@ -49,7 +49,7 @@ Index: linux-3.4/kernel/power/hibernate.c
|
|||
error = syscore_suspend();
|
||||
if (error) {
|
||||
printk(KERN_ERR "PM: Some system devices failed to power down, "
|
||||
@@ -297,6 +299,7 @@ static int create_image(int platform_mod
|
||||
@@ -297,6 +299,7 @@ static int create_image(int platform_mode)
|
||||
syscore_resume();
|
||||
|
||||
Enable_irqs:
|
||||
|
@ -57,7 +57,7 @@ Index: linux-3.4/kernel/power/hibernate.c
|
|||
local_irq_enable();
|
||||
|
||||
Enable_cpus:
|
||||
@@ -420,6 +423,7 @@ static int resume_target_kernel(bool pla
|
||||
@@ -420,6 +423,7 @@ static int resume_target_kernel(bool platform_mode)
|
||||
goto Enable_cpus;
|
||||
|
||||
local_irq_disable();
|
||||
|
@ -65,7 +65,7 @@ Index: linux-3.4/kernel/power/hibernate.c
|
|||
|
||||
error = syscore_suspend();
|
||||
if (error)
|
||||
@@ -453,6 +457,7 @@ static int resume_target_kernel(bool pla
|
||||
@@ -453,6 +457,7 @@ static int resume_target_kernel(bool platform_mode)
|
||||
syscore_resume();
|
||||
|
||||
Enable_irqs:
|
||||
|
@ -89,11 +89,11 @@ Index: linux-3.4/kernel/power/hibernate.c
|
|||
local_irq_enable();
|
||||
enable_nonboot_cpus();
|
||||
|
||||
Index: linux-3.4/kernel/power/suspend.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/kernel/power/suspend.c
|
||||
+++ linux-3.4/kernel/power/suspend.c
|
||||
@@ -164,6 +164,8 @@ static int suspend_enter(suspend_state_t
|
||||
diff --git a/kernel/power/suspend.c b/kernel/power/suspend.c
|
||||
index 396d262..d4fb331 100644
|
||||
--- a/kernel/power/suspend.c
|
||||
+++ b/kernel/power/suspend.c
|
||||
@@ -164,6 +164,8 @@ static int suspend_enter(suspend_state_t state, bool *wakeup)
|
||||
arch_suspend_disable_irqs();
|
||||
BUG_ON(!irqs_disabled());
|
||||
|
||||
|
@ -102,7 +102,7 @@ Index: linux-3.4/kernel/power/suspend.c
|
|||
error = syscore_suspend();
|
||||
if (!error) {
|
||||
*wakeup = pm_wakeup_pending();
|
||||
@@ -174,6 +176,8 @@ static int suspend_enter(suspend_state_t
|
||||
@@ -174,6 +176,8 @@ static int suspend_enter(suspend_state_t state, bool *wakeup)
|
||||
syscore_resume();
|
||||
}
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
From 620d883578127ede97fdf68b5680f97a6e740666 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Thu, 13 Aug 2009 09:04:10 +0200
|
||||
Subject: OF: Fixup resursive locking code paths
|
||||
Subject: [040/254] OF: Fixup resursive locking code paths
|
||||
|
||||
There is no real reason to use a rwlock for devtree_lock. It even
|
||||
could be a mutex, but unfortunately it's locked from cpu hotplug
|
||||
|
@ -12,16 +13,15 @@ recursive locking pathes which allows us to convert devtree_lock to a
|
|||
read_lock.
|
||||
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
|
||||
---
|
||||
drivers/of/base.c | 93 +++++++++++++++++++++++++++++++++++++++++-------------
|
||||
drivers/of/base.c | 93 ++++++++++++++++++++++++++++++++++++++++-------------
|
||||
1 file changed, 71 insertions(+), 22 deletions(-)
|
||||
|
||||
Index: linux-3.4/drivers/of/base.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/drivers/of/base.c
|
||||
+++ linux-3.4/drivers/of/base.c
|
||||
@@ -163,16 +163,14 @@ void of_node_put(struct device_node *nod
|
||||
diff --git a/drivers/of/base.c b/drivers/of/base.c
|
||||
index 5806449..043ab4d 100644
|
||||
--- a/drivers/of/base.c
|
||||
+++ b/drivers/of/base.c
|
||||
@@ -163,16 +163,14 @@ void of_node_put(struct device_node *node)
|
||||
EXPORT_SYMBOL(of_node_put);
|
||||
#endif /* CONFIG_OF_DYNAMIC */
|
||||
|
||||
|
@ -40,7 +40,7 @@ Index: linux-3.4/drivers/of/base.c
|
|||
for (pp = np->properties; pp != 0; pp = pp->next) {
|
||||
if (of_prop_cmp(pp->name, name) == 0) {
|
||||
if (lenp != 0)
|
||||
@@ -180,6 +178,18 @@ struct property *of_find_property(const
|
||||
@@ -180,6 +178,18 @@ struct property *of_find_property(const struct device_node *np,
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -99,7 +99,7 @@ Index: linux-3.4/drivers/of/base.c
|
|||
if (cp == NULL)
|
||||
return 0;
|
||||
while (cplen > 0) {
|
||||
@@ -244,6 +266,20 @@ int of_device_is_compatible(const struct
|
||||
@@ -244,6 +266,20 @@ int of_device_is_compatible(const struct device_node *device,
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -120,7 +120,7 @@ Index: linux-3.4/drivers/of/base.c
|
|||
EXPORT_SYMBOL(of_device_is_compatible);
|
||||
|
||||
/**
|
||||
@@ -467,7 +503,8 @@ struct device_node *of_find_compatible_n
|
||||
@@ -467,7 +503,8 @@ struct device_node *of_find_compatible_node(struct device_node *from,
|
||||
if (type
|
||||
&& !(np->type && (of_node_cmp(np->type, type) == 0)))
|
||||
continue;
|
||||
|
@ -149,7 +149,7 @@ Index: linux-3.4/drivers/of/base.c
|
|||
{
|
||||
if (!matches)
|
||||
return NULL;
|
||||
@@ -533,14 +564,32 @@ const struct of_device_id *of_match_node
|
||||
@@ -533,14 +564,32 @@ const struct of_device_id *of_match_node(const struct of_device_id *matches,
|
||||
match &= node->type
|
||||
&& !strcmp(matches->type, node->type);
|
||||
if (matches->compatible[0])
|
||||
|
@ -184,7 +184,7 @@ Index: linux-3.4/drivers/of/base.c
|
|||
EXPORT_SYMBOL(of_match_node);
|
||||
|
||||
/**
|
||||
@@ -563,7 +612,7 @@ struct device_node *of_find_matching_nod
|
||||
@@ -563,7 +612,7 @@ struct device_node *of_find_matching_node(struct device_node *from,
|
||||
read_lock(&devtree_lock);
|
||||
np = from ? from->allnext : allnodes;
|
||||
for (; np; np = np->allnext) {
|
|
@ -1,19 +1,20 @@
|
|||
Subject: of-convert-devtree-lock.patch
|
||||
From 1f8425bef1116afdae24ef7b51803528f9be8cd5 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Mon, 21 Mar 2011 14:35:34 +0100
|
||||
Subject: [041/254] of-convert-devtree-lock.patch
|
||||
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
---
|
||||
arch/sparc/kernel/prom_common.c | 4 -
|
||||
drivers/of/base.c | 92 ++++++++++++++++++++++------------------
|
||||
include/linux/of.h | 2
|
||||
arch/sparc/kernel/prom_common.c | 4 +-
|
||||
drivers/of/base.c | 92 ++++++++++++++++++++++-----------------
|
||||
include/linux/of.h | 2 +-
|
||||
3 files changed, 55 insertions(+), 43 deletions(-)
|
||||
|
||||
Index: linux-3.4/arch/sparc/kernel/prom_common.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/sparc/kernel/prom_common.c
|
||||
+++ linux-3.4/arch/sparc/kernel/prom_common.c
|
||||
@@ -65,7 +65,7 @@ int of_set_property(struct device_node *
|
||||
diff --git a/arch/sparc/kernel/prom_common.c b/arch/sparc/kernel/prom_common.c
|
||||
index 741df91..ca73a28 100644
|
||||
--- a/arch/sparc/kernel/prom_common.c
|
||||
+++ b/arch/sparc/kernel/prom_common.c
|
||||
@@ -65,7 +65,7 @@ int of_set_property(struct device_node *dp, const char *name, void *val, int len
|
||||
err = -ENODEV;
|
||||
|
||||
mutex_lock(&of_set_property_mutex);
|
||||
|
@ -22,7 +23,7 @@ Index: linux-3.4/arch/sparc/kernel/prom_common.c
|
|||
prevp = &dp->properties;
|
||||
while (*prevp) {
|
||||
struct property *prop = *prevp;
|
||||
@@ -92,7 +92,7 @@ int of_set_property(struct device_node *
|
||||
@@ -92,7 +92,7 @@ int of_set_property(struct device_node *dp, const char *name, void *val, int len
|
||||
}
|
||||
prevp = &(*prevp)->next;
|
||||
}
|
||||
|
@ -31,10 +32,10 @@ Index: linux-3.4/arch/sparc/kernel/prom_common.c
|
|||
mutex_unlock(&of_set_property_mutex);
|
||||
|
||||
/* XXX Upate procfs if necessary... */
|
||||
Index: linux-3.4/drivers/of/base.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/drivers/of/base.c
|
||||
+++ linux-3.4/drivers/of/base.c
|
||||
diff --git a/drivers/of/base.c b/drivers/of/base.c
|
||||
index 043ab4d..b385c39 100644
|
||||
--- a/drivers/of/base.c
|
||||
+++ b/drivers/of/base.c
|
||||
@@ -54,7 +54,7 @@ static DEFINE_MUTEX(of_aliases_mutex);
|
||||
/* use when traversing tree through the allnext, child, sibling,
|
||||
* or parent members of struct device_node.
|
||||
|
@ -44,7 +45,7 @@ Index: linux-3.4/drivers/of/base.c
|
|||
|
||||
int of_n_addr_cells(struct device_node *np)
|
||||
{
|
||||
@@ -187,10 +187,11 @@ struct property *of_find_property(const
|
||||
@@ -187,10 +187,11 @@ struct property *of_find_property(const struct device_node *np,
|
||||
int *lenp)
|
||||
{
|
||||
struct property *pp;
|
||||
|
@ -58,7 +59,7 @@ Index: linux-3.4/drivers/of/base.c
|
|||
|
||||
return pp;
|
||||
}
|
||||
@@ -208,13 +209,13 @@ struct device_node *of_find_all_nodes(st
|
||||
@@ -208,13 +209,13 @@ struct device_node *of_find_all_nodes(struct device_node *prev)
|
||||
{
|
||||
struct device_node *np;
|
||||
|
||||
|
@ -74,7 +75,7 @@ Index: linux-3.4/drivers/of/base.c
|
|||
return np;
|
||||
}
|
||||
EXPORT_SYMBOL(of_find_all_nodes);
|
||||
@@ -273,11 +274,12 @@ static int __of_device_is_compatible(con
|
||||
@@ -273,11 +274,12 @@ static int __of_device_is_compatible(const struct device_node *device,
|
||||
int of_device_is_compatible(const struct device_node *device,
|
||||
const char *compat)
|
||||
{
|
||||
|
@ -124,7 +125,7 @@ Index: linux-3.4/drivers/of/base.c
|
|||
return parent;
|
||||
}
|
||||
|
||||
@@ -387,14 +391,15 @@ struct device_node *of_get_next_child(co
|
||||
@@ -387,14 +391,15 @@ struct device_node *of_get_next_child(const struct device_node *node,
|
||||
struct device_node *prev)
|
||||
{
|
||||
struct device_node *next;
|
||||
|
@ -160,7 +161,7 @@ Index: linux-3.4/drivers/of/base.c
|
|||
return np;
|
||||
}
|
||||
EXPORT_SYMBOL(of_find_node_by_path);
|
||||
@@ -436,15 +442,16 @@ struct device_node *of_find_node_by_name
|
||||
@@ -436,15 +442,16 @@ struct device_node *of_find_node_by_name(struct device_node *from,
|
||||
const char *name)
|
||||
{
|
||||
struct device_node *np;
|
||||
|
@ -179,7 +180,7 @@ Index: linux-3.4/drivers/of/base.c
|
|||
return np;
|
||||
}
|
||||
EXPORT_SYMBOL(of_find_node_by_name);
|
||||
@@ -465,15 +472,16 @@ struct device_node *of_find_node_by_type
|
||||
@@ -465,15 +472,16 @@ struct device_node *of_find_node_by_type(struct device_node *from,
|
||||
const char *type)
|
||||
{
|
||||
struct device_node *np;
|
||||
|
@ -198,7 +199,7 @@ Index: linux-3.4/drivers/of/base.c
|
|||
return np;
|
||||
}
|
||||
EXPORT_SYMBOL(of_find_node_by_type);
|
||||
@@ -496,8 +504,9 @@ struct device_node *of_find_compatible_n
|
||||
@@ -496,8 +504,9 @@ struct device_node *of_find_compatible_node(struct device_node *from,
|
||||
const char *type, const char *compatible)
|
||||
{
|
||||
struct device_node *np;
|
||||
|
@ -209,7 +210,7 @@ Index: linux-3.4/drivers/of/base.c
|
|||
np = from ? from->allnext : allnodes;
|
||||
for (; np; np = np->allnext) {
|
||||
if (type
|
||||
@@ -508,7 +517,7 @@ struct device_node *of_find_compatible_n
|
||||
@@ -508,7 +517,7 @@ struct device_node *of_find_compatible_node(struct device_node *from,
|
||||
break;
|
||||
}
|
||||
of_node_put(from);
|
||||
|
@ -218,7 +219,7 @@ Index: linux-3.4/drivers/of/base.c
|
|||
return np;
|
||||
}
|
||||
EXPORT_SYMBOL(of_find_compatible_node);
|
||||
@@ -530,8 +539,9 @@ struct device_node *of_find_node_with_pr
|
||||
@@ -530,8 +539,9 @@ struct device_node *of_find_node_with_property(struct device_node *from,
|
||||
{
|
||||
struct device_node *np;
|
||||
struct property *pp;
|
||||
|
@ -229,7 +230,7 @@ Index: linux-3.4/drivers/of/base.c
|
|||
np = from ? from->allnext : allnodes;
|
||||
for (; np; np = np->allnext) {
|
||||
for (pp = np->properties; pp != 0; pp = pp->next) {
|
||||
@@ -543,7 +553,7 @@ struct device_node *of_find_node_with_pr
|
||||
@@ -543,7 +553,7 @@ struct device_node *of_find_node_with_property(struct device_node *from,
|
||||
}
|
||||
out:
|
||||
of_node_put(from);
|
||||
|
@ -238,7 +239,7 @@ Index: linux-3.4/drivers/of/base.c
|
|||
return np;
|
||||
}
|
||||
EXPORT_SYMBOL(of_find_node_with_property);
|
||||
@@ -584,10 +594,11 @@ const struct of_device_id *of_match_node
|
||||
@@ -584,10 +594,11 @@ const struct of_device_id *of_match_node(const struct of_device_id *matches,
|
||||
const struct device_node *node)
|
||||
{
|
||||
const struct of_device_id *match;
|
||||
|
@ -252,7 +253,7 @@ Index: linux-3.4/drivers/of/base.c
|
|||
return match;
|
||||
}
|
||||
EXPORT_SYMBOL(of_match_node);
|
||||
@@ -608,15 +619,16 @@ struct device_node *of_find_matching_nod
|
||||
@@ -608,15 +619,16 @@ struct device_node *of_find_matching_node(struct device_node *from,
|
||||
const struct of_device_id *matches)
|
||||
{
|
||||
struct device_node *np;
|
||||
|
@ -271,7 +272,7 @@ Index: linux-3.4/drivers/of/base.c
|
|||
return np;
|
||||
}
|
||||
EXPORT_SYMBOL(of_find_matching_node);
|
||||
@@ -659,12 +671,12 @@ struct device_node *of_find_node_by_phan
|
||||
@@ -659,12 +671,12 @@ struct device_node *of_find_node_by_phandle(phandle handle)
|
||||
{
|
||||
struct device_node *np;
|
||||
|
||||
|
@ -286,7 +287,7 @@ Index: linux-3.4/drivers/of/base.c
|
|||
return np;
|
||||
}
|
||||
EXPORT_SYMBOL(of_find_node_by_phandle);
|
||||
@@ -1036,18 +1048,18 @@ int prom_add_property(struct device_node
|
||||
@@ -1036,18 +1048,18 @@ int prom_add_property(struct device_node *np, struct property *prop)
|
||||
unsigned long flags;
|
||||
|
||||
prop->next = NULL;
|
||||
|
@ -308,7 +309,7 @@ Index: linux-3.4/drivers/of/base.c
|
|||
|
||||
#ifdef CONFIG_PROC_DEVICETREE
|
||||
/* try to add to proc as well if it was initialized */
|
||||
@@ -1072,7 +1084,7 @@ int prom_remove_property(struct device_n
|
||||
@@ -1072,7 +1084,7 @@ int prom_remove_property(struct device_node *np, struct property *prop)
|
||||
unsigned long flags;
|
||||
int found = 0;
|
||||
|
||||
|
@ -317,7 +318,7 @@ Index: linux-3.4/drivers/of/base.c
|
|||
next = &np->properties;
|
||||
while (*next) {
|
||||
if (*next == prop) {
|
||||
@@ -1085,7 +1097,7 @@ int prom_remove_property(struct device_n
|
||||
@@ -1085,7 +1097,7 @@ int prom_remove_property(struct device_node *np, struct property *prop)
|
||||
}
|
||||
next = &(*next)->next;
|
||||
}
|
||||
|
@ -326,7 +327,7 @@ Index: linux-3.4/drivers/of/base.c
|
|||
|
||||
if (!found)
|
||||
return -ENODEV;
|
||||
@@ -1115,7 +1127,7 @@ int prom_update_property(struct device_n
|
||||
@@ -1115,7 +1127,7 @@ int prom_update_property(struct device_node *np,
|
||||
unsigned long flags;
|
||||
int found = 0;
|
||||
|
||||
|
@ -335,7 +336,7 @@ Index: linux-3.4/drivers/of/base.c
|
|||
next = &np->properties;
|
||||
while (*next) {
|
||||
if (*next == oldprop) {
|
||||
@@ -1129,7 +1141,7 @@ int prom_update_property(struct device_n
|
||||
@@ -1129,7 +1141,7 @@ int prom_update_property(struct device_node *np,
|
||||
}
|
||||
next = &(*next)->next;
|
||||
}
|
||||
|
@ -344,7 +345,7 @@ Index: linux-3.4/drivers/of/base.c
|
|||
|
||||
if (!found)
|
||||
return -ENODEV;
|
||||
@@ -1159,12 +1171,12 @@ void of_attach_node(struct device_node *
|
||||
@@ -1159,12 +1171,12 @@ void of_attach_node(struct device_node *np)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
|
@ -359,7 +360,7 @@ Index: linux-3.4/drivers/of/base.c
|
|||
}
|
||||
|
||||
/**
|
||||
@@ -1178,7 +1190,7 @@ void of_detach_node(struct device_node *
|
||||
@@ -1178,7 +1190,7 @@ void of_detach_node(struct device_node *np)
|
||||
struct device_node *parent;
|
||||
unsigned long flags;
|
||||
|
||||
|
@ -368,7 +369,7 @@ Index: linux-3.4/drivers/of/base.c
|
|||
|
||||
parent = np->parent;
|
||||
if (!parent)
|
||||
@@ -1209,7 +1221,7 @@ void of_detach_node(struct device_node *
|
||||
@@ -1209,7 +1221,7 @@ void of_detach_node(struct device_node *np)
|
||||
of_node_set_flag(np, OF_DETACHED);
|
||||
|
||||
out_unlock:
|
||||
|
@ -377,11 +378,11 @@ Index: linux-3.4/drivers/of/base.c
|
|||
}
|
||||
#endif /* defined(CONFIG_OF_DYNAMIC) */
|
||||
|
||||
Index: linux-3.4/include/linux/of.h
|
||||
===================================================================
|
||||
--- linux-3.4.orig/include/linux/of.h
|
||||
+++ linux-3.4/include/linux/of.h
|
||||
@@ -90,7 +90,7 @@ static inline void of_node_put(struct de
|
||||
diff --git a/include/linux/of.h b/include/linux/of.h
|
||||
index fa7fb1d..a7a948f 100644
|
||||
--- a/include/linux/of.h
|
||||
+++ b/include/linux/of.h
|
||||
@@ -90,7 +90,7 @@ static inline void of_node_put(struct device_node *node) { }
|
||||
extern struct device_node *allnodes;
|
||||
extern struct device_node *of_chosen;
|
||||
extern struct device_node *of_aliases;
|
|
@ -1,17 +1,18 @@
|
|||
Subject: list-add-list-last-entry.patch
|
||||
From d012b82915f534d4aa97b52f55df9720324d3558 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Zijlstra <peterz@infradead.org>
|
||||
Date: Tue, 21 Jun 2011 11:22:36 +0200
|
||||
Subject: [042/254] list-add-list-last-entry.patch
|
||||
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
---
|
||||
include/linux/list.h | 11 +++++++++++
|
||||
1 file changed, 11 insertions(+)
|
||||
|
||||
Index: linux-3.4/include/linux/list.h
|
||||
===================================================================
|
||||
--- linux-3.4.orig/include/linux/list.h
|
||||
+++ linux-3.4/include/linux/list.h
|
||||
@@ -362,6 +362,17 @@ static inline void list_splice_tail_init
|
||||
diff --git a/include/linux/list.h b/include/linux/list.h
|
||||
index cc6d2aa..7a9851b 100644
|
||||
--- a/include/linux/list.h
|
||||
+++ b/include/linux/list.h
|
||||
@@ -362,6 +362,17 @@ static inline void list_splice_tail_init(struct list_head *list,
|
||||
list_entry((ptr)->next, type, member)
|
||||
|
||||
/**
|
|
@ -1,17 +1,18 @@
|
|||
Subject: mm-page-alloc-use-list-last-entry.patch
|
||||
From da3cc497e78fb4f0b58d8d4282b66f5fc95091cc Mon Sep 17 00:00:00 2001
|
||||
From: Peter Zijlstra <peterz@infradead.org>
|
||||
Date: Tue, 21 Jun 2011 11:24:35 +0200
|
||||
Subject: [043/254] mm-page-alloc-use-list-last-entry.patch
|
||||
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
---
|
||||
mm/page_alloc.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
Index: linux-3.4/mm/page_alloc.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/mm/page_alloc.c
|
||||
+++ linux-3.4/mm/page_alloc.c
|
||||
@@ -663,7 +663,7 @@ static void free_pcppages_bulk(struct zo
|
||||
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
|
||||
index 918330f..b27e8cb 100644
|
||||
--- a/mm/page_alloc.c
|
||||
+++ b/mm/page_alloc.c
|
||||
@@ -663,7 +663,7 @@ static void free_pcppages_bulk(struct zone *zone, int count,
|
||||
batch_free = to_free;
|
||||
|
||||
do {
|
|
@ -1,17 +1,18 @@
|
|||
Subject: mm-slab-move-debug-out.patch
|
||||
From 6628ee8ecd1c2c1b2b8b78106f01092f2dfea815 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Mon, 20 Jun 2011 10:42:04 +0200
|
||||
Subject: [044/254] mm-slab-move-debug-out.patch
|
||||
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
---
|
||||
mm/slab.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: linux-3.4/mm/slab.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/mm/slab.c
|
||||
+++ linux-3.4/mm/slab.c
|
||||
@@ -3919,10 +3919,10 @@ void kmem_cache_free(struct kmem_cache *
|
||||
diff --git a/mm/slab.c b/mm/slab.c
|
||||
index 1fd4b4d..80c57f9 100644
|
||||
--- a/mm/slab.c
|
||||
+++ b/mm/slab.c
|
||||
@@ -3919,10 +3919,10 @@ void kmem_cache_free(struct kmem_cache *cachep, void *objp)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
|
@ -1,16 +1,17 @@
|
|||
Subject: rwsem-inlcude-fix.patch
|
||||
From cfe78ee4abb2da46d27408196293ff563c1c5070 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Fri, 15 Jul 2011 21:24:27 +0200
|
||||
Subject: [045/254] rwsem-inlcude-fix.patch
|
||||
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
---
|
||||
include/linux/pid.h | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
Index: linux-3.4/include/linux/pid.h
|
||||
===================================================================
|
||||
--- linux-3.4.orig/include/linux/pid.h
|
||||
+++ linux-3.4/include/linux/pid.h
|
||||
diff --git a/include/linux/pid.h b/include/linux/pid.h
|
||||
index b152d44..7f33683 100644
|
||||
--- a/include/linux/pid.h
|
||||
+++ b/include/linux/pid.h
|
||||
@@ -2,6 +2,7 @@
|
||||
#define _LINUX_PID_H
|
||||
|
|
@ -1,16 +1,17 @@
|
|||
Subject: sysctl-include-fix.patch
|
||||
From cccc6e1c179f2f86eb875b6b6b25bb1dc5dc5cd6 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Mon, 14 Nov 2011 10:52:34 +0100
|
||||
Subject: [046/254] sysctl-include-fix.patch
|
||||
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
---
|
||||
include/linux/sysctl.h | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
Index: linux-3.4/include/linux/sysctl.h
|
||||
===================================================================
|
||||
--- linux-3.4.orig/include/linux/sysctl.h
|
||||
+++ linux-3.4/include/linux/sysctl.h
|
||||
diff --git a/include/linux/sysctl.h b/include/linux/sysctl.h
|
||||
index c34b4c8..4fbc9f7 100644
|
||||
--- a/include/linux/sysctl.h
|
||||
+++ b/include/linux/sysctl.h
|
||||
@@ -933,6 +933,7 @@ enum
|
||||
#include <linux/rcupdate.h>
|
||||
#include <linux/wait.h>
|
|
@ -1,6 +1,7 @@
|
|||
Subject: net-flip-lock-dep-thingy.patch
|
||||
From 151adf90bc18c13330021feb5951652b30d0fd14 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Tue, 28 Jun 2011 10:59:58 +0200
|
||||
Subject: [047/254] net-flip-lock-dep-thingy.patch
|
||||
|
||||
=======================================================
|
||||
[ INFO: possible circular locking dependency detected ]
|
||||
|
@ -14,7 +15,6 @@ but task is already holding lock:
|
|||
|
||||
which lock already depends on the new lock.
|
||||
|
||||
|
||||
the existing dependency chain (in reverse order) is:
|
||||
|
||||
-> #1 (sk_lock-AF_INET){+.+...}:
|
||||
|
@ -87,17 +87,16 @@ Call Trace:
|
|||
[<ffffffff8112667a>] sys_close+0xf8/0x13d
|
||||
[<ffffffff814ae882>] system_call_fastpath+0x16/0x1b
|
||||
|
||||
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
---
|
||||
net/core/sock.c | 3 +--
|
||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||
|
||||
Index: linux-3.4/net/core/sock.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/net/core/sock.c
|
||||
+++ linux-3.4/net/core/sock.c
|
||||
@@ -2139,12 +2139,11 @@ void lock_sock_nested(struct sock *sk, i
|
||||
diff --git a/net/core/sock.c b/net/core/sock.c
|
||||
index b2e14c0..5cd7df1 100644
|
||||
--- a/net/core/sock.c
|
||||
+++ b/net/core/sock.c
|
||||
@@ -2139,12 +2139,11 @@ void lock_sock_nested(struct sock *sk, int subclass)
|
||||
if (sk->sk_lock.owned)
|
||||
__lock_sock(sk);
|
||||
sk->sk_lock.owned = 1;
|
|
@ -1,6 +1,7 @@
|
|||
Subject: softirq-thread-do-softirq.patch
|
||||
From 55dfa7c3b0b2cd69dafe6a09c927770eb8456d97 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Tue, 28 Jun 2011 15:44:15 +0200
|
||||
Subject: [048/254] softirq-thread-do-softirq.patch
|
||||
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
---
|
||||
|
@ -8,10 +9,10 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
|||
net/core/dev.c | 2 +-
|
||||
2 files changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
Index: linux-3.4/include/linux/interrupt.h
|
||||
===================================================================
|
||||
--- linux-3.4.orig/include/linux/interrupt.h
|
||||
+++ linux-3.4/include/linux/interrupt.h
|
||||
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
|
||||
index 2aea5d2..02c3c4f 100644
|
||||
--- a/include/linux/interrupt.h
|
||||
+++ b/include/linux/interrupt.h
|
||||
@@ -452,6 +452,7 @@ struct softirq_action
|
||||
|
||||
asmlinkage void do_softirq(void);
|
||||
|
@ -20,11 +21,11 @@ Index: linux-3.4/include/linux/interrupt.h
|
|||
extern void open_softirq(int nr, void (*action)(struct softirq_action *));
|
||||
extern void softirq_init(void);
|
||||
extern void __raise_softirq_irqoff(unsigned int nr);
|
||||
Index: linux-3.4/net/core/dev.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/net/core/dev.c
|
||||
+++ linux-3.4/net/core/dev.c
|
||||
@@ -2989,7 +2989,7 @@ int netif_rx_ni(struct sk_buff *skb)
|
||||
diff --git a/net/core/dev.c b/net/core/dev.c
|
||||
index 99e1d75..ca7a845 100644
|
||||
--- a/net/core/dev.c
|
||||
+++ b/net/core/dev.c
|
||||
@@ -2963,7 +2963,7 @@ int netif_rx_ni(struct sk_buff *skb)
|
||||
preempt_disable();
|
||||
err = netif_rx(skb);
|
||||
if (local_softirq_pending())
|
|
@ -1,16 +1,17 @@
|
|||
Subject: softirq-split-out-code.patch
|
||||
From 8435c5d5b1f70508029be351eb107c441ef8ae42 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Tue, 28 Jun 2011 15:46:49 +0200
|
||||
Subject: [049/254] softirq-split-out-code.patch
|
||||
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
---
|
||||
kernel/softirq.c | 94 ++++++++++++++++++++++++++++++-------------------------
|
||||
kernel/softirq.c | 94 ++++++++++++++++++++++++++++++------------------------
|
||||
1 file changed, 52 insertions(+), 42 deletions(-)
|
||||
|
||||
Index: linux-3.4/kernel/softirq.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/kernel/softirq.c
|
||||
+++ linux-3.4/kernel/softirq.c
|
||||
diff --git a/kernel/softirq.c b/kernel/softirq.c
|
||||
index 671f959..6ec3a78 100644
|
||||
--- a/kernel/softirq.c
|
||||
+++ b/kernel/softirq.c
|
||||
@@ -76,6 +76,34 @@ static void wakeup_softirqd(void)
|
||||
wake_up_process(tsk);
|
||||
}
|
||||
|
@ -128,7 +129,7 @@ Index: linux-3.4/kernel/softirq.c
|
|||
#ifndef __ARCH_HAS_DO_SOFTIRQ
|
||||
|
||||
asmlinkage void do_softirq(void)
|
||||
@@ -739,22 +757,14 @@ static int run_ksoftirqd(void * __bind_c
|
||||
@@ -739,22 +757,14 @@ static int run_ksoftirqd(void * __bind_cpu)
|
||||
|
||||
while (!kthread_should_stop()) {
|
||||
preempt_disable();
|
|
@ -1,21 +1,21 @@
|
|||
From dc583a9caa9fe448090c43e8676771f7e40c6b26 Mon Sep 17 00:00:00 2001
|
||||
From: Ingo Molnar <mingo@elte.hu>
|
||||
Date: Fri, 3 Jul 2009 08:29:27 -0500
|
||||
Subject: x86: Do not unmask io_apic when interrupt is in progress
|
||||
Subject: [050/254] x86: Do not unmask io_apic when interrupt is in progress
|
||||
|
||||
With threaded interrupts we might see an interrupt in progress on
|
||||
migration. Do not unmask it when this is the case.
|
||||
|
||||
Signed-off-by: Ingo Molnar <mingo@elte.hu>
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
|
||||
---
|
||||
arch/x86/kernel/apic/io_apic.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
Index: linux-3.4/arch/x86/kernel/apic/io_apic.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/x86/kernel/apic/io_apic.c
|
||||
+++ linux-3.4/arch/x86/kernel/apic/io_apic.c
|
||||
diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
|
||||
index e88300d..01c76a0 100644
|
||||
--- a/arch/x86/kernel/apic/io_apic.c
|
||||
+++ b/arch/x86/kernel/apic/io_apic.c
|
||||
@@ -2555,7 +2555,8 @@ atomic_t irq_mis_count;
|
||||
static inline bool ioapic_irqd_mask(struct irq_data *data, struct irq_cfg *cfg)
|
||||
{
|
|
@ -1,5 +1,7 @@
|
|||
Subject: x86: Do not disable preemption in int3 on 32bit
|
||||
From b4e3989d81377888d751bed2c4b0c3b7c614b6ec Mon Sep 17 00:00:00 2001
|
||||
From: Steven Rostedt <rostedt@goodmis.org>
|
||||
Date: Thu, 7 Jun 2012 07:46:49 -0400
|
||||
Subject: [051/254] x86: Do not disable preemption in int3 on 32bit
|
||||
|
||||
Preemption must be disabled before enabling interrupts in do_trap
|
||||
on x86_64 because the stack in use for int3 and debug is a per CPU
|
||||
|
@ -17,16 +19,15 @@ when the stack is on the IST.
|
|||
Cc: stable-rt@vger.kernel.org
|
||||
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
|
||||
---
|
||||
arch/x86/kernel/traps.c | 32 +++++++++++++++++++++++---------
|
||||
1 file changed, 23 insertions(+), 9 deletions(-)
|
||||
|
||||
Index: linux-3.4/arch/x86/kernel/traps.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/x86/kernel/traps.c
|
||||
+++ linux-3.4/arch/x86/kernel/traps.c
|
||||
@@ -87,9 +87,21 @@ static inline void conditional_sti(struc
|
||||
diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c
|
||||
index ff9281f1..0b01977 100644
|
||||
--- a/arch/x86/kernel/traps.c
|
||||
+++ b/arch/x86/kernel/traps.c
|
||||
@@ -87,9 +87,21 @@ static inline void conditional_sti(struct pt_regs *regs)
|
||||
local_irq_enable();
|
||||
}
|
||||
|
||||
|
@ -49,7 +50,7 @@ Index: linux-3.4/arch/x86/kernel/traps.c
|
|||
if (regs->flags & X86_EFLAGS_IF)
|
||||
local_irq_enable();
|
||||
}
|
||||
@@ -100,11 +112,13 @@ static inline void conditional_cli(struc
|
||||
@@ -100,11 +112,13 @@ static inline void conditional_cli(struct pt_regs *regs)
|
||||
local_irq_disable();
|
||||
}
|
||||
|
||||
|
@ -64,7 +65,7 @@ Index: linux-3.4/arch/x86/kernel/traps.c
|
|||
}
|
||||
|
||||
static void __kprobes
|
||||
@@ -226,9 +240,9 @@ dotraplinkage void do_stack_segment(stru
|
||||
@@ -226,9 +240,9 @@ dotraplinkage void do_stack_segment(struct pt_regs *regs, long error_code)
|
||||
if (notify_die(DIE_TRAP, "stack segment", regs, error_code,
|
||||
X86_TRAP_SS, SIGBUS) == NOTIFY_STOP)
|
||||
return;
|
||||
|
@ -76,7 +77,7 @@ Index: linux-3.4/arch/x86/kernel/traps.c
|
|||
}
|
||||
|
||||
dotraplinkage void do_double_fault(struct pt_regs *regs, long error_code)
|
||||
@@ -320,9 +334,9 @@ dotraplinkage void __kprobes do_int3(str
|
||||
@@ -320,9 +334,9 @@ dotraplinkage void __kprobes do_int3(struct pt_regs *regs, long error_code)
|
||||
* as we may switch to the interrupt stack.
|
||||
*/
|
||||
debug_stack_usage_inc();
|
||||
|
@ -88,7 +89,7 @@ Index: linux-3.4/arch/x86/kernel/traps.c
|
|||
debug_stack_usage_dec();
|
||||
}
|
||||
|
||||
@@ -423,12 +437,12 @@ dotraplinkage void __kprobes do_debug(st
|
||||
@@ -423,12 +437,12 @@ dotraplinkage void __kprobes do_debug(struct pt_regs *regs, long error_code)
|
||||
debug_stack_usage_inc();
|
||||
|
||||
/* It's safe to allow irq's after DR6 has been saved */
|
||||
|
@ -103,7 +104,7 @@ Index: linux-3.4/arch/x86/kernel/traps.c
|
|||
debug_stack_usage_dec();
|
||||
return;
|
||||
}
|
||||
@@ -448,7 +462,7 @@ dotraplinkage void __kprobes do_debug(st
|
||||
@@ -448,7 +462,7 @@ dotraplinkage void __kprobes do_debug(struct pt_regs *regs, long error_code)
|
||||
si_code = get_si_code(tsk->thread.debugreg6);
|
||||
if (tsk->thread.debugreg6 & (DR_STEP | DR_TRAP_BITS) || user_icebp)
|
||||
send_sigtrap(tsk, regs, error_code, si_code);
|
|
@ -1,6 +1,7 @@
|
|||
Subject: locking-various-init-fixes.patch
|
||||
From 87ae23ee1db2fb22ffc9b5cac614fa709e867953 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Sun, 17 Jul 2011 21:25:03 +0200
|
||||
Subject: [052/254] locking-various-init-fixes.patch
|
||||
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
---
|
||||
|
@ -11,11 +12,11 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
|||
kernel/cred.c | 2 +-
|
||||
5 files changed, 7 insertions(+), 7 deletions(-)
|
||||
|
||||
Index: linux-3.4/drivers/char/random.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/drivers/char/random.c
|
||||
+++ linux-3.4/drivers/char/random.c
|
||||
@@ -433,7 +433,7 @@ static struct entropy_store input_pool =
|
||||
diff --git a/drivers/char/random.c b/drivers/char/random.c
|
||||
index 1e37cf4..85b9419b1 100644
|
||||
--- a/drivers/char/random.c
|
||||
+++ b/drivers/char/random.c
|
||||
@@ -433,7 +433,7 @@ static struct entropy_store input_pool = {
|
||||
.poolinfo = &poolinfo_table[0],
|
||||
.name = "input",
|
||||
.limit = 1,
|
||||
|
@ -24,7 +25,7 @@ Index: linux-3.4/drivers/char/random.c
|
|||
.pool = input_pool_data
|
||||
};
|
||||
|
||||
@@ -442,7 +442,7 @@ static struct entropy_store blocking_poo
|
||||
@@ -442,7 +442,7 @@ static struct entropy_store blocking_pool = {
|
||||
.name = "blocking",
|
||||
.limit = 1,
|
||||
.pull = &input_pool,
|
||||
|
@ -33,7 +34,7 @@ Index: linux-3.4/drivers/char/random.c
|
|||
.pool = blocking_pool_data
|
||||
};
|
||||
|
||||
@@ -450,7 +450,7 @@ static struct entropy_store nonblocking_
|
||||
@@ -450,7 +450,7 @@ static struct entropy_store nonblocking_pool = {
|
||||
.poolinfo = &poolinfo_table[1],
|
||||
.name = "nonblocking",
|
||||
.pull = &input_pool,
|
||||
|
@ -42,10 +43,10 @@ Index: linux-3.4/drivers/char/random.c
|
|||
.pool = nonblocking_pool_data
|
||||
};
|
||||
|
||||
Index: linux-3.4/drivers/usb/gadget/ci13xxx_udc.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/drivers/usb/gadget/ci13xxx_udc.c
|
||||
+++ linux-3.4/drivers/usb/gadget/ci13xxx_udc.c
|
||||
diff --git a/drivers/usb/gadget/ci13xxx_udc.c b/drivers/usb/gadget/ci13xxx_udc.c
|
||||
index 243ef1a..238372e 100644
|
||||
--- a/drivers/usb/gadget/ci13xxx_udc.c
|
||||
+++ b/drivers/usb/gadget/ci13xxx_udc.c
|
||||
@@ -834,7 +834,7 @@ static struct {
|
||||
} dbg_data = {
|
||||
.idx = 0,
|
||||
|
@ -55,10 +56,10 @@ Index: linux-3.4/drivers/usb/gadget/ci13xxx_udc.c
|
|||
};
|
||||
|
||||
/**
|
||||
Index: linux-3.4/fs/file.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/fs/file.c
|
||||
+++ linux-3.4/fs/file.c
|
||||
diff --git a/fs/file.c b/fs/file.c
|
||||
index ba3f605..6f176f5 100644
|
||||
--- a/fs/file.c
|
||||
+++ b/fs/file.c
|
||||
@@ -421,7 +421,7 @@ struct files_struct init_files = {
|
||||
.close_on_exec = init_files.close_on_exec_init,
|
||||
.open_fds = init_files.open_fds_init,
|
||||
|
@ -68,10 +69,10 @@ Index: linux-3.4/fs/file.c
|
|||
};
|
||||
|
||||
/*
|
||||
Index: linux-3.4/include/linux/idr.h
|
||||
===================================================================
|
||||
--- linux-3.4.orig/include/linux/idr.h
|
||||
+++ linux-3.4/include/linux/idr.h
|
||||
diff --git a/include/linux/idr.h b/include/linux/idr.h
|
||||
index 255491c..4eaacf0 100644
|
||||
--- a/include/linux/idr.h
|
||||
+++ b/include/linux/idr.h
|
||||
@@ -136,7 +136,7 @@ struct ida {
|
||||
struct ida_bitmap *free_bitmap;
|
||||
};
|
||||
|
@ -81,10 +82,10 @@ Index: linux-3.4/include/linux/idr.h
|
|||
#define DEFINE_IDA(name) struct ida name = IDA_INIT(name)
|
||||
|
||||
int ida_pre_get(struct ida *ida, gfp_t gfp_mask);
|
||||
Index: linux-3.4/kernel/cred.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/kernel/cred.c
|
||||
+++ linux-3.4/kernel/cred.c
|
||||
diff --git a/kernel/cred.c b/kernel/cred.c
|
||||
index e70683d..fed7c3f 100644
|
||||
--- a/kernel/cred.c
|
||||
+++ b/kernel/cred.c
|
||||
@@ -36,7 +36,7 @@ static struct kmem_cache *cred_jar;
|
||||
static struct thread_group_cred init_tgcred = {
|
||||
.usage = ATOMIC_INIT(2),
|
|
@ -1,6 +1,8 @@
|
|||
Subject: pci: Use __wake_up_all_locked pci_unblock_user_cfg_access()
|
||||
From 63059f9fc3b7240151842f77dd0548af76dc6c36 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Thu, 01 Dec 2011 00:07:16 +0100
|
||||
Date: Thu, 1 Dec 2011 00:07:16 +0100
|
||||
Subject: [053/254] pci: Use __wake_up_all_locked
|
||||
pci_unblock_user_cfg_access()
|
||||
|
||||
The waitqueue is protected by the pci_lock, so we can just avoid to
|
||||
lock the waitqueue lock itself. That prevents the
|
||||
|
@ -12,11 +14,11 @@ Cc: stable-rt@vger.kernel.org
|
|||
drivers/pci/access.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
Index: linux-3.4/drivers/pci/access.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/drivers/pci/access.c
|
||||
+++ linux-3.4/drivers/pci/access.c
|
||||
@@ -463,7 +463,7 @@ void pci_cfg_access_unlock(struct pci_de
|
||||
diff --git a/drivers/pci/access.c b/drivers/pci/access.c
|
||||
index 2a58164..8e6a88e 100644
|
||||
--- a/drivers/pci/access.c
|
||||
+++ b/drivers/pci/access.c
|
||||
@@ -463,7 +463,7 @@ void pci_cfg_access_unlock(struct pci_dev *dev)
|
||||
WARN_ON(!dev->block_cfg_access);
|
||||
|
||||
dev->block_cfg_access = 0;
|
|
@ -1,6 +1,7 @@
|
|||
Subject: latency-hist.patch
|
||||
From e3fd437ecf6d57e10bdf35c2101c176a7273c202 Mon Sep 17 00:00:00 2001
|
||||
From: Carsten Emde <C.Emde@osadl.org>
|
||||
Date: Tue, 19 Jul 2011 14:03:41 +0100
|
||||
Subject: [054/254] latency-hist.patch
|
||||
|
||||
This patch provides a recording mechanism to store data of potential
|
||||
sources of system latencies. The recordings separately determine the
|
||||
|
@ -11,23 +12,27 @@ filesystem. For details please consult Documentation/trace/histograms.txt.
|
|||
|
||||
Signed-off-by: Carsten Emde <C.Emde@osadl.org>
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
|
||||
---
|
||||
Documentation/trace/histograms.txt | 186 +++++
|
||||
include/linux/sched.h | 6
|
||||
include/trace/events/hist.h | 69 ++
|
||||
include/trace/events/latency_hist.h | 30
|
||||
kernel/hrtimer.c | 11
|
||||
kernel/trace/Kconfig | 104 +++
|
||||
kernel/trace/Makefile | 4
|
||||
kernel/trace/latency_hist.c | 1170 ++++++++++++++++++++++++++++++++++++
|
||||
kernel/trace/trace_irqsoff.c | 11
|
||||
Documentation/trace/histograms.txt | 186 ++++++
|
||||
include/linux/sched.h | 6 +
|
||||
include/trace/events/hist.h | 69 +++
|
||||
include/trace/events/latency_hist.h | 30 +
|
||||
kernel/hrtimer.c | 11 +
|
||||
kernel/trace/Kconfig | 104 ++++
|
||||
kernel/trace/Makefile | 4 +
|
||||
kernel/trace/latency_hist.c | 1170 +++++++++++++++++++++++++++++++++++
|
||||
kernel/trace/trace_irqsoff.c | 11 +
|
||||
9 files changed, 1591 insertions(+)
|
||||
create mode 100644 Documentation/trace/histograms.txt
|
||||
create mode 100644 include/trace/events/hist.h
|
||||
create mode 100644 include/trace/events/latency_hist.h
|
||||
create mode 100644 kernel/trace/latency_hist.c
|
||||
|
||||
Index: linux-3.4/Documentation/trace/histograms.txt
|
||||
===================================================================
|
||||
diff --git a/Documentation/trace/histograms.txt b/Documentation/trace/histograms.txt
|
||||
new file mode 100644
|
||||
index 0000000..6f2aeab
|
||||
--- /dev/null
|
||||
+++ linux-3.4/Documentation/trace/histograms.txt
|
||||
+++ b/Documentation/trace/histograms.txt
|
||||
@@ -0,0 +1,186 @@
|
||||
+ Using the Linux Kernel Latency Histograms
|
||||
+
|
||||
|
@ -215,10 +220,10 @@ Index: linux-3.4/Documentation/trace/histograms.txt
|
|||
+is provided.
|
||||
+
|
||||
+These data are also reset when the wakeup histogram is reset.
|
||||
Index: linux-3.4/include/linux/sched.h
|
||||
===================================================================
|
||||
--- linux-3.4.orig/include/linux/sched.h
|
||||
+++ linux-3.4/include/linux/sched.h
|
||||
diff --git a/include/linux/sched.h b/include/linux/sched.h
|
||||
index f14b965..5b63855 100644
|
||||
--- a/include/linux/sched.h
|
||||
+++ b/include/linux/sched.h
|
||||
@@ -1614,6 +1614,12 @@ struct task_struct {
|
||||
unsigned long trace;
|
||||
/* bitmask and counter of trace recursion */
|
||||
|
@ -232,10 +237,11 @@ Index: linux-3.4/include/linux/sched.h
|
|||
#endif /* CONFIG_TRACING */
|
||||
#ifdef CONFIG_CGROUP_MEM_RES_CTLR /* memcg uses this to do batch job */
|
||||
struct memcg_batch_info {
|
||||
Index: linux-3.4/include/trace/events/hist.h
|
||||
===================================================================
|
||||
diff --git a/include/trace/events/hist.h b/include/trace/events/hist.h
|
||||
new file mode 100644
|
||||
index 0000000..28646db
|
||||
--- /dev/null
|
||||
+++ linux-3.4/include/trace/events/hist.h
|
||||
+++ b/include/trace/events/hist.h
|
||||
@@ -0,0 +1,69 @@
|
||||
+#undef TRACE_SYSTEM
|
||||
+#define TRACE_SYSTEM hist
|
||||
|
@ -306,10 +312,11 @@ Index: linux-3.4/include/trace/events/hist.h
|
|||
+
|
||||
+/* This part must be outside protection */
|
||||
+#include <trace/define_trace.h>
|
||||
Index: linux-3.4/include/trace/events/latency_hist.h
|
||||
===================================================================
|
||||
diff --git a/include/trace/events/latency_hist.h b/include/trace/events/latency_hist.h
|
||||
new file mode 100644
|
||||
index 0000000..d6b5d77
|
||||
--- /dev/null
|
||||
+++ linux-3.4/include/trace/events/latency_hist.h
|
||||
+++ b/include/trace/events/latency_hist.h
|
||||
@@ -0,0 +1,30 @@
|
||||
+#ifndef _LATENCY_HIST_H
|
||||
+#define _LATENCY_HIST_H
|
||||
|
@ -341,10 +348,10 @@ Index: linux-3.4/include/trace/events/latency_hist.h
|
|||
+
|
||||
+#endif /* _LATENCY_HIST_H */
|
||||
+
|
||||
Index: linux-3.4/kernel/hrtimer.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/kernel/hrtimer.c
|
||||
+++ linux-3.4/kernel/hrtimer.c
|
||||
diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c
|
||||
index ae34bf5..1a3695e 100644
|
||||
--- a/kernel/hrtimer.c
|
||||
+++ b/kernel/hrtimer.c
|
||||
@@ -49,6 +49,7 @@
|
||||
#include <asm/uaccess.h>
|
||||
|
||||
|
@ -353,7 +360,7 @@ Index: linux-3.4/kernel/hrtimer.c
|
|||
|
||||
/*
|
||||
* The timer bases:
|
||||
@@ -1236,6 +1237,8 @@ static void __run_hrtimer(struct hrtimer
|
||||
@@ -1236,6 +1237,8 @@ static void __run_hrtimer(struct hrtimer *timer, ktime_t *now)
|
||||
|
||||
#ifdef CONFIG_HIGH_RES_TIMERS
|
||||
|
||||
|
@ -377,10 +384,10 @@ Index: linux-3.4/kernel/hrtimer.c
|
|||
/*
|
||||
* The immediate goal for using the softexpires is
|
||||
* minimizing wakeups, not running timers at the
|
||||
Index: linux-3.4/kernel/trace/Kconfig
|
||||
===================================================================
|
||||
--- linux-3.4.orig/kernel/trace/Kconfig
|
||||
+++ linux-3.4/kernel/trace/Kconfig
|
||||
diff --git a/kernel/trace/Kconfig b/kernel/trace/Kconfig
|
||||
index a1d2849..23c737e 100644
|
||||
--- a/kernel/trace/Kconfig
|
||||
+++ b/kernel/trace/Kconfig
|
||||
@@ -192,6 +192,24 @@ config IRQSOFF_TRACER
|
||||
enabled. This option and the preempt-off timing option can be
|
||||
used together or separately.)
|
||||
|
@ -506,11 +513,11 @@ Index: linux-3.4/kernel/trace/Kconfig
|
|||
config ENABLE_DEFAULT_TRACERS
|
||||
bool "Trace process context switches and events"
|
||||
depends on !GENERIC_TRACER
|
||||
Index: linux-3.4/kernel/trace/Makefile
|
||||
===================================================================
|
||||
--- linux-3.4.orig/kernel/trace/Makefile
|
||||
+++ linux-3.4/kernel/trace/Makefile
|
||||
@@ -36,6 +36,10 @@ obj-$(CONFIG_FUNCTION_TRACER) += trace_f
|
||||
diff --git a/kernel/trace/Makefile b/kernel/trace/Makefile
|
||||
index 5f39a07..108a387 100644
|
||||
--- a/kernel/trace/Makefile
|
||||
+++ b/kernel/trace/Makefile
|
||||
@@ -36,6 +36,10 @@ obj-$(CONFIG_FUNCTION_TRACER) += trace_functions.o
|
||||
obj-$(CONFIG_IRQSOFF_TRACER) += trace_irqsoff.o
|
||||
obj-$(CONFIG_PREEMPT_TRACER) += trace_irqsoff.o
|
||||
obj-$(CONFIG_SCHED_TRACER) += trace_sched_wakeup.o
|
||||
|
@ -521,10 +528,11 @@ Index: linux-3.4/kernel/trace/Makefile
|
|||
obj-$(CONFIG_NOP_TRACER) += trace_nop.o
|
||||
obj-$(CONFIG_STACK_TRACER) += trace_stack.o
|
||||
obj-$(CONFIG_MMIOTRACE) += trace_mmiotrace.o
|
||||
Index: linux-3.4/kernel/trace/latency_hist.c
|
||||
===================================================================
|
||||
diff --git a/kernel/trace/latency_hist.c b/kernel/trace/latency_hist.c
|
||||
new file mode 100644
|
||||
index 0000000..9d49fcb
|
||||
--- /dev/null
|
||||
+++ linux-3.4/kernel/trace/latency_hist.c
|
||||
+++ b/kernel/trace/latency_hist.c
|
||||
@@ -0,0 +1,1170 @@
|
||||
+/*
|
||||
+ * kernel/trace/latency_hist.c
|
||||
|
@ -1696,10 +1704,10 @@ Index: linux-3.4/kernel/trace/latency_hist.c
|
|||
+}
|
||||
+
|
||||
+__initcall(latency_hist_init);
|
||||
Index: linux-3.4/kernel/trace/trace_irqsoff.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/kernel/trace/trace_irqsoff.c
|
||||
+++ linux-3.4/kernel/trace/trace_irqsoff.c
|
||||
diff --git a/kernel/trace/trace_irqsoff.c b/kernel/trace/trace_irqsoff.c
|
||||
index 99d20e9..384f603 100644
|
||||
--- a/kernel/trace/trace_irqsoff.c
|
||||
+++ b/kernel/trace/trace_irqsoff.c
|
||||
@@ -17,6 +17,7 @@
|
||||
#include <linux/fs.h>
|
||||
|
||||
|
@ -1722,7 +1730,7 @@ Index: linux-3.4/kernel/trace/trace_irqsoff.c
|
|||
if (preempt_trace() || irq_trace())
|
||||
stop_critical_timing(CALLER_ADDR0, CALLER_ADDR1);
|
||||
}
|
||||
@@ -451,6 +454,7 @@ EXPORT_SYMBOL_GPL(stop_critical_timings)
|
||||
@@ -451,6 +454,7 @@ EXPORT_SYMBOL_GPL(stop_critical_timings);
|
||||
#ifdef CONFIG_PROVE_LOCKING
|
||||
void time_hardirqs_on(unsigned long a0, unsigned long a1)
|
||||
{
|
||||
|
@ -1730,7 +1738,7 @@ Index: linux-3.4/kernel/trace/trace_irqsoff.c
|
|||
if (!preempt_trace() && irq_trace())
|
||||
stop_critical_timing(a0, a1);
|
||||
}
|
||||
@@ -459,6 +463,7 @@ void time_hardirqs_off(unsigned long a0,
|
||||
@@ -459,6 +463,7 @@ void time_hardirqs_off(unsigned long a0, unsigned long a1)
|
||||
{
|
||||
if (!preempt_trace() && irq_trace())
|
||||
start_critical_timing(a0, a1);
|
||||
|
@ -1738,7 +1746,7 @@ Index: linux-3.4/kernel/trace/trace_irqsoff.c
|
|||
}
|
||||
|
||||
#else /* !CONFIG_PROVE_LOCKING */
|
||||
@@ -484,6 +489,7 @@ inline void print_irqtrace_events(struct
|
||||
@@ -484,6 +489,7 @@ inline void print_irqtrace_events(struct task_struct *curr)
|
||||
*/
|
||||
void trace_hardirqs_on(void)
|
||||
{
|
||||
|
@ -1760,7 +1768,7 @@ Index: linux-3.4/kernel/trace/trace_irqsoff.c
|
|||
if (!preempt_trace() && irq_trace())
|
||||
stop_critical_timing(CALLER_ADDR0, caller_addr);
|
||||
}
|
||||
@@ -507,6 +515,7 @@ void trace_hardirqs_off_caller(unsigned
|
||||
@@ -507,6 +515,7 @@ void trace_hardirqs_off_caller(unsigned long caller_addr)
|
||||
{
|
||||
if (!preempt_trace() && irq_trace())
|
||||
start_critical_timing(CALLER_ADDR0, caller_addr);
|
||||
|
@ -1768,7 +1776,7 @@ Index: linux-3.4/kernel/trace/trace_irqsoff.c
|
|||
}
|
||||
EXPORT_SYMBOL(trace_hardirqs_off_caller);
|
||||
|
||||
@@ -516,12 +525,14 @@ EXPORT_SYMBOL(trace_hardirqs_off_caller)
|
||||
@@ -516,12 +525,14 @@ EXPORT_SYMBOL(trace_hardirqs_off_caller);
|
||||
#ifdef CONFIG_PREEMPT_TRACER
|
||||
void trace_preempt_on(unsigned long a0, unsigned long a1)
|
||||
{
|
|
@ -1,25 +1,28 @@
|
|||
Subject: hwlatdetect.patch
|
||||
From b7665cf31898b8e7248ba5cde80699bbb6df91c2 Mon Sep 17 00:00:00 2001
|
||||
From: Carsten Emde <C.Emde@osadl.org>
|
||||
Date: Tue, 19 Jul 2011 13:53:12 +0100
|
||||
Subject: [055/254] hwlatdetect.patch
|
||||
|
||||
Jon Masters developed this wonderful SMI detector. For details please
|
||||
consult Documentation/hwlat_detector.txt. It could be ported to Linux
|
||||
3.0 RT without any major change.
|
||||
|
||||
Signed-off-by: Carsten Emde <C.Emde@osadl.org>
|
||||
|
||||
---
|
||||
Documentation/hwlat_detector.txt | 64 ++
|
||||
MAINTAINERS | 9
|
||||
drivers/misc/Kconfig | 29
|
||||
drivers/misc/Makefile | 1
|
||||
drivers/misc/hwlat_detector.c | 1212 +++++++++++++++++++++++++++++++++++++++
|
||||
MAINTAINERS | 9 +
|
||||
drivers/misc/Kconfig | 29 +
|
||||
drivers/misc/Makefile | 1 +
|
||||
drivers/misc/hwlat_detector.c | 1212 ++++++++++++++++++++++++++++++++++++++
|
||||
5 files changed, 1315 insertions(+)
|
||||
create mode 100644 Documentation/hwlat_detector.txt
|
||||
create mode 100644 drivers/misc/hwlat_detector.c
|
||||
|
||||
Index: linux-3.4/Documentation/hwlat_detector.txt
|
||||
===================================================================
|
||||
diff --git a/Documentation/hwlat_detector.txt b/Documentation/hwlat_detector.txt
|
||||
new file mode 100644
|
||||
index 0000000..cb61516
|
||||
--- /dev/null
|
||||
+++ linux-3.4/Documentation/hwlat_detector.txt
|
||||
+++ b/Documentation/hwlat_detector.txt
|
||||
@@ -0,0 +1,64 @@
|
||||
+Introduction:
|
||||
+-------------
|
||||
|
@ -85,11 +88,11 @@ Index: linux-3.4/Documentation/hwlat_detector.txt
|
|||
+observe any latencies that exceed the threshold (initially 100 usecs),
|
||||
+then we write to a global sample ring buffer of 8K samples, which is
|
||||
+consumed by reading from the "sample" (pipe) debugfs file interface.
|
||||
Index: linux-3.4/MAINTAINERS
|
||||
===================================================================
|
||||
--- linux-3.4.orig/MAINTAINERS
|
||||
+++ linux-3.4/MAINTAINERS
|
||||
@@ -3082,6 +3082,15 @@ L: linuxppc-dev@lists.ozlabs.org
|
||||
diff --git a/MAINTAINERS b/MAINTAINERS
|
||||
index b362709..249426c 100644
|
||||
--- a/MAINTAINERS
|
||||
+++ b/MAINTAINERS
|
||||
@@ -3081,6 +3081,15 @@ L: linuxppc-dev@lists.ozlabs.org
|
||||
S: Odd Fixes
|
||||
F: drivers/tty/hvc/
|
||||
|
||||
|
@ -105,10 +108,10 @@ Index: linux-3.4/MAINTAINERS
|
|||
HARDWARE MONITORING
|
||||
M: Jean Delvare <khali@linux-fr.org>
|
||||
M: Guenter Roeck <guenter.roeck@ericsson.com>
|
||||
Index: linux-3.4/drivers/misc/Kconfig
|
||||
===================================================================
|
||||
--- linux-3.4.orig/drivers/misc/Kconfig
|
||||
+++ linux-3.4/drivers/misc/Kconfig
|
||||
diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
|
||||
index 504daa3..eead6ce 100644
|
||||
--- a/drivers/misc/Kconfig
|
||||
+++ b/drivers/misc/Kconfig
|
||||
@@ -130,6 +130,35 @@ config IBM_ASM
|
||||
for information on the specific driver level and support statement
|
||||
for your IBM server.
|
||||
|
@ -145,19 +148,20 @@ Index: linux-3.4/drivers/misc/Kconfig
|
|||
config PHANTOM
|
||||
tristate "Sensable PHANToM (PCI)"
|
||||
depends on PCI
|
||||
Index: linux-3.4/drivers/misc/Makefile
|
||||
===================================================================
|
||||
--- linux-3.4.orig/drivers/misc/Makefile
|
||||
+++ linux-3.4/drivers/misc/Makefile
|
||||
diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile
|
||||
index 3e1d8010..c7c058a 100644
|
||||
--- a/drivers/misc/Makefile
|
||||
+++ b/drivers/misc/Makefile
|
||||
@@ -49,3 +49,4 @@ obj-y += carma/
|
||||
obj-$(CONFIG_USB_SWITCH_FSA9480) += fsa9480.o
|
||||
obj-$(CONFIG_ALTERA_STAPL) +=altera-stapl/
|
||||
obj-$(CONFIG_MAX8997_MUIC) += max8997-muic.o
|
||||
+obj-$(CONFIG_HWLAT_DETECTOR) += hwlat_detector.o
|
||||
Index: linux-3.4/drivers/misc/hwlat_detector.c
|
||||
===================================================================
|
||||
diff --git a/drivers/misc/hwlat_detector.c b/drivers/misc/hwlat_detector.c
|
||||
new file mode 100644
|
||||
index 0000000..b7b7c90
|
||||
--- /dev/null
|
||||
+++ linux-3.4/drivers/misc/hwlat_detector.c
|
||||
+++ b/drivers/misc/hwlat_detector.c
|
||||
@@ -0,0 +1,1212 @@
|
||||
+/*
|
||||
+ * hwlat_detector.c - A simple Hardware Latency detector.
|
|
@ -1,6 +1,7 @@
|
|||
Subject: localversion.patch
|
||||
From 525e198706ffa7dffa7f7b9641ede85810c565a4 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Fri, 08 Jul 2011 20:25:16 +0200
|
||||
Date: Fri, 8 Jul 2011 20:25:16 +0200
|
||||
Subject: [056/254] localversion.patch
|
||||
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
|
||||
|
@ -8,10 +9,12 @@ Link: http://lkml.kernel.org/n/tip-8vdw4bfcsds27cvox6rpb334@git.kernel.org
|
|||
---
|
||||
localversion-rt | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
create mode 100644 localversion-rt
|
||||
|
||||
Index: linux-3.4/localversion-rt
|
||||
===================================================================
|
||||
diff --git a/localversion-rt b/localversion-rt
|
||||
new file mode 100644
|
||||
index 0000000..700c857
|
||||
--- /dev/null
|
||||
+++ linux-3.4/localversion-rt
|
||||
+++ b/localversion-rt
|
||||
@@ -0,0 +1 @@
|
||||
+-rt8
|
|
@ -1,6 +1,7 @@
|
|||
Subject: early-printk-consolidate.patch
|
||||
From 638032b662f993d0b9b8ca265ead706c11425ed4 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Sat, 23 Jul 2011 11:04:08 +0200
|
||||
Subject: [057/254] early-printk-consolidate.patch
|
||||
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
---
|
||||
|
@ -21,11 +22,11 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
|||
kernel/printk.c | 30 +++++++++++++++++++++++-------
|
||||
15 files changed, 65 insertions(+), 110 deletions(-)
|
||||
|
||||
Index: linux-3.4/arch/arm/kernel/early_printk.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/arm/kernel/early_printk.c
|
||||
+++ linux-3.4/arch/arm/kernel/early_printk.c
|
||||
@@ -29,28 +29,17 @@ static void early_console_write(struct c
|
||||
diff --git a/arch/arm/kernel/early_printk.c b/arch/arm/kernel/early_printk.c
|
||||
index 85aa2b2..4307653 100644
|
||||
--- a/arch/arm/kernel/early_printk.c
|
||||
+++ b/arch/arm/kernel/early_printk.c
|
||||
@@ -29,28 +29,17 @@ static void early_console_write(struct console *con, const char *s, unsigned n)
|
||||
early_write(s, n);
|
||||
}
|
||||
|
||||
|
@ -57,11 +58,11 @@ Index: linux-3.4/arch/arm/kernel/early_printk.c
|
|||
return 0;
|
||||
}
|
||||
|
||||
Index: linux-3.4/arch/blackfin/kernel/early_printk.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/blackfin/kernel/early_printk.c
|
||||
+++ linux-3.4/arch/blackfin/kernel/early_printk.c
|
||||
@@ -25,8 +25,6 @@ extern struct console *bfin_earlyserial_
|
||||
diff --git a/arch/blackfin/kernel/early_printk.c b/arch/blackfin/kernel/early_printk.c
|
||||
index 84ed837..61fbd2d 100644
|
||||
--- a/arch/blackfin/kernel/early_printk.c
|
||||
+++ b/arch/blackfin/kernel/early_printk.c
|
||||
@@ -25,8 +25,6 @@ extern struct console *bfin_earlyserial_init(unsigned int port,
|
||||
extern struct console *bfin_jc_early_init(void);
|
||||
#endif
|
||||
|
||||
|
@ -70,10 +71,10 @@ Index: linux-3.4/arch/blackfin/kernel/early_printk.c
|
|||
/* Default console */
|
||||
#define DEFAULT_PORT 0
|
||||
#define DEFAULT_CFLAG CS8|B57600
|
||||
Index: linux-3.4/arch/microblaze/kernel/early_printk.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/microblaze/kernel/early_printk.c
|
||||
+++ linux-3.4/arch/microblaze/kernel/early_printk.c
|
||||
diff --git a/arch/microblaze/kernel/early_printk.c b/arch/microblaze/kernel/early_printk.c
|
||||
index aba1f9a..b099a86 100644
|
||||
--- a/arch/microblaze/kernel/early_printk.c
|
||||
+++ b/arch/microblaze/kernel/early_printk.c
|
||||
@@ -21,7 +21,6 @@
|
||||
#include <asm/setup.h>
|
||||
#include <asm/prom.h>
|
||||
|
@ -82,7 +83,7 @@ Index: linux-3.4/arch/microblaze/kernel/early_printk.c
|
|||
static u32 base_addr;
|
||||
|
||||
#ifdef CONFIG_SERIAL_UARTLITE_CONSOLE
|
||||
@@ -109,27 +108,11 @@ static struct console early_serial_uart1
|
||||
@@ -109,27 +108,11 @@ static struct console early_serial_uart16550_console = {
|
||||
};
|
||||
#endif /* CONFIG_SERIAL_8250_CONSOLE */
|
||||
|
||||
|
@ -140,11 +141,11 @@ Index: linux-3.4/arch/microblaze/kernel/early_printk.c
|
|||
- early_console_initialized = 0;
|
||||
+ early_console = NULL;
|
||||
}
|
||||
Index: linux-3.4/arch/mips/kernel/early_printk.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/mips/kernel/early_printk.c
|
||||
+++ linux-3.4/arch/mips/kernel/early_printk.c
|
||||
@@ -25,20 +25,18 @@ early_console_write(struct console *con,
|
||||
diff --git a/arch/mips/kernel/early_printk.c b/arch/mips/kernel/early_printk.c
|
||||
index 9ae813e..973c995 100644
|
||||
--- a/arch/mips/kernel/early_printk.c
|
||||
+++ b/arch/mips/kernel/early_printk.c
|
||||
@@ -25,20 +25,18 @@ early_console_write(struct console *con, const char *s, unsigned n)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -169,10 +170,10 @@ Index: linux-3.4/arch/mips/kernel/early_printk.c
|
|||
- register_console(&early_console);
|
||||
+ register_console(&early_console_prom);
|
||||
}
|
||||
Index: linux-3.4/arch/powerpc/kernel/udbg.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/powerpc/kernel/udbg.c
|
||||
+++ linux-3.4/arch/powerpc/kernel/udbg.c
|
||||
diff --git a/arch/powerpc/kernel/udbg.c b/arch/powerpc/kernel/udbg.c
|
||||
index c39c1ca..8b00aab 100644
|
||||
--- a/arch/powerpc/kernel/udbg.c
|
||||
+++ b/arch/powerpc/kernel/udbg.c
|
||||
@@ -179,15 +179,13 @@ static struct console udbg_console = {
|
||||
.index = 0,
|
||||
};
|
||||
|
@ -190,7 +191,7 @@ Index: linux-3.4/arch/powerpc/kernel/udbg.c
|
|||
return;
|
||||
|
||||
if (!udbg_putc)
|
||||
@@ -197,7 +195,7 @@ void __init register_early_udbg_console(
|
||||
@@ -197,7 +195,7 @@ void __init register_early_udbg_console(void)
|
||||
printk(KERN_INFO "early console immortal !\n");
|
||||
udbg_console.flags &= ~CON_BOOT;
|
||||
}
|
||||
|
@ -199,10 +200,10 @@ Index: linux-3.4/arch/powerpc/kernel/udbg.c
|
|||
register_console(&udbg_console);
|
||||
}
|
||||
|
||||
Index: linux-3.4/arch/sh/kernel/sh_bios.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/sh/kernel/sh_bios.c
|
||||
+++ linux-3.4/arch/sh/kernel/sh_bios.c
|
||||
diff --git a/arch/sh/kernel/sh_bios.c b/arch/sh/kernel/sh_bios.c
|
||||
index 47475cc..a5b51b9 100644
|
||||
--- a/arch/sh/kernel/sh_bios.c
|
||||
+++ b/arch/sh/kernel/sh_bios.c
|
||||
@@ -144,8 +144,6 @@ static struct console bios_console = {
|
||||
.index = -1,
|
||||
};
|
||||
|
@ -212,10 +213,10 @@ Index: linux-3.4/arch/sh/kernel/sh_bios.c
|
|||
static int __init setup_early_printk(char *buf)
|
||||
{
|
||||
int keep_early = 0;
|
||||
Index: linux-3.4/arch/sparc/kernel/setup_32.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/sparc/kernel/setup_32.c
|
||||
+++ linux-3.4/arch/sparc/kernel/setup_32.c
|
||||
diff --git a/arch/sparc/kernel/setup_32.c b/arch/sparc/kernel/setup_32.c
|
||||
index d444468..a000aa5 100644
|
||||
--- a/arch/sparc/kernel/setup_32.c
|
||||
+++ b/arch/sparc/kernel/setup_32.c
|
||||
@@ -221,6 +221,7 @@ void __init setup_arch(char **cmdline_p)
|
||||
|
||||
boot_flags_init(*cmdline_p);
|
||||
|
@ -224,11 +225,11 @@ Index: linux-3.4/arch/sparc/kernel/setup_32.c
|
|||
register_console(&prom_early_console);
|
||||
|
||||
/* Set sparc_cpu_model */
|
||||
Index: linux-3.4/arch/sparc/kernel/setup_64.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/sparc/kernel/setup_64.c
|
||||
+++ linux-3.4/arch/sparc/kernel/setup_64.c
|
||||
@@ -487,6 +487,12 @@ static void __init init_sparc64_elf_hwca
|
||||
diff --git a/arch/sparc/kernel/setup_64.c b/arch/sparc/kernel/setup_64.c
|
||||
index 1414d16..8b37e5a 100644
|
||||
--- a/arch/sparc/kernel/setup_64.c
|
||||
+++ b/arch/sparc/kernel/setup_64.c
|
||||
@@ -487,6 +487,12 @@ static void __init init_sparc64_elf_hwcap(void)
|
||||
popc_patch();
|
||||
}
|
||||
|
||||
|
@ -250,11 +251,11 @@ Index: linux-3.4/arch/sparc/kernel/setup_64.c
|
|||
|
||||
if (tlb_type == hypervisor)
|
||||
printk("ARCH: SUN4V\n");
|
||||
Index: linux-3.4/arch/tile/kernel/early_printk.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/tile/kernel/early_printk.c
|
||||
+++ linux-3.4/arch/tile/kernel/early_printk.c
|
||||
@@ -33,25 +33,8 @@ static struct console early_hv_console =
|
||||
diff --git a/arch/tile/kernel/early_printk.c b/arch/tile/kernel/early_printk.c
|
||||
index afb9c9a..ff25220 100644
|
||||
--- a/arch/tile/kernel/early_printk.c
|
||||
+++ b/arch/tile/kernel/early_printk.c
|
||||
@@ -33,25 +33,8 @@ static struct console early_hv_console = {
|
||||
};
|
||||
|
||||
/* Direct interface for emergencies */
|
||||
|
@ -296,7 +297,7 @@ Index: linux-3.4/arch/tile/kernel/early_printk.c
|
|||
register_console(early_console);
|
||||
|
||||
return 0;
|
||||
@@ -85,12 +67,12 @@ static int __init setup_early_printk(cha
|
||||
@@ -85,12 +67,12 @@ static int __init setup_early_printk(char *str)
|
||||
void __init disable_early_printk(void)
|
||||
{
|
||||
early_console_complete = 1;
|
||||
|
@ -320,11 +321,11 @@ Index: linux-3.4/arch/tile/kernel/early_printk.c
|
|||
return;
|
||||
early_printk("\
|
||||
Machine shutting down before console output is fully initialized.\n\
|
||||
Index: linux-3.4/arch/um/kernel/early_printk.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/um/kernel/early_printk.c
|
||||
+++ linux-3.4/arch/um/kernel/early_printk.c
|
||||
@@ -16,7 +16,7 @@ static void early_console_write(struct c
|
||||
diff --git a/arch/um/kernel/early_printk.c b/arch/um/kernel/early_printk.c
|
||||
index ec649bf..183060f 100644
|
||||
--- a/arch/um/kernel/early_printk.c
|
||||
+++ b/arch/um/kernel/early_printk.c
|
||||
@@ -16,7 +16,7 @@ static void early_console_write(struct console *con, const char *s, unsigned int
|
||||
um_early_printk(s, n);
|
||||
}
|
||||
|
||||
|
@ -346,11 +347,11 @@ Index: linux-3.4/arch/um/kernel/early_printk.c
|
|||
return 0;
|
||||
}
|
||||
|
||||
Index: linux-3.4/arch/unicore32/kernel/early_printk.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/unicore32/kernel/early_printk.c
|
||||
+++ linux-3.4/arch/unicore32/kernel/early_printk.c
|
||||
@@ -33,21 +33,17 @@ static struct console early_ocd_console
|
||||
diff --git a/arch/unicore32/kernel/early_printk.c b/arch/unicore32/kernel/early_printk.c
|
||||
index 3922255..9be0d5d 100644
|
||||
--- a/arch/unicore32/kernel/early_printk.c
|
||||
+++ b/arch/unicore32/kernel/early_printk.c
|
||||
@@ -33,21 +33,17 @@ static struct console early_ocd_console = {
|
||||
.index = -1,
|
||||
};
|
||||
|
||||
|
@ -376,11 +377,11 @@ Index: linux-3.4/arch/unicore32/kernel/early_printk.c
|
|||
|
||||
if (keep_early)
|
||||
early_console->flags &= ~CON_BOOT;
|
||||
Index: linux-3.4/arch/x86/kernel/early_printk.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/x86/kernel/early_printk.c
|
||||
+++ linux-3.4/arch/x86/kernel/early_printk.c
|
||||
@@ -169,25 +169,9 @@ static struct console early_serial_conso
|
||||
diff --git a/arch/x86/kernel/early_printk.c b/arch/x86/kernel/early_printk.c
|
||||
index 9b9f18b..d15f575 100644
|
||||
--- a/arch/x86/kernel/early_printk.c
|
||||
+++ b/arch/x86/kernel/early_printk.c
|
||||
@@ -169,25 +169,9 @@ static struct console early_serial_console = {
|
||||
.index = -1,
|
||||
};
|
||||
|
||||
|
@ -407,7 +408,7 @@ Index: linux-3.4/arch/x86/kernel/early_printk.c
|
|||
printk(KERN_CRIT "ERROR: earlyprintk= %s already used\n",
|
||||
con->name);
|
||||
return;
|
||||
@@ -207,9 +191,8 @@ static int __init setup_early_printk(cha
|
||||
@@ -207,9 +191,8 @@ static int __init setup_early_printk(char *buf)
|
||||
if (!buf)
|
||||
return 0;
|
||||
|
||||
|
@ -418,10 +419,10 @@ Index: linux-3.4/arch/x86/kernel/early_printk.c
|
|||
|
||||
keep = (strstr(buf, "keep") != NULL);
|
||||
|
||||
Index: linux-3.4/include/linux/console.h
|
||||
===================================================================
|
||||
--- linux-3.4.orig/include/linux/console.h
|
||||
+++ linux-3.4/include/linux/console.h
|
||||
diff --git a/include/linux/console.h b/include/linux/console.h
|
||||
index 7201ce4..dec7f97 100644
|
||||
--- a/include/linux/console.h
|
||||
+++ b/include/linux/console.h
|
||||
@@ -133,6 +133,7 @@ struct console {
|
||||
for (con = console_drivers; con != NULL; con = con->next)
|
||||
|
||||
|
@ -430,10 +431,10 @@ Index: linux-3.4/include/linux/console.h
|
|||
|
||||
extern int add_preferred_console(char *name, int idx, char *options);
|
||||
extern int update_console_cmdline(char *name, int idx, char *name_new, int idx_new, char *options);
|
||||
Index: linux-3.4/include/linux/printk.h
|
||||
===================================================================
|
||||
--- linux-3.4.orig/include/linux/printk.h
|
||||
+++ linux-3.4/include/linux/printk.h
|
||||
diff --git a/include/linux/printk.h b/include/linux/printk.h
|
||||
index 0525927..c8d7f7b 100644
|
||||
--- a/include/linux/printk.h
|
||||
+++ b/include/linux/printk.h
|
||||
@@ -88,8 +88,13 @@ int no_printk(const char *fmt, ...)
|
||||
return 0;
|
||||
}
|
||||
|
@ -448,10 +449,10 @@ Index: linux-3.4/include/linux/printk.h
|
|||
|
||||
extern int printk_needs_cpu(int cpu);
|
||||
extern void printk_tick(void);
|
||||
Index: linux-3.4/kernel/printk.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/kernel/printk.c
|
||||
+++ linux-3.4/kernel/printk.c
|
||||
diff --git a/kernel/printk.c b/kernel/printk.c
|
||||
index b663c2c..c442606 100644
|
||||
--- a/kernel/printk.c
|
||||
+++ b/kernel/printk.c
|
||||
@@ -47,13 +47,6 @@
|
||||
#define CREATE_TRACE_POINTS
|
||||
#include <trace/events/printk.h>
|
||||
|
@ -466,7 +467,7 @@ Index: linux-3.4/kernel/printk.c
|
|||
#define __LOG_BUF_LEN (1 << CONFIG_LOG_BUF_SHIFT)
|
||||
|
||||
/* printk's without a loglevel use this.. */
|
||||
@@ -524,6 +517,29 @@ static void __call_console_drivers(unsig
|
||||
@@ -524,6 +517,29 @@ static void __call_console_drivers(unsigned start, unsigned end)
|
||||
}
|
||||
}
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
Subject: printk-kill.patch
|
||||
From 4d85db5392fdb03f98b4ea105da773401c990850 Mon Sep 17 00:00:00 2001
|
||||
From: Ingo Molnar <mingo@elte.hu>
|
||||
Date: Fri, 22 Jul 2011 17:58:40 +0200
|
||||
Subject: [058/254] printk-kill.patch
|
||||
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
---
|
||||
|
@ -9,10 +10,10 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
|||
kernel/watchdog.c | 15 +++++++++++++--
|
||||
3 files changed, 48 insertions(+), 3 deletions(-)
|
||||
|
||||
Index: linux-3.4/include/linux/printk.h
|
||||
===================================================================
|
||||
--- linux-3.4.orig/include/linux/printk.h
|
||||
+++ linux-3.4/include/linux/printk.h
|
||||
diff --git a/include/linux/printk.h b/include/linux/printk.h
|
||||
index c8d7f7b..d5e6eed 100644
|
||||
--- a/include/linux/printk.h
|
||||
+++ b/include/linux/printk.h
|
||||
@@ -91,9 +91,11 @@ int no_printk(const char *fmt, ...)
|
||||
#ifdef CONFIG_EARLY_PRINTK
|
||||
extern asmlinkage __printf(1, 2)
|
||||
|
@ -25,7 +26,7 @@ Index: linux-3.4/include/linux/printk.h
|
|||
#endif
|
||||
|
||||
extern int printk_needs_cpu(int cpu);
|
||||
@@ -119,7 +121,6 @@ extern int __printk_ratelimit(const char
|
||||
@@ -119,7 +121,6 @@ extern int __printk_ratelimit(const char *func);
|
||||
#define printk_ratelimit() __printk_ratelimit(__func__)
|
||||
extern bool printk_timed_ratelimit(unsigned long *caller_jiffies,
|
||||
unsigned int interval_msec);
|
||||
|
@ -33,11 +34,11 @@ Index: linux-3.4/include/linux/printk.h
|
|||
extern int printk_delay_msec;
|
||||
extern int dmesg_restrict;
|
||||
extern int kptr_restrict;
|
||||
Index: linux-3.4/kernel/printk.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/kernel/printk.c
|
||||
+++ linux-3.4/kernel/printk.c
|
||||
@@ -538,6 +538,32 @@ asmlinkage void early_printk(const char
|
||||
diff --git a/kernel/printk.c b/kernel/printk.c
|
||||
index c442606..5a172f9 100644
|
||||
--- a/kernel/printk.c
|
||||
+++ b/kernel/printk.c
|
||||
@@ -538,6 +538,32 @@ asmlinkage void early_printk(const char *fmt, ...)
|
||||
early_vprintk(fmt, ap);
|
||||
va_end(ap);
|
||||
}
|
||||
|
@ -70,7 +71,7 @@ Index: linux-3.4/kernel/printk.c
|
|||
#endif
|
||||
|
||||
static bool __read_mostly ignore_loglevel;
|
||||
@@ -862,6 +888,13 @@ asmlinkage int vprintk(const char *fmt,
|
||||
@@ -862,6 +888,13 @@ asmlinkage int vprintk(const char *fmt, va_list args)
|
||||
size_t plen;
|
||||
char special;
|
||||
|
||||
|
@ -84,11 +85,11 @@ Index: linux-3.4/kernel/printk.c
|
|||
boot_delay_msec();
|
||||
printk_delay();
|
||||
|
||||
Index: linux-3.4/kernel/watchdog.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/kernel/watchdog.c
|
||||
+++ linux-3.4/kernel/watchdog.c
|
||||
@@ -201,6 +201,8 @@ static int is_softlockup(unsigned long t
|
||||
diff --git a/kernel/watchdog.c b/kernel/watchdog.c
|
||||
index df30ee0..de08263 100644
|
||||
--- a/kernel/watchdog.c
|
||||
+++ b/kernel/watchdog.c
|
||||
@@ -201,6 +201,8 @@ static int is_softlockup(unsigned long touch_ts)
|
||||
|
||||
#ifdef CONFIG_HARDLOCKUP_DETECTOR
|
||||
|
||||
|
@ -97,7 +98,7 @@ Index: linux-3.4/kernel/watchdog.c
|
|||
static struct perf_event_attr wd_hw_attr = {
|
||||
.type = PERF_TYPE_HARDWARE,
|
||||
.config = PERF_COUNT_HW_CPU_CYCLES,
|
||||
@@ -235,10 +237,19 @@ static void watchdog_overflow_callback(s
|
||||
@@ -235,10 +237,19 @@ static void watchdog_overflow_callback(struct perf_event *event,
|
||||
if (__this_cpu_read(hard_watchdog_warn) == true)
|
||||
return;
|
||||
|
|
@ -1,10 +1,8 @@
|
|||
Subject: printk: %27force_early_printk%27 boot param to help with debugging
|
||||
From: Peter Zijlstra <peterz@infradead.org>
|
||||
Date: Fri, 02 Sep 2011 14:41:29 +0200
|
||||
|
||||
Subject: printk: 'force_early_printk' boot param to help with debugging
|
||||
From 3332b30fd47e43bb91d5f56426f0ce3456bf8093 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Zijlstra <a.p.zijlstra@chello.nl>
|
||||
Date: Fri Sep 02 14:29:33 CEST 2011
|
||||
Date: Fri, 2 Sep 2011 14:29:33 +0200
|
||||
Subject: [059/254] printk: 'force_early_printk' boot param to help with
|
||||
debugging
|
||||
|
||||
Gives me an option to screw printk and actually see what the machine
|
||||
says.
|
||||
|
@ -17,11 +15,11 @@ Link: http://lkml.kernel.org/n/tip-ykb97nsfmobq44xketrxs977@git.kernel.org
|
|||
kernel/printk.c | 7 +++++++
|
||||
1 file changed, 7 insertions(+)
|
||||
|
||||
Index: linux-3.4/kernel/printk.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/kernel/printk.c
|
||||
+++ linux-3.4/kernel/printk.c
|
||||
@@ -547,6 +547,13 @@ asmlinkage void early_printk(const char
|
||||
diff --git a/kernel/printk.c b/kernel/printk.c
|
||||
index 5a172f9..300952e 100644
|
||||
--- a/kernel/printk.c
|
||||
+++ b/kernel/printk.c
|
||||
@@ -547,6 +547,13 @@ asmlinkage void early_printk(const char *fmt, ...)
|
||||
*/
|
||||
static bool __read_mostly printk_killswitch;
|
||||
|
|
@ -1,16 +1,17 @@
|
|||
Subject: rt-preempt-base-config.patch
|
||||
From febbcf6b7485f3ec4fc8f8b5c3ba26dbeccf833e Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Fri, 17 Jun 2011 12:39:57 +0200
|
||||
Subject: [060/254] rt-preempt-base-config.patch
|
||||
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
---
|
||||
kernel/Kconfig.preempt | 19 +++++++++++++++++--
|
||||
1 file changed, 17 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: linux-3.4/kernel/Kconfig.preempt
|
||||
===================================================================
|
||||
--- linux-3.4.orig/kernel/Kconfig.preempt
|
||||
+++ linux-3.4/kernel/Kconfig.preempt
|
||||
diff --git a/kernel/Kconfig.preempt b/kernel/Kconfig.preempt
|
||||
index 3f9c974..885efbd 100644
|
||||
--- a/kernel/Kconfig.preempt
|
||||
+++ b/kernel/Kconfig.preempt
|
||||
@@ -1,3 +1,10 @@
|
||||
+config PREEMPT
|
||||
+ bool
|
|
@ -1,18 +1,18 @@
|
|||
From 3cab92a5d7bac5b62aeeae7ddeae5528573e579a Mon Sep 17 00:00:00 2001
|
||||
From: Ingo Molnar <mingo@elte.hu>
|
||||
Date: Fri, 3 Jul 2009 08:29:58 -0500
|
||||
Subject: bug: BUG_ON/WARN_ON variants dependend on RT/!RT
|
||||
Subject: [061/254] bug: BUG_ON/WARN_ON variants dependend on RT/!RT
|
||||
|
||||
Signed-off-by: Ingo Molnar <mingo@elte.hu>
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
|
||||
---
|
||||
include/asm-generic/bug.h | 18 ++++++++++++++++++
|
||||
1 file changed, 18 insertions(+)
|
||||
|
||||
Index: linux-3.4/include/asm-generic/bug.h
|
||||
===================================================================
|
||||
--- linux-3.4.orig/include/asm-generic/bug.h
|
||||
+++ linux-3.4/include/asm-generic/bug.h
|
||||
diff --git a/include/asm-generic/bug.h b/include/asm-generic/bug.h
|
||||
index 2520a6e..0e41ade 100644
|
||||
--- a/include/asm-generic/bug.h
|
||||
+++ b/include/asm-generic/bug.h
|
||||
@@ -3,6 +3,10 @@
|
||||
|
||||
#include <linux/compiler.h>
|
||||
|
@ -24,7 +24,7 @@ Index: linux-3.4/include/asm-generic/bug.h
|
|||
#ifdef CONFIG_BUG
|
||||
|
||||
#ifdef CONFIG_GENERIC_BUG
|
||||
@@ -202,4 +206,18 @@ extern void warn_slowpath_null(const cha
|
||||
@@ -202,4 +206,18 @@ extern void warn_slowpath_null(const char *file, const int line);
|
||||
# define WARN_ON_SMP(x) ({0;})
|
||||
#endif
|
||||
|
|
@ -1,23 +1,23 @@
|
|||
From c50790660d75ebc664d0cf5c548d544aa4e035ff Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Tue, 21 Jul 2009 22:34:14 +0200
|
||||
Subject: rt: local_irq_* variants depending on RT/!RT
|
||||
Subject: [062/254] rt: local_irq_* variants depending on RT/!RT
|
||||
|
||||
Add local_irq_*_(no)rt variant which are mainly used to break
|
||||
interrupt disabled sections on PREEMPT_RT or to explicitely disable
|
||||
interrupts on PREEMPT_RT.
|
||||
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
|
||||
---
|
||||
include/linux/interrupt.h | 2 +-
|
||||
include/linux/irqflags.h | 19 +++++++++++++++++++
|
||||
2 files changed, 20 insertions(+), 1 deletion(-)
|
||||
|
||||
Index: linux-3.4/include/linux/interrupt.h
|
||||
===================================================================
|
||||
--- linux-3.4.orig/include/linux/interrupt.h
|
||||
+++ linux-3.4/include/linux/interrupt.h
|
||||
@@ -217,7 +217,7 @@ extern void devm_free_irq(struct device
|
||||
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
|
||||
index 02c3c4f..d2cc272 100644
|
||||
--- a/include/linux/interrupt.h
|
||||
+++ b/include/linux/interrupt.h
|
||||
@@ -217,7 +217,7 @@ extern void devm_free_irq(struct device *dev, unsigned int irq, void *dev_id);
|
||||
#ifdef CONFIG_LOCKDEP
|
||||
# define local_irq_enable_in_hardirq() do { } while (0)
|
||||
#else
|
||||
|
@ -26,10 +26,10 @@ Index: linux-3.4/include/linux/interrupt.h
|
|||
#endif
|
||||
|
||||
extern void disable_irq_nosync(unsigned int irq);
|
||||
Index: linux-3.4/include/linux/irqflags.h
|
||||
===================================================================
|
||||
--- linux-3.4.orig/include/linux/irqflags.h
|
||||
+++ linux-3.4/include/linux/irqflags.h
|
||||
diff --git a/include/linux/irqflags.h b/include/linux/irqflags.h
|
||||
index d176d65..37b13c4 100644
|
||||
--- a/include/linux/irqflags.h
|
||||
+++ b/include/linux/irqflags.h
|
||||
@@ -147,4 +147,23 @@
|
||||
|
||||
#endif /* CONFIG_TRACE_IRQFLAGS_SUPPORT */
|
|
@ -1,20 +1,20 @@
|
|||
From 469cd4cac2c70b07e6908b390fd627963e1d0872 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Fri, 24 Jul 2009 12:38:56 +0200
|
||||
Subject: preempt: Provide preempt_*_(no)rt variants
|
||||
Subject: [063/254] preempt: Provide preempt_*_(no)rt variants
|
||||
|
||||
RT needs a few preempt_disable/enable points which are not necessary
|
||||
otherwise. Implement variants to avoid #ifdeffery.
|
||||
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
|
||||
---
|
||||
include/linux/preempt.h | 20 ++++++++++++++++++--
|
||||
1 file changed, 18 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: linux-3.4/include/linux/preempt.h
|
||||
===================================================================
|
||||
--- linux-3.4.orig/include/linux/preempt.h
|
||||
+++ linux-3.4/include/linux/preempt.h
|
||||
diff --git a/include/linux/preempt.h b/include/linux/preempt.h
|
||||
index 5a710b9..5b46536 100644
|
||||
--- a/include/linux/preempt.h
|
||||
+++ b/include/linux/preempt.h
|
||||
@@ -54,11 +54,15 @@ do { \
|
||||
dec_preempt_count(); \
|
||||
} while (0)
|
|
@ -1,22 +1,22 @@
|
|||
From 2008073430aa1ff3b26a3d3f0d562c4322fb0bed Mon Sep 17 00:00:00 2001
|
||||
From: Steven Rostedt <srostedt@redhat.com>
|
||||
Date: Fri, 3 Jul 2009 08:44:29 -0500
|
||||
Subject: ata: Do not disable interrupts in ide code for preempt-rt
|
||||
Subject: [064/254] ata: Do not disable interrupts in ide code for preempt-rt
|
||||
|
||||
Use the local_irq_*_nort variants.
|
||||
|
||||
Signed-off-by: Steven Rostedt <srostedt@redhat.com>
|
||||
Signed-off-by: Ingo Molnar <mingo@elte.hu>
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
|
||||
---
|
||||
drivers/ata/libata-sff.c | 12 ++++++------
|
||||
1 file changed, 6 insertions(+), 6 deletions(-)
|
||||
|
||||
Index: linux-3.4/drivers/ata/libata-sff.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/drivers/ata/libata-sff.c
|
||||
+++ linux-3.4/drivers/ata/libata-sff.c
|
||||
@@ -678,9 +678,9 @@ unsigned int ata_sff_data_xfer_noirq(str
|
||||
diff --git a/drivers/ata/libata-sff.c b/drivers/ata/libata-sff.c
|
||||
index d8af325..ad3130d 100644
|
||||
--- a/drivers/ata/libata-sff.c
|
||||
+++ b/drivers/ata/libata-sff.c
|
||||
@@ -678,9 +678,9 @@ unsigned int ata_sff_data_xfer_noirq(struct ata_device *dev, unsigned char *buf,
|
||||
unsigned long flags;
|
||||
unsigned int consumed;
|
||||
|
||||
|
@ -28,7 +28,7 @@ Index: linux-3.4/drivers/ata/libata-sff.c
|
|||
|
||||
return consumed;
|
||||
}
|
||||
@@ -719,7 +719,7 @@ static void ata_pio_sector(struct ata_qu
|
||||
@@ -719,7 +719,7 @@ static void ata_pio_sector(struct ata_queued_cmd *qc)
|
||||
unsigned long flags;
|
||||
|
||||
/* FIXME: use a bounce buffer */
|
||||
|
@ -37,7 +37,7 @@ Index: linux-3.4/drivers/ata/libata-sff.c
|
|||
buf = kmap_atomic(page);
|
||||
|
||||
/* do the actual data transfer */
|
||||
@@ -727,7 +727,7 @@ static void ata_pio_sector(struct ata_qu
|
||||
@@ -727,7 +727,7 @@ static void ata_pio_sector(struct ata_queued_cmd *qc)
|
||||
do_write);
|
||||
|
||||
kunmap_atomic(buf);
|
|
@ -1,12 +1,12 @@
|
|||
From 008c54a0d9bbaead3dd95c175ed0505985ed27d2 Mon Sep 17 00:00:00 2001
|
||||
From: Ingo Molnar <mingo@elte.hu>
|
||||
Date: Fri, 3 Jul 2009 08:30:16 -0500
|
||||
Subject: ide: Do not disable interrupts for PREEMPT-RT
|
||||
Subject: [065/254] ide: Do not disable interrupts for PREEMPT-RT
|
||||
|
||||
Use the local_irq_*_nort variants.
|
||||
|
||||
Signed-off-by: Ingo Molnar <mingo@elte.hu>
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
|
||||
---
|
||||
drivers/ide/alim15x3.c | 4 ++--
|
||||
drivers/ide/hpt366.c | 4 ++--
|
||||
|
@ -17,11 +17,11 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
|||
drivers/ide/ide-taskfile.c | 6 +++---
|
||||
7 files changed, 16 insertions(+), 16 deletions(-)
|
||||
|
||||
Index: linux-3.4/drivers/ide/alim15x3.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/drivers/ide/alim15x3.c
|
||||
+++ linux-3.4/drivers/ide/alim15x3.c
|
||||
@@ -234,7 +234,7 @@ static int init_chipset_ali15x3(struct p
|
||||
diff --git a/drivers/ide/alim15x3.c b/drivers/ide/alim15x3.c
|
||||
index 2c8016a..6fd6037 100644
|
||||
--- a/drivers/ide/alim15x3.c
|
||||
+++ b/drivers/ide/alim15x3.c
|
||||
@@ -234,7 +234,7 @@ static int init_chipset_ali15x3(struct pci_dev *dev)
|
||||
|
||||
isa_dev = pci_get_device(PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M1533, NULL);
|
||||
|
||||
|
@ -39,11 +39,11 @@ Index: linux-3.4/drivers/ide/alim15x3.c
|
|||
return 0;
|
||||
}
|
||||
|
||||
Index: linux-3.4/drivers/ide/hpt366.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/drivers/ide/hpt366.c
|
||||
+++ linux-3.4/drivers/ide/hpt366.c
|
||||
@@ -1241,7 +1241,7 @@ static int __devinit init_dma_hpt366(ide
|
||||
diff --git a/drivers/ide/hpt366.c b/drivers/ide/hpt366.c
|
||||
index 58c51cd..d2a4059 100644
|
||||
--- a/drivers/ide/hpt366.c
|
||||
+++ b/drivers/ide/hpt366.c
|
||||
@@ -1241,7 +1241,7 @@ static int __devinit init_dma_hpt366(ide_hwif_t *hwif,
|
||||
|
||||
dma_old = inb(base + 2);
|
||||
|
||||
|
@ -52,7 +52,7 @@ Index: linux-3.4/drivers/ide/hpt366.c
|
|||
|
||||
dma_new = dma_old;
|
||||
pci_read_config_byte(dev, hwif->channel ? 0x4b : 0x43, &masterdma);
|
||||
@@ -1252,7 +1252,7 @@ static int __devinit init_dma_hpt366(ide
|
||||
@@ -1252,7 +1252,7 @@ static int __devinit init_dma_hpt366(ide_hwif_t *hwif,
|
||||
if (dma_new != dma_old)
|
||||
outb(dma_new, base + 2);
|
||||
|
||||
|
@ -61,11 +61,11 @@ Index: linux-3.4/drivers/ide/hpt366.c
|
|||
|
||||
printk(KERN_INFO " %s: BM-DMA at 0x%04lx-0x%04lx\n",
|
||||
hwif->name, base, base + 7);
|
||||
Index: linux-3.4/drivers/ide/ide-io-std.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/drivers/ide/ide-io-std.c
|
||||
+++ linux-3.4/drivers/ide/ide-io-std.c
|
||||
@@ -175,7 +175,7 @@ void ide_input_data(ide_drive_t *drive,
|
||||
diff --git a/drivers/ide/ide-io-std.c b/drivers/ide/ide-io-std.c
|
||||
index 1976397..4169433 100644
|
||||
--- a/drivers/ide/ide-io-std.c
|
||||
+++ b/drivers/ide/ide-io-std.c
|
||||
@@ -175,7 +175,7 @@ void ide_input_data(ide_drive_t *drive, struct ide_cmd *cmd, void *buf,
|
||||
unsigned long uninitialized_var(flags);
|
||||
|
||||
if ((io_32bit & 2) && !mmio) {
|
||||
|
@ -74,7 +74,7 @@ Index: linux-3.4/drivers/ide/ide-io-std.c
|
|||
ata_vlb_sync(io_ports->nsect_addr);
|
||||
}
|
||||
|
||||
@@ -186,7 +186,7 @@ void ide_input_data(ide_drive_t *drive,
|
||||
@@ -186,7 +186,7 @@ void ide_input_data(ide_drive_t *drive, struct ide_cmd *cmd, void *buf,
|
||||
insl(data_addr, buf, words);
|
||||
|
||||
if ((io_32bit & 2) && !mmio)
|
||||
|
@ -83,7 +83,7 @@ Index: linux-3.4/drivers/ide/ide-io-std.c
|
|||
|
||||
if (((len + 1) & 3) < 2)
|
||||
return;
|
||||
@@ -219,7 +219,7 @@ void ide_output_data(ide_drive_t *drive,
|
||||
@@ -219,7 +219,7 @@ void ide_output_data(ide_drive_t *drive, struct ide_cmd *cmd, void *buf,
|
||||
unsigned long uninitialized_var(flags);
|
||||
|
||||
if ((io_32bit & 2) && !mmio) {
|
||||
|
@ -92,7 +92,7 @@ Index: linux-3.4/drivers/ide/ide-io-std.c
|
|||
ata_vlb_sync(io_ports->nsect_addr);
|
||||
}
|
||||
|
||||
@@ -230,7 +230,7 @@ void ide_output_data(ide_drive_t *drive,
|
||||
@@ -230,7 +230,7 @@ void ide_output_data(ide_drive_t *drive, struct ide_cmd *cmd, void *buf,
|
||||
outsl(data_addr, buf, words);
|
||||
|
||||
if ((io_32bit & 2) && !mmio)
|
||||
|
@ -101,11 +101,11 @@ Index: linux-3.4/drivers/ide/ide-io-std.c
|
|||
|
||||
if (((len + 1) & 3) < 2)
|
||||
return;
|
||||
Index: linux-3.4/drivers/ide/ide-io.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/drivers/ide/ide-io.c
|
||||
+++ linux-3.4/drivers/ide/ide-io.c
|
||||
@@ -659,7 +659,7 @@ void ide_timer_expiry (unsigned long dat
|
||||
diff --git a/drivers/ide/ide-io.c b/drivers/ide/ide-io.c
|
||||
index 177db6d..079ae6b 100644
|
||||
--- a/drivers/ide/ide-io.c
|
||||
+++ b/drivers/ide/ide-io.c
|
||||
@@ -659,7 +659,7 @@ void ide_timer_expiry (unsigned long data)
|
||||
/* disable_irq_nosync ?? */
|
||||
disable_irq(hwif->irq);
|
||||
/* local CPU only, as if we were handling an interrupt */
|
||||
|
@ -114,11 +114,11 @@ Index: linux-3.4/drivers/ide/ide-io.c
|
|||
if (hwif->polling) {
|
||||
startstop = handler(drive);
|
||||
} else if (drive_is_ready(drive)) {
|
||||
Index: linux-3.4/drivers/ide/ide-iops.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/drivers/ide/ide-iops.c
|
||||
+++ linux-3.4/drivers/ide/ide-iops.c
|
||||
@@ -129,12 +129,12 @@ int __ide_wait_stat(ide_drive_t *drive,
|
||||
diff --git a/drivers/ide/ide-iops.c b/drivers/ide/ide-iops.c
|
||||
index 376f2dc..f014dd1 100644
|
||||
--- a/drivers/ide/ide-iops.c
|
||||
+++ b/drivers/ide/ide-iops.c
|
||||
@@ -129,12 +129,12 @@ int __ide_wait_stat(ide_drive_t *drive, u8 good, u8 bad,
|
||||
if ((stat & ATA_BUSY) == 0)
|
||||
break;
|
||||
|
||||
|
@ -133,11 +133,11 @@ Index: linux-3.4/drivers/ide/ide-iops.c
|
|||
}
|
||||
/*
|
||||
* Allow status to settle, then read it again.
|
||||
Index: linux-3.4/drivers/ide/ide-probe.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/drivers/ide/ide-probe.c
|
||||
+++ linux-3.4/drivers/ide/ide-probe.c
|
||||
@@ -196,10 +196,10 @@ static void do_identify(ide_drive_t *dri
|
||||
diff --git a/drivers/ide/ide-probe.c b/drivers/ide/ide-probe.c
|
||||
index 068cef0..38e69e1 100644
|
||||
--- a/drivers/ide/ide-probe.c
|
||||
+++ b/drivers/ide/ide-probe.c
|
||||
@@ -196,10 +196,10 @@ static void do_identify(ide_drive_t *drive, u8 cmd, u16 *id)
|
||||
int bswap = 1;
|
||||
|
||||
/* local CPU only; some systems need this */
|
||||
|
@ -150,11 +150,11 @@ Index: linux-3.4/drivers/ide/ide-probe.c
|
|||
|
||||
drive->dev_flags |= IDE_DFLAG_ID_READ;
|
||||
#ifdef DEBUG
|
||||
Index: linux-3.4/drivers/ide/ide-taskfile.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/drivers/ide/ide-taskfile.c
|
||||
+++ linux-3.4/drivers/ide/ide-taskfile.c
|
||||
@@ -251,7 +251,7 @@ void ide_pio_bytes(ide_drive_t *drive, s
|
||||
diff --git a/drivers/ide/ide-taskfile.c b/drivers/ide/ide-taskfile.c
|
||||
index 729428e..3a9a1fc 100644
|
||||
--- a/drivers/ide/ide-taskfile.c
|
||||
+++ b/drivers/ide/ide-taskfile.c
|
||||
@@ -251,7 +251,7 @@ void ide_pio_bytes(ide_drive_t *drive, struct ide_cmd *cmd,
|
||||
|
||||
page_is_high = PageHighMem(page);
|
||||
if (page_is_high)
|
||||
|
@ -163,7 +163,7 @@ Index: linux-3.4/drivers/ide/ide-taskfile.c
|
|||
|
||||
buf = kmap_atomic(page) + offset;
|
||||
|
||||
@@ -272,7 +272,7 @@ void ide_pio_bytes(ide_drive_t *drive, s
|
||||
@@ -272,7 +272,7 @@ void ide_pio_bytes(ide_drive_t *drive, struct ide_cmd *cmd,
|
||||
kunmap_atomic(buf);
|
||||
|
||||
if (page_is_high)
|
||||
|
@ -172,7 +172,7 @@ Index: linux-3.4/drivers/ide/ide-taskfile.c
|
|||
|
||||
len -= nr_bytes;
|
||||
}
|
||||
@@ -415,7 +415,7 @@ static ide_startstop_t pre_task_out_intr
|
||||
@@ -415,7 +415,7 @@ static ide_startstop_t pre_task_out_intr(ide_drive_t *drive,
|
||||
}
|
||||
|
||||
if ((drive->dev_flags & IDE_DFLAG_UNMASK) == 0)
|
|
@ -1,6 +1,8 @@
|
|||
From d6666e22ca1c95f8bd3ae7b88239bdf96ce7d059 Mon Sep 17 00:00:00 2001
|
||||
From: Sven-Thorsten Dietrich <sdietrich@novell.com>
|
||||
Date: Fri, 3 Jul 2009 08:30:35 -0500
|
||||
Subject: infiniband: Mellanox IB driver patch use _nort() primitives
|
||||
Subject: [066/254] infiniband: Mellanox IB driver patch use _nort()
|
||||
primitives
|
||||
|
||||
Fixes in_atomic stack-dump, when Mellanox module is loaded into the RT
|
||||
Kernel.
|
||||
|
@ -13,16 +15,15 @@ changes."
|
|||
Signed-off-by: Sven-Thorsten Dietrich <sven@thebigcorporation.com>
|
||||
Signed-off-by: Ingo Molnar <mingo@elte.hu>
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
|
||||
---
|
||||
drivers/infiniband/ulp/ipoib/ipoib_multicast.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: linux-3.4/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
|
||||
+++ linux-3.4/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
|
||||
@@ -798,7 +798,7 @@ void ipoib_mcast_restart_task(struct wor
|
||||
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
|
||||
index 20ebc6f..525fca6 100644
|
||||
--- a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
|
||||
+++ b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
|
||||
@@ -798,7 +798,7 @@ void ipoib_mcast_restart_task(struct work_struct *work)
|
||||
|
||||
ipoib_mcast_stop_thread(dev, 0);
|
||||
|
||||
|
@ -31,7 +32,7 @@ Index: linux-3.4/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
|
|||
netif_addr_lock(dev);
|
||||
spin_lock(&priv->lock);
|
||||
|
||||
@@ -880,7 +880,7 @@ void ipoib_mcast_restart_task(struct wor
|
||||
@@ -880,7 +880,7 @@ void ipoib_mcast_restart_task(struct work_struct *work)
|
||||
|
||||
spin_unlock(&priv->lock);
|
||||
netif_addr_unlock(dev);
|
|
@ -1,21 +1,21 @@
|
|||
From 02630a5153eac2178374d4886c7c16e1ff0ae381 Mon Sep 17 00:00:00 2001
|
||||
From: Ingo Molnar <mingo@elte.hu>
|
||||
Date: Fri, 3 Jul 2009 08:30:16 -0500
|
||||
Subject: input: gameport: Do not disable interrupts on PREEMPT_RT
|
||||
Subject: [067/254] input: gameport: Do not disable interrupts on PREEMPT_RT
|
||||
|
||||
Use the _nort() primitives.
|
||||
|
||||
Signed-off-by: Ingo Molnar <mingo@elte.hu>
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
|
||||
---
|
||||
drivers/input/gameport/gameport.c | 8 ++++----
|
||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
Index: linux-3.4/drivers/input/gameport/gameport.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/drivers/input/gameport/gameport.c
|
||||
+++ linux-3.4/drivers/input/gameport/gameport.c
|
||||
@@ -87,12 +87,12 @@ static int gameport_measure_speed(struct
|
||||
diff --git a/drivers/input/gameport/gameport.c b/drivers/input/gameport/gameport.c
|
||||
index da739d9..18fdafe 100644
|
||||
--- a/drivers/input/gameport/gameport.c
|
||||
+++ b/drivers/input/gameport/gameport.c
|
||||
@@ -87,12 +87,12 @@ static int gameport_measure_speed(struct gameport *gameport)
|
||||
tx = 1 << 30;
|
||||
|
||||
for(i = 0; i < 50; i++) {
|
||||
|
@ -30,7 +30,7 @@ Index: linux-3.4/drivers/input/gameport/gameport.c
|
|||
udelay(i * 10);
|
||||
if ((t = DELTA(t2,t1) - DELTA(t3,t2)) < tx) tx = t;
|
||||
}
|
||||
@@ -111,11 +111,11 @@ static int gameport_measure_speed(struct
|
||||
@@ -111,11 +111,11 @@ static int gameport_measure_speed(struct gameport *gameport)
|
||||
tx = 1 << 30;
|
||||
|
||||
for(i = 0; i < 50; i++) {
|
|
@ -1,19 +1,19 @@
|
|||
From 44913098876e86912b081f20488dd31efa2cb281 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Tue, 21 Jul 2009 22:54:51 +0200
|
||||
Subject: acpi: Do not disable interrupts on PREEMPT_RT
|
||||
Subject: [068/254] acpi: Do not disable interrupts on PREEMPT_RT
|
||||
|
||||
Use the local_irq_*_nort() variants.
|
||||
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
|
||||
---
|
||||
arch/x86/include/asm/acpi.h | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: linux-3.4/arch/x86/include/asm/acpi.h
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/x86/include/asm/acpi.h
|
||||
+++ linux-3.4/arch/x86/include/asm/acpi.h
|
||||
diff --git a/arch/x86/include/asm/acpi.h b/arch/x86/include/asm/acpi.h
|
||||
index 610001d..c1c23d2 100644
|
||||
--- a/arch/x86/include/asm/acpi.h
|
||||
+++ b/arch/x86/include/asm/acpi.h
|
||||
@@ -51,8 +51,8 @@
|
||||
|
||||
#define ACPI_ASM_MACROS
|
|
@ -1,20 +1,20 @@
|
|||
From 313a25fcfaaeb370d448fa8df2b42e5a5b2dc9f1 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Tue, 21 Jul 2009 23:06:05 +0200
|
||||
Subject: core: Do not disable interrupts on RT in kernel/users.c
|
||||
Subject: [069/254] core: Do not disable interrupts on RT in kernel/users.c
|
||||
|
||||
Use the local_irq_*_nort variants to reduce latencies in RT. The code
|
||||
is serialized by the locks. No need to disable interrupts.
|
||||
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
|
||||
---
|
||||
kernel/user.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: linux-3.4/kernel/user.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/kernel/user.c
|
||||
+++ linux-3.4/kernel/user.c
|
||||
diff --git a/kernel/user.c b/kernel/user.c
|
||||
index 71dd236..b831e51 100644
|
||||
--- a/kernel/user.c
|
||||
+++ b/kernel/user.c
|
||||
@@ -129,11 +129,11 @@ void free_uid(struct user_struct *up)
|
||||
if (!up)
|
||||
return;
|
|
@ -1,6 +1,7 @@
|
|||
From b61dbda982a0cdaf4153e1366de5ed5def03f216 Mon Sep 17 00:00:00 2001
|
||||
From: Ingo Molnar <mingo@elte.hu>
|
||||
Date: Fri, 3 Jul 2009 08:44:33 -0500
|
||||
Subject: core: Do not disable interrupts on RT in res_counter.c
|
||||
Subject: [070/254] core: Do not disable interrupts on RT in res_counter.c
|
||||
|
||||
Frederic Weisbecker reported this warning:
|
||||
|
||||
|
@ -41,16 +42,15 @@ So replace it with _nort(). This code needs a second look.
|
|||
Reported-by: Frederic Weisbecker <fweisbec@gmail.com>
|
||||
Signed-off-by: Ingo Molnar <mingo@elte.hu>
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
|
||||
---
|
||||
kernel/res_counter.c | 8 ++++----
|
||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
Index: linux-3.4/kernel/res_counter.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/kernel/res_counter.c
|
||||
+++ linux-3.4/kernel/res_counter.c
|
||||
@@ -43,7 +43,7 @@ int res_counter_charge(struct res_counte
|
||||
diff --git a/kernel/res_counter.c b/kernel/res_counter.c
|
||||
index d508363..402f91a 100644
|
||||
--- a/kernel/res_counter.c
|
||||
+++ b/kernel/res_counter.c
|
||||
@@ -43,7 +43,7 @@ int res_counter_charge(struct res_counter *counter, unsigned long val,
|
||||
struct res_counter *c, *u;
|
||||
|
||||
*limit_fail_at = NULL;
|
||||
|
@ -68,7 +68,7 @@ Index: linux-3.4/kernel/res_counter.c
|
|||
return ret;
|
||||
}
|
||||
|
||||
@@ -104,13 +104,13 @@ void res_counter_uncharge(struct res_cou
|
||||
@@ -104,13 +104,13 @@ void res_counter_uncharge(struct res_counter *counter, unsigned long val)
|
||||
unsigned long flags;
|
||||
struct res_counter *c;
|
||||
|
|
@ -1,22 +1,22 @@
|
|||
From a0898772cdac466d344b01a1c40901ef9d41df9a Mon Sep 17 00:00:00 2001
|
||||
From: Steven Rostedt <srostedt@redhat.com>
|
||||
Date: Fri, 3 Jul 2009 08:44:26 -0500
|
||||
Subject: usb: Use local_irq_*_nort() variants
|
||||
Subject: [071/254] usb: Use local_irq_*_nort() variants
|
||||
|
||||
[ tglx: Now that irqf_disabled is dead we should kill that ]
|
||||
|
||||
Signed-off-by: Steven Rostedt <srostedt@redhat.com>
|
||||
Signed-off-by: Ingo Molnar <mingo@elte.hu>
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
|
||||
---
|
||||
drivers/usb/core/hcd.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: linux-3.4/drivers/usb/core/hcd.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/drivers/usb/core/hcd.c
|
||||
+++ linux-3.4/drivers/usb/core/hcd.c
|
||||
@@ -2143,7 +2143,7 @@ irqreturn_t usb_hcd_irq (int irq, void *
|
||||
diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
|
||||
index 140d3e1..82ea8bf 100644
|
||||
--- a/drivers/usb/core/hcd.c
|
||||
+++ b/drivers/usb/core/hcd.c
|
||||
@@ -2143,7 +2143,7 @@ irqreturn_t usb_hcd_irq (int irq, void *__hcd)
|
||||
* when the first handler doesn't use it. So let's just
|
||||
* assume it's never used.
|
||||
*/
|
||||
|
@ -25,7 +25,7 @@ Index: linux-3.4/drivers/usb/core/hcd.c
|
|||
|
||||
if (unlikely(HCD_DEAD(hcd) || !HCD_HW_ACCESSIBLE(hcd)))
|
||||
rc = IRQ_NONE;
|
||||
@@ -2152,7 +2152,7 @@ irqreturn_t usb_hcd_irq (int irq, void *
|
||||
@@ -2152,7 +2152,7 @@ irqreturn_t usb_hcd_irq (int irq, void *__hcd)
|
||||
else
|
||||
rc = IRQ_HANDLED;
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
From af892d9d7beb8d3dd7b286fe533f868e76fc4b76 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Mon, 17 Aug 2009 19:49:19 +0200
|
||||
Subject: tty: Do not disable interrupts in put_ldisc on -rt
|
||||
Subject: [072/254] tty: Do not disable interrupts in put_ldisc on -rt
|
||||
|
||||
Fixes the following on PREEMPT_RT:
|
||||
|
||||
|
@ -20,16 +21,15 @@ Call Trace:
|
|||
....
|
||||
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
|
||||
---
|
||||
drivers/tty/tty_ldisc.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: linux-3.4/drivers/tty/tty_ldisc.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/drivers/tty/tty_ldisc.c
|
||||
+++ linux-3.4/drivers/tty/tty_ldisc.c
|
||||
@@ -53,7 +53,7 @@ static void put_ldisc(struct tty_ldisc *
|
||||
diff --git a/drivers/tty/tty_ldisc.c b/drivers/tty/tty_ldisc.c
|
||||
index 24b95db..7894759 100644
|
||||
--- a/drivers/tty/tty_ldisc.c
|
||||
+++ b/drivers/tty/tty_ldisc.c
|
||||
@@ -53,7 +53,7 @@ static void put_ldisc(struct tty_ldisc *ld)
|
||||
* We really want an "atomic_dec_and_lock_irqsave()",
|
||||
* but we don't have it, so this does it by hand.
|
||||
*/
|
||||
|
@ -38,7 +38,7 @@ Index: linux-3.4/drivers/tty/tty_ldisc.c
|
|||
if (atomic_dec_and_lock(&ld->users, &tty_ldisc_lock)) {
|
||||
struct tty_ldisc_ops *ldo = ld->ops;
|
||||
|
||||
@@ -64,7 +64,7 @@ static void put_ldisc(struct tty_ldisc *
|
||||
@@ -64,7 +64,7 @@ static void put_ldisc(struct tty_ldisc *ld)
|
||||
kfree(ld);
|
||||
return;
|
||||
}
|
|
@ -1,17 +1,18 @@
|
|||
From cbc17e6d10850202cd154a144b0540cc7b19996b Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Fri, 3 Jul 2009 08:44:34 -0500
|
||||
Subject: mm: scatterlist dont disable irqs on RT
|
||||
Subject: [073/254] mm: scatterlist dont disable irqs on RT
|
||||
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
---
|
||||
lib/scatterlist.c | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
Index: linux-3.4/lib/scatterlist.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/lib/scatterlist.c
|
||||
+++ linux-3.4/lib/scatterlist.c
|
||||
@@ -423,7 +423,7 @@ void sg_miter_stop(struct sg_mapping_ite
|
||||
diff --git a/lib/scatterlist.c b/lib/scatterlist.c
|
||||
index 6096e89..4becb6d 100644
|
||||
--- a/lib/scatterlist.c
|
||||
+++ b/lib/scatterlist.c
|
||||
@@ -423,7 +423,7 @@ void sg_miter_stop(struct sg_mapping_iter *miter)
|
||||
flush_kernel_dcache_page(miter->page);
|
||||
|
||||
if (miter->__flags & SG_MITER_ATOMIC) {
|
||||
|
@ -20,7 +21,7 @@ Index: linux-3.4/lib/scatterlist.c
|
|||
kunmap_atomic(miter->addr);
|
||||
} else
|
||||
kunmap(miter->page);
|
||||
@@ -463,7 +463,7 @@ static size_t sg_copy_buffer(struct scat
|
||||
@@ -463,7 +463,7 @@ static size_t sg_copy_buffer(struct scatterlist *sgl, unsigned int nents,
|
||||
|
||||
sg_miter_start(&miter, sgl, nents, sg_flags);
|
||||
|
||||
|
@ -29,7 +30,7 @@ Index: linux-3.4/lib/scatterlist.c
|
|||
|
||||
while (sg_miter_next(&miter) && offset < buflen) {
|
||||
unsigned int len;
|
||||
@@ -480,7 +480,7 @@ static size_t sg_copy_buffer(struct scat
|
||||
@@ -480,7 +480,7 @@ static size_t sg_copy_buffer(struct scatterlist *sgl, unsigned int nents,
|
||||
|
||||
sg_miter_stop(&miter);
|
||||
|
|
@ -1,17 +1,18 @@
|
|||
Subject: signal-fix-up-rcu-wreckage.patch
|
||||
From e8b1bc31b01c97b8e1f101f40dda33d659c29ee5 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Fri, 22 Jul 2011 08:07:08 +0200
|
||||
Subject: [074/254] signal-fix-up-rcu-wreckage.patch
|
||||
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
---
|
||||
kernel/signal.c | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
Index: linux-3.4/kernel/signal.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/kernel/signal.c
|
||||
+++ linux-3.4/kernel/signal.c
|
||||
@@ -1401,12 +1401,12 @@ struct sighand_struct *__lock_task_sigha
|
||||
diff --git a/kernel/signal.c b/kernel/signal.c
|
||||
index 65cb5b4..3d32651 100644
|
||||
--- a/kernel/signal.c
|
||||
+++ b/kernel/signal.c
|
||||
@@ -1401,12 +1401,12 @@ struct sighand_struct *__lock_task_sighand(struct task_struct *tsk,
|
||||
struct sighand_struct *sighand;
|
||||
|
||||
for (;;) {
|
||||
|
@ -26,7 +27,7 @@ Index: linux-3.4/kernel/signal.c
|
|||
break;
|
||||
}
|
||||
|
||||
@@ -1417,7 +1417,7 @@ struct sighand_struct *__lock_task_sigha
|
||||
@@ -1417,7 +1417,7 @@ struct sighand_struct *__lock_task_sighand(struct task_struct *tsk,
|
||||
}
|
||||
spin_unlock(&sighand->siglock);
|
||||
rcu_read_unlock();
|
|
@ -1,17 +1,18 @@
|
|||
Subject: net-wireless-warn-nort.patch
|
||||
From 8bc67c84b5cd8857c6c67af9c9a397a571d9648c Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Thu, 21 Jul 2011 21:05:33 +0200
|
||||
Subject: [075/254] net-wireless-warn-nort.patch
|
||||
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
---
|
||||
net/mac80211/rx.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
Index: linux-3.4/net/mac80211/rx.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/net/mac80211/rx.c
|
||||
+++ linux-3.4/net/mac80211/rx.c
|
||||
@@ -3015,7 +3015,7 @@ void ieee80211_rx(struct ieee80211_hw *h
|
||||
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
|
||||
index d64e285..5ddd808 100644
|
||||
--- a/net/mac80211/rx.c
|
||||
+++ b/net/mac80211/rx.c
|
||||
@@ -3015,7 +3015,7 @@ void ieee80211_rx(struct ieee80211_hw *hw, struct sk_buff *skb)
|
||||
struct ieee80211_supported_band *sband;
|
||||
struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
|
||||
|
|
@ -1,20 +1,20 @@
|
|||
From 4273e198ba30a1ea79be5cfe508340fb93362381 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Wed, 19 Aug 2009 09:56:42 +0200
|
||||
Subject: mm: Replace cgroup_page bit spinlock
|
||||
Subject: [076/254] mm: Replace cgroup_page bit spinlock
|
||||
|
||||
Bit spinlocks are not working on RT. Replace them.
|
||||
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
|
||||
---
|
||||
include/linux/page_cgroup.h | 15 +++++++++++++++
|
||||
mm/page_cgroup.c | 11 +++++++++++
|
||||
2 files changed, 26 insertions(+)
|
||||
|
||||
Index: linux-3.4/include/linux/page_cgroup.h
|
||||
===================================================================
|
||||
--- linux-3.4.orig/include/linux/page_cgroup.h
|
||||
+++ linux-3.4/include/linux/page_cgroup.h
|
||||
diff --git a/include/linux/page_cgroup.h b/include/linux/page_cgroup.h
|
||||
index a88cdba..5f0fe2d 100644
|
||||
--- a/include/linux/page_cgroup.h
|
||||
+++ b/include/linux/page_cgroup.h
|
||||
@@ -24,6 +24,9 @@ enum {
|
||||
*/
|
||||
struct page_cgroup {
|
||||
|
@ -25,7 +25,7 @@ Index: linux-3.4/include/linux/page_cgroup.h
|
|||
struct mem_cgroup *mem_cgroup;
|
||||
};
|
||||
|
||||
@@ -74,12 +77,20 @@ static inline void lock_page_cgroup(stru
|
||||
@@ -74,12 +77,20 @@ static inline void lock_page_cgroup(struct page_cgroup *pc)
|
||||
* Don't take this lock in IRQ context.
|
||||
* This lock is for pc->mem_cgroup, USED, MIGRATION
|
||||
*/
|
||||
|
@ -46,7 +46,7 @@ Index: linux-3.4/include/linux/page_cgroup.h
|
|||
}
|
||||
|
||||
#else /* CONFIG_CGROUP_MEM_RES_CTLR */
|
||||
@@ -102,6 +113,10 @@ static inline void __init page_cgroup_in
|
||||
@@ -102,6 +113,10 @@ static inline void __init page_cgroup_init_flatmem(void)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -57,10 +57,10 @@ Index: linux-3.4/include/linux/page_cgroup.h
|
|||
#endif /* CONFIG_CGROUP_MEM_RES_CTLR */
|
||||
|
||||
#include <linux/swap.h>
|
||||
Index: linux-3.4/mm/page_cgroup.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/mm/page_cgroup.c
|
||||
+++ linux-3.4/mm/page_cgroup.c
|
||||
diff --git a/mm/page_cgroup.c b/mm/page_cgroup.c
|
||||
index 1ccbd71..84f3ce8 100644
|
||||
--- a/mm/page_cgroup.c
|
||||
+++ b/mm/page_cgroup.c
|
||||
@@ -13,6 +13,14 @@
|
||||
|
||||
static unsigned long total_usage;
|
||||
|
@ -76,7 +76,7 @@ Index: linux-3.4/mm/page_cgroup.c
|
|||
#if !defined(CONFIG_SPARSEMEM)
|
||||
|
||||
|
||||
@@ -60,6 +68,7 @@ static int __init alloc_node_page_cgroup
|
||||
@@ -60,6 +68,7 @@ static int __init alloc_node_page_cgroup(int nid)
|
||||
return -ENOMEM;
|
||||
NODE_DATA(nid)->node_page_cgroup = base;
|
||||
total_usage += table_size;
|
||||
|
@ -84,7 +84,7 @@ Index: linux-3.4/mm/page_cgroup.c
|
|||
return 0;
|
||||
}
|
||||
|
||||
@@ -150,6 +159,8 @@ static int __meminit init_section_page_c
|
||||
@@ -150,6 +159,8 @@ static int __meminit init_section_page_cgroup(unsigned long pfn, int nid)
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
From 939e5a1b280fa99e06775f7f3baf2d39d1278953 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Fri, 18 Mar 2011 09:18:52 +0100
|
||||
Subject: buffer_head: Replace bh_uptodate_lock for -rt
|
||||
Subject: [077/254] buffer_head: Replace bh_uptodate_lock for -rt
|
||||
|
||||
Wrap the bit_spin_lock calls into a separate inline and add the RT
|
||||
replacements with a real spinlock.
|
||||
|
@ -12,11 +13,11 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
|||
include/linux/buffer_head.h | 34 ++++++++++++++++++++++++++++++++++
|
||||
3 files changed, 44 insertions(+), 21 deletions(-)
|
||||
|
||||
Index: linux-3.4/fs/buffer.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/fs/buffer.c
|
||||
+++ linux-3.4/fs/buffer.c
|
||||
@@ -281,8 +281,7 @@ static void end_buffer_async_read(struct
|
||||
diff --git a/fs/buffer.c b/fs/buffer.c
|
||||
index ad5938c..38956b5 100644
|
||||
--- a/fs/buffer.c
|
||||
+++ b/fs/buffer.c
|
||||
@@ -281,8 +281,7 @@ static void end_buffer_async_read(struct buffer_head *bh, int uptodate)
|
||||
* decide that the page is now completely done.
|
||||
*/
|
||||
first = page_buffers(page);
|
||||
|
@ -26,7 +27,7 @@ Index: linux-3.4/fs/buffer.c
|
|||
clear_buffer_async_read(bh);
|
||||
unlock_buffer(bh);
|
||||
tmp = bh;
|
||||
@@ -295,8 +294,7 @@ static void end_buffer_async_read(struct
|
||||
@@ -295,8 +294,7 @@ static void end_buffer_async_read(struct buffer_head *bh, int uptodate)
|
||||
}
|
||||
tmp = tmp->b_this_page;
|
||||
} while (tmp != bh);
|
||||
|
@ -36,7 +37,7 @@ Index: linux-3.4/fs/buffer.c
|
|||
|
||||
/*
|
||||
* If none of the buffers had errors and they are all
|
||||
@@ -308,9 +306,7 @@ static void end_buffer_async_read(struct
|
||||
@@ -308,9 +306,7 @@ static void end_buffer_async_read(struct buffer_head *bh, int uptodate)
|
||||
return;
|
||||
|
||||
still_busy:
|
||||
|
@ -47,7 +48,7 @@ Index: linux-3.4/fs/buffer.c
|
|||
}
|
||||
|
||||
/*
|
||||
@@ -344,8 +340,7 @@ void end_buffer_async_write(struct buffe
|
||||
@@ -344,8 +340,7 @@ void end_buffer_async_write(struct buffer_head *bh, int uptodate)
|
||||
}
|
||||
|
||||
first = page_buffers(page);
|
||||
|
@ -57,7 +58,7 @@ Index: linux-3.4/fs/buffer.c
|
|||
|
||||
clear_buffer_async_write(bh);
|
||||
unlock_buffer(bh);
|
||||
@@ -357,15 +352,12 @@ void end_buffer_async_write(struct buffe
|
||||
@@ -357,15 +352,12 @@ void end_buffer_async_write(struct buffer_head *bh, int uptodate)
|
||||
}
|
||||
tmp = tmp->b_this_page;
|
||||
}
|
||||
|
@ -75,7 +76,7 @@ Index: linux-3.4/fs/buffer.c
|
|||
}
|
||||
EXPORT_SYMBOL(end_buffer_async_write);
|
||||
|
||||
@@ -3185,6 +3177,7 @@ struct buffer_head *alloc_buffer_head(gf
|
||||
@@ -3187,6 +3179,7 @@ struct buffer_head *alloc_buffer_head(gfp_t gfp_flags)
|
||||
struct buffer_head *ret = kmem_cache_zalloc(bh_cachep, gfp_flags);
|
||||
if (ret) {
|
||||
INIT_LIST_HEAD(&ret->b_assoc_buffers);
|
||||
|
@ -83,11 +84,11 @@ Index: linux-3.4/fs/buffer.c
|
|||
preempt_disable();
|
||||
__this_cpu_inc(bh_accounting.nr);
|
||||
recalc_bh_state();
|
||||
Index: linux-3.4/fs/ntfs/aops.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/fs/ntfs/aops.c
|
||||
+++ linux-3.4/fs/ntfs/aops.c
|
||||
@@ -108,8 +108,7 @@ static void ntfs_end_buffer_async_read(s
|
||||
diff --git a/fs/ntfs/aops.c b/fs/ntfs/aops.c
|
||||
index fa9c05f..4e4ca73 100644
|
||||
--- a/fs/ntfs/aops.c
|
||||
+++ b/fs/ntfs/aops.c
|
||||
@@ -108,8 +108,7 @@ static void ntfs_end_buffer_async_read(struct buffer_head *bh, int uptodate)
|
||||
"0x%llx.", (unsigned long long)bh->b_blocknr);
|
||||
}
|
||||
first = page_buffers(page);
|
||||
|
@ -97,7 +98,7 @@ Index: linux-3.4/fs/ntfs/aops.c
|
|||
clear_buffer_async_read(bh);
|
||||
unlock_buffer(bh);
|
||||
tmp = bh;
|
||||
@@ -124,8 +123,7 @@ static void ntfs_end_buffer_async_read(s
|
||||
@@ -124,8 +123,7 @@ static void ntfs_end_buffer_async_read(struct buffer_head *bh, int uptodate)
|
||||
}
|
||||
tmp = tmp->b_this_page;
|
||||
} while (tmp != bh);
|
||||
|
@ -107,7 +108,7 @@ Index: linux-3.4/fs/ntfs/aops.c
|
|||
/*
|
||||
* If none of the buffers had errors then we can set the page uptodate,
|
||||
* but we first have to perform the post read mst fixups, if the
|
||||
@@ -160,9 +158,7 @@ static void ntfs_end_buffer_async_read(s
|
||||
@@ -160,9 +158,7 @@ static void ntfs_end_buffer_async_read(struct buffer_head *bh, int uptodate)
|
||||
unlock_page(page);
|
||||
return;
|
||||
still_busy:
|
||||
|
@ -118,10 +119,10 @@ Index: linux-3.4/fs/ntfs/aops.c
|
|||
}
|
||||
|
||||
/**
|
||||
Index: linux-3.4/include/linux/buffer_head.h
|
||||
===================================================================
|
||||
--- linux-3.4.orig/include/linux/buffer_head.h
|
||||
+++ linux-3.4/include/linux/buffer_head.h
|
||||
diff --git a/include/linux/buffer_head.h b/include/linux/buffer_head.h
|
||||
index 458f497..5c16cf1 100644
|
||||
--- a/include/linux/buffer_head.h
|
||||
+++ b/include/linux/buffer_head.h
|
||||
@@ -72,8 +72,42 @@ struct buffer_head {
|
||||
struct address_space *b_assoc_map; /* mapping this buffer is
|
||||
associated with */
|
|
@ -1,6 +1,8 @@
|
|||
From 4d1281e2aea71f9da8f3b43eedfffc71f41f4f5f Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Fri, 18 Mar 2011 10:11:25 +0100
|
||||
Subject: fs: jbd/jbd2: Make state lock and journal head lock rt safe
|
||||
Subject: [078/254] fs: jbd/jbd2: Make state lock and journal head lock rt
|
||||
safe
|
||||
|
||||
bit_spin_locks break under RT.
|
||||
|
||||
|
@ -12,11 +14,15 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
|||
include/linux/buffer_head.h | 10 ++++++++++
|
||||
include/linux/jbd_common.h | 24 ++++++++++++++++++++++++
|
||||
2 files changed, 34 insertions(+)
|
||||
---
|
||||
include/linux/buffer_head.h | 10 ++++++++++
|
||||
include/linux/jbd_common.h | 24 ++++++++++++++++++++++++
|
||||
2 files changed, 34 insertions(+)
|
||||
|
||||
Index: linux-3.4/include/linux/buffer_head.h
|
||||
===================================================================
|
||||
--- linux-3.4.orig/include/linux/buffer_head.h
|
||||
+++ linux-3.4/include/linux/buffer_head.h
|
||||
diff --git a/include/linux/buffer_head.h b/include/linux/buffer_head.h
|
||||
index 5c16cf1..3f8e27b 100644
|
||||
--- a/include/linux/buffer_head.h
|
||||
+++ b/include/linux/buffer_head.h
|
||||
@@ -74,6 +74,11 @@ struct buffer_head {
|
||||
atomic_t b_count; /* users using this buffer_head */
|
||||
#ifdef CONFIG_PREEMPT_RT_BASE
|
||||
|
@ -29,7 +35,7 @@ Index: linux-3.4/include/linux/buffer_head.h
|
|||
#endif
|
||||
};
|
||||
|
||||
@@ -105,6 +110,11 @@ static inline void buffer_head_init_lock
|
||||
@@ -105,6 +110,11 @@ static inline void buffer_head_init_locks(struct buffer_head *bh)
|
||||
{
|
||||
#ifdef CONFIG_PREEMPT_RT_BASE
|
||||
spin_lock_init(&bh->b_uptodate_lock);
|
||||
|
@ -41,11 +47,11 @@ Index: linux-3.4/include/linux/buffer_head.h
|
|||
#endif
|
||||
}
|
||||
|
||||
Index: linux-3.4/include/linux/jbd_common.h
|
||||
===================================================================
|
||||
--- linux-3.4.orig/include/linux/jbd_common.h
|
||||
+++ linux-3.4/include/linux/jbd_common.h
|
||||
@@ -37,32 +37,56 @@ static inline struct journal_head *bh2jh
|
||||
diff --git a/include/linux/jbd_common.h b/include/linux/jbd_common.h
|
||||
index 6230f85..11c313e 100644
|
||||
--- a/include/linux/jbd_common.h
|
||||
+++ b/include/linux/jbd_common.h
|
||||
@@ -37,32 +37,56 @@ static inline struct journal_head *bh2jh(struct buffer_head *bh)
|
||||
|
||||
static inline void jbd_lock_bh_state(struct buffer_head *bh)
|
||||
{
|
|
@ -1,16 +1,17 @@
|
|||
From 849dda243d37ffc36908f6b0f4ae6e3176d53f87 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Sun, 18 Mar 2011 10:22:04 +0100
|
||||
Subject: genirq: Disable DEBUG_SHIRQ for rt
|
||||
Date: Fri, 18 Mar 2011 10:22:04 +0100
|
||||
Subject: [079/254] genirq: Disable DEBUG_SHIRQ for rt
|
||||
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
---
|
||||
lib/Kconfig.debug | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
Index: linux-3.4/lib/Kconfig.debug
|
||||
===================================================================
|
||||
--- linux-3.4.orig/lib/Kconfig.debug
|
||||
+++ linux-3.4/lib/Kconfig.debug
|
||||
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
|
||||
index 6777153..1d80795 100644
|
||||
--- a/lib/Kconfig.debug
|
||||
+++ b/lib/Kconfig.debug
|
||||
@@ -151,7 +151,7 @@ config DEBUG_KERNEL
|
||||
|
||||
config DEBUG_SHIRQ
|
|
@ -1,21 +1,21 @@
|
|||
From 319ca93c99595d65aaf2a0baf8c2ebacd1d0cdcd Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Tue, 21 Jul 2009 16:07:37 +0200
|
||||
Subject: genirq: Disable random call on preempt-rt
|
||||
Subject: [080/254] genirq: Disable random call on preempt-rt
|
||||
|
||||
The random call introduces high latencies and is almost
|
||||
unused. Disable it for -rt.
|
||||
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
|
||||
---
|
||||
kernel/irq/handle.c | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
Index: linux-3.4/kernel/irq/handle.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/kernel/irq/handle.c
|
||||
+++ linux-3.4/kernel/irq/handle.c
|
||||
@@ -172,8 +172,11 @@ handle_irq_event_percpu(struct irq_desc
|
||||
diff --git a/kernel/irq/handle.c b/kernel/irq/handle.c
|
||||
index bdb1803..982793c 100644
|
||||
--- a/kernel/irq/handle.c
|
||||
+++ b/kernel/irq/handle.c
|
||||
@@ -172,8 +172,11 @@ handle_irq_event_percpu(struct irq_desc *desc, struct irqaction *action)
|
||||
action = action->next;
|
||||
} while (action);
|
||||
|
|
@ -1,21 +1,21 @@
|
|||
From d25490efc909e82f8db900d0519ee6a64d3f731f Mon Sep 17 00:00:00 2001
|
||||
From: Ingo Molnar <mingo@elte.hu>
|
||||
Date: Fri, 3 Jul 2009 08:29:57 -0500
|
||||
Subject: genirq: disable irqpoll on -rt
|
||||
Subject: [081/254] genirq: disable irqpoll on -rt
|
||||
|
||||
Creates long latencies for no value
|
||||
|
||||
Signed-off-by: Ingo Molnar <mingo@elte.hu>
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
|
||||
---
|
||||
kernel/irq/spurious.c | 10 ++++++++++
|
||||
1 file changed, 10 insertions(+)
|
||||
|
||||
Index: linux-3.4/kernel/irq/spurious.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/kernel/irq/spurious.c
|
||||
+++ linux-3.4/kernel/irq/spurious.c
|
||||
@@ -341,6 +341,11 @@ MODULE_PARM_DESC(noirqdebug, "Disable ir
|
||||
diff --git a/kernel/irq/spurious.c b/kernel/irq/spurious.c
|
||||
index 611cd60..d1c80fa 100644
|
||||
--- a/kernel/irq/spurious.c
|
||||
+++ b/kernel/irq/spurious.c
|
||||
@@ -341,6 +341,11 @@ MODULE_PARM_DESC(noirqdebug, "Disable irq lockup detection when true");
|
||||
|
||||
static int __init irqfixup_setup(char *str)
|
||||
{
|
|
@ -1,6 +1,7 @@
|
|||
Subject: genirq-force-threading.patch
|
||||
From 90fbaa35b154a16a4eadababc178ae2306ca111a Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Sun, 03 Apr 2011 11:57:29 +0200
|
||||
Date: Sun, 3 Apr 2011 11:57:29 +0200
|
||||
Subject: [082/254] genirq-force-threading.patch
|
||||
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
---
|
||||
|
@ -8,11 +9,11 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
|||
kernel/irq/manage.c | 2 ++
|
||||
2 files changed, 8 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: linux-3.4/include/linux/interrupt.h
|
||||
===================================================================
|
||||
--- linux-3.4.orig/include/linux/interrupt.h
|
||||
+++ linux-3.4/include/linux/interrupt.h
|
||||
@@ -394,9 +394,13 @@ static inline int disable_irq_wake(unsig
|
||||
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
|
||||
index d2cc272..9027bde 100644
|
||||
--- a/include/linux/interrupt.h
|
||||
+++ b/include/linux/interrupt.h
|
||||
@@ -394,9 +394,13 @@ static inline int disable_irq_wake(unsigned int irq)
|
||||
|
||||
|
||||
#ifdef CONFIG_IRQ_FORCED_THREADING
|
||||
|
@ -28,10 +29,10 @@ Index: linux-3.4/include/linux/interrupt.h
|
|||
#endif
|
||||
|
||||
#ifndef __ARCH_SET_SOFTIRQ_PENDING
|
||||
Index: linux-3.4/kernel/irq/manage.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/kernel/irq/manage.c
|
||||
+++ linux-3.4/kernel/irq/manage.c
|
||||
diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
|
||||
index 89a3ea8..975b3a1 100644
|
||||
--- a/kernel/irq/manage.c
|
||||
+++ b/kernel/irq/manage.c
|
||||
@@ -18,6 +18,7 @@
|
||||
#include "internals.h"
|
||||
|
||||
|
@ -40,7 +41,7 @@ Index: linux-3.4/kernel/irq/manage.c
|
|||
__read_mostly bool force_irqthreads;
|
||||
|
||||
static int __init setup_forced_irqthreads(char *arg)
|
||||
@@ -26,6 +27,7 @@ static int __init setup_forced_irqthread
|
||||
@@ -26,6 +27,7 @@ static int __init setup_forced_irqthreads(char *arg)
|
||||
return 0;
|
||||
}
|
||||
early_param("threadirqs", setup_forced_irqthreads);
|
|
@ -1,6 +1,7 @@
|
|||
From 705be62f53daef2d231998e80cda8e3a4e2657f7 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Sat, 20 Jun 2009 11:36:54 +0200
|
||||
Subject: drivers/net: fix livelock issues
|
||||
Subject: [083/254] drivers/net: fix livelock issues
|
||||
|
||||
Preempt-RT runs into a live lock issue with the NETDEV_TX_LOCKED micro
|
||||
optimization. The reason is that the softirq thread is rescheduling
|
||||
|
@ -10,7 +11,6 @@ monoplize the CPU and livelock on UP systems.
|
|||
Remove it.
|
||||
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
|
||||
---
|
||||
drivers/net/ethernet/atheros/atl1c/atl1c_main.c | 6 +-----
|
||||
drivers/net/ethernet/atheros/atl1e/atl1e_main.c | 3 +--
|
||||
|
@ -21,11 +21,11 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
|||
drivers/net/rionet.c | 6 +-----
|
||||
7 files changed, 10 insertions(+), 31 deletions(-)
|
||||
|
||||
Index: linux-3.4/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
|
||||
+++ linux-3.4/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
|
||||
@@ -2240,11 +2240,7 @@ static netdev_tx_t atl1c_xmit_frame(stru
|
||||
diff --git a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
|
||||
index 1ef0c92..7cb889c 100644
|
||||
--- a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
|
||||
+++ b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
|
||||
@@ -2240,11 +2240,7 @@ static netdev_tx_t atl1c_xmit_frame(struct sk_buff *skb,
|
||||
}
|
||||
|
||||
tpd_req = atl1c_cal_tpd_req(skb);
|
||||
|
@ -38,11 +38,11 @@ Index: linux-3.4/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
|
|||
|
||||
if (atl1c_tpd_avail(adapter, type) < tpd_req) {
|
||||
/* no enough descriptor, just stop queue */
|
||||
Index: linux-3.4/drivers/net/ethernet/atheros/atl1e/atl1e_main.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/drivers/net/ethernet/atheros/atl1e/atl1e_main.c
|
||||
+++ linux-3.4/drivers/net/ethernet/atheros/atl1e/atl1e_main.c
|
||||
@@ -1822,8 +1822,7 @@ static netdev_tx_t atl1e_xmit_frame(stru
|
||||
diff --git a/drivers/net/ethernet/atheros/atl1e/atl1e_main.c b/drivers/net/ethernet/atheros/atl1e/atl1e_main.c
|
||||
index 93ff2b2..cecc414 100644
|
||||
--- a/drivers/net/ethernet/atheros/atl1e/atl1e_main.c
|
||||
+++ b/drivers/net/ethernet/atheros/atl1e/atl1e_main.c
|
||||
@@ -1822,8 +1822,7 @@ static netdev_tx_t atl1e_xmit_frame(struct sk_buff *skb,
|
||||
return NETDEV_TX_OK;
|
||||
}
|
||||
tpd_req = atl1e_cal_tdp_req(skb);
|
||||
|
@ -52,11 +52,11 @@ Index: linux-3.4/drivers/net/ethernet/atheros/atl1e/atl1e_main.c
|
|||
|
||||
if (atl1e_tpd_avail(adapter) < tpd_req) {
|
||||
/* no enough descriptor, just stop queue */
|
||||
Index: linux-3.4/drivers/net/ethernet/chelsio/cxgb/sge.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/drivers/net/ethernet/chelsio/cxgb/sge.c
|
||||
+++ linux-3.4/drivers/net/ethernet/chelsio/cxgb/sge.c
|
||||
@@ -1678,8 +1678,7 @@ static int t1_sge_tx(struct sk_buff *skb
|
||||
diff --git a/drivers/net/ethernet/chelsio/cxgb/sge.c b/drivers/net/ethernet/chelsio/cxgb/sge.c
|
||||
index 47a8435..279c04e 100644
|
||||
--- a/drivers/net/ethernet/chelsio/cxgb/sge.c
|
||||
+++ b/drivers/net/ethernet/chelsio/cxgb/sge.c
|
||||
@@ -1678,8 +1678,7 @@ static int t1_sge_tx(struct sk_buff *skb, struct adapter *adapter,
|
||||
struct cmdQ *q = &sge->cmdQ[qid];
|
||||
unsigned int credits, pidx, genbit, count, use_sched_skb = 0;
|
||||
|
||||
|
@ -66,11 +66,11 @@ Index: linux-3.4/drivers/net/ethernet/chelsio/cxgb/sge.c
|
|||
|
||||
reclaim_completed_tx(sge, q);
|
||||
|
||||
Index: linux-3.4/drivers/net/ethernet/neterion/s2io.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/drivers/net/ethernet/neterion/s2io.c
|
||||
+++ linux-3.4/drivers/net/ethernet/neterion/s2io.c
|
||||
@@ -4089,12 +4089,7 @@ static netdev_tx_t s2io_xmit(struct sk_b
|
||||
diff --git a/drivers/net/ethernet/neterion/s2io.c b/drivers/net/ethernet/neterion/s2io.c
|
||||
index 6338ef8..ad2f094 100644
|
||||
--- a/drivers/net/ethernet/neterion/s2io.c
|
||||
+++ b/drivers/net/ethernet/neterion/s2io.c
|
||||
@@ -4089,12 +4089,7 @@ static netdev_tx_t s2io_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
[skb->priority & (MAX_TX_FIFOS - 1)];
|
||||
fifo = &mac_control->fifos[queue];
|
||||
|
||||
|
@ -84,11 +84,11 @@ Index: linux-3.4/drivers/net/ethernet/neterion/s2io.c
|
|||
|
||||
if (sp->config.multiq) {
|
||||
if (__netif_subqueue_stopped(dev, fifo->fifo_no)) {
|
||||
Index: linux-3.4/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
|
||||
+++ linux-3.4/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
|
||||
@@ -2131,10 +2131,9 @@ static int pch_gbe_xmit_frame(struct sk_
|
||||
diff --git a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
|
||||
index 1e38d50..f017954 100644
|
||||
--- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
|
||||
+++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
|
||||
@@ -2128,10 +2128,9 @@ static int pch_gbe_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
|
||||
adapter->stats.tx_length_errors++;
|
||||
return NETDEV_TX_OK;
|
||||
}
|
||||
|
@ -102,11 +102,11 @@ Index: linux-3.4/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
|
|||
if (unlikely(!PCH_GBE_DESC_UNUSED(tx_ring))) {
|
||||
netif_stop_queue(netdev);
|
||||
spin_unlock_irqrestore(&tx_ring->tx_lock, flags);
|
||||
Index: linux-3.4/drivers/net/ethernet/tehuti/tehuti.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/drivers/net/ethernet/tehuti/tehuti.c
|
||||
+++ linux-3.4/drivers/net/ethernet/tehuti/tehuti.c
|
||||
@@ -1606,13 +1606,8 @@ static netdev_tx_t bdx_tx_transmit(struc
|
||||
diff --git a/drivers/net/ethernet/tehuti/tehuti.c b/drivers/net/ethernet/tehuti/tehuti.c
|
||||
index ad973ff..1afa33c 100644
|
||||
--- a/drivers/net/ethernet/tehuti/tehuti.c
|
||||
+++ b/drivers/net/ethernet/tehuti/tehuti.c
|
||||
@@ -1606,13 +1606,8 @@ static netdev_tx_t bdx_tx_transmit(struct sk_buff *skb,
|
||||
unsigned long flags;
|
||||
|
||||
ENTER;
|
||||
|
@ -122,11 +122,11 @@ Index: linux-3.4/drivers/net/ethernet/tehuti/tehuti.c
|
|||
|
||||
/* build tx descriptor */
|
||||
BDX_ASSERT(f->m.wptr >= f->m.memsz); /* started with valid wptr */
|
||||
Index: linux-3.4/drivers/net/rionet.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/drivers/net/rionet.c
|
||||
+++ linux-3.4/drivers/net/rionet.c
|
||||
@@ -176,11 +176,7 @@ static int rionet_start_xmit(struct sk_b
|
||||
diff --git a/drivers/net/rionet.c b/drivers/net/rionet.c
|
||||
index 91d2588..d4c418e 100644
|
||||
--- a/drivers/net/rionet.c
|
||||
+++ b/drivers/net/rionet.c
|
||||
@@ -176,11 +176,7 @@ static int rionet_start_xmit(struct sk_buff *skb, struct net_device *ndev)
|
||||
u16 destid;
|
||||
unsigned long flags;
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
From 778af2b4f14a7702886b05248c0cedac9c2b5587 Mon Sep 17 00:00:00 2001
|
||||
From: Steven Rostedt <rostedt@goodmis.org>
|
||||
Date: Fri, 3 Jul 2009 08:30:00 -0500
|
||||
Subject: drivers/net: vortex fix locking issues
|
||||
Subject: [084/254] drivers/net: vortex fix locking issues
|
||||
|
||||
Argh, cut and paste wasn't enough...
|
||||
|
||||
|
@ -16,12 +17,15 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
|||
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
Signed-off-by: Ingo Molnar <mingo@elte.hu>
|
||||
---
|
||||
drivers/net/ethernet/3com/3c59x.c | 8 ++++----
|
||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
Index: linux-3.4/drivers/net/ethernet/3com/3c59x.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/drivers/net/ethernet/3com/3c59x.c
|
||||
+++ linux-3.4/drivers/net/ethernet/3com/3c59x.c
|
||||
@@ -843,9 +843,9 @@ static void poll_vortex(struct net_devic
|
||||
diff --git a/drivers/net/ethernet/3com/3c59x.c b/drivers/net/ethernet/3com/3c59x.c
|
||||
index e463d10..848aeea 100644
|
||||
--- a/drivers/net/ethernet/3com/3c59x.c
|
||||
+++ b/drivers/net/ethernet/3com/3c59x.c
|
||||
@@ -843,9 +843,9 @@ static void poll_vortex(struct net_device *dev)
|
||||
{
|
||||
struct vortex_private *vp = netdev_priv(dev);
|
||||
unsigned long flags;
|
||||
|
@ -33,7 +37,7 @@ Index: linux-3.4/drivers/net/ethernet/3com/3c59x.c
|
|||
}
|
||||
#endif
|
||||
|
||||
@@ -1920,12 +1920,12 @@ static void vortex_tx_timeout(struct net
|
||||
@@ -1920,12 +1920,12 @@ static void vortex_tx_timeout(struct net_device *dev)
|
||||
* Block interrupts because vortex_interrupt does a bare spin_lock()
|
||||
*/
|
||||
unsigned long flags;
|
|
@ -1,6 +1,7 @@
|
|||
From 37a77c8c514dc179049baca9cf708cbd9ec889d5 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Thu, 1 Apr 2010 20:20:57 +0200
|
||||
Subject: drivers: net: gianfar: Make RT aware
|
||||
Subject: [085/254] drivers: net: gianfar: Make RT aware
|
||||
|
||||
The adjust_link() disables interrupts before taking the queue
|
||||
locks. On RT those locks are converted to "sleeping" locks and
|
||||
|
@ -10,15 +11,14 @@ local_irq_save/restore_nort.
|
|||
Reported-by: Xianghua Xiao <xiaoxianghua@gmail.com>
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
Tested-by: Xianghua Xiao <xiaoxianghua@gmail.com>
|
||||
|
||||
---
|
||||
drivers/net/ethernet/freescale/gianfar.c | 8 ++++----
|
||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
Index: linux-3.4/drivers/net/ethernet/freescale/gianfar.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/drivers/net/ethernet/freescale/gianfar.c
|
||||
+++ linux-3.4/drivers/net/ethernet/freescale/gianfar.c
|
||||
diff --git a/drivers/net/ethernet/freescale/gianfar.c b/drivers/net/ethernet/freescale/gianfar.c
|
||||
index e7bed53..3a42d36 100644
|
||||
--- a/drivers/net/ethernet/freescale/gianfar.c
|
||||
+++ b/drivers/net/ethernet/freescale/gianfar.c
|
||||
@@ -1643,7 +1643,7 @@ void stop_gfar(struct net_device *dev)
|
||||
|
||||
|
||||
|
@ -37,7 +37,7 @@ Index: linux-3.4/drivers/net/ethernet/freescale/gianfar.c
|
|||
|
||||
/* Free the IRQs */
|
||||
if (priv->device_flags & FSL_GIANFAR_DEV_HAS_MULTI_INTR) {
|
||||
@@ -2948,7 +2948,7 @@ static void adjust_link(struct net_devic
|
||||
@@ -2948,7 +2948,7 @@ static void adjust_link(struct net_device *dev)
|
||||
struct phy_device *phydev = priv->phydev;
|
||||
int new_state = 0;
|
||||
|
||||
|
@ -46,7 +46,7 @@ Index: linux-3.4/drivers/net/ethernet/freescale/gianfar.c
|
|||
lock_tx_qs(priv);
|
||||
|
||||
if (phydev->link) {
|
||||
@@ -3015,7 +3015,7 @@ static void adjust_link(struct net_devic
|
||||
@@ -3015,7 +3015,7 @@ static void adjust_link(struct net_device *dev)
|
||||
if (new_state && netif_msg_link(priv))
|
||||
phy_print_status(phydev);
|
||||
unlock_tx_qs(priv);
|
|
@ -1,6 +1,8 @@
|
|||
From 1053d66c1e626794e8a5c11179d120da22bcd626 Mon Sep 17 00:00:00 2001
|
||||
From: Wu Zhangjin <wuzj@lemote.com>
|
||||
Date: Mon, 4 Jan 2010 11:33:02 +0800
|
||||
Subject: USB: Fix the mouse problem when copying large amounts of data
|
||||
Subject: [086/254] USB: Fix the mouse problem when copying large amounts of
|
||||
data
|
||||
|
||||
When copying large amounts of data between the USB storage devices and
|
||||
the hard disk, the USB mouse will not work, this patch fixes it.
|
||||
|
@ -10,16 +12,15 @@ sure whether it is producible on other platforms]
|
|||
|
||||
Signed-off-by: Hu Hongbing <huhb@lemote.com>
|
||||
Signed-off-by: Wu Zhangjin <wuzhangjin@gmail.com>
|
||||
|
||||
---
|
||||
drivers/usb/host/ohci-hcd.c | 10 +++++++---
|
||||
1 file changed, 7 insertions(+), 3 deletions(-)
|
||||
|
||||
Index: linux-3.4/drivers/usb/host/ohci-hcd.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/drivers/usb/host/ohci-hcd.c
|
||||
+++ linux-3.4/drivers/usb/host/ohci-hcd.c
|
||||
@@ -829,9 +829,13 @@ static irqreturn_t ohci_irq (struct usb_
|
||||
diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c
|
||||
index 235171f..0157357 100644
|
||||
--- a/drivers/usb/host/ohci-hcd.c
|
||||
+++ b/drivers/usb/host/ohci-hcd.c
|
||||
@@ -829,9 +829,13 @@ static irqreturn_t ohci_irq (struct usb_hcd *hcd)
|
||||
}
|
||||
|
||||
if (ints & OHCI_INTR_WDH) {
|
|
@ -1,16 +1,17 @@
|
|||
Subject: local-var.patch
|
||||
From 0406500ace84f79049a055d56671ad74fdd39f0e Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Fri, 24 Jun 2011 18:40:37 +0200
|
||||
Subject: [087/254] local-var.patch
|
||||
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
---
|
||||
include/linux/percpu.h | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
Index: linux-3.4/include/linux/percpu.h
|
||||
===================================================================
|
||||
--- linux-3.4.orig/include/linux/percpu.h
|
||||
+++ linux-3.4/include/linux/percpu.h
|
||||
diff --git a/include/linux/percpu.h b/include/linux/percpu.h
|
||||
index 21638ae..3d13ce0 100644
|
||||
--- a/include/linux/percpu.h
|
||||
+++ b/include/linux/percpu.h
|
||||
@@ -48,6 +48,11 @@
|
||||
preempt_enable(); \
|
||||
} while (0)
|
|
@ -1,16 +1,19 @@
|
|||
Subject: rt-local-irq-lock.patch
|
||||
From 7248b2cedce7ed66713782c57bd6167955411f82 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Mon, 20 Jun 2011 09:03:47 +0200
|
||||
Subject: [088/254] rt-local-irq-lock.patch
|
||||
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
---
|
||||
include/linux/locallock.h | 230 ++++++++++++++++++++++++++++++++++++++++++++++
|
||||
include/linux/locallock.h | 230 +++++++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 230 insertions(+)
|
||||
create mode 100644 include/linux/locallock.h
|
||||
|
||||
Index: linux-3.4/include/linux/locallock.h
|
||||
===================================================================
|
||||
diff --git a/include/linux/locallock.h b/include/linux/locallock.h
|
||||
new file mode 100644
|
||||
index 0000000..8fbc393
|
||||
--- /dev/null
|
||||
+++ linux-3.4/include/linux/locallock.h
|
||||
+++ b/include/linux/locallock.h
|
||||
@@ -0,0 +1,230 @@
|
||||
+#ifndef _LINUX_LOCALLOCK_H
|
||||
+#define _LINUX_LOCALLOCK_H
|
|
@ -1,17 +1,18 @@
|
|||
Subject: cpu-rt-variants.patch
|
||||
From 78761954bd13ddac3e08a14f3d6465311e598f11 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Fri, 17 Jun 2011 15:42:38 +0200
|
||||
Subject: [089/254] cpu-rt-variants.patch
|
||||
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
---
|
||||
include/linux/smp.h | 8 ++++++++
|
||||
1 file changed, 8 insertions(+)
|
||||
|
||||
Index: linux-3.4/include/linux/smp.h
|
||||
===================================================================
|
||||
--- linux-3.4.orig/include/linux/smp.h
|
||||
+++ linux-3.4/include/linux/smp.h
|
||||
@@ -219,6 +219,14 @@ smp_call_function_any(const struct cpuma
|
||||
diff --git a/include/linux/smp.h b/include/linux/smp.h
|
||||
index 10530d9..04e7ed9 100644
|
||||
--- a/include/linux/smp.h
|
||||
+++ b/include/linux/smp.h
|
||||
@@ -219,6 +219,14 @@ smp_call_function_any(const struct cpumask *mask, smp_call_func_t func,
|
||||
#define get_cpu() ({ preempt_disable(); smp_processor_id(); })
|
||||
#define put_cpu() preempt_enable()
|
||||
|
|
@ -1,16 +1,17 @@
|
|||
Subject: mm-slab-wrap-functions.patch
|
||||
From 96d14b2f907b78c9e5c6ee1e46c843b09dcf6533 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Sat, 18 Jun 2011 19:44:43 +0200
|
||||
Subject: [090/254] mm-slab-wrap-functions.patch
|
||||
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
---
|
||||
mm/slab.c | 152 ++++++++++++++++++++++++++++++++++++++++++--------------------
|
||||
mm/slab.c | 152 ++++++++++++++++++++++++++++++++++++++++++-------------------
|
||||
1 file changed, 104 insertions(+), 48 deletions(-)
|
||||
|
||||
Index: linux-3.4/mm/slab.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/mm/slab.c
|
||||
+++ linux-3.4/mm/slab.c
|
||||
diff --git a/mm/slab.c b/mm/slab.c
|
||||
index 80c57f9..dc84364 100644
|
||||
--- a/mm/slab.c
|
||||
+++ b/mm/slab.c
|
||||
@@ -116,6 +116,7 @@
|
||||
#include <linux/kmemcheck.h>
|
||||
#include <linux/memory.h>
|
||||
|
@ -19,7 +20,7 @@ Index: linux-3.4/mm/slab.c
|
|||
|
||||
#include <asm/cacheflush.h>
|
||||
#include <asm/tlbflush.h>
|
||||
@@ -726,12 +727,40 @@ static void slab_set_debugobj_lock_class
|
||||
@@ -726,12 +727,40 @@ static void slab_set_debugobj_lock_classes(struct kmem_cache *cachep)
|
||||
#endif
|
||||
|
||||
static DEFINE_PER_CPU(struct delayed_work, slab_reap_work);
|
||||
|
@ -60,7 +61,7 @@ Index: linux-3.4/mm/slab.c
|
|||
static inline struct kmem_cache *__find_general_cachep(size_t size,
|
||||
gfp_t gfpflags)
|
||||
{
|
||||
@@ -1080,9 +1109,10 @@ static void reap_alien(struct kmem_cache
|
||||
@@ -1080,9 +1109,10 @@ static void reap_alien(struct kmem_cache *cachep, struct kmem_list3 *l3)
|
||||
if (l3->alien) {
|
||||
struct array_cache *ac = l3->alien[node];
|
||||
|
||||
|
@ -73,7 +74,7 @@ Index: linux-3.4/mm/slab.c
|
|||
}
|
||||
}
|
||||
}
|
||||
@@ -1097,9 +1127,9 @@ static void drain_alien_cache(struct kme
|
||||
@@ -1097,9 +1127,9 @@ static void drain_alien_cache(struct kmem_cache *cachep,
|
||||
for_each_online_node(i) {
|
||||
ac = alien[i];
|
||||
if (ac) {
|
||||
|
@ -85,7 +86,7 @@ Index: linux-3.4/mm/slab.c
|
|||
}
|
||||
}
|
||||
}
|
||||
@@ -1178,11 +1208,11 @@ static int init_cache_nodelists_node(int
|
||||
@@ -1178,11 +1208,11 @@ static int init_cache_nodelists_node(int node)
|
||||
cachep->nodelists[node] = l3;
|
||||
}
|
||||
|
||||
|
@ -99,7 +100,7 @@ Index: linux-3.4/mm/slab.c
|
|||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -1207,7 +1237,7 @@ static void __cpuinit cpuup_canceled(lon
|
||||
@@ -1207,7 +1237,7 @@ static void __cpuinit cpuup_canceled(long cpu)
|
||||
if (!l3)
|
||||
goto free_array_cache;
|
||||
|
||||
|
@ -108,7 +109,7 @@ Index: linux-3.4/mm/slab.c
|
|||
|
||||
/* Free limit for this kmem_list3 */
|
||||
l3->free_limit -= cachep->batchcount;
|
||||
@@ -1215,7 +1245,7 @@ static void __cpuinit cpuup_canceled(lon
|
||||
@@ -1215,7 +1245,7 @@ static void __cpuinit cpuup_canceled(long cpu)
|
||||
free_block(cachep, nc->entry, nc->avail, node);
|
||||
|
||||
if (!cpumask_empty(mask)) {
|
||||
|
@ -117,7 +118,7 @@ Index: linux-3.4/mm/slab.c
|
|||
goto free_array_cache;
|
||||
}
|
||||
|
||||
@@ -1229,7 +1259,7 @@ static void __cpuinit cpuup_canceled(lon
|
||||
@@ -1229,7 +1259,7 @@ static void __cpuinit cpuup_canceled(long cpu)
|
||||
alien = l3->alien;
|
||||
l3->alien = NULL;
|
||||
|
||||
|
@ -126,7 +127,7 @@ Index: linux-3.4/mm/slab.c
|
|||
|
||||
kfree(shared);
|
||||
if (alien) {
|
||||
@@ -1303,7 +1333,7 @@ static int __cpuinit cpuup_prepare(long
|
||||
@@ -1303,7 +1333,7 @@ static int __cpuinit cpuup_prepare(long cpu)
|
||||
l3 = cachep->nodelists[node];
|
||||
BUG_ON(!l3);
|
||||
|
||||
|
@ -135,7 +136,7 @@ Index: linux-3.4/mm/slab.c
|
|||
if (!l3->shared) {
|
||||
/*
|
||||
* We are serialised from CPU_DEAD or
|
||||
@@ -1318,7 +1348,7 @@ static int __cpuinit cpuup_prepare(long
|
||||
@@ -1318,7 +1348,7 @@ static int __cpuinit cpuup_prepare(long cpu)
|
||||
alien = NULL;
|
||||
}
|
||||
#endif
|
||||
|
@ -162,7 +163,7 @@ Index: linux-3.4/mm/slab.c
|
|||
}
|
||||
|
||||
static void check_irq_on(void)
|
||||
@@ -2600,13 +2632,12 @@ static void drain_array(struct kmem_cach
|
||||
@@ -2600,13 +2632,12 @@ static void drain_array(struct kmem_cache *cachep, struct kmem_list3 *l3,
|
||||
struct array_cache *ac,
|
||||
int force, int node);
|
||||
|
||||
|
@ -204,7 +205,7 @@ Index: linux-3.4/mm/slab.c
|
|||
check_irq_on();
|
||||
for_each_online_node(node) {
|
||||
l3 = cachep->nodelists[node];
|
||||
@@ -2650,10 +2693,10 @@ static int drain_freelist(struct kmem_ca
|
||||
@@ -2650,10 +2693,10 @@ static int drain_freelist(struct kmem_cache *cache,
|
||||
nr_freed = 0;
|
||||
while (nr_freed < tofree && !list_empty(&l3->slabs_free)) {
|
||||
|
||||
|
@ -217,7 +218,7 @@ Index: linux-3.4/mm/slab.c
|
|||
goto out;
|
||||
}
|
||||
|
||||
@@ -2667,7 +2710,7 @@ static int drain_freelist(struct kmem_ca
|
||||
@@ -2667,7 +2710,7 @@ static int drain_freelist(struct kmem_cache *cache,
|
||||
* to the cache.
|
||||
*/
|
||||
l3->free_objects -= cache->num;
|
||||
|
@ -226,7 +227,7 @@ Index: linux-3.4/mm/slab.c
|
|||
slab_destroy(cache, slabp);
|
||||
nr_freed++;
|
||||
}
|
||||
@@ -2962,7 +3005,7 @@ static int cache_grow(struct kmem_cache
|
||||
@@ -2962,7 +3005,7 @@ static int cache_grow(struct kmem_cache *cachep,
|
||||
offset *= cachep->colour_off;
|
||||
|
||||
if (local_flags & __GFP_WAIT)
|
||||
|
@ -235,7 +236,7 @@ Index: linux-3.4/mm/slab.c
|
|||
|
||||
/*
|
||||
* The test for missing atomic flag is performed here, rather than
|
||||
@@ -2992,7 +3035,7 @@ static int cache_grow(struct kmem_cache
|
||||
@@ -2992,7 +3035,7 @@ static int cache_grow(struct kmem_cache *cachep,
|
||||
cache_init_objs(cachep, slabp);
|
||||
|
||||
if (local_flags & __GFP_WAIT)
|
||||
|
@ -267,7 +268,7 @@ Index: linux-3.4/mm/slab.c
|
|||
if (obj) {
|
||||
/*
|
||||
* Insert into the appropriate per node queues
|
||||
@@ -3522,7 +3565,7 @@ __cache_alloc_node(struct kmem_cache *ca
|
||||
@@ -3522,7 +3565,7 @@ __cache_alloc_node(struct kmem_cache *cachep, gfp_t flags, int nodeid,
|
||||
return NULL;
|
||||
|
||||
cache_alloc_debugcheck_before(cachep, flags);
|
||||
|
@ -276,7 +277,7 @@ Index: linux-3.4/mm/slab.c
|
|||
|
||||
if (nodeid == NUMA_NO_NODE)
|
||||
nodeid = slab_node;
|
||||
@@ -3547,7 +3590,7 @@ __cache_alloc_node(struct kmem_cache *ca
|
||||
@@ -3547,7 +3590,7 @@ __cache_alloc_node(struct kmem_cache *cachep, gfp_t flags, int nodeid,
|
||||
/* ___cache_alloc_node can fall back to other nodes */
|
||||
ptr = ____cache_alloc_node(cachep, flags, nodeid);
|
||||
out:
|
||||
|
@ -285,7 +286,7 @@ Index: linux-3.4/mm/slab.c
|
|||
ptr = cache_alloc_debugcheck_after(cachep, flags, ptr, caller);
|
||||
kmemleak_alloc_recursive(ptr, obj_size(cachep), 1, cachep->flags,
|
||||
flags);
|
||||
@@ -3607,9 +3650,9 @@ __cache_alloc(struct kmem_cache *cachep,
|
||||
@@ -3607,9 +3650,9 @@ __cache_alloc(struct kmem_cache *cachep, gfp_t flags, void *caller)
|
||||
return NULL;
|
||||
|
||||
cache_alloc_debugcheck_before(cachep, flags);
|
||||
|
@ -297,7 +298,7 @@ Index: linux-3.4/mm/slab.c
|
|||
objp = cache_alloc_debugcheck_after(cachep, flags, objp, caller);
|
||||
kmemleak_alloc_recursive(objp, obj_size(cachep), 1, cachep->flags,
|
||||
flags);
|
||||
@@ -3922,9 +3965,9 @@ void kmem_cache_free(struct kmem_cache *
|
||||
@@ -3922,9 +3965,9 @@ void kmem_cache_free(struct kmem_cache *cachep, void *objp)
|
||||
debug_check_no_locks_freed(objp, obj_size(cachep));
|
||||
if (!(cachep->flags & SLAB_DEBUG_OBJECTS))
|
||||
debug_check_no_obj_freed(objp, obj_size(cachep));
|
||||
|
@ -321,7 +322,7 @@ Index: linux-3.4/mm/slab.c
|
|||
}
|
||||
EXPORT_SYMBOL(kfree);
|
||||
|
||||
@@ -3997,7 +4040,7 @@ static int alloc_kmemlist(struct kmem_ca
|
||||
@@ -3997,7 +4040,7 @@ static int alloc_kmemlist(struct kmem_cache *cachep, gfp_t gfp)
|
||||
if (l3) {
|
||||
struct array_cache *shared = l3->shared;
|
||||
|
||||
|
@ -330,7 +331,7 @@ Index: linux-3.4/mm/slab.c
|
|||
|
||||
if (shared)
|
||||
free_block(cachep, shared->entry,
|
||||
@@ -4010,7 +4053,7 @@ static int alloc_kmemlist(struct kmem_ca
|
||||
@@ -4010,7 +4053,7 @@ static int alloc_kmemlist(struct kmem_cache *cachep, gfp_t gfp)
|
||||
}
|
||||
l3->free_limit = (1 + nr_cpus_node(node)) *
|
||||
cachep->batchcount + cachep->num;
|
||||
|
@ -373,7 +374,7 @@ Index: linux-3.4/mm/slab.c
|
|||
|
||||
/* Always called with the cache_chain_mutex held */
|
||||
static int do_tune_cpucache(struct kmem_cache *cachep, int limit,
|
||||
@@ -4093,7 +4147,7 @@ static int do_tune_cpucache(struct kmem_
|
||||
@@ -4093,7 +4147,7 @@ static int do_tune_cpucache(struct kmem_cache *cachep, int limit,
|
||||
}
|
||||
new->cachep = cachep;
|
||||
|
||||
|
@ -382,7 +383,7 @@ Index: linux-3.4/mm/slab.c
|
|||
|
||||
check_irq_on();
|
||||
cachep->batchcount = batchcount;
|
||||
@@ -4104,9 +4158,11 @@ static int do_tune_cpucache(struct kmem_
|
||||
@@ -4104,9 +4158,11 @@ static int do_tune_cpucache(struct kmem_cache *cachep, int limit,
|
||||
struct array_cache *ccold = new->new[i];
|
||||
if (!ccold)
|
||||
continue;
|
||||
|
@ -396,7 +397,7 @@ Index: linux-3.4/mm/slab.c
|
|||
kfree(ccold);
|
||||
}
|
||||
kfree(new);
|
||||
@@ -4182,7 +4238,7 @@ static void drain_array(struct kmem_cach
|
||||
@@ -4182,7 +4238,7 @@ static void drain_array(struct kmem_cache *cachep, struct kmem_list3 *l3,
|
||||
if (ac->touched && !force) {
|
||||
ac->touched = 0;
|
||||
} else {
|
||||
|
@ -405,7 +406,7 @@ Index: linux-3.4/mm/slab.c
|
|||
if (ac->avail) {
|
||||
tofree = force ? ac->avail : (ac->limit + 4) / 5;
|
||||
if (tofree > ac->avail)
|
||||
@@ -4192,7 +4248,7 @@ static void drain_array(struct kmem_cach
|
||||
@@ -4192,7 +4248,7 @@ static void drain_array(struct kmem_cache *cachep, struct kmem_list3 *l3,
|
||||
memmove(ac->entry, &(ac->entry[tofree]),
|
||||
sizeof(void *) * ac->avail);
|
||||
}
|
||||
|
@ -414,7 +415,7 @@ Index: linux-3.4/mm/slab.c
|
|||
}
|
||||
}
|
||||
|
||||
@@ -4331,7 +4387,7 @@ static int s_show(struct seq_file *m, vo
|
||||
@@ -4331,7 +4387,7 @@ static int s_show(struct seq_file *m, void *p)
|
||||
continue;
|
||||
|
||||
check_irq_on();
|
||||
|
@ -423,7 +424,7 @@ Index: linux-3.4/mm/slab.c
|
|||
|
||||
list_for_each_entry(slabp, &l3->slabs_full, list) {
|
||||
if (slabp->inuse != cachep->num && !error)
|
||||
@@ -4356,7 +4412,7 @@ static int s_show(struct seq_file *m, vo
|
||||
@@ -4356,7 +4412,7 @@ static int s_show(struct seq_file *m, void *p)
|
||||
if (l3->shared)
|
||||
shared_avail += l3->shared->avail;
|
||||
|
||||
|
@ -432,7 +433,7 @@ Index: linux-3.4/mm/slab.c
|
|||
}
|
||||
num_slabs += active_slabs;
|
||||
num_objs = num_slabs * cachep->num;
|
||||
@@ -4585,13 +4641,13 @@ static int leaks_show(struct seq_file *m
|
||||
@@ -4585,13 +4641,13 @@ static int leaks_show(struct seq_file *m, void *p)
|
||||
continue;
|
||||
|
||||
check_irq_on();
|
|
@ -1,6 +1,7 @@
|
|||
Subject: slab: Fix __do_drain to use the right array cache
|
||||
From 47920759ab097d50717691a48c9e8815fa60a605 Mon Sep 17 00:00:00 2001
|
||||
From: Steven Rostedt <rostedt@goodmis.org>
|
||||
Date: Tue, 11 Oct 2011 23:56:23 -0400
|
||||
Subject: [091/254] slab: Fix __do_drain to use the right array cache
|
||||
|
||||
The array cache in __do_drain() was using the cpu_cache_get() function
|
||||
which uses smp_processor_id() to get the proper array. On mainline, this
|
||||
|
@ -33,16 +34,15 @@ Cc: Clark Williams <clark@redhat.com>
|
|||
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
|
||||
Link: http://lkml.kernel.org/r/1318391783.13262.11.camel@gandalf.stny.rr.com
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
|
||||
---
|
||||
mm/slab.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
Index: linux-3.4/mm/slab.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/mm/slab.c
|
||||
+++ linux-3.4/mm/slab.c
|
||||
@@ -2638,7 +2638,7 @@ static void __do_drain(void *arg, unsign
|
||||
diff --git a/mm/slab.c b/mm/slab.c
|
||||
index dc84364..341748b 100644
|
||||
--- a/mm/slab.c
|
||||
+++ b/mm/slab.c
|
||||
@@ -2638,7 +2638,7 @@ static void __do_drain(void *arg, unsigned int cpu)
|
||||
struct array_cache *ac;
|
||||
int node = cpu_to_mem(cpu);
|
||||
|
|
@ -1,22 +1,22 @@
|
|||
From e7404bdc7a924a84fe61c0bcbe7ecefcf0287555 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Zijlstra <a.p.zijlstra@chello.nl>
|
||||
Date: Fri, 3 Jul 2009 08:44:43 -0500
|
||||
Subject: mm: More lock breaks in slab.c
|
||||
Subject: [092/254] mm: More lock breaks in slab.c
|
||||
|
||||
Handle __free_pages outside of the locked regions. This reduces the
|
||||
lock contention on the percpu slab locks in -rt significantly.
|
||||
|
||||
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
|
||||
---
|
||||
mm/slab.c | 90 ++++++++++++++++++++++++++++++++++++++++++++++----------------
|
||||
mm/slab.c | 90 ++++++++++++++++++++++++++++++++++++++++++++++---------------
|
||||
1 file changed, 68 insertions(+), 22 deletions(-)
|
||||
|
||||
Index: linux-3.4/mm/slab.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/mm/slab.c
|
||||
+++ linux-3.4/mm/slab.c
|
||||
@@ -727,6 +727,7 @@ static void slab_set_debugobj_lock_class
|
||||
diff --git a/mm/slab.c b/mm/slab.c
|
||||
index 341748b..15bce6b 100644
|
||||
--- a/mm/slab.c
|
||||
+++ b/mm/slab.c
|
||||
@@ -727,6 +727,7 @@ static void slab_set_debugobj_lock_classes(struct kmem_cache *cachep)
|
||||
#endif
|
||||
|
||||
static DEFINE_PER_CPU(struct delayed_work, slab_reap_work);
|
||||
|
@ -24,7 +24,7 @@ Index: linux-3.4/mm/slab.c
|
|||
static DEFINE_LOCAL_IRQ_LOCK(slab_lock);
|
||||
|
||||
#ifndef CONFIG_PREEMPT_RT_BASE
|
||||
@@ -742,14 +743,39 @@ slab_on_each_cpu(void (*func)(void *arg,
|
||||
@@ -742,14 +743,39 @@ slab_on_each_cpu(void (*func)(void *arg, int this_cpu), void *arg)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
|
@ -68,7 +68,7 @@ Index: linux-3.4/mm/slab.c
|
|||
static inline struct array_cache *cpu_cache_get(struct kmem_cache *cachep)
|
||||
{
|
||||
return cachep->array[smp_processor_id()];
|
||||
@@ -1245,7 +1271,7 @@ static void __cpuinit cpuup_canceled(lon
|
||||
@@ -1245,7 +1271,7 @@ static void __cpuinit cpuup_canceled(long cpu)
|
||||
free_block(cachep, nc->entry, nc->avail, node);
|
||||
|
||||
if (!cpumask_empty(mask)) {
|
||||
|
@ -77,7 +77,7 @@ Index: linux-3.4/mm/slab.c
|
|||
goto free_array_cache;
|
||||
}
|
||||
|
||||
@@ -1259,7 +1285,7 @@ static void __cpuinit cpuup_canceled(lon
|
||||
@@ -1259,7 +1285,7 @@ static void __cpuinit cpuup_canceled(long cpu)
|
||||
alien = l3->alien;
|
||||
l3->alien = NULL;
|
||||
|
||||
|
@ -95,7 +95,7 @@ Index: linux-3.4/mm/slab.c
|
|||
|
||||
for (i = 0; i < NUM_INIT_LISTS; i++) {
|
||||
kmem_list3_init(&initkmem_list3[i]);
|
||||
@@ -1868,12 +1896,14 @@ static void *kmem_getpages(struct kmem_c
|
||||
@@ -1868,12 +1896,14 @@ static void *kmem_getpages(struct kmem_cache *cachep, gfp_t flags, int nodeid)
|
||||
/*
|
||||
* Interface to system's page release.
|
||||
*/
|
||||
|
@ -112,7 +112,7 @@ Index: linux-3.4/mm/slab.c
|
|||
kmemcheck_free_shadow(page, cachep->gfporder);
|
||||
|
||||
if (cachep->flags & SLAB_RECLAIM_ACCOUNT)
|
||||
@@ -1889,7 +1919,13 @@ static void kmem_freepages(struct kmem_c
|
||||
@@ -1889,7 +1919,13 @@ static void kmem_freepages(struct kmem_cache *cachep, void *addr)
|
||||
}
|
||||
if (current->reclaim_state)
|
||||
current->reclaim_state->reclaimed_slab += nr_freed;
|
||||
|
@ -127,7 +127,7 @@ Index: linux-3.4/mm/slab.c
|
|||
}
|
||||
|
||||
static void kmem_rcu_free(struct rcu_head *head)
|
||||
@@ -1897,7 +1933,7 @@ static void kmem_rcu_free(struct rcu_hea
|
||||
@@ -1897,7 +1933,7 @@ static void kmem_rcu_free(struct rcu_head *head)
|
||||
struct slab_rcu *slab_rcu = (struct slab_rcu *)head;
|
||||
struct kmem_cache *cachep = slab_rcu->cachep;
|
||||
|
||||
|
@ -136,7 +136,7 @@ Index: linux-3.4/mm/slab.c
|
|||
if (OFF_SLAB(cachep))
|
||||
kmem_cache_free(cachep->slabp_cache, slab_rcu);
|
||||
}
|
||||
@@ -2116,7 +2152,8 @@ static void slab_destroy_debugcheck(stru
|
||||
@@ -2116,7 +2152,8 @@ static void slab_destroy_debugcheck(struct kmem_cache *cachep, struct slab *slab
|
||||
* Before calling the slab must have been unlinked from the cache. The
|
||||
* cache-lock is not held/needed.
|
||||
*/
|
||||
|
@ -146,7 +146,7 @@ Index: linux-3.4/mm/slab.c
|
|||
{
|
||||
void *addr = slabp->s_mem - slabp->colouroff;
|
||||
|
||||
@@ -2129,7 +2166,7 @@ static void slab_destroy(struct kmem_cac
|
||||
@@ -2129,7 +2166,7 @@ static void slab_destroy(struct kmem_cache *cachep, struct slab *slabp)
|
||||
slab_rcu->addr = addr;
|
||||
call_rcu(&slab_rcu->head, kmem_rcu_free);
|
||||
} else {
|
||||
|
@ -173,7 +173,7 @@ Index: linux-3.4/mm/slab.c
|
|||
}
|
||||
#endif
|
||||
|
||||
@@ -2711,7 +2754,7 @@ static int drain_freelist(struct kmem_ca
|
||||
@@ -2711,7 +2754,7 @@ static int drain_freelist(struct kmem_cache *cache,
|
||||
*/
|
||||
l3->free_objects -= cache->num;
|
||||
local_spin_unlock_irq(slab_lock, &l3->list_lock);
|
||||
|
@ -182,7 +182,7 @@ Index: linux-3.4/mm/slab.c
|
|||
nr_freed++;
|
||||
}
|
||||
out:
|
||||
@@ -3046,7 +3089,7 @@ static int cache_grow(struct kmem_cache
|
||||
@@ -3046,7 +3089,7 @@ static int cache_grow(struct kmem_cache *cachep,
|
||||
spin_unlock(&l3->list_lock);
|
||||
return 1;
|
||||
opps1:
|
||||
|
@ -191,7 +191,7 @@ Index: linux-3.4/mm/slab.c
|
|||
failed:
|
||||
if (local_flags & __GFP_WAIT)
|
||||
local_lock_irq(slab_lock);
|
||||
@@ -3700,7 +3743,7 @@ static void free_block(struct kmem_cache
|
||||
@@ -3700,7 +3743,7 @@ static void free_block(struct kmem_cache *cachep, void **objpp, int nr_objects,
|
||||
* a different cache, refer to comments before
|
||||
* alloc_slabmgmt.
|
||||
*/
|
||||
|
@ -200,7 +200,7 @@ Index: linux-3.4/mm/slab.c
|
|||
} else {
|
||||
list_add(&slabp->list, &l3->slabs_free);
|
||||
}
|
||||
@@ -3967,7 +4010,7 @@ void kmem_cache_free(struct kmem_cache *
|
||||
@@ -3967,7 +4010,7 @@ void kmem_cache_free(struct kmem_cache *cachep, void *objp)
|
||||
debug_check_no_obj_freed(objp, obj_size(cachep));
|
||||
local_lock_irqsave(slab_lock, flags);
|
||||
__cache_free(cachep, objp, __builtin_return_address(0));
|
||||
|
@ -218,7 +218,7 @@ Index: linux-3.4/mm/slab.c
|
|||
}
|
||||
EXPORT_SYMBOL(kfree);
|
||||
|
||||
@@ -4053,7 +4096,8 @@ static int alloc_kmemlist(struct kmem_ca
|
||||
@@ -4053,7 +4096,8 @@ static int alloc_kmemlist(struct kmem_cache *cachep, gfp_t gfp)
|
||||
}
|
||||
l3->free_limit = (1 + nr_cpus_node(node)) *
|
||||
cachep->batchcount + cachep->num;
|
||||
|
@ -228,7 +228,7 @@ Index: linux-3.4/mm/slab.c
|
|||
kfree(shared);
|
||||
free_alien_cache(new_alien);
|
||||
continue;
|
||||
@@ -4119,7 +4163,9 @@ static void do_ccupdate_local(void *info
|
||||
@@ -4119,7 +4163,9 @@ static void do_ccupdate_local(void *info)
|
||||
#else
|
||||
static void do_ccupdate_local(void *info, int cpu)
|
||||
{
|
||||
|
@ -238,7 +238,7 @@ Index: linux-3.4/mm/slab.c
|
|||
}
|
||||
#endif
|
||||
|
||||
@@ -4161,8 +4207,8 @@ static int do_tune_cpucache(struct kmem_
|
||||
@@ -4161,8 +4207,8 @@ static int do_tune_cpucache(struct kmem_cache *cachep, int limit,
|
||||
local_spin_lock_irq(slab_lock,
|
||||
&cachep->nodelists[cpu_to_mem(i)]->list_lock);
|
||||
free_block(cachep, ccold->entry, ccold->avail, cpu_to_mem(i));
|
|
@ -1,6 +1,7 @@
|
|||
From 24ef007fc0efe3e35ecb7b566e1bb8f62ebafb88 Mon Sep 17 00:00:00 2001
|
||||
From: Ingo Molnar <mingo@elte.hu>
|
||||
Date: Fri, 3 Jul 2009 08:29:37 -0500
|
||||
Subject: mm: page_alloc: rt-friendly per-cpu pages
|
||||
Subject: [093/254] mm: page_alloc: rt-friendly per-cpu pages
|
||||
|
||||
rt-friendly per-cpu pages: convert the irqs-off per-cpu locking
|
||||
method into a preemptible, explicit-per-cpu-locks method.
|
||||
|
@ -11,15 +12,14 @@ Contains fixes from:
|
|||
|
||||
Signed-off-by: Ingo Molnar <mingo@elte.hu>
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
|
||||
---
|
||||
mm/page_alloc.c | 53 +++++++++++++++++++++++++++++++++++++----------------
|
||||
1 file changed, 37 insertions(+), 16 deletions(-)
|
||||
|
||||
Index: linux-3.4/mm/page_alloc.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/mm/page_alloc.c
|
||||
+++ linux-3.4/mm/page_alloc.c
|
||||
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
|
||||
index b27e8cb..dbe4146 100644
|
||||
--- a/mm/page_alloc.c
|
||||
+++ b/mm/page_alloc.c
|
||||
@@ -57,6 +57,7 @@
|
||||
#include <linux/ftrace_event.h>
|
||||
#include <linux/memcontrol.h>
|
||||
|
@ -47,7 +47,7 @@ Index: linux-3.4/mm/page_alloc.c
|
|||
int page_group_by_mobility_disabled __read_mostly;
|
||||
|
||||
static void set_pageblock_migratetype(struct page *page, int migratetype)
|
||||
@@ -721,13 +734,13 @@ static void __free_pages_ok(struct page
|
||||
@@ -721,13 +734,13 @@ static void __free_pages_ok(struct page *page, unsigned int order)
|
||||
if (!free_pages_prepare(page, order))
|
||||
return;
|
||||
|
||||
|
@ -63,7 +63,7 @@ Index: linux-3.4/mm/page_alloc.c
|
|||
}
|
||||
|
||||
void __meminit __free_pages_bootmem(struct page *page, unsigned int order)
|
||||
@@ -1113,14 +1126,14 @@ void drain_zone_pages(struct zone *zone,
|
||||
@@ -1113,14 +1126,14 @@ void drain_zone_pages(struct zone *zone, struct per_cpu_pages *pcp)
|
||||
unsigned long flags;
|
||||
int to_drain;
|
||||
|
||||
|
@ -80,7 +80,7 @@ Index: linux-3.4/mm/page_alloc.c
|
|||
}
|
||||
#endif
|
||||
|
||||
@@ -1140,7 +1153,7 @@ static void drain_pages(unsigned int cpu
|
||||
@@ -1140,7 +1153,7 @@ static void drain_pages(unsigned int cpu)
|
||||
struct per_cpu_pageset *pset;
|
||||
struct per_cpu_pages *pcp;
|
||||
|
||||
|
@ -89,7 +89,7 @@ Index: linux-3.4/mm/page_alloc.c
|
|||
pset = per_cpu_ptr(zone->pageset, cpu);
|
||||
|
||||
pcp = &pset->pcp;
|
||||
@@ -1148,7 +1161,7 @@ static void drain_pages(unsigned int cpu
|
||||
@@ -1148,7 +1161,7 @@ static void drain_pages(unsigned int cpu)
|
||||
free_pcppages_bulk(zone, pcp->count, pcp);
|
||||
pcp->count = 0;
|
||||
}
|
||||
|
@ -111,7 +111,7 @@ Index: linux-3.4/mm/page_alloc.c
|
|||
}
|
||||
|
||||
#ifdef CONFIG_HIBERNATION
|
||||
@@ -1257,7 +1275,7 @@ void free_hot_cold_page(struct page *pag
|
||||
@@ -1257,7 +1275,7 @@ void free_hot_cold_page(struct page *page, int cold)
|
||||
|
||||
migratetype = get_pageblock_migratetype(page);
|
||||
set_page_private(page, migratetype);
|
||||
|
@ -120,7 +120,7 @@ Index: linux-3.4/mm/page_alloc.c
|
|||
if (unlikely(wasMlocked))
|
||||
free_page_mlock(page);
|
||||
__count_vm_event(PGFREE);
|
||||
@@ -1289,7 +1307,7 @@ void free_hot_cold_page(struct page *pag
|
||||
@@ -1289,7 +1307,7 @@ void free_hot_cold_page(struct page *page, int cold)
|
||||
}
|
||||
|
||||
out:
|
||||
|
@ -184,7 +184,7 @@ Index: linux-3.4/mm/page_alloc.c
|
|||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -4892,6 +4912,7 @@ static int page_alloc_cpu_notify(struct
|
||||
@@ -4892,6 +4912,7 @@ static int page_alloc_cpu_notify(struct notifier_block *self,
|
||||
void __init page_alloc_init(void)
|
||||
{
|
||||
hotcpu_notifier(page_alloc_cpu_notify, 0);
|
|
@ -1,6 +1,7 @@
|
|||
From 47ce615d9fbc979fdb8403a326081e7a1921ddaa Mon Sep 17 00:00:00 2001
|
||||
From: Peter Zijlstra <a.p.zijlstra@chello.nl>
|
||||
Date: Fri, 3 Jul 2009 08:44:37 -0500
|
||||
Subject: mm: page_alloc reduce lock sections further
|
||||
Subject: [094/254] mm: page_alloc reduce lock sections further
|
||||
|
||||
Split out the pages which are to be freed into a separate list and
|
||||
call free_pages_bulk() outside of the percpu page allocator locks.
|
||||
|
@ -8,14 +9,14 @@ call free_pages_bulk() outside of the percpu page allocator locks.
|
|||
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
---
|
||||
mm/page_alloc.c | 77 ++++++++++++++++++++++++++++++++++++++++++--------------
|
||||
mm/page_alloc.c | 77 +++++++++++++++++++++++++++++++++++++++++--------------
|
||||
1 file changed, 58 insertions(+), 19 deletions(-)
|
||||
|
||||
Index: linux-3.4/mm/page_alloc.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/mm/page_alloc.c
|
||||
+++ linux-3.4/mm/page_alloc.c
|
||||
@@ -632,7 +632,7 @@ static inline int free_pages_check(struc
|
||||
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
|
||||
index dbe4146..2edd044 100644
|
||||
--- a/mm/page_alloc.c
|
||||
+++ b/mm/page_alloc.c
|
||||
@@ -632,7 +632,7 @@ static inline int free_pages_check(struct page *page)
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -24,7 +25,7 @@ Index: linux-3.4/mm/page_alloc.c
|
|||
* Assumes all pages on list are in same zone, and of same order.
|
||||
* count is the number of pages to free.
|
||||
*
|
||||
@@ -643,16 +643,42 @@ static inline int free_pages_check(struc
|
||||
@@ -643,16 +643,42 @@ static inline int free_pages_check(struct page *page)
|
||||
* pinned" detection logic.
|
||||
*/
|
||||
static void free_pcppages_bulk(struct zone *zone, int count,
|
||||
|
@ -71,7 +72,7 @@ Index: linux-3.4/mm/page_alloc.c
|
|||
while (to_free) {
|
||||
struct page *page;
|
||||
struct list_head *list;
|
||||
@@ -668,7 +694,7 @@ static void free_pcppages_bulk(struct zo
|
||||
@@ -668,7 +694,7 @@ static void free_pcppages_bulk(struct zone *zone, int count,
|
||||
batch_free++;
|
||||
if (++migratetype == MIGRATE_PCPTYPES)
|
||||
migratetype = 0;
|
||||
|
@ -80,7 +81,7 @@ Index: linux-3.4/mm/page_alloc.c
|
|||
} while (list_empty(list));
|
||||
|
||||
/* This is the only non-empty list. Free them all. */
|
||||
@@ -677,27 +703,24 @@ static void free_pcppages_bulk(struct zo
|
||||
@@ -677,27 +703,24 @@ static void free_pcppages_bulk(struct zone *zone, int count,
|
||||
|
||||
do {
|
||||
page = list_last_entry(list, struct page, lru);
|
||||
|
@ -113,7 +114,7 @@ Index: linux-3.4/mm/page_alloc.c
|
|||
}
|
||||
|
||||
static bool free_pages_prepare(struct page *page, unsigned int order)
|
||||
@@ -1124,6 +1147,7 @@ static int rmqueue_bulk(struct zone *zon
|
||||
@@ -1124,6 +1147,7 @@ static int rmqueue_bulk(struct zone *zone, unsigned int order,
|
||||
void drain_zone_pages(struct zone *zone, struct per_cpu_pages *pcp)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
@ -121,7 +122,7 @@ Index: linux-3.4/mm/page_alloc.c
|
|||
int to_drain;
|
||||
|
||||
local_lock_irqsave(pa_lock, flags);
|
||||
@@ -1131,9 +1155,10 @@ void drain_zone_pages(struct zone *zone,
|
||||
@@ -1131,9 +1155,10 @@ void drain_zone_pages(struct zone *zone, struct per_cpu_pages *pcp)
|
||||
to_drain = pcp->batch;
|
||||
else
|
||||
to_drain = pcp->count;
|
||||
|
@ -133,7 +134,7 @@ Index: linux-3.4/mm/page_alloc.c
|
|||
}
|
||||
#endif
|
||||
|
||||
@@ -1152,16 +1177,21 @@ static void drain_pages(unsigned int cpu
|
||||
@@ -1152,16 +1177,21 @@ static void drain_pages(unsigned int cpu)
|
||||
for_each_populated_zone(zone) {
|
||||
struct per_cpu_pageset *pset;
|
||||
struct per_cpu_pages *pcp;
|
||||
|
@ -157,7 +158,7 @@ Index: linux-3.4/mm/page_alloc.c
|
|||
}
|
||||
}
|
||||
|
||||
@@ -1302,8 +1332,15 @@ void free_hot_cold_page(struct page *pag
|
||||
@@ -1302,8 +1332,15 @@ void free_hot_cold_page(struct page *page, int cold)
|
||||
list_add(&page->lru, &pcp->lists[migratetype]);
|
||||
pcp->count++;
|
||||
if (pcp->count >= pcp->high) {
|
|
@ -1,17 +1,18 @@
|
|||
Subject: mm-page-alloc-fix.patch
|
||||
From 2d5d5f2541474bc2d6d522713b4e6e51b9b35dc9 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Thu, 21 Jul 2011 16:47:49 +0200
|
||||
Subject: [095/254] mm-page-alloc-fix.patch
|
||||
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
---
|
||||
mm/page_alloc.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: linux-3.4/mm/page_alloc.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/mm/page_alloc.c
|
||||
+++ linux-3.4/mm/page_alloc.c
|
||||
@@ -2095,8 +2095,8 @@ __alloc_pages_direct_compact(gfp_t gfp_m
|
||||
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
|
||||
index 2edd044..4a68c8f 100644
|
||||
--- a/mm/page_alloc.c
|
||||
+++ b/mm/page_alloc.c
|
||||
@@ -2095,8 +2095,8 @@ __alloc_pages_direct_compact(gfp_t gfp_mask, unsigned int order,
|
||||
if (*did_some_progress != COMPACT_SKIPPED) {
|
||||
|
||||
/* Page migration frees to the PCP lists but we want merging */
|
|
@ -1,18 +1,18 @@
|
|||
From 04e55a30ad50c554681bc20c9b07080cb8cc43f8 Mon Sep 17 00:00:00 2001
|
||||
From: Ingo Molnar <mingo@elte.hu>
|
||||
Date: Fri, 3 Jul 2009 08:29:51 -0500
|
||||
Subject: mm: convert swap to percpu locked
|
||||
Subject: [096/254] mm: convert swap to percpu locked
|
||||
|
||||
Signed-off-by: Ingo Molnar <mingo@elte.hu>
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
|
||||
---
|
||||
mm/swap.c | 33 +++++++++++++++++++++------------
|
||||
1 file changed, 21 insertions(+), 12 deletions(-)
|
||||
|
||||
Index: linux-3.4/mm/swap.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/mm/swap.c
|
||||
+++ linux-3.4/mm/swap.c
|
||||
diff --git a/mm/swap.c b/mm/swap.c
|
||||
index 5c13f13..2051da9 100644
|
||||
--- a/mm/swap.c
|
||||
+++ b/mm/swap.c
|
||||
@@ -30,6 +30,7 @@
|
||||
#include <linux/backing-dev.h>
|
||||
#include <linux/memcontrol.h>
|
||||
|
@ -21,7 +21,7 @@ Index: linux-3.4/mm/swap.c
|
|||
|
||||
#include "internal.h"
|
||||
|
||||
@@ -40,6 +41,9 @@ static DEFINE_PER_CPU(struct pagevec[NR_
|
||||
@@ -40,6 +41,9 @@ static DEFINE_PER_CPU(struct pagevec[NR_LRU_LISTS], lru_add_pvecs);
|
||||
static DEFINE_PER_CPU(struct pagevec, lru_rotate_pvecs);
|
||||
static DEFINE_PER_CPU(struct pagevec, lru_deactivate_pvecs);
|
||||
|
||||
|
@ -31,7 +31,7 @@ Index: linux-3.4/mm/swap.c
|
|||
/*
|
||||
* This path almost never happens for VM activity - pages are normally
|
||||
* freed via pagevecs. But it gets used by networking.
|
||||
@@ -268,11 +272,11 @@ void rotate_reclaimable_page(struct page
|
||||
@@ -268,11 +272,11 @@ void rotate_reclaimable_page(struct page *page)
|
||||
unsigned long flags;
|
||||
|
||||
page_cache_get(page);
|
|
@ -1,20 +1,20 @@
|
|||
From 55b4def7f62a956af1bae2e52aad48dafdcd300f Mon Sep 17 00:00:00 2001
|
||||
From: Ingo Molnar <mingo@elte.hu>
|
||||
Date: Fri, 3 Jul 2009 08:30:13 -0500
|
||||
Subject: [PATCH] mm: make vmstat -rt aware
|
||||
Subject: [097/254] mm: make vmstat -rt aware
|
||||
|
||||
Signed-off-by: Ingo Molnar <mingo@elte.hu>
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
|
||||
---
|
||||
include/linux/vmstat.h | 4 ++++
|
||||
mm/vmstat.c | 6 ++++++
|
||||
2 files changed, 10 insertions(+)
|
||||
|
||||
Index: linux-3.4/include/linux/vmstat.h
|
||||
===================================================================
|
||||
--- linux-3.4.orig/include/linux/vmstat.h
|
||||
+++ linux-3.4/include/linux/vmstat.h
|
||||
@@ -29,7 +29,9 @@ DECLARE_PER_CPU(struct vm_event_state, v
|
||||
diff --git a/include/linux/vmstat.h b/include/linux/vmstat.h
|
||||
index 65efb92..1b3f2ef 100644
|
||||
--- a/include/linux/vmstat.h
|
||||
+++ b/include/linux/vmstat.h
|
||||
@@ -29,7 +29,9 @@ DECLARE_PER_CPU(struct vm_event_state, vm_event_states);
|
||||
|
||||
static inline void __count_vm_event(enum vm_event_item item)
|
||||
{
|
||||
|
@ -24,7 +24,7 @@ Index: linux-3.4/include/linux/vmstat.h
|
|||
}
|
||||
|
||||
static inline void count_vm_event(enum vm_event_item item)
|
||||
@@ -39,7 +41,9 @@ static inline void count_vm_event(enum v
|
||||
@@ -39,7 +41,9 @@ static inline void count_vm_event(enum vm_event_item item)
|
||||
|
||||
static inline void __count_vm_events(enum vm_event_item item, long delta)
|
||||
{
|
||||
|
@ -34,11 +34,11 @@ Index: linux-3.4/include/linux/vmstat.h
|
|||
}
|
||||
|
||||
static inline void count_vm_events(enum vm_event_item item, long delta)
|
||||
Index: linux-3.4/mm/vmstat.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/mm/vmstat.c
|
||||
+++ linux-3.4/mm/vmstat.c
|
||||
@@ -216,6 +216,7 @@ void __mod_zone_page_state(struct zone *
|
||||
diff --git a/mm/vmstat.c b/mm/vmstat.c
|
||||
index 7db1b9b..172212f 100644
|
||||
--- a/mm/vmstat.c
|
||||
+++ b/mm/vmstat.c
|
||||
@@ -216,6 +216,7 @@ void __mod_zone_page_state(struct zone *zone, enum zone_stat_item item,
|
||||
long x;
|
||||
long t;
|
||||
|
||||
|
@ -46,7 +46,7 @@ Index: linux-3.4/mm/vmstat.c
|
|||
x = delta + __this_cpu_read(*p);
|
||||
|
||||
t = __this_cpu_read(pcp->stat_threshold);
|
||||
@@ -225,6 +226,7 @@ void __mod_zone_page_state(struct zone *
|
||||
@@ -225,6 +226,7 @@ void __mod_zone_page_state(struct zone *zone, enum zone_stat_item item,
|
||||
x = 0;
|
||||
}
|
||||
__this_cpu_write(*p, x);
|
||||
|
@ -54,7 +54,7 @@ Index: linux-3.4/mm/vmstat.c
|
|||
}
|
||||
EXPORT_SYMBOL(__mod_zone_page_state);
|
||||
|
||||
@@ -257,6 +259,7 @@ void __inc_zone_state(struct zone *zone,
|
||||
@@ -257,6 +259,7 @@ void __inc_zone_state(struct zone *zone, enum zone_stat_item item)
|
||||
s8 __percpu *p = pcp->vm_stat_diff + item;
|
||||
s8 v, t;
|
||||
|
||||
|
@ -62,7 +62,7 @@ Index: linux-3.4/mm/vmstat.c
|
|||
v = __this_cpu_inc_return(*p);
|
||||
t = __this_cpu_read(pcp->stat_threshold);
|
||||
if (unlikely(v > t)) {
|
||||
@@ -265,6 +268,7 @@ void __inc_zone_state(struct zone *zone,
|
||||
@@ -265,6 +268,7 @@ void __inc_zone_state(struct zone *zone, enum zone_stat_item item)
|
||||
zone_page_state_add(v + overstep, zone, item);
|
||||
__this_cpu_write(*p, -overstep);
|
||||
}
|
||||
|
@ -70,7 +70,7 @@ Index: linux-3.4/mm/vmstat.c
|
|||
}
|
||||
|
||||
void __inc_zone_page_state(struct page *page, enum zone_stat_item item)
|
||||
@@ -279,6 +283,7 @@ void __dec_zone_state(struct zone *zone,
|
||||
@@ -279,6 +283,7 @@ void __dec_zone_state(struct zone *zone, enum zone_stat_item item)
|
||||
s8 __percpu *p = pcp->vm_stat_diff + item;
|
||||
s8 v, t;
|
||||
|
||||
|
@ -78,7 +78,7 @@ Index: linux-3.4/mm/vmstat.c
|
|||
v = __this_cpu_dec_return(*p);
|
||||
t = __this_cpu_read(pcp->stat_threshold);
|
||||
if (unlikely(v < - t)) {
|
||||
@@ -287,6 +292,7 @@ void __dec_zone_state(struct zone *zone,
|
||||
@@ -287,6 +292,7 @@ void __dec_zone_state(struct zone *zone, enum zone_stat_item item)
|
||||
zone_page_state_add(v - overstep, zone, item);
|
||||
__this_cpu_write(*p, overstep);
|
||||
}
|
|
@ -1,6 +1,7 @@
|
|||
From 95fcabac2735a0b9cae26bb2d9ea53dbbd27dd59 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Zijlstra <peterz@infradead.org>
|
||||
Date: Fri, 3 Jul 2009 08:44:54 -0500
|
||||
Subject: mm: shrink the page frame to !-rt size
|
||||
Subject: [098/254] mm: shrink the page frame to !-rt size
|
||||
|
||||
He below is a boot-tested hack to shrink the page frame size back to
|
||||
normal.
|
||||
|
@ -10,18 +11,17 @@ page-frames.
|
|||
|
||||
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
|
||||
---
|
||||
include/linux/mm.h | 46 +++++++++++++++++++++++++++++++++++++++-------
|
||||
include/linux/mm_types.h | 6 +++++-
|
||||
mm/memory.c | 32 ++++++++++++++++++++++++++++++++
|
||||
3 files changed, 76 insertions(+), 8 deletions(-)
|
||||
|
||||
Index: linux-3.4/include/linux/mm.h
|
||||
===================================================================
|
||||
--- linux-3.4.orig/include/linux/mm.h
|
||||
+++ linux-3.4/include/linux/mm.h
|
||||
@@ -1200,27 +1200,59 @@ static inline pmd_t *pmd_alloc(struct mm
|
||||
diff --git a/include/linux/mm.h b/include/linux/mm.h
|
||||
index 74aa71b..7e11734 100644
|
||||
--- a/include/linux/mm.h
|
||||
+++ b/include/linux/mm.h
|
||||
@@ -1200,27 +1200,59 @@ static inline pmd_t *pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long a
|
||||
* overflow into the next struct page (as it might with DEBUG_SPINLOCK).
|
||||
* When freeing, reset page->mapping so free_pages_check won't complain.
|
||||
*/
|
||||
|
@ -88,10 +88,10 @@ Index: linux-3.4/include/linux/mm.h
|
|||
static inline void pgtable_page_dtor(struct page *page)
|
||||
{
|
||||
pte_lock_deinit(page);
|
||||
Index: linux-3.4/include/linux/mm_types.h
|
||||
===================================================================
|
||||
--- linux-3.4.orig/include/linux/mm_types.h
|
||||
+++ linux-3.4/include/linux/mm_types.h
|
||||
diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h
|
||||
index 3cc3062..e70ea9b 100644
|
||||
--- a/include/linux/mm_types.h
|
||||
+++ b/include/linux/mm_types.h
|
||||
@@ -118,7 +118,11 @@ struct page {
|
||||
* system if PG_buddy is set.
|
||||
*/
|
||||
|
@ -105,11 +105,11 @@ Index: linux-3.4/include/linux/mm_types.h
|
|||
#endif
|
||||
struct kmem_cache *slab; /* SLUB: Pointer to slab */
|
||||
struct page *first_page; /* Compound tail pages */
|
||||
Index: linux-3.4/mm/memory.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/mm/memory.c
|
||||
+++ linux-3.4/mm/memory.c
|
||||
@@ -4033,3 +4033,35 @@ void copy_user_huge_page(struct page *ds
|
||||
diff --git a/mm/memory.c b/mm/memory.c
|
||||
index 346246c..68676fd 100644
|
||||
--- a/mm/memory.c
|
||||
+++ b/mm/memory.c
|
||||
@@ -4033,3 +4033,35 @@ void copy_user_huge_page(struct page *dst, struct page *src,
|
||||
}
|
||||
}
|
||||
#endif /* CONFIG_TRANSPARENT_HUGEPAGE || CONFIG_HUGETLBFS */
|
|
@ -1,6 +1,7 @@
|
|||
Subject: ARM: Initialize ptl->lock for vector page
|
||||
From 744cbf0beed85b73f9fb5880d2d8d65283e3d6d6 Mon Sep 17 00:00:00 2001
|
||||
From: Frank Rowand <frank.rowand@am.sony.com>
|
||||
Date: Sat, 1 Oct 2011 18:58:13 -0700
|
||||
Subject: [099/254] ARM: Initialize ptl->lock for vector page
|
||||
|
||||
Without this patch, ARM can not use SPLIT_PTLOCK_CPUS if
|
||||
PREEMPT_RT_FULL=y because vectors_user_mapping() creates a
|
||||
|
@ -33,11 +34,11 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
|||
arch/arm/kernel/process.c | 25 +++++++++++++++++++++++++
|
||||
1 file changed, 25 insertions(+)
|
||||
|
||||
Index: linux-3.4/arch/arm/kernel/process.c
|
||||
===================================================================
|
||||
--- linux-3.4.orig/arch/arm/kernel/process.c
|
||||
+++ linux-3.4/arch/arm/kernel/process.c
|
||||
@@ -526,6 +526,31 @@ unsigned long arch_randomize_brk(struct
|
||||
diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c
|
||||
index 2b7b017..ed2300e 100644
|
||||
--- a/arch/arm/kernel/process.c
|
||||
+++ b/arch/arm/kernel/process.c
|
||||
@@ -526,6 +526,31 @@ unsigned long arch_randomize_brk(struct mm_struct *mm)
|
||||
}
|
||||
|
||||
#ifdef CONFIG_MMU
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue