[rt] Update to 3.4.2-rt10 (no functional change)

svn path=/dists/trunk/linux/; revision=19163
This commit is contained in:
Ben Hutchings 2012-06-17 19:52:06 +00:00
parent 57e93f5d03
commit aec4f5775d
258 changed files with 4091 additions and 4274 deletions

1
debian/changelog vendored
View File

@ -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

View File

@ -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

View File

@ -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);
}

View File

@ -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;

View File

@ -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;
}

View File

@ -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;

View File

@ -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);

View File

@ -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.

View File

@ -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;

View File

@ -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;

View File

@ -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)

View File

@ -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)
+{

View File

@ -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)
{

View File

@ -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:

View File

@ -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);

View File

@ -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);

View File

@ -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,

View File

@ -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

View File

@ -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
*/

View File

@ -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);
}

View File

@ -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);

View File

@ -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) &&

View File

@ -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;

View File

@ -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;
}

View File

@ -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;

View File

@ -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));
}

View File

@ -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);

View File

@ -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.

View File

@ -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);

View File

@ -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)
{

View File

@ -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,

View File

@ -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);

View File

@ -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;
}

View File

@ -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..

View File

@ -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

View File

@ -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;
}

View File

@ -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;

View File

@ -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)

View File

@ -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);

View File

@ -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();
}

View File

@ -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) {

View File

@ -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;

View File

@ -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)
/**

View File

@ -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 {

View File

@ -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;

View File

@ -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

View File

@ -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>

View File

@ -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;

View File

@ -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())

View File

@ -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();

View File

@ -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)
{

View File

@ -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);

View File

@ -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),

View File

@ -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;

View File

@ -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)
{

View File

@ -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.

View File

@ -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

View File

@ -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)
}
}

View File

@ -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;

View File

@ -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;

View File

@ -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

View File

@ -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

View File

@ -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 */

View File

@ -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)

View File

@ -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);

View File

@ -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)

View File

@ -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);

View File

@ -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++) {

View File

@ -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

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;
}

View File

@ -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);

View File

@ -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();

View File

@ -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);

View File

@ -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;
}

View File

@ -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 */

View File

@ -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)
{

View File

@ -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

View File

@ -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);

View File

@ -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)
{

View File

@ -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);

View File

@ -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;

View File

@ -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;

View File

@ -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);

View File

@ -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) {

View File

@ -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)

View File

@ -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

View File

@ -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()

View File

@ -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();

View File

@ -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);

View File

@ -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));

View File

@ -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);

View File

@ -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) {

View File

@ -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 */

View File

@ -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);

View File

@ -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);
}

View File

@ -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 */

View File

@ -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