[rt] bump version to 3.2.16-rt27

svn path=/dists/sid/linux-2.6/; revision=18999
This commit is contained in:
Ben Hutchings 2012-05-12 14:20:55 +00:00
parent 88590a0642
commit e39ab1b001
274 changed files with 5329 additions and 4600 deletions

1
debian/changelog vendored
View File

@ -35,6 +35,7 @@ linux-2.6 (3.2.17-1) UNRELEASED; urgency=low
* KVM: Ensure all vcpus are consistent with in-kernel irqchip settings
(CVE-2012-1601)
* KVM: lock slots_lock around device assignment (CVE-2012-2121)
* [rt] bump version to 3.2.16-rt27
[ Bastian Blank ]
* [s390] Enable IUCV special message support. (closes: #671238)

View File

@ -1,13 +1,14 @@
From 76f41af7cc93591a2723d2c59918df003f90cb09 Mon Sep 17 00:00:00 2001
From: Frederic Weisbecker <fweisbec@gmail.com>
Date: Mon Sep 26 12:19:11 2011 +0200
Subject: x86: Call idle notifier after irq_enter()
Date: Mon, 26 Sep 2011 12:19:11 +0200
Subject: [PATCH 001/267] x86: Call idle notifier after irq_enter()
Interrupts notify the idle exit state before calling irq_enter(). But
the notifier code calls rcu_read_lock() and this is not allowed while
rcu is in an extended quiescent state. We need to wait for
rcu_irq_enter() to be called before doing so otherwise this results in
a grumpy RCU:
[ 0.099991] WARNING: at include/linux/rcupdate.h:194 __atomic_notifier_call_chain+0xd2/0x110()
[ 0.099991] Hardware name: AMD690VM-FMH
[ 0.099991] Modules linked in:
@ -30,7 +31,7 @@ a grumpy RCU:
[ 0.099991] [<ffffffff81cc5ca3>] start_kernel+0x3d1/0x3dc
[ 0.099991] [<ffffffff81cc5321>] x86_64_start_reservations+0x131/0x135
[ 0.099991] [<ffffffff81cc5412>] x86_64_start_kernel+0xed/0xf4
Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
Link: http://lkml.kernel.org/r/20110929194047.GA10247@linux.vnet.ibm.com
Cc: Ingo Molnar <mingo@redhat.com>
@ -38,7 +39,6 @@ Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Andy Henroid <andrew.d.henroid@intel.com>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/x86/kernel/apic/apic.c | 6 +++---
arch/x86/kernel/apic/io_apic.c | 2 +-
@ -47,11 +47,11 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
arch/x86/kernel/irq.c | 6 +++---
5 files changed, 9 insertions(+), 9 deletions(-)
Index: linux-3.2/arch/x86/kernel/apic/apic.c
===================================================================
--- linux-3.2.orig/arch/x86/kernel/apic/apic.c
+++ linux-3.2/arch/x86/kernel/apic/apic.c
@@ -876,8 +876,8 @@ void __irq_entry smp_apic_timer_interrup
diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c
index f98d84c..2cd2d93 100644
--- a/arch/x86/kernel/apic/apic.c
+++ b/arch/x86/kernel/apic/apic.c
@@ -876,8 +876,8 @@ void __irq_entry smp_apic_timer_interrupt(struct pt_regs *regs)
* Besides, if we don't timer interrupts ignore the global
* interrupt lock, which is the WrongThing (tm) to do.
*/
@ -61,7 +61,7 @@ Index: linux-3.2/arch/x86/kernel/apic/apic.c
local_apic_timer_interrupt();
irq_exit();
@@ -1809,8 +1809,8 @@ void smp_spurious_interrupt(struct pt_re
@@ -1809,8 +1809,8 @@ void smp_spurious_interrupt(struct pt_regs *regs)
{
u32 v;
@ -71,7 +71,7 @@ Index: linux-3.2/arch/x86/kernel/apic/apic.c
/*
* Check if this really is a spurious interrupt and ACK it
* if it is a vectored one. Just in case...
@@ -1846,8 +1846,8 @@ void smp_error_interrupt(struct pt_regs
@@ -1846,8 +1846,8 @@ void smp_error_interrupt(struct pt_regs *regs)
"Illegal register address", /* APIC Error Bit 7 */
};
@ -81,11 +81,11 @@ Index: linux-3.2/arch/x86/kernel/apic/apic.c
/* First tickle the hardware, only then report what went on. -- REW */
v0 = apic_read(APIC_ESR);
apic_write(APIC_ESR, 0);
Index: linux-3.2/arch/x86/kernel/apic/io_apic.c
===================================================================
--- linux-3.2.orig/arch/x86/kernel/apic/io_apic.c
+++ linux-3.2/arch/x86/kernel/apic/io_apic.c
@@ -2421,8 +2421,8 @@ asmlinkage void smp_irq_move_cleanup_int
diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
index 6d939d7..8980555 100644
--- a/arch/x86/kernel/apic/io_apic.c
+++ b/arch/x86/kernel/apic/io_apic.c
@@ -2421,8 +2421,8 @@ asmlinkage void smp_irq_move_cleanup_interrupt(void)
unsigned vector, me;
ack_APIC_irq();
@ -95,11 +95,11 @@ Index: linux-3.2/arch/x86/kernel/apic/io_apic.c
me = smp_processor_id();
for (vector = FIRST_EXTERNAL_VECTOR; vector < NR_VECTORS; vector++) {
Index: linux-3.2/arch/x86/kernel/cpu/mcheck/therm_throt.c
===================================================================
--- linux-3.2.orig/arch/x86/kernel/cpu/mcheck/therm_throt.c
+++ linux-3.2/arch/x86/kernel/cpu/mcheck/therm_throt.c
@@ -397,8 +397,8 @@ static void (*smp_thermal_vector)(void)
diff --git a/arch/x86/kernel/cpu/mcheck/therm_throt.c b/arch/x86/kernel/cpu/mcheck/therm_throt.c
index 787e06c..ce21561 100644
--- a/arch/x86/kernel/cpu/mcheck/therm_throt.c
+++ b/arch/x86/kernel/cpu/mcheck/therm_throt.c
@@ -397,8 +397,8 @@ static void (*smp_thermal_vector)(void) = unexpected_thermal_interrupt;
asmlinkage void smp_thermal_interrupt(struct pt_regs *regs)
{
@ -109,11 +109,11 @@ Index: linux-3.2/arch/x86/kernel/cpu/mcheck/therm_throt.c
inc_irq_stat(irq_thermal_count);
smp_thermal_vector();
irq_exit();
Index: linux-3.2/arch/x86/kernel/cpu/mcheck/threshold.c
===================================================================
--- linux-3.2.orig/arch/x86/kernel/cpu/mcheck/threshold.c
+++ linux-3.2/arch/x86/kernel/cpu/mcheck/threshold.c
@@ -19,8 +19,8 @@ void (*mce_threshold_vector)(void) = def
diff --git a/arch/x86/kernel/cpu/mcheck/threshold.c b/arch/x86/kernel/cpu/mcheck/threshold.c
index d746df2..aa578ca 100644
--- a/arch/x86/kernel/cpu/mcheck/threshold.c
+++ b/arch/x86/kernel/cpu/mcheck/threshold.c
@@ -19,8 +19,8 @@ void (*mce_threshold_vector)(void) = default_threshold_interrupt;
asmlinkage void smp_threshold_interrupt(void)
{
@ -123,11 +123,11 @@ Index: linux-3.2/arch/x86/kernel/cpu/mcheck/threshold.c
inc_irq_stat(irq_threshold_count);
mce_threshold_vector();
irq_exit();
Index: linux-3.2/arch/x86/kernel/irq.c
===================================================================
--- linux-3.2.orig/arch/x86/kernel/irq.c
+++ linux-3.2/arch/x86/kernel/irq.c
@@ -181,8 +181,8 @@ unsigned int __irq_entry do_IRQ(struct p
diff --git a/arch/x86/kernel/irq.c b/arch/x86/kernel/irq.c
index 429e0c9..5d31e5b 100644
--- a/arch/x86/kernel/irq.c
+++ b/arch/x86/kernel/irq.c
@@ -181,8 +181,8 @@ unsigned int __irq_entry do_IRQ(struct pt_regs *regs)
unsigned vector = ~regs->orig_ax;
unsigned irq;
@ -137,7 +137,7 @@ Index: linux-3.2/arch/x86/kernel/irq.c
irq = __this_cpu_read(vector_irq[vector]);
@@ -209,10 +209,10 @@ void smp_x86_platform_ipi(struct pt_regs
@@ -209,10 +209,10 @@ void smp_x86_platform_ipi(struct pt_regs *regs)
ack_APIC_irq();
@ -150,3 +150,6 @@ Index: linux-3.2/arch/x86/kernel/irq.c
inc_irq_stat(x86_platform_ipis);
if (x86_platform_ipi_callback)
--
1.7.10

View File

@ -1,6 +1,7 @@
Subject: slab, lockdep: Annotate all slab caches
From 788ce6c0f8d2db7e6e5bdf6568a80a52a016e000 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: [PATCH 002/267] 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.2/mm/slab.c
===================================================================
--- linux-3.2.orig/mm/slab.c
+++ linux-3.2/mm/slab.c
diff --git a/mm/slab.c b/mm/slab.c
index 83311c9a..b76905e 100644
--- a/mm/slab.c
+++ b/mm/slab.c
@@ -607,6 +607,12 @@ int slab_is_available(void)
return g_cpucache_up >= EARLY;
}
@ -34,7 +36,7 @@ Index: linux-3.2/mm/slab.c
#ifdef CONFIG_LOCKDEP
/*
@@ -668,38 +674,41 @@ static void slab_set_debugobj_lock_class
@@ -668,38 +674,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.2/mm/slab.c
{
}
@@ -712,12 +721,6 @@ static void slab_set_debugobj_lock_class
@@ -712,12 +721,6 @@ static void slab_set_debugobj_lock_classes(struct kmem_cache *cachep)
}
#endif
@ -121,7 +123,7 @@ Index: linux-3.2/mm/slab.c
mutex_unlock(&cache_chain_mutex);
/* Done! */
@@ -2479,6 +2481,8 @@ kmem_cache_create (const char *name, siz
@@ -2479,6 +2481,8 @@ kmem_cache_create (const char *name, size_t size, size_t align,
slab_set_debugobj_lock_classes(cachep);
}
@ -130,3 +132,6 @@ Index: linux-3.2/mm/slab.c
/* cache setup completed, link it into the list */
list_add(&cachep->next, &cache_chain);
oops:
--
1.7.10

View File

@ -1,6 +1,7 @@
Subject: x86: kprobes: Remove remove bogus preempt_enable
From 2c5f1cf75561b0a3137ec2bc5eb77c29d00af512 Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx@linutronix.de>
Date: Thu, 17 Mar 2011 11:02:15 +0100
Subject: [PATCH 003/267] 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.2/arch/x86/kernel/kprobes.c
===================================================================
--- linux-3.2.orig/arch/x86/kernel/kprobes.c
+++ linux-3.2/arch/x86/kernel/kprobes.c
@@ -478,7 +478,6 @@ static void __kprobes setup_singlestep(s
diff --git a/arch/x86/kernel/kprobes.c b/arch/x86/kernel/kprobes.c
index 7da647d..5604455 100644
--- a/arch/x86/kernel/kprobes.c
+++ b/arch/x86/kernel/kprobes.c
@@ -478,7 +478,6 @@ static void __kprobes setup_singlestep(struct kprobe *p, struct pt_regs *regs,
* stepping.
*/
regs->ip = (unsigned long)p->ainsn.insn;
@ -27,3 +28,6 @@ Index: linux-3.2/arch/x86/kernel/kprobes.c
return;
}
#endif
--
1.7.10

View File

@ -1,6 +1,7 @@
Subject: x86: hpet: Disable MSI on Lenovo W510
From e13909c551bb27d491ac83994ca27ec691f070b5 Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx@linutronix.de>
Date: Fri, 30 Sep 2011 20:03:37 +0200
Subject: [PATCH 004/267] 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.2/arch/x86/kernel/hpet.c
===================================================================
--- linux-3.2.orig/arch/x86/kernel/hpet.c
+++ linux-3.2/arch/x86/kernel/hpet.c
diff --git a/arch/x86/kernel/hpet.c b/arch/x86/kernel/hpet.c
index 1bb0bf4..d86b821 100644
--- a/arch/x86/kernel/hpet.c
+++ b/arch/x86/kernel/hpet.c
@@ -9,6 +9,7 @@
#include <linux/slab.h>
#include <linux/hpet.h>
@ -24,7 +25,7 @@ Index: linux-3.2/arch/x86/kernel/hpet.c
#include <linux/cpu.h>
#include <linux/pm.h>
#include <linux/io.h>
@@ -568,6 +569,30 @@ static void init_one_hpet_msi_clockevent
@@ -568,6 +569,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.2/arch/x86/kernel/hpet.c
static void hpet_msi_capability_lookup(unsigned int start_timer)
{
unsigned int id;
@@ -575,6 +600,8 @@ static void hpet_msi_capability_lookup(u
@@ -575,6 +600,8 @@ static void hpet_msi_capability_lookup(unsigned int start_timer)
unsigned int num_timers_used = 0;
int i;
@ -64,3 +65,6 @@ Index: linux-3.2/arch/x86/kernel/hpet.c
if (hpet_msi_disable)
return;
--
1.7.10

View File

@ -1,6 +1,7 @@
Subject: block: Shorten interrupt disabled regions
From e2c97e4d5da80e66340ea752cb33bf8802feaa53 Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx@linutronix.de>
Date: Wed, 22 Jun 2011 19:47:02 +0200
Subject: [PATCH 005/267] 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.2/block/blk-core.c
===================================================================
--- linux-3.2.orig/block/blk-core.c
+++ linux-3.2/block/blk-core.c
@@ -300,7 +300,11 @@ void __blk_run_queue(struct request_queu
diff --git a/block/blk-core.c b/block/blk-core.c
index 15de223..7366ad4 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -300,7 +300,11 @@ void __blk_run_queue(struct request_queue *q)
{
if (unlikely(blk_queue_stopped(q)))
return;
@ -63,7 +64,7 @@ Index: linux-3.2/block/blk-core.c
q->request_fn(q);
}
EXPORT_SYMBOL(__blk_run_queue);
@@ -2745,11 +2749,11 @@ static void queue_unplugged(struct reque
@@ -2745,11 +2749,11 @@ static void queue_unplugged(struct request_queue *q, unsigned int depth,
* this lock).
*/
if (from_schedule) {
@ -77,7 +78,7 @@ Index: linux-3.2/block/blk-core.c
}
}
@@ -2775,7 +2779,6 @@ static void flush_plug_callbacks(struct
@@ -2775,7 +2779,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.2/block/blk-core.c
struct request *rq;
LIST_HEAD(list);
unsigned int depth;
@@ -2796,11 +2799,6 @@ void blk_flush_plug_list(struct blk_plug
@@ -2796,11 +2799,6 @@ void blk_flush_plug_list(struct blk_plug *plug, bool from_schedule)
q = NULL;
depth = 0;
@ -97,7 +98,7 @@ Index: linux-3.2/block/blk-core.c
while (!list_empty(&list)) {
rq = list_entry_rq(list.next);
list_del_init(&rq->queuelist);
@@ -2813,7 +2811,7 @@ void blk_flush_plug_list(struct blk_plug
@@ -2813,7 +2811,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.2/block/blk-core.c
}
/*
* rq is already accounted, so use raw insert
@@ -2831,8 +2829,6 @@ void blk_flush_plug_list(struct blk_plug
@@ -2831,8 +2829,6 @@ void blk_flush_plug_list(struct blk_plug *plug, bool from_schedule)
*/
if (q)
queue_unplugged(q, depth, from_schedule);
@ -115,3 +116,6 @@ Index: linux-3.2/block/blk-core.c
}
void blk_finish_plug(struct blk_plug *plug)
--
1.7.10

View File

@ -1,6 +1,7 @@
Subject: sched: Distangle worker accounting from rq-%3Elock
From f88ad17a5ee292086822942fee103f09abb93bc4 Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx@linutronix.de>
Date: Wed, 22 Jun 2011 19:47:03 +0200
Subject: [PATCH 006/267] 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.c | 66 ++++++++++----------------------------------
kernel/workqueue.c | 69 +++++++++++++++++++++--------------------------
kernel/workqueue_sched.h | 5 +--
3 files changed, 48 insertions(+), 92 deletions(-)
kernel/sched.c | 66 +++++++++++----------------------------------
kernel/workqueue.c | 67 +++++++++++++++++++++-------------------------
kernel/workqueue_sched.h | 5 ++--
3 files changed, 47 insertions(+), 91 deletions(-)
Index: linux-3.2/kernel/sched.c
===================================================================
--- linux-3.2.orig/kernel/sched.c
+++ linux-3.2/kernel/sched.c
@@ -2644,10 +2644,6 @@ static void ttwu_activate(struct rq *rq,
diff --git a/kernel/sched.c b/kernel/sched.c
index d6b149c..a39494e 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -2644,10 +2644,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.2/kernel/sched.c
}
switch_count = &prev->nvcsw;
}
@@ -4475,6 +4424,14 @@ static inline void sched_submit_work(str
@@ -4475,6 +4424,14 @@ static inline void sched_submit_work(struct task_struct *tsk)
{
if (!tsk->state)
return;
@ -119,7 +120,7 @@ Index: linux-3.2/kernel/sched.c
/*
* If we are going to sleep and we have plugged IO queued,
* make sure to submit it to avoid deadlocks.
@@ -4483,12 +4440,19 @@ static inline void sched_submit_work(str
@@ -4483,12 +4440,19 @@ static inline void sched_submit_work(struct task_struct *tsk)
blk_schedule_flush_plug(tsk);
}
@ -139,10 +140,10 @@ Index: linux-3.2/kernel/sched.c
}
EXPORT_SYMBOL(schedule);
Index: linux-3.2/kernel/workqueue.c
===================================================================
--- linux-3.2.orig/kernel/workqueue.c
+++ linux-3.2/kernel/workqueue.c
diff --git a/kernel/workqueue.c b/kernel/workqueue.c
index bb425b1..4b4421d 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.2/kernel/workqueue.c
};
/*
@@ -658,66 +659,58 @@ static void wake_up_worker(struct global
@@ -660,66 +661,58 @@ static void wake_up_worker(struct global_cwq *gcwq)
}
/**
@ -212,14 +213,14 @@ Index: linux-3.2/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.2/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.2/kernel/workqueue.c
}
/**
Index: linux-3.2/kernel/workqueue_sched.h
===================================================================
--- linux-3.2.orig/kernel/workqueue_sched.h
+++ linux-3.2/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.
@ -261,3 +261,6 @@ Index: linux-3.2/kernel/workqueue_sched.h
- unsigned int cpu);
+void wq_worker_running(struct task_struct *task);
+void wq_worker_sleeping(struct task_struct *task);
--
1.7.10

View File

@ -1,17 +1,18 @@
Subject: mips-enable-interrupts-in-signal.patch
From 7a4fa0630cdf29e9fd81872ae02888121ffe3564 Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx@linutronix.de>
Date: Mon, 18 Jul 2011 21:32:10 +0200
Subject: [PATCH 007/267] 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.2/arch/mips/kernel/signal.c
===================================================================
--- linux-3.2.orig/arch/mips/kernel/signal.c
+++ linux-3.2/arch/mips/kernel/signal.c
@@ -604,6 +604,9 @@ static void do_signal(struct pt_regs *re
diff --git a/arch/mips/kernel/signal.c b/arch/mips/kernel/signal.c
index f852400..1c8f34c 100644
--- a/arch/mips/kernel/signal.c
+++ b/arch/mips/kernel/signal.c
@@ -604,6 +604,9 @@ static void do_signal(struct pt_regs *regs)
if (!user_mode(regs))
return;
@ -21,3 +22,6 @@ Index: linux-3.2/arch/mips/kernel/signal.c
if (test_thread_flag(TIF_RESTORE_SIGMASK))
oldset = &current->saved_sigmask;
else
--
1.7.10

View File

@ -0,0 +1,27 @@
From 415c7e81f6b54e5f8e8cddf0f2ff1c1855eeade3 Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx@linutronix.de>
Date: Sat, 16 Jul 2011 16:27:13 +0200
Subject: [PATCH 008/267] 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(+)
diff --git a/arch/arm/kernel/signal.c b/arch/arm/kernel/signal.c
index 9e617bd..c7001bc 100644
--- a/arch/arm/kernel/signal.c
+++ b/arch/arm/kernel/signal.c
@@ -672,6 +672,9 @@ static void do_signal(struct pt_regs *regs, int syscall)
if (!user_mode(regs))
return;
+ local_irq_enable();
+ preempt_check_resched();
+
/*
* If we were from a system call, check for system call restarting...
*/
--
1.7.10

View File

@ -1,6 +1,7 @@
Subject: powerpc: 85xx: Mark cascade irq IRQF_NO_THREAD
From 490faa4e4541df017386a562e4e9ad7011f49562 Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx@linutronix.de>
Date: Sat, 16 Jul 2011 12:09:54 +0200
Subject: [PATCH 009/267] powerpc: 85xx: Mark cascade irq IRQF_NO_THREAD
Cascade interrupt must run in hard interrupt context.
@ -9,11 +10,11 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
arch/powerpc/platforms/85xx/mpc85xx_cds.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Index: linux-3.2/arch/powerpc/platforms/85xx/mpc85xx_cds.c
===================================================================
--- linux-3.2.orig/arch/powerpc/platforms/85xx/mpc85xx_cds.c
+++ linux-3.2/arch/powerpc/platforms/85xx/mpc85xx_cds.c
@@ -177,7 +177,7 @@ static irqreturn_t mpc85xx_8259_cascade_
diff --git a/arch/powerpc/platforms/85xx/mpc85xx_cds.c b/arch/powerpc/platforms/85xx/mpc85xx_cds.c
index 66cb8d6..7e2a4d2 100644
--- a/arch/powerpc/platforms/85xx/mpc85xx_cds.c
+++ b/arch/powerpc/platforms/85xx/mpc85xx_cds.c
@@ -177,7 +177,7 @@ static irqreturn_t mpc85xx_8259_cascade_action(int irq, void *dev_id)
static struct irqaction mpc85xxcds_8259_irqaction = {
.handler = mpc85xx_8259_cascade_action,
@ -22,3 +23,6 @@ Index: linux-3.2/arch/powerpc/platforms/85xx/mpc85xx_cds.c
.name = "8259 cascade",
};
#endif /* PPC_I8259 */
--
1.7.10

View File

@ -1,6 +1,8 @@
Subject: powerpc: wsp: Mark opb cascade handler IRQF_NO_THREAD
From 05a48c448ba9085941f020ea02a7c880e80d683c Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx@linutronix.de>
Date: Wed, 05 Oct 2011 14:11:24 +0200
Date: Wed, 5 Oct 2011 14:11:24 +0200
Subject: [PATCH 010/267] powerpc: wsp: Mark opb cascade handler
IRQF_NO_THREAD
Cascade handlers must run in hard interrupt context.
@ -9,10 +11,10 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
arch/powerpc/platforms/wsp/opb_pic.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
Index: linux-3.2/arch/powerpc/platforms/wsp/opb_pic.c
===================================================================
--- linux-3.2.orig/arch/powerpc/platforms/wsp/opb_pic.c
+++ linux-3.2/arch/powerpc/platforms/wsp/opb_pic.c
diff --git a/arch/powerpc/platforms/wsp/opb_pic.c b/arch/powerpc/platforms/wsp/opb_pic.c
index be05631..19f353d 100644
--- a/arch/powerpc/platforms/wsp/opb_pic.c
+++ b/arch/powerpc/platforms/wsp/opb_pic.c
@@ -320,7 +320,8 @@ void __init opb_pic_init(void)
}
@ -23,3 +25,6 @@ Index: linux-3.2/arch/powerpc/platforms/wsp/opb_pic.c
if (rc) {
printk("opb: request_irq failed: %d\n", rc);
continue;
--
1.7.10

View File

@ -1,6 +1,7 @@
Subject: powerpc: Mark IPI interrupts IRQF_NO_THREAD
From c5f5de2dcb79c63ab914f69b8d1a59ba211f8b15 Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx@linutronix.de>
Date: Wed, 05 Oct 2011 14:00:26 +0200
Date: Wed, 5 Oct 2011 14:00:26 +0200
Subject: [PATCH 011/267] powerpc: Mark IPI interrupts IRQF_NO_THREAD
IPI handlers cannot be threaded. Remove the obsolete IRQF_DISABLED
flag (see commit e58aa3d2) while at it.
@ -12,11 +13,11 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
arch/powerpc/sysdev/xics/xics-common.c | 5 +++--
3 files changed, 7 insertions(+), 6 deletions(-)
Index: linux-3.2/arch/powerpc/kernel/smp.c
===================================================================
--- linux-3.2.orig/arch/powerpc/kernel/smp.c
+++ linux-3.2/arch/powerpc/kernel/smp.c
@@ -187,8 +187,8 @@ int smp_request_message_ipi(int virq, in
diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c
index 6df7090..abdedd3 100644
--- a/arch/powerpc/kernel/smp.c
+++ b/arch/powerpc/kernel/smp.c
@@ -187,8 +187,8 @@ int smp_request_message_ipi(int virq, int msg)
return 1;
}
#endif
@ -27,11 +28,11 @@ Index: linux-3.2/arch/powerpc/kernel/smp.c
WARN(err < 0, "unable to request_irq %d for %s (rc %d)\n",
virq, smp_ipi_name[msg], err);
Index: linux-3.2/arch/powerpc/platforms/powermac/smp.c
===================================================================
--- linux-3.2.orig/arch/powerpc/platforms/powermac/smp.c
+++ linux-3.2/arch/powerpc/platforms/powermac/smp.c
@@ -200,7 +200,7 @@ static int psurge_secondary_ipi_init(voi
diff --git a/arch/powerpc/platforms/powermac/smp.c b/arch/powerpc/platforms/powermac/smp.c
index 3394254..8d75ac8 100644
--- a/arch/powerpc/platforms/powermac/smp.c
+++ b/arch/powerpc/platforms/powermac/smp.c
@@ -200,7 +200,7 @@ static int psurge_secondary_ipi_init(void)
if (psurge_secondary_virq)
rc = request_irq(psurge_secondary_virq, psurge_ipi_intr,
@ -40,7 +41,7 @@ Index: linux-3.2/arch/powerpc/platforms/powermac/smp.c
if (rc)
pr_err("Failed to setup secondary cpu IPI\n");
@@ -408,7 +408,7 @@ static int __init smp_psurge_kick_cpu(in
@@ -408,7 +408,7 @@ static int __init smp_psurge_kick_cpu(int nr)
static struct irqaction psurge_irqaction = {
.handler = psurge_ipi_intr,
@ -49,10 +50,10 @@ Index: linux-3.2/arch/powerpc/platforms/powermac/smp.c
.name = "primary IPI",
};
Index: linux-3.2/arch/powerpc/sysdev/xics/xics-common.c
===================================================================
--- linux-3.2.orig/arch/powerpc/sysdev/xics/xics-common.c
+++ linux-3.2/arch/powerpc/sysdev/xics/xics-common.c
diff --git a/arch/powerpc/sysdev/xics/xics-common.c b/arch/powerpc/sysdev/xics/xics-common.c
index 63762c6..4ba6194 100644
--- a/arch/powerpc/sysdev/xics/xics-common.c
+++ b/arch/powerpc/sysdev/xics/xics-common.c
@@ -134,10 +134,11 @@ static void xics_request_ipi(void)
BUG_ON(ipi == NO_IRQ);
@ -67,3 +68,6 @@ Index: linux-3.2/arch/powerpc/sysdev/xics/xics-common.c
}
int __init xics_smp_probe(void)
--
1.7.10

View File

@ -1,6 +1,7 @@
Subject: powerpc: Allow irq threading
From 2e574f68fff54d8c7398b3984f183fb80ec8ce3e Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx@linutronix.de>
Date: Sat, 16 Jul 2011 13:16:24 +0200
Subject: [PATCH 012/267] powerpc: Allow irq threading
All interrupts which must be non threaded are marked
IRQF_NO_THREAD. So it's safe to allow force threaded handlers.
@ -10,10 +11,10 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
arch/powerpc/Kconfig | 1 +
1 file changed, 1 insertion(+)
Index: linux-3.2/arch/powerpc/Kconfig
===================================================================
--- linux-3.2.orig/arch/powerpc/Kconfig
+++ linux-3.2/arch/powerpc/Kconfig
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index 951e18f..7c93c7e 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -132,6 +132,7 @@ config PPC
select IRQ_PER_CPU
select GENERIC_IRQ_SHOW
@ -22,3 +23,6 @@ Index: linux-3.2/arch/powerpc/Kconfig
select HAVE_RCU_TABLE_FREE if SMP
select HAVE_SYSCALL_TRACEPOINTS
select HAVE_BPF_JIT if (PPC64 && NET)
--
1.7.10

View File

@ -1,6 +1,8 @@
From 9e1c03d11fdc2426a5d53a1d0e0b63b412924287 Mon Sep 17 00:00:00 2001
From: Peter Zijlstra <peterz@infradead.org>
Date: Tue, 18 Oct 2011 22:03:48 +0200
Subject: sched: Keep period timer ticking when throttling active
Subject: [PATCH 013/267] sched: Keep period timer ticking when throttling
active
When a runqueue is throttled we cannot disable the period timer
because that timer is the only way to undo the throttling.
@ -15,11 +17,11 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
kernel/sched_rt.c | 13 ++++++++-----
1 file changed, 8 insertions(+), 5 deletions(-)
Index: linux-3.2/kernel/sched_rt.c
===================================================================
--- linux-3.2.orig/kernel/sched_rt.c
+++ linux-3.2/kernel/sched_rt.c
@@ -580,12 +580,9 @@ static inline int balance_runtime(struct
diff --git a/kernel/sched_rt.c b/kernel/sched_rt.c
index 78fcacf..40d97e1 100644
--- a/kernel/sched_rt.c
+++ b/kernel/sched_rt.c
@@ -580,12 +580,9 @@ static inline int balance_runtime(struct rt_rq *rt_rq)
static int do_sched_rt_period_timer(struct rt_bandwidth *rt_b, int overrun)
{
@ -33,7 +35,7 @@ Index: linux-3.2/kernel/sched_rt.c
span = sched_rt_period_mask();
for_each_cpu(i, span) {
int enqueue = 0;
@@ -620,12 +617,17 @@ static int do_sched_rt_period_timer(stru
@@ -620,12 +617,17 @@ static int do_sched_rt_period_timer(struct rt_bandwidth *rt_b, int overrun)
if (!rt_rq_throttled(rt_rq))
enqueue = 1;
}
@ -51,7 +53,7 @@ Index: linux-3.2/kernel/sched_rt.c
return idle;
}
@@ -686,7 +688,8 @@ static void update_curr_rt(struct rq *rq
@@ -686,7 +688,8 @@ static void update_curr_rt(struct rq *rq)
if (unlikely((s64)delta_exec < 0))
delta_exec = 0;
@ -61,3 +63,6 @@ Index: linux-3.2/kernel/sched_rt.c
curr->se.sum_exec_runtime += delta_exec;
account_group_exec_runtime(curr, delta_exec);
--
1.7.10

View File

@ -1,6 +1,7 @@
From ce43773df1fea5d063ac8d1aca4ff806bf899b5b Mon Sep 17 00:00:00 2001
From: Peter Zijlstra <peterz@infradead.org>
Date: Tue, 18 Oct 2011 22:03:48 +0200
Subject: sched: Do not throttle due to PI boosting
Subject: [PATCH 014/267] sched: Do not throttle due to PI boosting
When a runqueue has rt_runtime_us = 0 then the only way it can
accumulate rt_time is via PI boosting. Though that causes the runqueue
@ -15,11 +16,11 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
kernel/sched_rt.c | 20 ++++++++++++++++++--
1 file changed, 18 insertions(+), 2 deletions(-)
Index: linux-3.2/kernel/sched_rt.c
===================================================================
--- linux-3.2.orig/kernel/sched_rt.c
+++ linux-3.2/kernel/sched_rt.c
@@ -659,8 +659,24 @@ static int sched_rt_runtime_exceeded(str
diff --git a/kernel/sched_rt.c b/kernel/sched_rt.c
index 40d97e1..c108b9c 100644
--- a/kernel/sched_rt.c
+++ b/kernel/sched_rt.c
@@ -659,8 +659,24 @@ static int sched_rt_runtime_exceeded(struct rt_rq *rt_rq)
return 0;
if (rt_rq->rt_time > runtime) {
@ -46,3 +47,6 @@ Index: linux-3.2/kernel/sched_rt.c
if (rt_rq_throttled(rt_rq)) {
sched_rt_rq_dequeue(rt_rq);
return 1;
--
1.7.10

View File

@ -1,6 +1,7 @@
Subject: time: Remove bogus comments
From f427d80501aa7fcdf695288aa8eb507dbd5c9369 Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx@linutronix.de>
Date: Tue, 28 Feb 2012 19:06:50 +0100
Subject: [PATCH 015/267] time: Remove bogus comments
There is no global irq lock which makes a syscall magically SMP
safe. Remove the outdated comment concerning do_settimeofday() as
@ -11,11 +12,11 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
kernel/time.c | 6 ------
1 file changed, 6 deletions(-)
Index: linux-3.2/kernel/time.c
===================================================================
--- linux-3.2.orig/kernel/time.c
+++ linux-3.2/kernel/time.c
@@ -163,7 +163,6 @@ int do_sys_settimeofday(const struct tim
diff --git a/kernel/time.c b/kernel/time.c
index 73e416d..ba744cf 100644
--- a/kernel/time.c
+++ b/kernel/time.c
@@ -163,7 +163,6 @@ int do_sys_settimeofday(const struct timespec *tv, const struct timezone *tz)
return error;
if (tz) {
@ -23,7 +24,7 @@ Index: linux-3.2/kernel/time.c
sys_tz = *tz;
update_vsyscall_tz();
if (firsttime) {
@@ -173,12 +172,7 @@ int do_sys_settimeofday(const struct tim
@@ -173,12 +172,7 @@ int do_sys_settimeofday(const struct timespec *tv, const struct timezone *tz)
}
}
if (tv)
@ -36,3 +37,6 @@ Index: linux-3.2/kernel/time.c
return 0;
}
--
1.7.10

View File

@ -1,9 +1,11 @@
Subject: x86: vdso: Remove bogus locking in update_vsyscall_tz()
From 76f63af187b74e8d533678278b247292340ccc10 Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx@linutronix.de>
Date: Tue, 28 Feb 2012 19:10:46 +0100
Subject: [PATCH 016/267] x86: vdso: Remove bogus locking in
update_vsyscall_tz()
Changing the sequence count in update_vsyscall_tz() is completely
pointless.
pointless.
The vdso code copies the data unprotected. There is no point to change
this as sys_tz is nowhere protected at all. See sys_gettimeofday().
@ -13,10 +15,10 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
arch/x86/kernel/vsyscall_64.c | 5 -----
1 file changed, 5 deletions(-)
Index: linux-2.6/arch/x86/kernel/vsyscall_64.c
===================================================================
--- linux-2.6.orig/arch/x86/kernel/vsyscall_64.c
+++ linux-2.6/arch/x86/kernel/vsyscall_64.c
diff --git a/arch/x86/kernel/vsyscall_64.c b/arch/x86/kernel/vsyscall_64.c
index e4d4a22..f04adbd 100644
--- a/arch/x86/kernel/vsyscall_64.c
+++ b/arch/x86/kernel/vsyscall_64.c
@@ -80,12 +80,7 @@ early_param("vsyscall", vsyscall_setup);
void update_vsyscall_tz(void)
@ -30,3 +32,6 @@ Index: linux-2.6/arch/x86/kernel/vsyscall_64.c
}
void update_vsyscall(struct timespec *wall_time, struct timespec *wtm,
--
1.7.10

View File

@ -1,6 +1,7 @@
Subject: x86: vdso: Use seqcount instead of seqlock
From 11f9d4b70b2592b57dda3c33bdcd726ee98c9a71 Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx@linutronix.de>
Date: Tue, 28 Feb 2012 18:24:07 +0100
Subject: [PATCH 017/267] x86: vdso: Use seqcount instead of seqlock
The update of the vdso data happens under xtime_lock, so adding a
nested lock is pointless. Just use a seqcount to sync the readers.
@ -12,10 +13,10 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
arch/x86/vdso/vclock_gettime.c | 16 ++++++++--------
3 files changed, 12 insertions(+), 17 deletions(-)
Index: linux-3.2/arch/x86/include/asm/vgtod.h
===================================================================
--- linux-3.2.orig/arch/x86/include/asm/vgtod.h
+++ linux-3.2/arch/x86/include/asm/vgtod.h
diff --git a/arch/x86/include/asm/vgtod.h b/arch/x86/include/asm/vgtod.h
index 815285b..1f00717 100644
--- a/arch/x86/include/asm/vgtod.h
+++ b/arch/x86/include/asm/vgtod.h
@@ -5,7 +5,7 @@
#include <linux/clocksource.h>
@ -25,10 +26,10 @@ Index: linux-3.2/arch/x86/include/asm/vgtod.h
/* open coded 'struct timespec' */
time_t wall_time_sec;
Index: linux-3.2/arch/x86/kernel/vsyscall_64.c
===================================================================
--- linux-3.2.orig/arch/x86/kernel/vsyscall_64.c
+++ linux-3.2/arch/x86/kernel/vsyscall_64.c
diff --git a/arch/x86/kernel/vsyscall_64.c b/arch/x86/kernel/vsyscall_64.c
index f04adbd..50392ee 100644
--- a/arch/x86/kernel/vsyscall_64.c
+++ b/arch/x86/kernel/vsyscall_64.c
@@ -52,10 +52,7 @@
#include "vsyscall_trace.h"
@ -52,7 +53,7 @@ Index: linux-3.2/arch/x86/kernel/vsyscall_64.c
/* copy vsyscall data */
vsyscall_gtod_data.clock.vclock_mode = clock->archdata.vclock_mode;
@@ -101,7 +96,7 @@ void update_vsyscall(struct timespec *wa
@@ -101,7 +96,7 @@ void update_vsyscall(struct timespec *wall_time, struct timespec *wtm,
vsyscall_gtod_data.wall_to_monotonic = *wtm;
vsyscall_gtod_data.wall_time_coarse = __current_kernel_time();
@ -61,11 +62,11 @@ Index: linux-3.2/arch/x86/kernel/vsyscall_64.c
}
static void warn_bad_vsyscall(const char *level, struct pt_regs *regs,
Index: linux-3.2/arch/x86/vdso/vclock_gettime.c
===================================================================
--- linux-3.2.orig/arch/x86/vdso/vclock_gettime.c
+++ linux-3.2/arch/x86/vdso/vclock_gettime.c
@@ -86,11 +86,11 @@ notrace static noinline int do_realtime(
diff --git a/arch/x86/vdso/vclock_gettime.c b/arch/x86/vdso/vclock_gettime.c
index 6bc0e72..d8511fb 100644
--- a/arch/x86/vdso/vclock_gettime.c
+++ b/arch/x86/vdso/vclock_gettime.c
@@ -86,11 +86,11 @@ notrace static noinline int do_realtime(struct timespec *ts)
{
unsigned long seq, ns;
do {
@ -79,7 +80,7 @@ Index: linux-3.2/arch/x86/vdso/vclock_gettime.c
timespec_add_ns(ts, ns);
return 0;
}
@@ -99,12 +99,12 @@ notrace static noinline int do_monotonic
@@ -99,12 +99,12 @@ notrace static noinline int do_monotonic(struct timespec *ts)
{
unsigned long seq, ns, secs;
do {
@ -94,7 +95,7 @@ Index: linux-3.2/arch/x86/vdso/vclock_gettime.c
/* wall_time_nsec, vgetns(), and wall_to_monotonic.tv_nsec
* are all guaranteed to be nonnegative.
@@ -123,10 +123,10 @@ notrace static noinline int do_realtime_
@@ -123,10 +123,10 @@ notrace static noinline int do_realtime_coarse(struct timespec *ts)
{
unsigned long seq;
do {
@ -107,7 +108,7 @@ Index: linux-3.2/arch/x86/vdso/vclock_gettime.c
return 0;
}
@@ -134,12 +134,12 @@ notrace static noinline int do_monotonic
@@ -134,12 +134,12 @@ notrace static noinline int do_monotonic_coarse(struct timespec *ts)
{
unsigned long seq, ns, secs;
do {
@ -122,3 +123,6 @@ Index: linux-3.2/arch/x86/vdso/vclock_gettime.c
/* wall_time_nsec and wall_to_monotonic.tv_nsec are
* guaranteed to be between 0 and NSEC_PER_SEC.
--
1.7.10

View File

@ -1,6 +1,7 @@
Subject: ia64: vsyscall: Use seqcount instead of seqlock
From 0ad3596103ef2c8ecb6145c8a98ed7e38a9bc6ce Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx@linutronix.de>
Date: Tue, 28 Feb 2012 18:33:08 +0100
Subject: [PATCH 018/267] ia64: vsyscall: Use seqcount instead of seqlock
The update of the vdso data happens under xtime_lock, so adding a
nested lock is pointless. Just use a seqcount to sync the readers.
@ -14,10 +15,10 @@ Cc: Tony Luck <tony.luck@intel.com>
arch/ia64/kernel/time.c | 10 +++-------
4 files changed, 7 insertions(+), 11 deletions(-)
Index: linux-2.6/arch/ia64/kernel/asm-offsets.c
===================================================================
--- linux-2.6.orig/arch/ia64/kernel/asm-offsets.c
+++ linux-2.6/arch/ia64/kernel/asm-offsets.c
diff --git a/arch/ia64/kernel/asm-offsets.c b/arch/ia64/kernel/asm-offsets.c
index af56501..106aeb6 100644
--- a/arch/ia64/kernel/asm-offsets.c
+++ b/arch/ia64/kernel/asm-offsets.c
@@ -269,8 +269,8 @@ void foo(void)
BLANK();
@ -29,10 +30,10 @@ Index: linux-2.6/arch/ia64/kernel/asm-offsets.c
DEFINE(IA64_GTOD_WALL_TIME_OFFSET,
offsetof (struct fsyscall_gtod_data_t, wall_time));
DEFINE(IA64_GTOD_MONO_TIME_OFFSET,
Index: linux-2.6/arch/ia64/kernel/fsys.S
===================================================================
--- linux-2.6.orig/arch/ia64/kernel/fsys.S
+++ linux-2.6/arch/ia64/kernel/fsys.S
diff --git a/arch/ia64/kernel/fsys.S b/arch/ia64/kernel/fsys.S
index 331d42b..fa77de7 100644
--- a/arch/ia64/kernel/fsys.S
+++ b/arch/ia64/kernel/fsys.S
@@ -174,7 +174,7 @@ ENTRY(fsys_set_tid_address)
FSYS_RETURN
END(fsys_set_tid_address)
@ -42,10 +43,10 @@ Index: linux-2.6/arch/ia64/kernel/fsys.S
#error fsys_gettimeofday incompatible with changes to struct fsyscall_gtod_data_t
#endif
#if IA64_ITC_JITTER_OFFSET !=0
Index: linux-2.6/arch/ia64/kernel/fsyscall_gtod_data.h
===================================================================
--- linux-2.6.orig/arch/ia64/kernel/fsyscall_gtod_data.h
+++ linux-2.6/arch/ia64/kernel/fsyscall_gtod_data.h
diff --git a/arch/ia64/kernel/fsyscall_gtod_data.h b/arch/ia64/kernel/fsyscall_gtod_data.h
index 57d2ee6..146b15b 100644
--- a/arch/ia64/kernel/fsyscall_gtod_data.h
+++ b/arch/ia64/kernel/fsyscall_gtod_data.h
@@ -6,7 +6,7 @@
*/
@ -55,10 +56,10 @@ Index: linux-2.6/arch/ia64/kernel/fsyscall_gtod_data.h
struct timespec wall_time;
struct timespec monotonic_time;
cycle_t clk_mask;
Index: linux-2.6/arch/ia64/kernel/time.c
===================================================================
--- linux-2.6.orig/arch/ia64/kernel/time.c
+++ linux-2.6/arch/ia64/kernel/time.c
diff --git a/arch/ia64/kernel/time.c b/arch/ia64/kernel/time.c
index 43920de..8e991a0 100644
--- a/arch/ia64/kernel/time.c
+++ b/arch/ia64/kernel/time.c
@@ -35,9 +35,7 @@
static cycle_t itc_get_cycles(struct clocksource *cs);
@ -81,7 +82,7 @@ Index: linux-2.6/arch/ia64/kernel/time.c
/* copy fsyscall clock data */
fsyscall_gtod_data.clk_mask = c->mask;
@@ -485,6 +481,6 @@ void update_vsyscall(struct timespec *wa
@@ -485,6 +481,6 @@ void update_vsyscall(struct timespec *wall, struct timespec *wtm,
fsyscall_gtod_data.monotonic_time.tv_sec++;
}
@ -89,3 +90,6 @@ Index: linux-2.6/arch/ia64/kernel/time.c
+ write_seqcount_end(&fsyscall_gtod_data.seq);
}
--
1.7.10

View File

@ -1,17 +1,18 @@
Subject: seqlock: Remove unused functions
From 5e0436d075a54bc63fa9e48a160ca9df12ff9b77 Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx@linutronix.de>
Date: Sat, 16 Jul 2011 18:38:22 +0200
Subject: [PATCH 019/267] 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.2/include/linux/seqlock.h
===================================================================
--- linux-3.2.orig/include/linux/seqlock.h
+++ linux-3.2/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 c6db9fb..b990f6e 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.2/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
@@ -248,14 +237,4 @@ static inline void write_seqcount_barrier(seqcount_t *s)
#define write_sequnlock_bh(lock) \
do { write_sequnlock(lock); local_bh_enable(); } while(0)
@ -44,3 +45,6 @@ Index: linux-3.2/include/linux/seqlock.h
- })
-
#endif /* __LINUX_SEQLOCK_H */
--
1.7.10

View File

@ -1,18 +1,19 @@
Subject: seqlock: Use seqcount
From cc961dbd2fbdd830c4ba4162c7116d354dfcb13f Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx@linutronix.de>
Date: Sat, 16 Jul 2011 18:40:26 +0200
Subject: [PATCH 020/267] 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 +++++++++++++++++++++++++-----------------------
include/linux/seqlock.h | 176 +++++++++++++++++++++++++----------------------
1 file changed, 93 insertions(+), 83 deletions(-)
Index: rt/include/linux/seqlock.h
===================================================================
--- rt.orig/include/linux/seqlock.h
+++ rt/include/linux/seqlock.h
diff --git a/include/linux/seqlock.h b/include/linux/seqlock.h
index b990f6e..3e1f3f9 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: rt/include/linux/seqlock.h
typedef struct seqcount {
unsigned sequence;
} seqcount_t;
@@ -186,7 +117,6 @@ static inline int __read_seqcount_retry(
@@ -186,7 +117,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: rt/include/linux/seqlock.h
return __read_seqcount_retry(s, start);
}
@@ -220,21 +150,101 @@ static inline void write_seqcount_barrie
@@ -220,21 +150,101 @@ static inline void write_seqcount_barrier(seqcount_t *s)
s->sequence+=2;
}
@ -218,3 +219,6 @@ Index: rt/include/linux/seqlock.h
+}
#endif /* __LINUX_SEQLOCK_H */
--
1.7.10

View File

@ -1,6 +1,8 @@
Subject: vfs: fs_struct: Move code out of seqcount write sections
From 00f0fcf98b55531834e45b94ad6f8b03737e2ce0 Mon Sep 17 00:00:00 2001
From: Al Viro <viro@ZenIV.linux.org.uk>
Date: Thu, 15 Mar 2012 18:39:40 +0000
Subject: [PATCH 021/267] vfs: fs_struct: Move code out of seqcount write
sections
RT cannot disable preemption in the seqcount write sections due to
functions called which take "sleeping" spinlocks.
@ -8,6 +10,9 @@ functions called which take "sleeping" spinlocks.
Move the code out of those sections. It does not need to be there.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
fs/fs_struct.c | 27 +++++++++++++++------------
1 file changed, 15 insertions(+), 12 deletions(-)
diff --git a/fs/fs_struct.c b/fs/fs_struct.c
index 78b519c..f5818c4 100644
@ -81,5 +86,6 @@ index 78b519c..f5818c4 100644
spin_unlock(&fs->lock);
}
task_unlock(p);
--
1.7.10

View File

@ -1,6 +1,7 @@
Subject: timekeeping: Split xtime_lock
From 575bc99dec3a6b5121859ec0dc56a400313c500b 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: [PATCH 022/267] 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,18 +10,18 @@ whole mess with raw seqlocks for RT.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
kernel/time/jiffies.c | 4 -
kernel/time/ntp.c | 24 +++++++----
kernel/time/tick-common.c | 10 ++--
kernel/time/tick-internal.h | 3 -
kernel/time/tick-sched.c | 16 ++++---
kernel/time/timekeeping.c | 90 +++++++++++++++++++++++++-------------------
kernel/time/jiffies.c | 4 +-
kernel/time/ntp.c | 24 ++++++++----
kernel/time/tick-common.c | 10 +++--
kernel/time/tick-internal.h | 3 +-
kernel/time/tick-sched.c | 16 +++++---
kernel/time/timekeeping.c | 90 +++++++++++++++++++++++++------------------
6 files changed, 88 insertions(+), 59 deletions(-)
Index: linux-3.2/kernel/time/jiffies.c
===================================================================
--- linux-3.2.orig/kernel/time/jiffies.c
+++ linux-3.2/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;
@ -33,11 +34,11 @@ Index: linux-3.2/kernel/time/jiffies.c
return ret;
}
EXPORT_SYMBOL(get_jiffies_64);
Index: linux-3.2/kernel/time/ntp.c
===================================================================
--- linux-3.2.orig/kernel/time/ntp.c
+++ linux-3.2/kernel/time/ntp.c
@@ -358,7 +358,8 @@ static enum hrtimer_restart ntp_leap_sec
diff --git a/kernel/time/ntp.c b/kernel/time/ntp.c
index 4b85a7a..419cbaa 100644
--- a/kernel/time/ntp.c
+++ b/kernel/time/ntp.c
@@ -358,7 +358,8 @@ static enum hrtimer_restart ntp_leap_second(struct hrtimer *timer)
{
enum hrtimer_restart res = HRTIMER_NORESTART;
@ -47,7 +48,7 @@ Index: linux-3.2/kernel/time/ntp.c
switch (time_state) {
case TIME_OK:
@@ -388,7 +389,8 @@ static enum hrtimer_restart ntp_leap_sec
@@ -388,7 +389,8 @@ static enum hrtimer_restart ntp_leap_second(struct hrtimer *timer)
break;
}
@ -77,7 +78,7 @@ Index: linux-3.2/kernel/time/ntp.c
txc->time.tv_sec = ts.tv_sec;
txc->time.tv_usec = ts.tv_nsec;
@@ -903,7 +907,8 @@ void hardpps(const struct timespec *phas
@@ -903,7 +907,8 @@ void hardpps(const struct timespec *phase_ts, const struct timespec *raw_ts)
pts_norm = pps_normalize_ts(*phase_ts);
@ -87,7 +88,7 @@ Index: linux-3.2/kernel/time/ntp.c
/* clear the error bits, they will be set again if needed */
time_status &= ~(STA_PPSJITTER | STA_PPSWANDER | STA_PPSERROR);
@@ -916,7 +921,8 @@ void hardpps(const struct timespec *phas
@@ -916,7 +921,8 @@ void hardpps(const struct timespec *phase_ts, const struct timespec *raw_ts)
* just start the frequency interval */
if (unlikely(pps_fbase.tv_sec == 0)) {
pps_fbase = *raw_ts;
@ -97,7 +98,7 @@ Index: linux-3.2/kernel/time/ntp.c
return;
}
@@ -931,7 +937,8 @@ void hardpps(const struct timespec *phas
@@ -931,7 +937,8 @@ void hardpps(const struct timespec *phase_ts, const struct timespec *raw_ts)
time_status |= STA_PPSJITTER;
/* restart the frequency calibration interval */
pps_fbase = *raw_ts;
@ -107,7 +108,7 @@ Index: linux-3.2/kernel/time/ntp.c
pr_err("hardpps: PPSJITTER: bad pulse\n");
return;
}
@@ -948,7 +955,8 @@ void hardpps(const struct timespec *phas
@@ -948,7 +955,8 @@ void hardpps(const struct timespec *phase_ts, const struct timespec *raw_ts)
hardpps_update_phase(pts_norm.nsec);
@ -117,10 +118,10 @@ Index: linux-3.2/kernel/time/ntp.c
}
EXPORT_SYMBOL(hardpps);
Index: linux-3.2/kernel/time/tick-common.c
===================================================================
--- linux-3.2.orig/kernel/time/tick-common.c
+++ linux-3.2/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)
{
@ -139,7 +140,7 @@ Index: linux-3.2/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 {
@ -151,22 +152,22 @@ Index: linux-3.2/kernel/time/tick-common.c
clockevents_set_mode(dev, CLOCK_EVT_MODE_ONESHOT);
Index: linux-3.2/kernel/time/tick-internal.h
===================================================================
--- linux-3.2.orig/kernel/time/tick-internal.h
+++ linux-3.2/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.2/kernel/time/tick-sched.c
===================================================================
--- linux-3.2.orig/kernel/time/tick-sched.c
+++ linux-3.2/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 c923640..d7abd2f 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 */
@ -176,7 +177,7 @@ Index: linux-3.2/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);
}
@ -186,7 +187,7 @@ Index: linux-3.2/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;
@ -203,7 +204,7 @@ Index: linux-3.2/kernel/time/tick-sched.c
return period;
}
@@ -345,11 +349,11 @@ void tick_nohz_stop_sched_tick(int inidl
@@ -345,11 +349,11 @@ void tick_nohz_stop_sched_tick(int inidle)
ts->idle_calls++;
/* Read jiffies and the time when jiffies were updated last */
do {
@ -217,11 +218,11 @@ Index: linux-3.2/kernel/time/tick-sched.c
if (rcu_needs_cpu(cpu) || printk_needs_cpu(cpu) ||
arch_needs_cpu(cpu)) {
Index: linux-3.2/kernel/time/timekeeping.c
===================================================================
--- linux-3.2.orig/kernel/time/timekeeping.c
+++ linux-3.2/kernel/time/timekeeping.c
@@ -139,8 +139,8 @@ static inline s64 timekeeping_get_ns_raw
diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c
index 2378413..da9e1f9 100644
--- a/kernel/time/timekeeping.c
+++ b/kernel/time/timekeeping.c
@@ -139,8 +139,8 @@ static inline s64 timekeeping_get_ns_raw(void)
* This read-write spinlock protects us from races in SMP while
* playing with xtime.
*/
@ -284,7 +285,7 @@ Index: linux-3.2/kernel/time/timekeeping.c
set_normalized_timespec(ts, ts->tv_sec + tomono.tv_sec,
ts->tv_nsec + tomono.tv_nsec + nsecs);
@@ -313,7 +313,7 @@ void getnstime_raw_and_real(struct times
@@ -313,7 +313,7 @@ void getnstime_raw_and_real(struct timespec *ts_raw, struct timespec *ts_real)
do {
u32 arch_offset;
@ -293,7 +294,7 @@ Index: linux-3.2/kernel/time/timekeeping.c
*ts_raw = raw_time;
*ts_real = xtime;
@@ -326,7 +326,7 @@ void getnstime_raw_and_real(struct times
@@ -326,7 +326,7 @@ void getnstime_raw_and_real(struct timespec *ts_raw, struct timespec *ts_real)
nsecs_raw += arch_offset;
nsecs_real += arch_offset;
@ -302,7 +303,7 @@ Index: linux-3.2/kernel/time/timekeeping.c
timespec_add_ns(ts_raw, nsecs_raw);
timespec_add_ns(ts_real, nsecs_real);
@@ -365,7 +365,8 @@ int do_settimeofday(const struct timespe
@@ -365,7 +365,8 @@ int do_settimeofday(const struct timespec *tv)
if ((unsigned long)tv->tv_nsec >= NSEC_PER_SEC)
return -EINVAL;
@ -312,7 +313,7 @@ Index: linux-3.2/kernel/time/timekeeping.c
timekeeping_forward_now();
@@ -381,7 +382,8 @@ int do_settimeofday(const struct timespe
@@ -381,7 +382,8 @@ int do_settimeofday(const struct timespec *tv)
update_vsyscall(&xtime, &wall_to_monotonic, timekeeper.clock,
timekeeper.mult);
@ -322,7 +323,7 @@ Index: linux-3.2/kernel/time/timekeeping.c
/* signal hrtimers about time change */
clock_was_set();
@@ -405,7 +407,8 @@ int timekeeping_inject_offset(struct tim
@@ -405,7 +407,8 @@ int timekeeping_inject_offset(struct timespec *ts)
if ((unsigned long)ts->tv_nsec >= NSEC_PER_SEC)
return -EINVAL;
@ -332,7 +333,7 @@ Index: linux-3.2/kernel/time/timekeeping.c
timekeeping_forward_now();
@@ -418,7 +421,8 @@ int timekeeping_inject_offset(struct tim
@@ -418,7 +421,8 @@ int timekeeping_inject_offset(struct timespec *ts)
update_vsyscall(&xtime, &wall_to_monotonic, timekeeper.clock,
timekeeper.mult);
@ -342,7 +343,7 @@ Index: linux-3.2/kernel/time/timekeeping.c
/* signal hrtimers about time change */
clock_was_set();
@@ -490,11 +494,11 @@ void getrawmonotonic(struct timespec *ts
@@ -490,11 +494,11 @@ void getrawmonotonic(struct timespec *ts)
s64 nsecs;
do {
@ -390,7 +391,7 @@ Index: linux-3.2/kernel/time/timekeeping.c
}
/* time in seconds when suspend began */
@@ -640,7 +646,8 @@ void timekeeping_inject_sleeptime(struct
@@ -640,7 +646,8 @@ void timekeeping_inject_sleeptime(struct timespec *delta)
if (!(ts.tv_sec == 0 && ts.tv_nsec == 0))
return;
@ -400,7 +401,7 @@ Index: linux-3.2/kernel/time/timekeeping.c
timekeeping_forward_now();
__timekeeping_inject_sleeptime(delta);
@@ -650,7 +657,8 @@ void timekeeping_inject_sleeptime(struct
@@ -650,7 +657,8 @@ void timekeeping_inject_sleeptime(struct timespec *delta)
update_vsyscall(&xtime, &wall_to_monotonic, timekeeper.clock,
timekeeper.mult);
@ -450,7 +451,7 @@ Index: linux-3.2/kernel/time/timekeeping.c
clockevents_notify(CLOCK_EVT_NOTIFY_SUSPEND, NULL);
clocksource_suspend();
@@ -1101,13 +1113,13 @@ void get_monotonic_boottime(struct times
@@ -1101,13 +1113,13 @@ void get_monotonic_boottime(struct timespec *ts)
WARN_ON(timekeeping_suspended);
do {
@ -466,7 +467,7 @@ Index: linux-3.2/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);
@@ -1158,10 +1170,10 @@ struct timespec current_kernel_time(void
@@ -1158,10 +1170,10 @@ struct timespec current_kernel_time(void)
unsigned long seq;
do {
@ -479,7 +480,7 @@ Index: linux-3.2/kernel/time/timekeeping.c
return now;
}
@@ -1173,11 +1185,11 @@ struct timespec get_monotonic_coarse(voi
@@ -1173,11 +1185,11 @@ struct timespec get_monotonic_coarse(void)
unsigned long seq;
do {
@ -493,7 +494,7 @@ Index: linux-3.2/kernel/time/timekeeping.c
set_normalized_timespec(&now, now.tv_sec + mono.tv_sec,
now.tv_nsec + mono.tv_nsec);
@@ -1209,11 +1221,11 @@ void get_xtime_and_monotonic_and_sleep_o
@@ -1209,11 +1221,11 @@ void get_xtime_and_monotonic_and_sleep_offset(struct timespec *xtim,
unsigned long seq;
do {
@ -531,3 +532,6 @@ Index: linux-3.2/kernel/time/timekeeping.c
+ write_seqcount_end(&xtime_seq);
+ raw_spin_unlock(&xtime_lock);
}
--
1.7.10

View File

@ -1,6 +1,7 @@
Subject: intel_idle: Convert i7300_idle_lock to raw spinlock
From 7e4c6f7de42bc1567381698fc906cc2ad9c2e593 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: [PATCH 023/267] 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.2/drivers/idle/i7300_idle.c
===================================================================
--- linux-3.2.orig/drivers/idle/i7300_idle.c
+++ linux-3.2/drivers/idle/i7300_idle.c
diff --git a/drivers/idle/i7300_idle.c b/drivers/idle/i7300_idle.c
index c976285..5537d7c 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.2/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.2/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:
@ -67,3 +67,6 @@ Index: linux-3.2/drivers/idle/i7300_idle.c
total_us = 0;
if (i7300_idle_platform_probe(&fbd_dev, &ioat_dev, forceload))
--
1.7.10

View File

@ -1,6 +1,8 @@
Subject: mm: memcg: shorten preempt-disabled section around event checks
From 2d38d140493b8b52deebbe11692a71e4513b7605 Mon Sep 17 00:00:00 2001
From: Johannes Weiner <hannes@cmpxchg.org>
Date: Thu, 17 Nov 2011 07:49:25 +0100
Subject: [PATCH 024/267] mm: memcg: shorten preempt-disabled section around
event checks
Only the ratelimit checks themselves have to run with preemption
disabled, the resulting actions - checking for usage thresholds,
@ -12,18 +14,14 @@ Tested-by: Luis Henriques <henrix@camandro.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
mm/memcontrol.c | 73 ++++++++++++++++++++++++++------------------------------
mm/memcontrol.c | 73 ++++++++++++++++++++++++++-----------------------------
1 file changed, 35 insertions(+), 38 deletions(-)
Thomas, HTH and it is probably interesting for upstream as well.
Unfortunately, I'm in the middle of moving right now, so this is
untested except for compiling.
Index: linux-3.2/mm/memcontrol.c
===================================================================
--- linux-3.2.orig/mm/memcontrol.c
+++ linux-3.2/mm/memcontrol.c
@@ -683,37 +683,32 @@ static unsigned long mem_cgroup_nr_lru_p
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index 778554f..abf5497 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -683,37 +683,32 @@ static unsigned long mem_cgroup_nr_lru_pages(struct mem_cgroup *memcg,
return total;
}
@ -80,7 +78,7 @@ Index: linux-3.2/mm/memcontrol.c
}
/*
@@ -724,25 +719,27 @@ static void memcg_check_events(struct me
@@ -724,25 +719,27 @@ static void memcg_check_events(struct mem_cgroup *memcg, struct page *page)
{
preempt_disable();
/* threshold event is triggered in finer grain than soft limit */
@ -122,3 +120,6 @@ Index: linux-3.2/mm/memcontrol.c
}
static struct mem_cgroup *mem_cgroup_from_cont(struct cgroup *cont)
--
1.7.10

View File

@ -1,6 +1,8 @@
From ee9d814d8872fc578eb31771307b2b6a8f5822f8 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: [PATCH 025/267] 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 +27,11 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
kernel/sched.c | 9 +++++++++
1 file changed, 9 insertions(+)
Index: linux-3.2/kernel/sched.c
===================================================================
--- linux-3.2.orig/kernel/sched.c
+++ linux-3.2/kernel/sched.c
@@ -4520,7 +4520,16 @@ asmlinkage void __sched notrace preempt_
diff --git a/kernel/sched.c b/kernel/sched.c
index a39494e..6b32395 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -4520,7 +4520,16 @@ asmlinkage void __sched notrace preempt_schedule(void)
do {
add_preempt_count_notrace(PREEMPT_ACTIVE);
@ -46,3 +48,6 @@ Index: linux-3.2/kernel/sched.c
sub_preempt_count_notrace(PREEMPT_ACTIVE);
/*
--
1.7.10

View File

@ -1,17 +1,18 @@
Subject: signal-revert-ptrace-preempt-magic.patch
From f5252418489d88d27411fb576294a1e55dbb03b4 Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx@linutronix.de>
Date: Wed, 21 Sep 2011 19:57:12 +0200
Subject: [PATCH 026/267] 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.2/kernel/signal.c
===================================================================
--- linux-3.2.orig/kernel/signal.c
+++ linux-3.2/kernel/signal.c
@@ -1857,15 +1857,7 @@ static void ptrace_stop(int exit_code, i
diff --git a/kernel/signal.c b/kernel/signal.c
index 2065515..d8b0b21 100644
--- a/kernel/signal.c
+++ b/kernel/signal.c
@@ -1857,15 +1857,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);
@ -27,3 +28,6 @@ Index: linux-3.2/kernel/signal.c
schedule();
} else {
/*
--
1.7.10

View File

@ -1,6 +1,7 @@
Subject: arm: Mark pmu interupt IRQF_NO_THREAD
From 8aa76e7290f80f472b9aebdaf8ae7d627d579359 Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx@linutronix.de>
Date: Wed, 16 Mar 2011 14:45:31 +0100
Subject: [PATCH 027/267] 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.2/arch/arm/kernel/perf_event.c
===================================================================
--- linux-3.2.orig/arch/arm/kernel/perf_event.c
+++ linux-3.2/arch/arm/kernel/perf_event.c
@@ -441,7 +441,7 @@ armpmu_reserve_hardware(struct arm_pmu *
diff --git a/arch/arm/kernel/perf_event.c b/arch/arm/kernel/perf_event.c
index ecebb89..e1286fb 100644
--- a/arch/arm/kernel/perf_event.c
+++ b/arch/arm/kernel/perf_event.c
@@ -435,7 +435,7 @@ armpmu_reserve_hardware(struct arm_pmu *armpmu)
}
err = request_irq(irq, handle_irq,
@ -23,3 +24,6 @@ Index: linux-3.2/arch/arm/kernel/perf_event.c
"arm-pmu", armpmu);
if (err) {
pr_err("unable to request IRQ%d for ARM PMU counters\n",
--
1.7.10

View File

@ -1,6 +1,7 @@
Subject: arm: Allow forced irq threading
From d24eb79d3953d59e4a232bb66d6182d00007c02d Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx@linutronix.de>
Date: Sat, 16 Jul 2011 13:15:20 +0200
Subject: [PATCH 028/267] 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.2/arch/arm/Kconfig
===================================================================
--- linux-3.2.orig/arch/arm/Kconfig
+++ linux-3.2/arch/arm/Kconfig
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index ab3740e..fc327b8 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -29,6 +29,7 @@ config ARM
select HAVE_GENERIC_HARDIRQS
select HAVE_SPARSE_IRQ
@ -22,3 +23,6 @@ Index: linux-3.2/arch/arm/Kconfig
select CPU_PM if (SUSPEND || CPU_IDLE)
help
The ARM series is a line of low-power-consumption RISC chip designs
--
1.7.10

View File

@ -1,7 +1,7 @@
Subject: preempt-rt: Convert arm boot_lock to raw
From b4413229a63e7c48b6f26a03eb74e418dce27d49 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: [PATCH 029/267] 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.
@ -28,10 +28,10 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
arch/arm/plat-versatile/platsmp.c | 10 +++++-----
6 files changed, 31 insertions(+), 31 deletions(-)
Index: linux-3.2/arch/arm/mach-exynos/platsmp.c
===================================================================
--- linux-3.2.orig/arch/arm/mach-exynos/platsmp.c
+++ linux-3.2/arch/arm/mach-exynos/platsmp.c
diff --git a/arch/arm/mach-exynos/platsmp.c b/arch/arm/mach-exynos/platsmp.c
index 69ffb2f..fe321b0 100644
--- a/arch/arm/mach-exynos/platsmp.c
+++ b/arch/arm/mach-exynos/platsmp.c
@@ -63,7 +63,7 @@ static void __iomem *scu_base_addr(void)
return (void __iomem *)(S5P_VA_SCU);
}
@ -41,7 +41,7 @@ Index: linux-3.2/arch/arm/mach-exynos/platsmp.c
static void __cpuinit exynos4_gic_secondary_init(void)
{
@@ -108,8 +108,8 @@ void __cpuinit platform_secondary_init(u
@@ -108,8 +108,8 @@ void __cpuinit platform_secondary_init(unsigned int cpu)
/*
* Synchronise with the boot thread.
*/
@ -52,7 +52,7 @@ Index: linux-3.2/arch/arm/mach-exynos/platsmp.c
}
int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
@@ -120,7 +120,7 @@ int __cpuinit boot_secondary(unsigned in
@@ -120,7 +120,7 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
* Set synchronisation state between this boot processor
* and the secondary one
*/
@ -61,7 +61,7 @@ Index: linux-3.2/arch/arm/mach-exynos/platsmp.c
/*
* The secondary processor is waiting to be released from
@@ -149,7 +149,7 @@ int __cpuinit boot_secondary(unsigned in
@@ -149,7 +149,7 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
if (timeout == 0) {
printk(KERN_ERR "cpu1 power enable failed");
@ -70,7 +70,7 @@ Index: linux-3.2/arch/arm/mach-exynos/platsmp.c
return -ETIMEDOUT;
}
}
@@ -177,7 +177,7 @@ int __cpuinit boot_secondary(unsigned in
@@ -177,7 +177,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
*/
@ -79,10 +79,10 @@ Index: linux-3.2/arch/arm/mach-exynos/platsmp.c
return pen_release != -1 ? -ENOSYS : 0;
}
Index: linux-3.2/arch/arm/mach-msm/platsmp.c
===================================================================
--- linux-3.2.orig/arch/arm/mach-msm/platsmp.c
+++ linux-3.2/arch/arm/mach-msm/platsmp.c
diff --git a/arch/arm/mach-msm/platsmp.c b/arch/arm/mach-msm/platsmp.c
index fdec58a..cad6b81 100644
--- a/arch/arm/mach-msm/platsmp.c
+++ b/arch/arm/mach-msm/platsmp.c
@@ -39,7 +39,7 @@ extern void msm_secondary_startup(void);
*/
volatile int pen_release = -1;
@ -92,7 +92,7 @@ Index: linux-3.2/arch/arm/mach-msm/platsmp.c
static inline int get_core_count(void)
{
@@ -69,8 +69,8 @@ void __cpuinit platform_secondary_init(u
@@ -69,8 +69,8 @@ void __cpuinit platform_secondary_init(unsigned int cpu)
/*
* Synchronise with the boot thread.
*/
@ -103,7 +103,7 @@ Index: linux-3.2/arch/arm/mach-msm/platsmp.c
}
static __cpuinit void prepare_cold_cpu(unsigned int cpu)
@@ -107,7 +107,7 @@ int __cpuinit boot_secondary(unsigned in
@@ -107,7 +107,7 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
* set synchronisation state between this boot processor
* and the secondary one
*/
@ -112,7 +112,7 @@ Index: linux-3.2/arch/arm/mach-msm/platsmp.c
/*
* The secondary processor is waiting to be released from
@@ -141,7 +141,7 @@ int __cpuinit boot_secondary(unsigned in
@@ -141,7 +141,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
*/
@ -121,10 +121,10 @@ Index: linux-3.2/arch/arm/mach-msm/platsmp.c
return pen_release != -1 ? -ENOSYS : 0;
}
Index: linux-3.2/arch/arm/mach-omap2/omap-smp.c
===================================================================
--- linux-3.2.orig/arch/arm/mach-omap2/omap-smp.c
+++ linux-3.2/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 4412ddb..490de9c 100644
--- a/arch/arm/mach-omap2/omap-smp.c
+++ b/arch/arm/mach-omap2/omap-smp.c
@@ -29,7 +29,7 @@
/* SCU base address */
static void __iomem *scu_base;
@ -134,7 +134,7 @@ Index: linux-3.2/arch/arm/mach-omap2/omap-smp.c
void __cpuinit platform_secondary_init(unsigned int cpu)
{
@@ -43,8 +43,8 @@ void __cpuinit platform_secondary_init(u
@@ -43,8 +43,8 @@ void __cpuinit platform_secondary_init(unsigned int cpu)
/*
* Synchronise with the boot thread.
*/
@ -145,7 +145,7 @@ Index: linux-3.2/arch/arm/mach-omap2/omap-smp.c
}
int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
@@ -53,7 +53,7 @@ int __cpuinit boot_secondary(unsigned in
@@ -53,7 +53,7 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
* Set synchronisation state between this boot processor
* and the secondary one
*/
@ -154,7 +154,7 @@ Index: linux-3.2/arch/arm/mach-omap2/omap-smp.c
/*
* Update the AuxCoreBoot0 with boot state for secondary core.
@@ -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)
* Now the secondary core is starting up let it run its
* calibrations, then wait for it to finish
*/
@ -163,10 +163,10 @@ Index: linux-3.2/arch/arm/mach-omap2/omap-smp.c
return 0;
}
Index: linux-3.2/arch/arm/mach-tegra/platsmp.c
===================================================================
--- linux-3.2.orig/arch/arm/mach-tegra/platsmp.c
+++ linux-3.2/arch/arm/mach-tegra/platsmp.c
diff --git a/arch/arm/mach-tegra/platsmp.c b/arch/arm/mach-tegra/platsmp.c
index 7d2b5d0..571f61a 100644
--- a/arch/arm/mach-tegra/platsmp.c
+++ b/arch/arm/mach-tegra/platsmp.c
@@ -28,7 +28,7 @@
extern void tegra_secondary_startup(void);
@ -176,7 +176,7 @@ Index: linux-3.2/arch/arm/mach-tegra/platsmp.c
static void __iomem *scu_base = IO_ADDRESS(TEGRA_ARM_PERIF_BASE);
#define EVP_CPU_RESET_VECTOR \
@@ -50,8 +50,8 @@ void __cpuinit platform_secondary_init(u
@@ -50,8 +50,8 @@ void __cpuinit platform_secondary_init(unsigned int cpu)
/*
* Synchronise with the boot thread.
*/
@ -187,7 +187,7 @@ Index: linux-3.2/arch/arm/mach-tegra/platsmp.c
}
int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
@@ -65,7 +65,7 @@ int __cpuinit boot_secondary(unsigned in
@@ -65,7 +65,7 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
* set synchronisation state between this boot processor
* and the secondary one
*/
@ -196,7 +196,7 @@ Index: linux-3.2/arch/arm/mach-tegra/platsmp.c
/* set the reset vector to point to the secondary_startup routine */
@@ -101,7 +101,7 @@ int __cpuinit boot_secondary(unsigned in
@@ -101,7 +101,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
*/
@ -205,10 +205,10 @@ Index: linux-3.2/arch/arm/mach-tegra/platsmp.c
return 0;
}
Index: linux-3.2/arch/arm/mach-ux500/platsmp.c
===================================================================
--- linux-3.2.orig/arch/arm/mach-ux500/platsmp.c
+++ linux-3.2/arch/arm/mach-ux500/platsmp.c
diff --git a/arch/arm/mach-ux500/platsmp.c b/arch/arm/mach-ux500/platsmp.c
index a19e398..9e92c6c 100644
--- a/arch/arm/mach-ux500/platsmp.c
+++ b/arch/arm/mach-ux500/platsmp.c
@@ -57,7 +57,7 @@ static void __iomem *scu_base_addr(void)
return NULL;
}
@ -218,7 +218,7 @@ Index: linux-3.2/arch/arm/mach-ux500/platsmp.c
void __cpuinit platform_secondary_init(unsigned int cpu)
{
@@ -77,8 +77,8 @@ void __cpuinit platform_secondary_init(u
@@ -77,8 +77,8 @@ void __cpuinit platform_secondary_init(unsigned int cpu)
/*
* Synchronise with the boot thread.
*/
@ -229,7 +229,7 @@ Index: linux-3.2/arch/arm/mach-ux500/platsmp.c
}
int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
@@ -89,7 +89,7 @@ int __cpuinit boot_secondary(unsigned in
@@ -89,7 +89,7 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
* set synchronisation state between this boot processor
* and the secondary one
*/
@ -238,7 +238,7 @@ Index: linux-3.2/arch/arm/mach-ux500/platsmp.c
/*
* The secondary processor is waiting to be released from
@@ -110,7 +110,7 @@ int __cpuinit boot_secondary(unsigned in
@@ -110,7 +110,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
*/
@ -247,11 +247,11 @@ Index: linux-3.2/arch/arm/mach-ux500/platsmp.c
return pen_release != -1 ? -ENOSYS : 0;
}
Index: linux-3.2/arch/arm/plat-versatile/platsmp.c
===================================================================
--- linux-3.2.orig/arch/arm/plat-versatile/platsmp.c
+++ linux-3.2/arch/arm/plat-versatile/platsmp.c
@@ -37,7 +37,7 @@ static void __cpuinit write_pen_release(
diff --git a/arch/arm/plat-versatile/platsmp.c b/arch/arm/plat-versatile/platsmp.c
index 92f18d3..287bbb5 100644
--- a/arch/arm/plat-versatile/platsmp.c
+++ b/arch/arm/plat-versatile/platsmp.c
@@ -37,7 +37,7 @@ static void __cpuinit write_pen_release(int val)
outer_clean_range(__pa(&pen_release), __pa(&pen_release + 1));
}
@ -260,7 +260,7 @@ Index: linux-3.2/arch/arm/plat-versatile/platsmp.c
void __cpuinit platform_secondary_init(unsigned int cpu)
{
@@ -57,8 +57,8 @@ void __cpuinit platform_secondary_init(u
@@ -57,8 +57,8 @@ void __cpuinit platform_secondary_init(unsigned int cpu)
/*
* Synchronise with the boot thread.
*/
@ -271,7 +271,7 @@ Index: linux-3.2/arch/arm/plat-versatile/platsmp.c
}
int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
@@ -69,7 +69,7 @@ int __cpuinit boot_secondary(unsigned in
@@ -69,7 +69,7 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
* Set synchronisation state between this boot processor
* and the secondary one
*/
@ -280,7 +280,7 @@ Index: linux-3.2/arch/arm/plat-versatile/platsmp.c
/*
* This is really belt and braces; we hold unintended secondary
@@ -99,7 +99,7 @@ int __cpuinit boot_secondary(unsigned in
@@ -99,7 +99,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
*/
@ -289,3 +289,6 @@ Index: linux-3.2/arch/arm/plat-versatile/platsmp.c
return pen_release != -1 ? -ENOSYS : 0;
}
--
1.7.10

View File

@ -1,6 +1,7 @@
Subject: sched: Create schedule_preempt_disabled()
From 64b759067a99f8482feb0c2f75f6ce0fde842166 Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx@linutronix.de>
Date: Mon, 21 Mar 2011 12:09:35 +0100
Subject: [PATCH 030/267] sched: Create schedule_preempt_disabled()
Get rid of the ever repeating:
@ -14,11 +15,11 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
kernel/sched.c | 12 ++++++++++++
2 files changed, 13 insertions(+)
Index: linux-3.2/include/linux/sched.h
===================================================================
--- linux-3.2.orig/include/linux/sched.h
+++ linux-3.2/include/linux/sched.h
@@ -359,6 +359,7 @@ extern signed long schedule_timeout_inte
diff --git a/include/linux/sched.h b/include/linux/sched.h
index 1c4f3e9..9897fe6 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -359,6 +359,7 @@ extern signed long schedule_timeout_interruptible(signed long timeout);
extern signed long schedule_timeout_killable(signed long timeout);
extern signed long schedule_timeout_uninterruptible(signed long timeout);
asmlinkage void schedule(void);
@ -26,10 +27,10 @@ Index: linux-3.2/include/linux/sched.h
extern int mutex_spin_on_owner(struct mutex *lock, struct task_struct *owner);
struct nsproxy;
Index: linux-3.2/kernel/sched.c
===================================================================
--- linux-3.2.orig/kernel/sched.c
+++ linux-3.2/kernel/sched.c
diff --git a/kernel/sched.c b/kernel/sched.c
index 6b32395..465fd11 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -4456,6 +4456,18 @@ asmlinkage void __sched schedule(void)
}
EXPORT_SYMBOL(schedule);
@ -49,3 +50,6 @@ Index: linux-3.2/kernel/sched.c
#ifdef CONFIG_MUTEX_SPIN_ON_OWNER
static inline bool owner_running(struct mutex *lock, struct task_struct *owner)
--
1.7.10

View File

@ -1,6 +1,7 @@
Subject: sched: Use schedule_preempt_disabled()
From 662df03fb70d4e277547eaa2adfd7e0d520bb35f Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx@linutronix.de>
Date: Mon, 21 Mar 2011 12:33:18 +0100
Subject: [PATCH 031/267] sched: Use schedule_preempt_disabled()
Coccinelle based conversion.
@ -36,10 +37,10 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
kernel/softirq.c | 4 +---
28 files changed, 36 insertions(+), 95 deletions(-)
Index: linux-3.2/arch/arm/kernel/process.c
===================================================================
--- linux-3.2.orig/arch/arm/kernel/process.c
+++ linux-3.2/arch/arm/kernel/process.c
diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c
index 3d0c6fb..54833ff 100644
--- a/arch/arm/kernel/process.c
+++ b/arch/arm/kernel/process.c
@@ -214,9 +214,7 @@ void cpu_idle(void)
}
leds_event(led_idle_end);
@ -51,10 +52,10 @@ Index: linux-3.2/arch/arm/kernel/process.c
}
}
Index: linux-3.2/arch/avr32/kernel/process.c
===================================================================
--- linux-3.2.orig/arch/avr32/kernel/process.c
+++ linux-3.2/arch/avr32/kernel/process.c
diff --git a/arch/avr32/kernel/process.c b/arch/avr32/kernel/process.c
index ef5a2a0..c8724c9 100644
--- a/arch/avr32/kernel/process.c
+++ b/arch/avr32/kernel/process.c
@@ -38,9 +38,7 @@ void cpu_idle(void)
while (!need_resched())
cpu_idle_sleep();
@ -66,10 +67,10 @@ Index: linux-3.2/arch/avr32/kernel/process.c
}
}
Index: linux-3.2/arch/blackfin/kernel/process.c
===================================================================
--- linux-3.2.orig/arch/blackfin/kernel/process.c
+++ linux-3.2/arch/blackfin/kernel/process.c
diff --git a/arch/blackfin/kernel/process.c b/arch/blackfin/kernel/process.c
index 6a80a9e..11acc10 100644
--- a/arch/blackfin/kernel/process.c
+++ b/arch/blackfin/kernel/process.c
@@ -92,9 +92,7 @@ void cpu_idle(void)
while (!need_resched())
idle();
@ -81,10 +82,10 @@ Index: linux-3.2/arch/blackfin/kernel/process.c
}
}
Index: linux-3.2/arch/cris/kernel/process.c
===================================================================
--- linux-3.2.orig/arch/cris/kernel/process.c
+++ linux-3.2/arch/cris/kernel/process.c
diff --git a/arch/cris/kernel/process.c b/arch/cris/kernel/process.c
index aa585e4..d8f50ff 100644
--- a/arch/cris/kernel/process.c
+++ b/arch/cris/kernel/process.c
@@ -115,9 +115,7 @@ void cpu_idle (void)
idle = default_idle;
idle();
@ -96,10 +97,10 @@ Index: linux-3.2/arch/cris/kernel/process.c
}
}
Index: linux-3.2/arch/frv/kernel/process.c
===================================================================
--- linux-3.2.orig/arch/frv/kernel/process.c
+++ linux-3.2/arch/frv/kernel/process.c
diff --git a/arch/frv/kernel/process.c b/arch/frv/kernel/process.c
index 3901df1..29cc497 100644
--- a/arch/frv/kernel/process.c
+++ b/arch/frv/kernel/process.c
@@ -92,9 +92,7 @@ void cpu_idle(void)
idle();
}
@ -111,10 +112,10 @@ Index: linux-3.2/arch/frv/kernel/process.c
}
}
Index: linux-3.2/arch/h8300/kernel/process.c
===================================================================
--- linux-3.2.orig/arch/h8300/kernel/process.c
+++ linux-3.2/arch/h8300/kernel/process.c
diff --git a/arch/h8300/kernel/process.c b/arch/h8300/kernel/process.c
index 933bd38..1a173b3 100644
--- a/arch/h8300/kernel/process.c
+++ b/arch/h8300/kernel/process.c
@@ -81,9 +81,7 @@ void cpu_idle(void)
while (1) {
while (!need_resched())
@ -126,10 +127,10 @@ Index: linux-3.2/arch/h8300/kernel/process.c
}
}
Index: linux-3.2/arch/ia64/kernel/process.c
===================================================================
--- linux-3.2.orig/arch/ia64/kernel/process.c
+++ linux-3.2/arch/ia64/kernel/process.c
diff --git a/arch/ia64/kernel/process.c b/arch/ia64/kernel/process.c
index 6d33c5c..9dc52b6 100644
--- a/arch/ia64/kernel/process.c
+++ b/arch/ia64/kernel/process.c
@@ -330,9 +330,7 @@ cpu_idle (void)
normal_xtp();
#endif
@ -141,10 +142,10 @@ Index: linux-3.2/arch/ia64/kernel/process.c
check_pgt_cache();
if (cpu_is_offline(cpu))
play_dead();
Index: linux-3.2/arch/m32r/kernel/process.c
===================================================================
--- linux-3.2.orig/arch/m32r/kernel/process.c
+++ linux-3.2/arch/m32r/kernel/process.c
diff --git a/arch/m32r/kernel/process.c b/arch/m32r/kernel/process.c
index 422bea9..3a4a32b 100644
--- a/arch/m32r/kernel/process.c
+++ b/arch/m32r/kernel/process.c
@@ -90,9 +90,7 @@ void cpu_idle (void)
idle();
@ -156,10 +157,10 @@ Index: linux-3.2/arch/m32r/kernel/process.c
}
}
Index: linux-3.2/arch/m68k/kernel/process_mm.c
===================================================================
--- linux-3.2.orig/arch/m68k/kernel/process_mm.c
+++ linux-3.2/arch/m68k/kernel/process_mm.c
diff --git a/arch/m68k/kernel/process_mm.c b/arch/m68k/kernel/process_mm.c
index aa4ffb8..c413aa0 100644
--- a/arch/m68k/kernel/process_mm.c
+++ b/arch/m68k/kernel/process_mm.c
@@ -94,9 +94,7 @@ void cpu_idle(void)
while (1) {
while (!need_resched())
@ -171,10 +172,10 @@ Index: linux-3.2/arch/m68k/kernel/process_mm.c
}
}
Index: linux-3.2/arch/m68k/kernel/process_no.c
===================================================================
--- linux-3.2.orig/arch/m68k/kernel/process_no.c
+++ linux-3.2/arch/m68k/kernel/process_no.c
diff --git a/arch/m68k/kernel/process_no.c b/arch/m68k/kernel/process_no.c
index 5e1078c..f7fe6c3 100644
--- a/arch/m68k/kernel/process_no.c
+++ b/arch/m68k/kernel/process_no.c
@@ -73,9 +73,7 @@ void cpu_idle(void)
/* endless idle loop with no priority at all */
while (1) {
@ -186,10 +187,10 @@ Index: linux-3.2/arch/m68k/kernel/process_no.c
}
}
Index: linux-3.2/arch/microblaze/kernel/process.c
===================================================================
--- linux-3.2.orig/arch/microblaze/kernel/process.c
+++ linux-3.2/arch/microblaze/kernel/process.c
diff --git a/arch/microblaze/kernel/process.c b/arch/microblaze/kernel/process.c
index 95cc295..d3b2b42 100644
--- a/arch/microblaze/kernel/process.c
+++ b/arch/microblaze/kernel/process.c
@@ -108,9 +108,7 @@ void cpu_idle(void)
idle();
tick_nohz_restart_sched_tick();
@ -201,10 +202,10 @@ Index: linux-3.2/arch/microblaze/kernel/process.c
check_pgt_cache();
}
}
Index: linux-3.2/arch/mips/kernel/process.c
===================================================================
--- linux-3.2.orig/arch/mips/kernel/process.c
+++ linux-3.2/arch/mips/kernel/process.c
diff --git a/arch/mips/kernel/process.c b/arch/mips/kernel/process.c
index c47f96e..4dbf66d 100644
--- a/arch/mips/kernel/process.c
+++ b/arch/mips/kernel/process.c
@@ -78,9 +78,7 @@ void __noreturn cpu_idle(void)
play_dead();
#endif
@ -216,10 +217,10 @@ Index: linux-3.2/arch/mips/kernel/process.c
}
}
Index: linux-3.2/arch/mn10300/kernel/process.c
===================================================================
--- linux-3.2.orig/arch/mn10300/kernel/process.c
+++ linux-3.2/arch/mn10300/kernel/process.c
diff --git a/arch/mn10300/kernel/process.c b/arch/mn10300/kernel/process.c
index 28eec31..cac401d 100644
--- a/arch/mn10300/kernel/process.c
+++ b/arch/mn10300/kernel/process.c
@@ -123,9 +123,7 @@ void cpu_idle(void)
idle();
}
@ -231,10 +232,10 @@ Index: linux-3.2/arch/mn10300/kernel/process.c
}
}
Index: linux-3.2/arch/parisc/kernel/process.c
===================================================================
--- linux-3.2.orig/arch/parisc/kernel/process.c
+++ linux-3.2/arch/parisc/kernel/process.c
diff --git a/arch/parisc/kernel/process.c b/arch/parisc/kernel/process.c
index 4b4b918..f6eb367 100644
--- a/arch/parisc/kernel/process.c
+++ b/arch/parisc/kernel/process.c
@@ -71,9 +71,7 @@ void cpu_idle(void)
while (1) {
while (!need_resched())
@ -246,10 +247,10 @@ Index: linux-3.2/arch/parisc/kernel/process.c
check_pgt_cache();
}
}
Index: linux-3.2/arch/powerpc/kernel/idle.c
===================================================================
--- linux-3.2.orig/arch/powerpc/kernel/idle.c
+++ linux-3.2/arch/powerpc/kernel/idle.c
diff --git a/arch/powerpc/kernel/idle.c b/arch/powerpc/kernel/idle.c
index 39a2baa..f46dae5 100644
--- a/arch/powerpc/kernel/idle.c
+++ b/arch/powerpc/kernel/idle.c
@@ -94,11 +94,11 @@ void cpu_idle(void)
HMT_medium();
ppc64_runlatch_on();
@ -266,10 +267,10 @@ Index: linux-3.2/arch/powerpc/kernel/idle.c
}
}
Index: linux-3.2/arch/powerpc/platforms/iseries/setup.c
===================================================================
--- linux-3.2.orig/arch/powerpc/platforms/iseries/setup.c
+++ linux-3.2/arch/powerpc/platforms/iseries/setup.c
diff --git a/arch/powerpc/platforms/iseries/setup.c b/arch/powerpc/platforms/iseries/setup.c
index ea0acbd..e0c5b49 100644
--- a/arch/powerpc/platforms/iseries/setup.c
+++ b/arch/powerpc/platforms/iseries/setup.c
@@ -582,9 +582,7 @@ static void iseries_shared_idle(void)
if (hvlpevent_is_pending())
process_iSeries_events();
@ -292,11 +293,11 @@ Index: linux-3.2/arch/powerpc/platforms/iseries/setup.c
}
}
Index: linux-3.2/arch/s390/kernel/process.c
===================================================================
--- linux-3.2.orig/arch/s390/kernel/process.c
+++ linux-3.2/arch/s390/kernel/process.c
@@ -95,9 +95,7 @@ void cpu_idle(void)
diff --git a/arch/s390/kernel/process.c b/arch/s390/kernel/process.c
index 53088e2..fa093f7 100644
--- a/arch/s390/kernel/process.c
+++ b/arch/s390/kernel/process.c
@@ -94,9 +94,7 @@ void cpu_idle(void)
while (!need_resched())
default_idle();
tick_nohz_restart_sched_tick();
@ -307,10 +308,10 @@ Index: linux-3.2/arch/s390/kernel/process.c
}
}
Index: linux-3.2/arch/score/kernel/process.c
===================================================================
--- linux-3.2.orig/arch/score/kernel/process.c
+++ linux-3.2/arch/score/kernel/process.c
diff --git a/arch/score/kernel/process.c b/arch/score/kernel/process.c
index 25d0803..2707023 100644
--- a/arch/score/kernel/process.c
+++ b/arch/score/kernel/process.c
@@ -53,9 +53,7 @@ void __noreturn cpu_idle(void)
while (!need_resched())
barrier();
@ -322,10 +323,10 @@ Index: linux-3.2/arch/score/kernel/process.c
}
}
Index: linux-3.2/arch/sh/kernel/idle.c
===================================================================
--- linux-3.2.orig/arch/sh/kernel/idle.c
+++ linux-3.2/arch/sh/kernel/idle.c
diff --git a/arch/sh/kernel/idle.c b/arch/sh/kernel/idle.c
index db4ecd7..b7c18f0 100644
--- a/arch/sh/kernel/idle.c
+++ b/arch/sh/kernel/idle.c
@@ -112,9 +112,7 @@ void cpu_idle(void)
}
@ -337,10 +338,10 @@ Index: linux-3.2/arch/sh/kernel/idle.c
}
}
Index: linux-3.2/arch/sparc/kernel/process_32.c
===================================================================
--- linux-3.2.orig/arch/sparc/kernel/process_32.c
+++ linux-3.2/arch/sparc/kernel/process_32.c
diff --git a/arch/sparc/kernel/process_32.c b/arch/sparc/kernel/process_32.c
index f793742..935fdbc 100644
--- a/arch/sparc/kernel/process_32.c
+++ b/arch/sparc/kernel/process_32.c
@@ -113,9 +113,7 @@ void cpu_idle(void)
while (!need_resched())
cpu_relax();
@ -363,10 +364,10 @@ Index: linux-3.2/arch/sparc/kernel/process_32.c
check_pgt_cache();
}
}
Index: linux-3.2/arch/sparc/kernel/process_64.c
===================================================================
--- linux-3.2.orig/arch/sparc/kernel/process_64.c
+++ linux-3.2/arch/sparc/kernel/process_64.c
diff --git a/arch/sparc/kernel/process_64.c b/arch/sparc/kernel/process_64.c
index 3739a06..8ba0dbe 100644
--- a/arch/sparc/kernel/process_64.c
+++ b/arch/sparc/kernel/process_64.c
@@ -102,15 +102,13 @@ void cpu_idle(void)
tick_nohz_restart_sched_tick();
@ -387,10 +388,10 @@ Index: linux-3.2/arch/sparc/kernel/process_64.c
}
}
Index: linux-3.2/arch/tile/kernel/process.c
===================================================================
--- linux-3.2.orig/arch/tile/kernel/process.c
+++ linux-3.2/arch/tile/kernel/process.c
diff --git a/arch/tile/kernel/process.c b/arch/tile/kernel/process.c
index 9c45d8b..5a8b631 100644
--- a/arch/tile/kernel/process.c
+++ b/arch/tile/kernel/process.c
@@ -106,9 +106,7 @@ void cpu_idle(void)
current_thread_info()->status |= TS_POLLING;
}
@ -402,10 +403,10 @@ Index: linux-3.2/arch/tile/kernel/process.c
}
}
Index: linux-3.2/arch/x86/kernel/process_32.c
===================================================================
--- linux-3.2.orig/arch/x86/kernel/process_32.c
+++ linux-3.2/arch/x86/kernel/process_32.c
diff --git a/arch/x86/kernel/process_32.c b/arch/x86/kernel/process_32.c
index 8598296..ada175e3 100644
--- a/arch/x86/kernel/process_32.c
+++ b/arch/x86/kernel/process_32.c
@@ -117,9 +117,7 @@ void cpu_idle(void)
start_critical_timings();
}
@ -417,10 +418,10 @@ Index: linux-3.2/arch/x86/kernel/process_32.c
}
}
Index: linux-3.2/arch/x86/kernel/process_64.c
===================================================================
--- linux-3.2.orig/arch/x86/kernel/process_64.c
+++ linux-3.2/arch/x86/kernel/process_64.c
diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c
index 6a364a6..08840ab 100644
--- a/arch/x86/kernel/process_64.c
+++ b/arch/x86/kernel/process_64.c
@@ -150,9 +150,7 @@ void cpu_idle(void)
}
@ -432,10 +433,10 @@ Index: linux-3.2/arch/x86/kernel/process_64.c
}
}
Index: linux-3.2/arch/xtensa/kernel/process.c
===================================================================
--- linux-3.2.orig/arch/xtensa/kernel/process.c
+++ linux-3.2/arch/xtensa/kernel/process.c
diff --git a/arch/xtensa/kernel/process.c b/arch/xtensa/kernel/process.c
index 47041e7..2c90047 100644
--- a/arch/xtensa/kernel/process.c
+++ b/arch/xtensa/kernel/process.c
@@ -113,9 +113,7 @@ void cpu_idle(void)
while (1) {
while (!need_resched())
@ -447,11 +448,11 @@ Index: linux-3.2/arch/xtensa/kernel/process.c
}
}
Index: linux-3.2/init/main.c
===================================================================
--- linux-3.2.orig/init/main.c
+++ linux-3.2/init/main.c
@@ -378,11 +378,8 @@ static noinline void __init_refok rest_i
diff --git a/init/main.c b/init/main.c
index 217ed23..0e274f9 100644
--- a/init/main.c
+++ b/init/main.c
@@ -378,11 +378,8 @@ static noinline void __init_refok rest_init(void)
* at least once to get things moving:
*/
init_idle_bootup_task(current);
@ -464,11 +465,11 @@ Index: linux-3.2/init/main.c
cpu_idle();
}
Index: linux-3.2/kernel/mutex.c
===================================================================
--- linux-3.2.orig/kernel/mutex.c
+++ linux-3.2/kernel/mutex.c
@@ -240,9 +240,7 @@ __mutex_lock_common(struct mutex *lock,
diff --git a/kernel/mutex.c b/kernel/mutex.c
index 89096dd..a307cc9 100644
--- a/kernel/mutex.c
+++ b/kernel/mutex.c
@@ -240,9 +240,7 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass,
/* didn't get the lock, go to sleep: */
spin_unlock_mutex(&lock->wait_lock, flags);
@ -479,11 +480,11 @@ Index: linux-3.2/kernel/mutex.c
spin_lock_mutex(&lock->wait_lock, flags);
}
Index: linux-3.2/kernel/softirq.c
===================================================================
--- linux-3.2.orig/kernel/softirq.c
+++ linux-3.2/kernel/softirq.c
@@ -744,9 +744,7 @@ static int run_ksoftirqd(void * __bind_c
diff --git a/kernel/softirq.c b/kernel/softirq.c
index 2c71d91..c9da2c8 100644
--- a/kernel/softirq.c
+++ b/kernel/softirq.c
@@ -744,9 +744,7 @@ static int run_ksoftirqd(void * __bind_cpu)
while (!kthread_should_stop()) {
preempt_disable();
if (!local_softirq_pending()) {
@ -494,3 +495,6 @@ Index: linux-3.2/kernel/softirq.c
}
__set_current_state(TASK_RUNNING);
--
1.7.10

View File

@ -1,21 +1,21 @@
From 244867f1bbbcc44274b4bf053f82e6de83b5e32d 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: [PATCH 032/267] 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.2/kernel/signal.c
===================================================================
--- linux-3.2.orig/kernel/signal.c
+++ linux-3.2/kernel/signal.c
@@ -682,6 +682,9 @@ void signal_wake_up(struct task_struct *
diff --git a/kernel/signal.c b/kernel/signal.c
index d8b0b21..8ad4755 100644
--- a/kernel/signal.c
+++ b/kernel/signal.c
@@ -682,6 +682,9 @@ void signal_wake_up(struct task_struct *t, int resume)
set_tsk_thread_flag(t, TIF_SIGPENDING);
@ -25,3 +25,6 @@ Index: linux-3.2/kernel/signal.c
/*
* For SIGKILL, we want to wake it up in the stopped/traced/killable
* case. We don't check t->state here because there is a race with it
--
1.7.10

View File

@ -1,21 +1,21 @@
From 224b94ef7444a37fa715a10779f3a758722c7598 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: [PATCH 033/267] 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.2/kernel/posix-timers.c
===================================================================
--- linux-3.2.orig/kernel/posix-timers.c
+++ linux-3.2/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.2/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) &&
@ -33,3 +33,6 @@ Index: linux-3.2/kernel/posix-timers.c
return NULL;
return task_pid(rtn);
--
1.7.10

View File

@ -1,24 +1,24 @@
From 4f199fd1218f10cf419d1c9f9a7ed6c57969320c 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: [PATCH 034/267] 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.2/include/linux/sched.h
===================================================================
--- linux-3.2.orig/include/linux/sched.h
+++ linux-3.2/include/linux/sched.h
diff --git a/include/linux/sched.h b/include/linux/sched.h
index 9897fe6..7268acf 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -1387,6 +1387,7 @@ struct task_struct {
/* signal handlers */
struct signal_struct *signal;
@ -27,11 +27,11 @@ Index: linux-3.2/include/linux/sched.h
sigset_t blocked, real_blocked;
sigset_t saved_sigmask; /* restored if set_restore_sigmask() was used */
Index: linux-3.2/include/linux/signal.h
===================================================================
--- linux-3.2.orig/include/linux/signal.h
+++ linux-3.2/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 a822300..a448900 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.2/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.2/kernel/exit.c
===================================================================
--- linux-3.2.orig/kernel/exit.c
+++ linux-3.2/kernel/exit.c
@@ -141,7 +141,7 @@ static void __exit_signal(struct task_st
diff --git a/kernel/exit.c b/kernel/exit.c
index e6e01b9..9075780 100644
--- a/kernel/exit.c
+++ b/kernel/exit.c
@@ -141,7 +141,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.2/kernel/exit.c
tsk->sighand = NULL;
spin_unlock(&sighand->siglock);
Index: linux-3.2/kernel/fork.c
===================================================================
--- linux-3.2.orig/kernel/fork.c
+++ linux-3.2/kernel/fork.c
@@ -1131,6 +1131,7 @@ static struct task_struct *copy_process(
diff --git a/kernel/fork.c b/kernel/fork.c
index 0acf42c0..d8aa0c7 100644
--- a/kernel/fork.c
+++ b/kernel/fork.c
@@ -1134,6 +1134,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.2/kernel/fork.c
p->utime = cputime_zero;
p->stime = cputime_zero;
Index: linux-3.2/kernel/signal.c
===================================================================
--- linux-3.2.orig/kernel/signal.c
+++ linux-3.2/kernel/signal.c
@@ -344,13 +344,45 @@ static bool task_participate_group_stop(
diff --git a/kernel/signal.c b/kernel/signal.c
index 8ad4755..fc1a67a 100644
--- a/kernel/signal.c
+++ b/kernel/signal.c
@@ -344,13 +344,45 @@ static bool task_participate_group_stop(struct task_struct *task)
return false;
}
@ -115,7 +115,7 @@ Index: linux-3.2/kernel/signal.c
{
struct sigqueue *q = NULL;
struct user_struct *user;
@@ -367,7 +399,10 @@ __sigqueue_alloc(int sig, struct task_st
@@ -367,7 +399,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.2/kernel/signal.c
} else {
print_dropped_signal(sig);
}
@@ -384,6 +419,13 @@ __sigqueue_alloc(int sig, struct task_st
@@ -384,6 +419,13 @@ __sigqueue_alloc(int sig, struct task_struct *t, gfp_t flags, int override_rlimi
return q;
}
@ -141,7 +141,7 @@ Index: linux-3.2/kernel/signal.c
static void __sigqueue_free(struct sigqueue *q)
{
if (q->flags & SIGQUEUE_PREALLOC)
@@ -393,6 +435,21 @@ static void __sigqueue_free(struct sigqu
@@ -393,6 +435,21 @@ static void __sigqueue_free(struct sigqueue *q)
kmem_cache_free(sigqueue_cachep, q);
}
@ -163,7 +163,7 @@ Index: linux-3.2/kernel/signal.c
void flush_sigqueue(struct sigpending *queue)
{
struct sigqueue *q;
@@ -406,6 +463,21 @@ void flush_sigqueue(struct sigpending *q
@@ -406,6 +463,21 @@ void flush_sigqueue(struct sigpending *queue)
}
/*
@ -185,7 +185,7 @@ Index: linux-3.2/kernel/signal.c
* Flush all pending signals for a task.
*/
void __flush_signals(struct task_struct *t)
@@ -554,7 +626,7 @@ static void collect_signal(int sig, stru
@@ -554,7 +626,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.2/kernel/signal.c
} else {
/*
* Ok, it wasn't in the queue. This must be
@@ -600,6 +672,8 @@ int dequeue_signal(struct task_struct *t
@@ -600,6 +672,8 @@ int dequeue_signal(struct task_struct *tsk, sigset_t *mask, siginfo_t *info)
{
int signr;
@ -213,3 +213,6 @@ Index: linux-3.2/kernel/signal.c
if (q)
q->flags |= SIGQUEUE_PREALLOC;
--
1.7.10

View File

@ -1,5 +1,7 @@
Subject: signal/x86: Delay calling signals in atomic
From 1c54a96e16e5e6f3e9978d231c9db374a68f968e Mon Sep 17 00:00:00 2001
From: Oleg Nesterov <oleg@redhat.com>
Date: Tue, 10 Apr 2012 14:33:53 -0400
Subject: [PATCH 035/267] 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.2/arch/x86/include/asm/signal.h
===================================================================
--- linux-3.2.orig/arch/x86/include/asm/signal.h
+++ linux-3.2/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.2/arch/x86/include/asm/signal.h
#else
/* Here we must cater to libcs that poke about in kernel headers. */
Index: linux-3.2/arch/x86/kernel/signal.c
===================================================================
--- linux-3.2.orig/arch/x86/kernel/signal.c
+++ linux-3.2/arch/x86/kernel/signal.c
@@ -820,6 +820,15 @@ do_notify_resume(struct pt_regs *regs, v
diff --git a/arch/x86/kernel/signal.c b/arch/x86/kernel/signal.c
index 54ddaeb2..12c4d53 100644
--- a/arch/x86/kernel/signal.c
+++ b/arch/x86/kernel/signal.c
@@ -820,6 +820,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.2/arch/x86/kernel/signal.c
/* deal with pending signal delivery */
if (thread_info_flags & _TIF_SIGPENDING)
do_signal(regs);
Index: linux-3.2/include/linux/sched.h
===================================================================
--- linux-3.2.orig/include/linux/sched.h
+++ linux-3.2/include/linux/sched.h
diff --git a/include/linux/sched.h b/include/linux/sched.h
index 7268acf..ed2b9f9 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -1392,6 +1392,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.2/include/linux/sched.h
unsigned long sas_ss_sp;
size_t sas_ss_size;
Index: linux-3.2/kernel/signal.c
===================================================================
--- linux-3.2.orig/kernel/signal.c
+++ linux-3.2/kernel/signal.c
@@ -1273,8 +1273,8 @@ int do_send_sig_info(int sig, struct sig
diff --git a/kernel/signal.c b/kernel/signal.c
index fc1a67a..c8b1bc1 100644
--- a/kernel/signal.c
+++ b/kernel/signal.c
@@ -1273,8 +1273,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.2/kernel/signal.c
{
unsigned long int flags;
int ret, blocked, ignored;
@@ -1299,6 +1299,39 @@ force_sig_info(int sig, struct siginfo *
@@ -1299,6 +1299,39 @@ force_sig_info(int sig, struct siginfo *info, struct task_struct *t)
return ret;
}
@ -149,3 +150,6 @@ Index: linux-3.2/kernel/signal.c
/*
* Nuke all other threads in the group.
*/
--
1.7.10

View File

@ -1,21 +1,22 @@
From f105d10b4701b0b44c781bc0c37379f3468521a3 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: [PATCH 036/267] 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.2/include/asm-generic/cmpxchg-local.h
===================================================================
--- linux-3.2.orig/include/asm-generic/cmpxchg-local.h
+++ linux-3.2/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 +25,7 @@ Index: linux-3.2/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 +34,7 @@ Index: linux-3.2/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;
@ -47,3 +48,6 @@ Index: linux-3.2/include/asm-generic/cmpxchg-local.h
return prev;
}
--
1.7.10

View File

@ -1,21 +1,21 @@
From a908abba18460e32b36e6b183e77b6c7c1cceb94 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: [PATCH 037/267] 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.2/drivers/char/random.c
===================================================================
--- linux-3.2.orig/drivers/char/random.c
+++ linux-3.2/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 6035ab8..786a856 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.2/drivers/char/random.c
sample.jiffies = jiffies;
sample.cycles = get_cycles();
@@ -676,8 +679,6 @@ static void add_timer_randomness(struct
@@ -676,8 +679,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));
}
@ -38,3 +38,6 @@ Index: linux-3.2/drivers/char/random.c
}
void add_input_randomness(unsigned int type, unsigned int code,
--
1.7.10

View File

@ -1,6 +1,8 @@
From 31e34bf84003d53073f3fa91d53cd6ac31bfbe58 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: [PATCH 038/267] 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 | 2 ++
arch/arm/mach-at91/at91sam926x_time.c | 6 +++++-
2 files changed, 7 insertions(+), 1 deletion(-)
Index: linux-3.2/arch/arm/mach-at91/at91rm9200_time.c
===================================================================
--- linux-3.2.orig/arch/arm/mach-at91/at91rm9200_time.c
+++ linux-3.2/arch/arm/mach-at91/at91rm9200_time.c
@@ -114,6 +114,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 1dd69c8..0666570 100644
--- a/arch/arm/mach-at91/at91rm9200_time.c
+++ b/arch/arm/mach-at91/at91rm9200_time.c
@@ -114,6 +114,7 @@ clkevt32k_mode(enum clock_event_mode mode, struct clock_event_device *dev)
last_crtr = read_CRTR();
switch (mode) {
case CLOCK_EVT_MODE_PERIODIC:
@ -26,7 +27,7 @@ Index: linux-3.2/arch/arm/mach-at91/at91rm9200_time.c
/* PIT for periodic irqs; fixed rate of 1/HZ */
irqmask = AT91_ST_PITS;
at91_sys_write(AT91_ST_PIMR, LATCH);
@@ -127,6 +128,7 @@ clkevt32k_mode(enum clock_event_mode mod
@@ -127,6 +128,7 @@ clkevt32k_mode(enum clock_event_mode mode, struct clock_event_device *dev)
break;
case CLOCK_EVT_MODE_SHUTDOWN:
case CLOCK_EVT_MODE_UNUSED:
@ -34,10 +35,10 @@ Index: linux-3.2/arch/arm/mach-at91/at91rm9200_time.c
case CLOCK_EVT_MODE_RESUME:
irqmask = 0;
break;
Index: linux-3.2/arch/arm/mach-at91/at91sam926x_time.c
===================================================================
--- linux-3.2.orig/arch/arm/mach-at91/at91sam926x_time.c
+++ linux-3.2/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 4ba8549..97d1e14 100644
--- a/arch/arm/mach-at91/at91sam926x_time.c
+++ b/arch/arm/mach-at91/at91sam926x_time.c
@@ -54,7 +54,7 @@ static struct clocksource pit_clk = {
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
};
@ -47,7 +48,7 @@ Index: linux-3.2/arch/arm/mach-at91/at91sam926x_time.c
/*
* Clockevent device: interrupts every 1/HZ (== pit_cycles * MCK/16)
*/
@@ -63,6 +63,9 @@ pit_clkevt_mode(enum clock_event_mode mo
@@ -63,6 +63,9 @@ pit_clkevt_mode(enum clock_event_mode mode, struct clock_event_device *dev)
{
switch (mode) {
case CLOCK_EVT_MODE_PERIODIC:
@ -57,7 +58,7 @@ Index: linux-3.2/arch/arm/mach-at91/at91sam926x_time.c
/* update clocksource counter */
pit_cnt += pit_cycle * PIT_PICNT(at91_sys_read(AT91_PIT_PIVR));
at91_sys_write(AT91_PIT_MR, (pit_cycle - 1) | AT91_PIT_PITEN
@@ -75,6 +78,7 @@ pit_clkevt_mode(enum clock_event_mode mo
@@ -75,6 +78,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 */
at91_sys_write(AT91_PIT_MR, (pit_cycle - 1) | AT91_PIT_PITEN);
@ -65,3 +66,6 @@ Index: linux-3.2/arch/arm/mach-at91/at91sam926x_time.c
break;
case CLOCK_EVT_MODE_RESUME:
break;
--
1.7.10

View File

@ -1,22 +1,23 @@
From b4217e96b0c71c84b8edbca7b99813b5f0f72033 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: [PATCH 039/267] 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.2/drivers/clocksource/tcb_clksrc.c
===================================================================
--- linux-3.2.orig/drivers/clocksource/tcb_clksrc.c
+++ linux-3.2/drivers/clocksource/tcb_clksrc.c
diff --git a/drivers/clocksource/tcb_clksrc.c b/drivers/clocksource/tcb_clksrc.c
index 79c47e8..8976b3d 100644
--- a/drivers/clocksource/tcb_clksrc.c
+++ b/drivers/clocksource/tcb_clksrc.c
@@ -21,8 +21,7 @@
* resolution better than 200 nsec).
*
@ -35,7 +36,7 @@ Index: linux-3.2/drivers/clocksource/tcb_clksrc.c
void __iomem *regs;
};
@@ -76,13 +76,6 @@ static struct tc_clkevt_device *to_tc_cl
@@ -76,13 +76,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.2/drivers/clocksource/tcb_clksrc.c
static u32 timer_clock;
static void tc_mode(enum clock_event_mode m, struct clock_event_device *d)
@@ -105,11 +98,12 @@ static void tc_mode(enum clock_event_mod
@@ -105,11 +98,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.2/drivers/clocksource/tcb_clksrc.c
/* Enable clock and interrupts on RC compare */
__raw_writel(ATMEL_TC_CPCS, regs + ATMEL_TC_REG(2, IER));
@@ -122,7 +116,7 @@ static void tc_mode(enum clock_event_mod
@@ -122,7 +116,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.2/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));
@@ -152,8 +146,12 @@ static struct tc_clkevt_device clkevt =
@@ -152,8 +146,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.2/drivers/clocksource/tcb_clksrc.c
struct clk *t2_clk = tc->clk[2];
int irq = tc->irq[2];
@@ -188,11 +187,17 @@ static void __init setup_clkevents(struc
@@ -188,11 +187,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.2/drivers/clocksource/tcb_clksrc.c
return 0;
}
arch_initcall(tcb_clksrc_init);
Index: linux-3.2/drivers/misc/Kconfig
===================================================================
--- linux-3.2.orig/drivers/misc/Kconfig
+++ linux-3.2/drivers/misc/Kconfig
diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
index 5664696..f3031a4 100644
--- a/drivers/misc/Kconfig
+++ b/drivers/misc/Kconfig
@@ -97,8 +97,7 @@ config ATMEL_TCB_CLKSRC
are combined to make a single 32-bit timer.
@ -161,3 +162,6 @@ Index: linux-3.2/drivers/misc/Kconfig
config IBM_ASM
tristate "Device driver for IBM RSA service processor"
depends on X86 && PCI && INPUT && EXPERIMENTAL
--
1.7.10

View File

@ -1,21 +1,22 @@
From 32a59ec7007ad587e8523ea3628b364c434d4c54 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: [PATCH 040/267] 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.2/drivers/net/ethernet/dec/tulip/tulip_core.c
===================================================================
--- linux-3.2.orig/drivers/net/ethernet/dec/tulip/tulip_core.c
+++ linux-3.2/drivers/net/ethernet/dec/tulip/tulip_core.c
@@ -1949,6 +1949,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 9656dd0..ef7df09 100644
--- a/drivers/net/ethernet/dec/tulip/tulip_core.c
+++ b/drivers/net/ethernet/dec/tulip/tulip_core.c
@@ -1949,6 +1949,7 @@ static void __devexit tulip_remove_one (struct pci_dev *pdev)
pci_iounmap(pdev, tp->base_addr);
free_netdev (dev);
pci_release_regions (pdev);
@ -23,3 +24,6 @@ Index: linux-3.2/drivers/net/ethernet/dec/tulip/tulip_core.c
pci_set_drvdata (pdev, NULL);
/* pci_power_off (pdev, -1); */
--
1.7.10

View File

@ -1,22 +1,22 @@
From 4d7e0a71990ab73749dfde4f4cd201cf1bdb0f45 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: [PATCH 041/267] 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.2/drivers/net/ethernet/realtek/8139too.c
===================================================================
--- linux-3.2.orig/drivers/net/ethernet/realtek/8139too.c
+++ linux-3.2/drivers/net/ethernet/realtek/8139too.c
@@ -2174,7 +2174,7 @@ static irqreturn_t rtl8139_interrupt (in
diff --git a/drivers/net/ethernet/realtek/8139too.c b/drivers/net/ethernet/realtek/8139too.c
index 4d6b254..004c054 100644
--- a/drivers/net/ethernet/realtek/8139too.c
+++ b/drivers/net/ethernet/realtek/8139too.c
@@ -2174,7 +2174,7 @@ static irqreturn_t rtl8139_interrupt (int irq, void *dev_instance)
*/
static void rtl8139_poll_controller(struct net_device *dev)
{
@ -25,3 +25,6 @@ Index: linux-3.2/drivers/net/ethernet/realtek/8139too.c
rtl8139_interrupt(dev->irq, dev);
enable_irq(dev->irq);
}
--
1.7.10

View File

@ -1,6 +1,8 @@
From 1c36d3306722a2042bd4dc26baf20393c42c5b22 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: [PATCH 042/267] 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.2/drivers/net/ethernet/ibm/ehea/ehea_main.c
===================================================================
--- linux-3.2.orig/drivers/net/ethernet/ibm/ehea/ehea_main.c
+++ linux-3.2/drivers/net/ethernet/ibm/ehea/ehea_main.c
@@ -1304,7 +1304,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 bfeccbf..fddfaf1 100644
--- a/drivers/net/ethernet/ibm/ehea/ehea_main.c
+++ b/drivers/net/ethernet/ibm/ehea/ehea_main.c
@@ -1304,7 +1304,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,
@ -51,3 +52,6 @@ Index: linux-3.2/drivers/net/ethernet/ibm/ehea/ehea_main.c
pr);
if (ret) {
netdev_err(dev, "failed registering irq for ehea_queue port_res_nr:%d, ist=%X\n",
--
1.7.10

View File

@ -1,6 +1,8 @@
From 2989477b9c1c1f9aa82a8db158ab3a03a4b7b2f5 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: [PATCH 043/267] 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 +15,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.2/drivers/net/ethernet/cadence/at91_ether.c
===================================================================
--- linux-3.2.orig/drivers/net/ethernet/cadence/at91_ether.c
+++ linux-3.2/drivers/net/ethernet/cadence/at91_ether.c
@@ -200,7 +200,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 56624d3..ad4dbea 100644
--- a/drivers/net/ethernet/cadence/at91_ether.c
+++ b/drivers/net/ethernet/cadence/at91_ether.c
@@ -200,7 +200,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 +33,7 @@ Index: linux-3.2/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
@@ -242,6 +244,7 @@ static irqreturn_t at91ether_phy_interru
@@ -242,6 +244,7 @@ static irqreturn_t at91ether_phy_interrupt(int irq, void *dev_id)
done:
disable_mdi();
@ -40,7 +41,7 @@ Index: linux-3.2/drivers/net/ethernet/cadence/at91_ether.c
return IRQ_HANDLED;
}
@@ -398,9 +401,11 @@ static void at91ether_check_link(unsigne
@@ -398,9 +401,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);
@ -52,3 +53,6 @@ Index: linux-3.2/drivers/net/ethernet/cadence/at91_ether.c
mod_timer(&lp->check_timer, jiffies + LINK_POLL_INTERVAL);
}
--
1.7.10

View File

@ -1,6 +1,7 @@
Subject: preempt-mark-legitimated-no-resched-sites.patch
From a5f63f3c98dcea7b51fda0df14ecc187fb329eee Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx@linutronix.de>
Date: Mon, 21 Mar 2011 13:32:17 +0100
Subject: [PATCH 044/267] preempt-mark-legitimated-no-resched-sites.patch
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
@ -11,10 +12,10 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
kernel/softirq.c | 4 ++--
5 files changed, 11 insertions(+), 8 deletions(-)
Index: linux-3.2/arch/powerpc/kernel/idle.c
===================================================================
--- linux-3.2.orig/arch/powerpc/kernel/idle.c
+++ linux-3.2/arch/powerpc/kernel/idle.c
diff --git a/arch/powerpc/kernel/idle.c b/arch/powerpc/kernel/idle.c
index f46dae5..5d70d10 100644
--- a/arch/powerpc/kernel/idle.c
+++ b/arch/powerpc/kernel/idle.c
@@ -95,7 +95,7 @@ void cpu_idle(void)
ppc64_runlatch_on();
tick_nohz_restart_sched_tick();
@ -24,10 +25,10 @@ Index: linux-3.2/arch/powerpc/kernel/idle.c
cpu_die();
}
schedule_preempt_disabled();
Index: linux-3.2/arch/sparc/kernel/process_64.c
===================================================================
--- linux-3.2.orig/arch/sparc/kernel/process_64.c
+++ linux-3.2/arch/sparc/kernel/process_64.c
diff --git a/arch/sparc/kernel/process_64.c b/arch/sparc/kernel/process_64.c
index 8ba0dbe..86fe09a 100644
--- a/arch/sparc/kernel/process_64.c
+++ b/arch/sparc/kernel/process_64.c
@@ -104,7 +104,7 @@ void cpu_idle(void)
#ifdef CONFIG_HOTPLUG_CPU
@ -37,10 +38,10 @@ Index: linux-3.2/arch/sparc/kernel/process_64.c
cpu_play_dead();
}
#endif
Index: linux-3.2/include/linux/preempt.h
===================================================================
--- linux-3.2.orig/include/linux/preempt.h
+++ linux-3.2/include/linux/preempt.h
diff --git a/include/linux/preempt.h b/include/linux/preempt.h
index 58969b2..227b0f5 100644
--- a/include/linux/preempt.h
+++ b/include/linux/preempt.h
@@ -48,12 +48,14 @@ do { \
barrier(); \
} while (0)
@ -65,10 +66,10 @@ Index: linux-3.2/include/linux/preempt.h
#define preempt_enable_no_resched() do { } while (0)
#define preempt_enable() do { } while (0)
Index: linux-3.2/kernel/sched.c
===================================================================
--- linux-3.2.orig/kernel/sched.c
+++ linux-3.2/kernel/sched.c
diff --git a/kernel/sched.c b/kernel/sched.c
index 465fd11..e35f01c 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -4415,7 +4415,7 @@ need_resched:
post_schedule(rq);
@ -96,10 +97,10 @@ Index: linux-3.2/kernel/sched.c
schedule();
Index: linux-3.2/kernel/softirq.c
===================================================================
--- linux-3.2.orig/kernel/softirq.c
+++ linux-3.2/kernel/softirq.c
diff --git a/kernel/softirq.c b/kernel/softirq.c
index c9da2c8..a8becbf 100644
--- a/kernel/softirq.c
+++ b/kernel/softirq.c
@@ -353,7 +353,7 @@ void irq_exit(void)
if (idle_cpu(smp_processor_id()) && !in_interrupt() && !need_resched())
tick_nohz_stop_sched_tick(0);
@ -109,7 +110,7 @@ Index: linux-3.2/kernel/softirq.c
}
/*
@@ -759,7 +759,7 @@ static int run_ksoftirqd(void * __bind_c
@@ -759,7 +759,7 @@ static int run_ksoftirqd(void * __bind_cpu)
if (local_softirq_pending())
__do_softirq();
local_irq_enable();
@ -118,3 +119,6 @@ Index: linux-3.2/kernel/softirq.c
cond_resched();
preempt_disable();
rcu_note_context_switch((long)__bind_cpu);
--
1.7.10

View File

@ -1,13 +1,14 @@
From 53e45a133e1f67b90e680878517ce10dc5c0d04b 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: [PATCH 045/267] 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 +16,10 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
mm/memory.c | 29 +++++++++++++++++++++++++++++
4 files changed, 34 insertions(+), 30 deletions(-)
Index: linux-3.2/include/linux/sched.h
===================================================================
--- linux-3.2.orig/include/linux/sched.h
+++ linux-3.2/include/linux/sched.h
diff --git a/include/linux/sched.h b/include/linux/sched.h
index ed2b9f9..bce86f9 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -1435,6 +1435,7 @@ struct task_struct {
/* mutex deadlock detection */
struct mutex_waiter *blocked_on;
@ -27,10 +28,10 @@ Index: linux-3.2/include/linux/sched.h
#ifdef CONFIG_TRACE_IRQFLAGS
unsigned int irq_events;
unsigned long hardirq_enable_ip;
Index: linux-3.2/include/linux/uaccess.h
===================================================================
--- linux-3.2.orig/include/linux/uaccess.h
+++ linux-3.2/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 +73,11 @@ Index: linux-3.2/include/linux/uaccess.h
#ifndef ARCH_HAS_NOCACHE_UACCESS
Index: linux-3.2/kernel/fork.c
===================================================================
--- linux-3.2.orig/kernel/fork.c
+++ linux-3.2/kernel/fork.c
@@ -1193,6 +1193,7 @@ static struct task_struct *copy_process(
diff --git a/kernel/fork.c b/kernel/fork.c
index d8aa0c7..a17bc75 100644
--- a/kernel/fork.c
+++ b/kernel/fork.c
@@ -1196,6 +1196,7 @@ static struct task_struct *copy_process(unsigned long clone_flags,
p->hardirq_context = 0;
p->softirq_context = 0;
#endif
@ -84,11 +85,11 @@ Index: linux-3.2/kernel/fork.c
#ifdef CONFIG_LOCKDEP
p->lockdep_depth = 0; /* no locks held yet */
p->curr_chain_key = 0;
Index: linux-3.2/mm/memory.c
===================================================================
--- linux-3.2.orig/mm/memory.c
+++ linux-3.2/mm/memory.c
@@ -3436,6 +3436,35 @@ unlock:
diff --git a/mm/memory.c b/mm/memory.c
index 1b1ca17..454ad3f 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -3444,6 +3444,35 @@ unlock:
return 0;
}
@ -124,3 +125,6 @@ Index: linux-3.2/mm/memory.c
/*
* By the time we get here, we already hold the mm semaphore
*/
--
1.7.10

View File

@ -1,6 +1,8 @@
Subject: mm: Fixup all fault handlers to check current->pagefault_disable
From ce05fde6b2b86bc5569433eef6869bdb1adcb32c Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx@linutronix.de>
Date: Thu, 17 Mar 2011 11:32:28 +0100
Subject: [PATCH 046/267] 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.2/arch/alpha/mm/fault.c
===================================================================
--- linux-3.2.orig/arch/alpha/mm/fault.c
+++ linux-3.2/arch/alpha/mm/fault.c
@@ -107,7 +107,7 @@ do_page_fault(unsigned long address, uns
diff --git a/arch/alpha/mm/fault.c b/arch/alpha/mm/fault.c
index fadd5f8..6d73e1b 100644
--- a/arch/alpha/mm/fault.c
+++ b/arch/alpha/mm/fault.c
@@ -107,7 +107,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.2/arch/alpha/mm/fault.c
goto no_context;
#ifdef CONFIG_ALPHA_LARGE_VMALLOC
Index: linux-3.2/arch/arm/mm/fault.c
===================================================================
--- linux-3.2.orig/arch/arm/mm/fault.c
+++ linux-3.2/arch/arm/mm/fault.c
@@ -294,7 +294,7 @@ do_page_fault(unsigned long addr, unsign
diff --git a/arch/arm/mm/fault.c b/arch/arm/mm/fault.c
index aa33949..c8dd303 100644
--- a/arch/arm/mm/fault.c
+++ b/arch/arm/mm/fault.c
@@ -294,7 +294,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.2/arch/arm/mm/fault.c
goto no_context;
/*
Index: linux-3.2/arch/avr32/mm/fault.c
===================================================================
--- linux-3.2.orig/arch/avr32/mm/fault.c
+++ linux-3.2/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.2/arch/avr32/mm/fault.c
goto no_context;
local_irq_enable();
Index: linux-3.2/arch/cris/mm/fault.c
===================================================================
--- linux-3.2.orig/arch/cris/mm/fault.c
+++ linux-3.2/arch/cris/mm/fault.c
@@ -111,7 +111,7 @@ do_page_fault(unsigned long address, str
diff --git a/arch/cris/mm/fault.c b/arch/cris/mm/fault.c
index 9dcac8e..2b2c292 100644
--- a/arch/cris/mm/fault.c
+++ b/arch/cris/mm/fault.c
@@ -111,7 +111,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.2/arch/cris/mm/fault.c
goto no_context;
down_read(&mm->mmap_sem);
Index: linux-3.2/arch/frv/mm/fault.c
===================================================================
--- linux-3.2.orig/arch/frv/mm/fault.c
+++ linux-3.2/arch/frv/mm/fault.c
@@ -79,7 +79,7 @@ asmlinkage void do_page_fault(int datamm
diff --git a/arch/frv/mm/fault.c b/arch/frv/mm/fault.c
index a325d57..3da8ec7 100644
--- a/arch/frv/mm/fault.c
+++ b/arch/frv/mm/fault.c
@@ -79,7 +79,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.2/arch/frv/mm/fault.c
goto no_context;
down_read(&mm->mmap_sem);
Index: linux-3.2/arch/ia64/mm/fault.c
===================================================================
--- linux-3.2.orig/arch/ia64/mm/fault.c
+++ linux-3.2/arch/ia64/mm/fault.c
@@ -89,7 +89,7 @@ ia64_do_page_fault (unsigned long addres
diff --git a/arch/ia64/mm/fault.c b/arch/ia64/mm/fault.c
index 20b3593..2a4e44f 100644
--- a/arch/ia64/mm/fault.c
+++ b/arch/ia64/mm/fault.c
@@ -89,7 +89,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.2/arch/ia64/mm/fault.c
goto no_context;
#ifdef CONFIG_VIRTUAL_MEM_MAP
Index: linux-3.2/arch/m32r/mm/fault.c
===================================================================
--- linux-3.2.orig/arch/m32r/mm/fault.c
+++ linux-3.2/arch/m32r/mm/fault.c
@@ -115,7 +115,7 @@ asmlinkage void do_page_fault(struct pt_
diff --git a/arch/m32r/mm/fault.c b/arch/m32r/mm/fault.c
index 2c9aeb4..16fa2c7 100644
--- a/arch/m32r/mm/fault.c
+++ b/arch/m32r/mm/fault.c
@@ -115,7 +115,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.2/arch/m32r/mm/fault.c
goto bad_area_nosemaphore;
/* When running in the kernel we expect faults to occur only to
Index: linux-3.2/arch/m68k/mm/fault.c
===================================================================
--- linux-3.2.orig/arch/m68k/mm/fault.c
+++ linux-3.2/arch/m68k/mm/fault.c
@@ -85,7 +85,7 @@ int do_page_fault(struct pt_regs *regs,
diff --git a/arch/m68k/mm/fault.c b/arch/m68k/mm/fault.c
index 2db6099..238ffc0 100644
--- a/arch/m68k/mm/fault.c
+++ b/arch/m68k/mm/fault.c
@@ -85,7 +85,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.2/arch/m68k/mm/fault.c
goto no_context;
down_read(&mm->mmap_sem);
Index: linux-3.2/arch/microblaze/mm/fault.c
===================================================================
--- linux-3.2.orig/arch/microblaze/mm/fault.c
+++ linux-3.2/arch/microblaze/mm/fault.c
@@ -107,7 +107,7 @@ void do_page_fault(struct pt_regs *regs,
diff --git a/arch/microblaze/mm/fault.c b/arch/microblaze/mm/fault.c
index ae97d2c..c3f219c 100644
--- a/arch/microblaze/mm/fault.c
+++ b/arch/microblaze/mm/fault.c
@@ -107,7 +107,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.2/arch/microblaze/mm/fault.c
if (kernel_mode(regs))
goto bad_area_nosemaphore;
Index: linux-3.2/arch/mips/mm/fault.c
===================================================================
--- linux-3.2.orig/arch/mips/mm/fault.c
+++ linux-3.2/arch/mips/mm/fault.c
@@ -88,7 +88,7 @@ asmlinkage void __kprobes do_page_fault(
diff --git a/arch/mips/mm/fault.c b/arch/mips/mm/fault.c
index 937cf33..ce7e75e 100644
--- a/arch/mips/mm/fault.c
+++ b/arch/mips/mm/fault.c
@@ -88,7 +88,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.2/arch/mips/mm/fault.c
goto bad_area_nosemaphore;
down_read(&mm->mmap_sem);
Index: linux-3.2/arch/mn10300/mm/fault.c
===================================================================
--- linux-3.2.orig/arch/mn10300/mm/fault.c
+++ linux-3.2/arch/mn10300/mm/fault.c
@@ -168,7 +168,7 @@ asmlinkage void do_page_fault(struct pt_
diff --git a/arch/mn10300/mm/fault.c b/arch/mn10300/mm/fault.c
index 0945409..53c8d16 100644
--- a/arch/mn10300/mm/fault.c
+++ b/arch/mn10300/mm/fault.c
@@ -168,7 +168,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.2/arch/mn10300/mm/fault.c
goto no_context;
down_read(&mm->mmap_sem);
Index: linux-3.2/arch/parisc/mm/fault.c
===================================================================
--- linux-3.2.orig/arch/parisc/mm/fault.c
+++ linux-3.2/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.2/arch/parisc/mm/fault.c
goto no_context;
down_read(&mm->mmap_sem);
Index: linux-3.2/arch/powerpc/mm/fault.c
===================================================================
--- linux-3.2.orig/arch/powerpc/mm/fault.c
+++ linux-3.2/arch/powerpc/mm/fault.c
@@ -162,7 +162,7 @@ int __kprobes do_page_fault(struct pt_re
diff --git a/arch/powerpc/mm/fault.c b/arch/powerpc/mm/fault.c
index 5efe8c9..17f8bbe 100644
--- a/arch/powerpc/mm/fault.c
+++ b/arch/powerpc/mm/fault.c
@@ -162,7 +162,7 @@ int __kprobes do_page_fault(struct pt_regs *regs, unsigned long address,
}
#endif
@ -200,11 +202,11 @@ Index: linux-3.2/arch/powerpc/mm/fault.c
if (!user_mode(regs))
return SIGSEGV;
/* in_atomic() in user mode is really bad,
Index: linux-3.2/arch/s390/mm/fault.c
===================================================================
--- linux-3.2.orig/arch/s390/mm/fault.c
+++ linux-3.2/arch/s390/mm/fault.c
@@ -295,7 +295,8 @@ static inline int do_exception(struct pt
diff --git a/arch/s390/mm/fault.c b/arch/s390/mm/fault.c
index c7f0fbc..0d60168 100644
--- a/arch/s390/mm/fault.c
+++ b/arch/s390/mm/fault.c
@@ -294,7 +294,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.2/arch/s390/mm/fault.c
goto out;
address = trans_exc_code & __FAIL_ADDR_MASK;
@@ -426,7 +427,8 @@ void __kprobes do_asce_exception(struct
@@ -425,7 +426,8 @@ void __kprobes do_asce_exception(struct pt_regs *regs, long pgm_int_code,
struct mm_struct *mm = current->mm;
struct vm_area_struct *vma;
@ -224,11 +226,11 @@ Index: linux-3.2/arch/s390/mm/fault.c
goto no_context;
down_read(&mm->mmap_sem);
Index: linux-3.2/arch/score/mm/fault.c
===================================================================
--- linux-3.2.orig/arch/score/mm/fault.c
+++ linux-3.2/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.2/arch/score/mm/fault.c
goto bad_area_nosemaphore;
down_read(&mm->mmap_sem);
Index: linux-3.2/arch/sh/mm/fault_32.c
===================================================================
--- linux-3.2.orig/arch/sh/mm/fault_32.c
+++ linux-3.2/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 7bebd04..a67ac56 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.2/arch/sh/mm/fault_32.c
goto no_context;
down_read(&mm->mmap_sem);
Index: linux-3.2/arch/sparc/mm/fault_32.c
===================================================================
--- linux-3.2.orig/arch/sparc/mm/fault_32.c
+++ linux-3.2/arch/sparc/mm/fault_32.c
@@ -247,8 +247,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 8023fd7..e0742c1 100644
--- a/arch/sparc/mm/fault_32.c
+++ b/arch/sparc/mm/fault_32.c
@@ -247,8 +247,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.2/arch/sparc/mm/fault_32.c
perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address);
Index: linux-3.2/arch/sparc/mm/fault_64.c
===================================================================
--- linux-3.2.orig/arch/sparc/mm/fault_64.c
+++ linux-3.2/arch/sparc/mm/fault_64.c
@@ -322,7 +322,7 @@ asmlinkage void __kprobes do_sparc64_fau
diff --git a/arch/sparc/mm/fault_64.c b/arch/sparc/mm/fault_64.c
index 504c062..9d691a5 100644
--- a/arch/sparc/mm/fault_64.c
+++ b/arch/sparc/mm/fault_64.c
@@ -322,7 +322,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.2/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.2/arch/tile/mm/fault.c
===================================================================
--- linux-3.2.orig/arch/tile/mm/fault.c
+++ linux-3.2/arch/tile/mm/fault.c
@@ -346,7 +346,7 @@ static int handle_page_fault(struct pt_r
diff --git a/arch/tile/mm/fault.c b/arch/tile/mm/fault.c
index 25b7b90..ecdb016 100644
--- a/arch/tile/mm/fault.c
+++ b/arch/tile/mm/fault.c
@@ -346,7 +346,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.2/arch/tile/mm/fault.c
vma = NULL; /* happy compiler */
goto bad_area_nosemaphore;
}
Index: linux-3.2/arch/um/kernel/trap.c
===================================================================
--- linux-3.2.orig/arch/um/kernel/trap.c
+++ linux-3.2/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.2/arch/um/kernel/trap.c
goto out_nosemaphore;
down_read(&mm->mmap_sem);
Index: linux-3.2/arch/x86/mm/fault.c
===================================================================
--- linux-3.2.orig/arch/x86/mm/fault.c
+++ linux-3.2/arch/x86/mm/fault.c
@@ -1084,7 +1084,7 @@ do_page_fault(struct pt_regs *regs, unsi
diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c
index 5db0490..191015f 100644
--- a/arch/x86/mm/fault.c
+++ b/arch/x86/mm/fault.c
@@ -1084,7 +1084,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.2/arch/x86/mm/fault.c
bad_area_nosemaphore(regs, error_code, address);
return;
}
Index: linux-3.2/arch/xtensa/mm/fault.c
===================================================================
--- linux-3.2.orig/arch/xtensa/mm/fault.c
+++ linux-3.2/arch/xtensa/mm/fault.c
diff --git a/arch/xtensa/mm/fault.c b/arch/xtensa/mm/fault.c
index e367e30..705f483 100644
--- a/arch/xtensa/mm/fault.c
+++ b/arch/xtensa/mm/fault.c
@@ -57,7 +57,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..
@ -330,3 +332,6 @@ Index: linux-3.2/arch/xtensa/mm/fault.c
bad_page_fault(regs, address, SIGSEGV);
return;
}
--
1.7.10

View File

@ -1,6 +1,7 @@
Subject: mm: pagefault_disabled()
From 2ee27c95145e16e1c9cff6bc19ae777e55269863 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: [PATCH 047/267] 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, 41 insertions(+), 26 deletions(-)
Index: linux-3.2/arch/alpha/mm/fault.c
===================================================================
--- linux-3.2.orig/arch/alpha/mm/fault.c
+++ linux-3.2/arch/alpha/mm/fault.c
@@ -107,7 +107,7 @@ do_page_fault(unsigned long address, uns
diff --git a/arch/alpha/mm/fault.c b/arch/alpha/mm/fault.c
index 6d73e1b..4a0a0af 100644
--- a/arch/alpha/mm/fault.c
+++ b/arch/alpha/mm/fault.c
@@ -107,7 +107,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.2/arch/alpha/mm/fault.c
goto no_context;
#ifdef CONFIG_ALPHA_LARGE_VMALLOC
Index: linux-3.2/arch/arm/mm/fault.c
===================================================================
--- linux-3.2.orig/arch/arm/mm/fault.c
+++ linux-3.2/arch/arm/mm/fault.c
@@ -294,7 +294,7 @@ do_page_fault(unsigned long addr, unsign
diff --git a/arch/arm/mm/fault.c b/arch/arm/mm/fault.c
index c8dd303..d717bd3 100644
--- a/arch/arm/mm/fault.c
+++ b/arch/arm/mm/fault.c
@@ -294,7 +294,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.2/arch/arm/mm/fault.c
goto no_context;
/*
Index: linux-3.2/arch/avr32/mm/fault.c
===================================================================
--- linux-3.2.orig/arch/avr32/mm/fault.c
+++ linux-3.2/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.2/arch/avr32/mm/fault.c
goto no_context;
local_irq_enable();
Index: linux-3.2/arch/cris/mm/fault.c
===================================================================
--- linux-3.2.orig/arch/cris/mm/fault.c
+++ linux-3.2/arch/cris/mm/fault.c
@@ -111,7 +111,7 @@ do_page_fault(unsigned long address, str
diff --git a/arch/cris/mm/fault.c b/arch/cris/mm/fault.c
index 2b2c292..ba9cfbe 100644
--- a/arch/cris/mm/fault.c
+++ b/arch/cris/mm/fault.c
@@ -111,7 +111,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.2/arch/cris/mm/fault.c
goto no_context;
down_read(&mm->mmap_sem);
Index: linux-3.2/arch/frv/mm/fault.c
===================================================================
--- linux-3.2.orig/arch/frv/mm/fault.c
+++ linux-3.2/arch/frv/mm/fault.c
@@ -79,7 +79,7 @@ asmlinkage void do_page_fault(int datamm
diff --git a/arch/frv/mm/fault.c b/arch/frv/mm/fault.c
index 3da8ec7..a9ce0f0 100644
--- a/arch/frv/mm/fault.c
+++ b/arch/frv/mm/fault.c
@@ -79,7 +79,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.2/arch/frv/mm/fault.c
goto no_context;
down_read(&mm->mmap_sem);
Index: linux-3.2/arch/ia64/mm/fault.c
===================================================================
--- linux-3.2.orig/arch/ia64/mm/fault.c
+++ linux-3.2/arch/ia64/mm/fault.c
@@ -89,7 +89,7 @@ ia64_do_page_fault (unsigned long addres
diff --git a/arch/ia64/mm/fault.c b/arch/ia64/mm/fault.c
index 2a4e44f..05946c2 100644
--- a/arch/ia64/mm/fault.c
+++ b/arch/ia64/mm/fault.c
@@ -89,7 +89,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.2/arch/ia64/mm/fault.c
goto no_context;
#ifdef CONFIG_VIRTUAL_MEM_MAP
Index: linux-3.2/arch/m32r/mm/fault.c
===================================================================
--- linux-3.2.orig/arch/m32r/mm/fault.c
+++ linux-3.2/arch/m32r/mm/fault.c
@@ -115,7 +115,7 @@ asmlinkage void do_page_fault(struct pt_
diff --git a/arch/m32r/mm/fault.c b/arch/m32r/mm/fault.c
index 16fa2c7..6d763f6 100644
--- a/arch/m32r/mm/fault.c
+++ b/arch/m32r/mm/fault.c
@@ -115,7 +115,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.2/arch/m32r/mm/fault.c
goto bad_area_nosemaphore;
/* When running in the kernel we expect faults to occur only to
Index: linux-3.2/arch/m68k/mm/fault.c
===================================================================
--- linux-3.2.orig/arch/m68k/mm/fault.c
+++ linux-3.2/arch/m68k/mm/fault.c
@@ -85,7 +85,7 @@ int do_page_fault(struct pt_regs *regs,
diff --git a/arch/m68k/mm/fault.c b/arch/m68k/mm/fault.c
index 238ffc0..74fe559 100644
--- a/arch/m68k/mm/fault.c
+++ b/arch/m68k/mm/fault.c
@@ -85,7 +85,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.2/arch/m68k/mm/fault.c
goto no_context;
down_read(&mm->mmap_sem);
Index: linux-3.2/arch/microblaze/mm/fault.c
===================================================================
--- linux-3.2.orig/arch/microblaze/mm/fault.c
+++ linux-3.2/arch/microblaze/mm/fault.c
@@ -107,7 +107,7 @@ void do_page_fault(struct pt_regs *regs,
diff --git a/arch/microblaze/mm/fault.c b/arch/microblaze/mm/fault.c
index c3f219c..4cdd84d 100644
--- a/arch/microblaze/mm/fault.c
+++ b/arch/microblaze/mm/fault.c
@@ -107,7 +107,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.2/arch/microblaze/mm/fault.c
if (kernel_mode(regs))
goto bad_area_nosemaphore;
Index: linux-3.2/arch/mips/mm/fault.c
===================================================================
--- linux-3.2.orig/arch/mips/mm/fault.c
+++ linux-3.2/arch/mips/mm/fault.c
@@ -88,7 +88,7 @@ asmlinkage void __kprobes do_page_fault(
diff --git a/arch/mips/mm/fault.c b/arch/mips/mm/fault.c
index ce7e75e..7ade72b 100644
--- a/arch/mips/mm/fault.c
+++ b/arch/mips/mm/fault.c
@@ -88,7 +88,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.2/arch/mips/mm/fault.c
goto bad_area_nosemaphore;
down_read(&mm->mmap_sem);
Index: linux-3.2/arch/mn10300/mm/fault.c
===================================================================
--- linux-3.2.orig/arch/mn10300/mm/fault.c
+++ linux-3.2/arch/mn10300/mm/fault.c
@@ -168,7 +168,7 @@ asmlinkage void do_page_fault(struct pt_
diff --git a/arch/mn10300/mm/fault.c b/arch/mn10300/mm/fault.c
index 53c8d16..2fea01c 100644
--- a/arch/mn10300/mm/fault.c
+++ b/arch/mn10300/mm/fault.c
@@ -168,7 +168,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.2/arch/mn10300/mm/fault.c
goto no_context;
down_read(&mm->mmap_sem);
Index: linux-3.2/arch/parisc/mm/fault.c
===================================================================
--- linux-3.2.orig/arch/parisc/mm/fault.c
+++ linux-3.2/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.2/arch/parisc/mm/fault.c
goto no_context;
down_read(&mm->mmap_sem);
Index: linux-3.2/arch/powerpc/mm/fault.c
===================================================================
--- linux-3.2.orig/arch/powerpc/mm/fault.c
+++ linux-3.2/arch/powerpc/mm/fault.c
@@ -162,7 +162,7 @@ int __kprobes do_page_fault(struct pt_re
diff --git a/arch/powerpc/mm/fault.c b/arch/powerpc/mm/fault.c
index 17f8bbe..94bedd4 100644
--- a/arch/powerpc/mm/fault.c
+++ b/arch/powerpc/mm/fault.c
@@ -162,7 +162,7 @@ int __kprobes do_page_fault(struct pt_regs *regs, unsigned long address,
}
#endif
@ -204,11 +205,11 @@ Index: linux-3.2/arch/powerpc/mm/fault.c
if (!user_mode(regs))
return SIGSEGV;
/* in_atomic() in user mode is really bad,
Index: linux-3.2/arch/s390/mm/fault.c
===================================================================
--- linux-3.2.orig/arch/s390/mm/fault.c
+++ linux-3.2/arch/s390/mm/fault.c
@@ -295,8 +295,8 @@ static inline int do_exception(struct pt
diff --git a/arch/s390/mm/fault.c b/arch/s390/mm/fault.c
index 0d60168..a68d836 100644
--- a/arch/s390/mm/fault.c
+++ b/arch/s390/mm/fault.c
@@ -294,8 +294,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.2/arch/s390/mm/fault.c
goto out;
address = trans_exc_code & __FAIL_ADDR_MASK;
@@ -427,8 +427,8 @@ void __kprobes do_asce_exception(struct
@@ -426,8 +426,8 @@ void __kprobes do_asce_exception(struct pt_regs *regs, long pgm_int_code,
struct mm_struct *mm = current->mm;
struct vm_area_struct *vma;
@ -230,11 +231,11 @@ Index: linux-3.2/arch/s390/mm/fault.c
goto no_context;
down_read(&mm->mmap_sem);
Index: linux-3.2/arch/score/mm/fault.c
===================================================================
--- linux-3.2.orig/arch/score/mm/fault.c
+++ linux-3.2/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..
*/
@ -243,11 +244,11 @@ Index: linux-3.2/arch/score/mm/fault.c
goto bad_area_nosemaphore;
down_read(&mm->mmap_sem);
Index: linux-3.2/arch/sh/mm/fault_32.c
===================================================================
--- linux-3.2.orig/arch/sh/mm/fault_32.c
+++ linux-3.2/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 a67ac56..643670d 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:
*/
@ -256,11 +257,11 @@ Index: linux-3.2/arch/sh/mm/fault_32.c
goto no_context;
down_read(&mm->mmap_sem);
Index: linux-3.2/arch/sparc/mm/fault_32.c
===================================================================
--- linux-3.2.orig/arch/sparc/mm/fault_32.c
+++ linux-3.2/arch/sparc/mm/fault_32.c
@@ -247,7 +247,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 e0742c1..054cf56 100644
--- a/arch/sparc/mm/fault_32.c
+++ b/arch/sparc/mm/fault_32.c
@@ -247,7 +247,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..
*/
@ -269,11 +270,11 @@ Index: linux-3.2/arch/sparc/mm/fault_32.c
goto no_context;
perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address);
Index: linux-3.2/arch/sparc/mm/fault_64.c
===================================================================
--- linux-3.2.orig/arch/sparc/mm/fault_64.c
+++ linux-3.2/arch/sparc/mm/fault_64.c
@@ -322,7 +322,7 @@ asmlinkage void __kprobes do_sparc64_fau
diff --git a/arch/sparc/mm/fault_64.c b/arch/sparc/mm/fault_64.c
index 9d691a5..f6572f8 100644
--- a/arch/sparc/mm/fault_64.c
+++ b/arch/sparc/mm/fault_64.c
@@ -322,7 +322,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..
*/
@ -282,11 +283,11 @@ Index: linux-3.2/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.2/arch/tile/mm/fault.c
===================================================================
--- linux-3.2.orig/arch/tile/mm/fault.c
+++ linux-3.2/arch/tile/mm/fault.c
@@ -346,7 +346,7 @@ static int handle_page_fault(struct pt_r
diff --git a/arch/tile/mm/fault.c b/arch/tile/mm/fault.c
index ecdb016..1b6fa51 100644
--- a/arch/tile/mm/fault.c
+++ b/arch/tile/mm/fault.c
@@ -346,7 +346,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.
*/
@ -295,11 +296,11 @@ Index: linux-3.2/arch/tile/mm/fault.c
vma = NULL; /* happy compiler */
goto bad_area_nosemaphore;
}
Index: linux-3.2/arch/um/kernel/trap.c
===================================================================
--- linux-3.2.orig/arch/um/kernel/trap.c
+++ linux-3.2/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.
*/
@ -308,11 +309,11 @@ Index: linux-3.2/arch/um/kernel/trap.c
goto out_nosemaphore;
down_read(&mm->mmap_sem);
Index: linux-3.2/arch/x86/mm/fault.c
===================================================================
--- linux-3.2.orig/arch/x86/mm/fault.c
+++ linux-3.2/arch/x86/mm/fault.c
@@ -1084,7 +1084,7 @@ do_page_fault(struct pt_regs *regs, unsi
diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c
index 191015f..b567837 100644
--- a/arch/x86/mm/fault.c
+++ b/arch/x86/mm/fault.c
@@ -1084,7 +1084,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:
*/
@ -321,10 +322,10 @@ Index: linux-3.2/arch/x86/mm/fault.c
bad_area_nosemaphore(regs, error_code, address);
return;
}
Index: linux-3.2/arch/xtensa/mm/fault.c
===================================================================
--- linux-3.2.orig/arch/xtensa/mm/fault.c
+++ linux-3.2/arch/xtensa/mm/fault.c
diff --git a/arch/xtensa/mm/fault.c b/arch/xtensa/mm/fault.c
index 705f483..8f3f52a 100644
--- a/arch/xtensa/mm/fault.c
+++ b/arch/xtensa/mm/fault.c
@@ -57,7 +57,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..
@ -334,10 +335,10 @@ Index: linux-3.2/arch/xtensa/mm/fault.c
bad_page_fault(regs, address, SIGSEGV);
return;
}
Index: linux-3.2/include/linux/sched.h
===================================================================
--- linux-3.2.orig/include/linux/sched.h
+++ linux-3.2/include/linux/sched.h
diff --git a/include/linux/sched.h b/include/linux/sched.h
index bce86f9..8cb4365 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -91,6 +91,7 @@ struct sched_param {
#include <linux/latencytop.h>
#include <linux/cred.h>
@ -374,11 +375,11 @@ Index: linux-3.2/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.2/kernel/fork.c
===================================================================
--- linux-3.2.orig/kernel/fork.c
+++ linux-3.2/kernel/fork.c
@@ -1193,7 +1193,9 @@ static struct task_struct *copy_process(
diff --git a/kernel/fork.c b/kernel/fork.c
index a17bc75..7992f54 100644
--- a/kernel/fork.c
+++ b/kernel/fork.c
@@ -1196,7 +1196,9 @@ static struct task_struct *copy_process(unsigned long clone_flags,
p->hardirq_context = 0;
p->softirq_context = 0;
#endif
@ -388,3 +389,6 @@ Index: linux-3.2/kernel/fork.c
#ifdef CONFIG_LOCKDEP
p->lockdep_depth = 0; /* no locks held yet */
p->curr_chain_key = 0;
--
1.7.10

View File

@ -1,6 +1,7 @@
Subject: mm: raw_pagefault_disable
From 48b2128f0cb2e9503cce884a100c636729eb6b23 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: [PATCH 048/267] 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.2/include/linux/uaccess.h
===================================================================
--- linux-3.2.orig/include/linux/uaccess.h
+++ linux-3.2/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.2/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,11 +129,11 @@ Index: linux-3.2/include/linux/uaccess.h
set_fs(old_fs); \
ret; \
})
Index: linux-3.2/mm/memory.c
===================================================================
--- linux-3.2.orig/mm/memory.c
+++ linux-3.2/mm/memory.c
@@ -3436,6 +3436,7 @@ unlock:
diff --git a/mm/memory.c b/mm/memory.c
index 454ad3f..a3f7ed8 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -3444,6 +3444,7 @@ unlock:
return 0;
}
@ -141,7 +141,7 @@ Index: linux-3.2/mm/memory.c
void pagefault_disable(void)
{
inc_preempt_count();
@@ -3464,6 +3465,7 @@ void pagefault_enable(void)
@@ -3472,6 +3473,7 @@ void pagefault_enable(void)
preempt_check_resched();
}
EXPORT_SYMBOL_GPL(pagefault_enable);
@ -149,3 +149,6 @@ Index: linux-3.2/mm/memory.c
/*
* By the time we get here, we already hold the mm semaphore
--
1.7.10

View File

@ -1,6 +1,7 @@
Subject: filemap-fix-up.patch
From 90e4703e2535c334bf845c719179075440e4fdca Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx@linutronix.de>
Date: Fri, 17 Jun 2011 18:56:24 +0200
Subject: [PATCH 049/267] 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.2/mm/filemap.c
===================================================================
--- linux-3.2.orig/mm/filemap.c
+++ linux-3.2/mm/filemap.c
@@ -2044,7 +2044,7 @@ size_t iov_iter_copy_from_user_atomic(st
diff --git a/mm/filemap.c b/mm/filemap.c
index 03c5b0e..4a30d36 100644
--- a/mm/filemap.c
+++ b/mm/filemap.c
@@ -2044,7 +2044,7 @@ size_t iov_iter_copy_from_user_atomic(struct page *page,
char *kaddr;
size_t copied;
@ -22,3 +23,6 @@ Index: linux-3.2/mm/filemap.c
kaddr = kmap_atomic(page, KM_USER0);
if (likely(i->nr_segs == 1)) {
int left;
--
1.7.10

View File

@ -1,6 +1,8 @@
From d7f4a8b96d5578399fab50795bb26568d3a4a1dc 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: [PATCH 050/267] mm: Remove preempt count from pagefault
disable/enable
Now that all users are cleaned up, we can remove the preemption count.
@ -9,11 +11,11 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
mm/memory.c | 7 -------
1 file changed, 7 deletions(-)
Index: linux-3.2/mm/memory.c
===================================================================
--- linux-3.2.orig/mm/memory.c
+++ linux-3.2/mm/memory.c
@@ -3439,7 +3439,6 @@ unlock:
diff --git a/mm/memory.c b/mm/memory.c
index a3f7ed8..7fa62d9 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -3447,7 +3447,6 @@ unlock:
#ifdef CONFIG_PREEMPT_RT_FULL
void pagefault_disable(void)
{
@ -21,7 +23,7 @@ Index: linux-3.2/mm/memory.c
current->pagefault_disabled++;
/*
* make sure to have issued the store before a pagefault
@@ -3457,12 +3456,6 @@ void pagefault_enable(void)
@@ -3465,12 +3464,6 @@ void pagefault_enable(void)
*/
barrier();
current->pagefault_disabled--;
@ -34,3 +36,6 @@ Index: linux-3.2/mm/memory.c
}
EXPORT_SYMBOL_GPL(pagefault_enable);
#endif
--
1.7.10

View File

@ -1,22 +1,22 @@
From 7aa88c0924519e9f412b40d1b5fe72bd7d9afff0 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: [PATCH 051/267] 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.2/arch/x86/mm/highmem_32.c
===================================================================
--- linux-3.2.orig/arch/x86/mm/highmem_32.c
+++ linux-3.2/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 f4f29b1..71bd7d6 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);
@ -25,3 +25,6 @@ Index: linux-3.2/arch/x86/mm/highmem_32.c
set_pte(kmap_pte-idx, mk_pte(page, prot));
arch_flush_lazy_mmu_mode();
--
1.7.10

View File

@ -1,6 +1,7 @@
From f79388c83db88b6ef89497405df9c630964b512e 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: [PATCH 052/267] 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,18 +17,17 @@ 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.2/include/linux/kernel.h
===================================================================
--- linux-3.2.orig/include/linux/kernel.h
+++ linux-3.2/include/linux/kernel.h
@@ -356,7 +356,7 @@ extern enum system_states {
diff --git a/include/linux/kernel.h b/include/linux/kernel.h
index a70783d..22bdd4b 100644
--- a/include/linux/kernel.h
+++ b/include/linux/kernel.h
@@ -369,7 +369,7 @@ extern enum system_states {
SYSTEM_HALT,
SYSTEM_POWER_OFF,
SYSTEM_RESTART,
@ -36,11 +36,11 @@ Index: linux-3.2/include/linux/kernel.h
} system_state;
#define TAINT_PROPRIETARY_MODULE 0
Index: linux-3.2/kernel/power/hibernate.c
===================================================================
--- linux-3.2.orig/kernel/power/hibernate.c
+++ linux-3.2/kernel/power/hibernate.c
@@ -284,6 +284,8 @@ static int create_image(int platform_mod
diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c
index 7c0d578..32741e2 100644
--- a/kernel/power/hibernate.c
+++ b/kernel/power/hibernate.c
@@ -284,6 +284,8 @@ static int create_image(int platform_mode)
local_irq_disable();
@ -49,7 +49,7 @@ Index: linux-3.2/kernel/power/hibernate.c
error = syscore_suspend();
if (error) {
printk(KERN_ERR "PM: Some system devices failed to power down, "
@@ -311,6 +313,7 @@ static int create_image(int platform_mod
@@ -311,6 +313,7 @@ static int create_image(int platform_mode)
syscore_resume();
Enable_irqs:
@ -57,7 +57,7 @@ Index: linux-3.2/kernel/power/hibernate.c
local_irq_enable();
Enable_cpus:
@@ -437,6 +440,7 @@ static int resume_target_kernel(bool pla
@@ -437,6 +440,7 @@ static int resume_target_kernel(bool platform_mode)
goto Enable_cpus;
local_irq_disable();
@ -65,7 +65,7 @@ Index: linux-3.2/kernel/power/hibernate.c
error = syscore_suspend();
if (error)
@@ -470,6 +474,7 @@ static int resume_target_kernel(bool pla
@@ -470,6 +474,7 @@ static int resume_target_kernel(bool platform_mode)
syscore_resume();
Enable_irqs:
@ -89,11 +89,11 @@ Index: linux-3.2/kernel/power/hibernate.c
local_irq_enable();
enable_nonboot_cpus();
Index: linux-3.2/kernel/power/suspend.c
===================================================================
--- linux-3.2.orig/kernel/power/suspend.c
+++ linux-3.2/kernel/power/suspend.c
@@ -171,6 +171,8 @@ static int suspend_enter(suspend_state_t
diff --git a/kernel/power/suspend.c b/kernel/power/suspend.c
index 4953dc0..691f46e 100644
--- a/kernel/power/suspend.c
+++ b/kernel/power/suspend.c
@@ -171,6 +171,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.2/kernel/power/suspend.c
error = syscore_suspend();
if (!error) {
*wakeup = pm_wakeup_pending();
@@ -181,6 +183,8 @@ static int suspend_enter(suspend_state_t
@@ -181,6 +183,8 @@ static int suspend_enter(suspend_state_t state, bool *wakeup)
syscore_resume();
}
@ -111,3 +111,6 @@ Index: linux-3.2/kernel/power/suspend.c
arch_suspend_enable_irqs();
BUG_ON(irqs_disabled());
--
1.7.10

View File

@ -1,6 +1,7 @@
From 417e0d7c3de36b87075e446b0920e480fb96a871 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: [PATCH 053/267] 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.2/drivers/of/base.c
===================================================================
--- linux-3.2.orig/drivers/of/base.c
+++ linux-3.2/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 9b6588e..200f2dd 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_SPARC */
@ -40,7 +40,7 @@ Index: linux-3.2/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.2/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.2/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.2/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.2/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) {
@ -193,3 +193,6 @@ Index: linux-3.2/drivers/of/base.c
break;
}
of_node_put(from);
--
1.7.10

View File

@ -1,19 +1,20 @@
Subject: of-convert-devtree-lock.patch
From 580a4dd59597f8d389ab340f87ebb0ad654db7e3 Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx@linutronix.de>
Date: Mon, 21 Mar 2011 14:35:34 +0100
Subject: [PATCH 054/267] 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.2/arch/sparc/kernel/prom_common.c
===================================================================
--- linux-3.2.orig/arch/sparc/kernel/prom_common.c
+++ linux-3.2/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.2/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.2/arch/sparc/kernel/prom_common.c
mutex_unlock(&of_set_property_mutex);
/* XXX Upate procfs if necessary... */
Index: linux-3.2/drivers/of/base.c
===================================================================
--- linux-3.2.orig/drivers/of/base.c
+++ linux-3.2/drivers/of/base.c
diff --git a/drivers/of/base.c b/drivers/of/base.c
index 200f2dd..becc6ca 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.2/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.2/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.2/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.2/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.2/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.2/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.2/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.2/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.2/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.2/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.2/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.2/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.2/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.2/drivers/of/base.c
return np;
}
EXPORT_SYMBOL(of_find_node_by_phandle);
@@ -998,18 +1010,18 @@ int prom_add_property(struct device_node
@@ -998,18 +1010,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.2/drivers/of/base.c
#ifdef CONFIG_PROC_DEVICETREE
/* try to add to proc as well if it was initialized */
@@ -1034,7 +1046,7 @@ int prom_remove_property(struct device_n
@@ -1034,7 +1046,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.2/drivers/of/base.c
next = &np->properties;
while (*next) {
if (*next == prop) {
@@ -1047,7 +1059,7 @@ int prom_remove_property(struct device_n
@@ -1047,7 +1059,7 @@ int prom_remove_property(struct device_node *np, struct property *prop)
}
next = &(*next)->next;
}
@ -326,7 +327,7 @@ Index: linux-3.2/drivers/of/base.c
if (!found)
return -ENODEV;
@@ -1077,7 +1089,7 @@ int prom_update_property(struct device_n
@@ -1077,7 +1089,7 @@ int prom_update_property(struct device_node *np,
unsigned long flags;
int found = 0;
@ -335,7 +336,7 @@ Index: linux-3.2/drivers/of/base.c
next = &np->properties;
while (*next) {
if (*next == oldprop) {
@@ -1091,7 +1103,7 @@ int prom_update_property(struct device_n
@@ -1091,7 +1103,7 @@ int prom_update_property(struct device_node *np,
}
next = &(*next)->next;
}
@ -344,7 +345,7 @@ Index: linux-3.2/drivers/of/base.c
if (!found)
return -ENODEV;
@@ -1121,12 +1133,12 @@ void of_attach_node(struct device_node *
@@ -1121,12 +1133,12 @@ void of_attach_node(struct device_node *np)
{
unsigned long flags;
@ -359,7 +360,7 @@ Index: linux-3.2/drivers/of/base.c
}
/**
@@ -1140,7 +1152,7 @@ void of_detach_node(struct device_node *
@@ -1140,7 +1152,7 @@ void of_detach_node(struct device_node *np)
struct device_node *parent;
unsigned long flags;
@ -368,7 +369,7 @@ Index: linux-3.2/drivers/of/base.c
parent = np->parent;
if (!parent)
@@ -1171,7 +1183,7 @@ void of_detach_node(struct device_node *
@@ -1171,7 +1183,7 @@ void of_detach_node(struct device_node *np)
of_node_set_flag(np, OF_DETACHED);
out_unlock:
@ -377,10 +378,10 @@ Index: linux-3.2/drivers/of/base.c
}
#endif /* defined(CONFIG_OF_DYNAMIC) */
Index: linux-3.2/include/linux/of.h
===================================================================
--- linux-3.2.orig/include/linux/of.h
+++ linux-3.2/include/linux/of.h
diff --git a/include/linux/of.h b/include/linux/of.h
index 4948552..e87303d 100644
--- a/include/linux/of.h
+++ b/include/linux/of.h
@@ -71,7 +71,7 @@ struct device_node {
extern struct device_node *allnodes;
extern struct device_node *of_chosen;
@ -390,3 +391,6 @@ Index: linux-3.2/include/linux/of.h
static inline bool of_have_populated_dt(void)
{
--
1.7.10

View File

@ -1,17 +1,18 @@
Subject: list-add-list-last-entry.patch
From cbf1e12f91e468d580db7a5ecefa0bdab8021cdf Mon Sep 17 00:00:00 2001
From: Peter Zijlstra <peterz@infradead.org>
Date: Tue, 21 Jun 2011 11:22:36 +0200
Subject: [PATCH 055/267] 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.2/include/linux/list.h
===================================================================
--- linux-3.2.orig/include/linux/list.h
+++ linux-3.2/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)
/**
@ -29,3 +30,6 @@ Index: linux-3.2/include/linux/list.h
* list_for_each - iterate over a list
* @pos: the &struct list_head to use as a loop cursor.
* @head: the head for your list.
--
1.7.10

View File

@ -1,17 +1,18 @@
Subject: mm-page-alloc-use-list-last-entry.patch
From eadff32638247080501a10cd5294d86e535c0019 Mon Sep 17 00:00:00 2001
From: Peter Zijlstra <peterz@infradead.org>
Date: Tue, 21 Jun 2011 11:24:35 +0200
Subject: [PATCH 056/267] 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.2/mm/page_alloc.c
===================================================================
--- linux-3.2.orig/mm/page_alloc.c
+++ linux-3.2/mm/page_alloc.c
@@ -625,7 +625,7 @@ static void free_pcppages_bulk(struct zo
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 485be89..3344154 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -625,7 +625,7 @@ static void free_pcppages_bulk(struct zone *zone, int count,
batch_free = to_free;
do {
@ -20,3 +21,6 @@ Index: linux-3.2/mm/page_alloc.c
/* must delete as __free_one_page list manipulates */
list_del(&page->lru);
/* MIGRATE_MOVABLE list may include MIGRATE_RESERVEs */
--
1.7.10

View File

@ -1,17 +1,18 @@
Subject: mm-slab-move-debug-out.patch
From a04f0b4dea8eaefdb1f1c10122a74aee2875b1f0 Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx@linutronix.de>
Date: Mon, 20 Jun 2011 10:42:04 +0200
Subject: [PATCH 057/267] 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.2/mm/slab.c
===================================================================
--- linux-3.2.orig/mm/slab.c
+++ linux-3.2/mm/slab.c
@@ -3851,10 +3851,10 @@ void kmem_cache_free(struct kmem_cache *
diff --git a/mm/slab.c b/mm/slab.c
index b76905e..1fd9983 100644
--- a/mm/slab.c
+++ b/mm/slab.c
@@ -3851,10 +3851,10 @@ void kmem_cache_free(struct kmem_cache *cachep, void *objp)
{
unsigned long flags;
@ -36,3 +37,6 @@ Index: linux-3.2/mm/slab.c
__cache_free(c, (void *)objp, __builtin_return_address(0));
local_irq_restore(flags);
}
--
1.7.10

View File

@ -1,16 +1,17 @@
Subject: rwsem-inlcude-fix.patch
From dde840601c92b17bf87a3357ac64ad703ef3e7e2 Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx@linutronix.de>
Date: Fri, 15 Jul 2011 21:24:27 +0200
Subject: [PATCH 058/267] 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.2/include/linux/pid.h
===================================================================
--- linux-3.2.orig/include/linux/pid.h
+++ linux-3.2/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
@ -19,3 +20,6 @@ Index: linux-3.2/include/linux/pid.h
enum pid_type
{
--
1.7.10

View File

@ -1,16 +1,17 @@
Subject: sysctl-include-fix.patch
From b44a025ed02cf7deb699ff642758cea3b6198cb7 Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx@linutronix.de>
Date: Mon, 14 Nov 2011 10:52:34 +0100
Subject: [PATCH 059/267] 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.2/include/linux/sysctl.h
===================================================================
--- linux-3.2.orig/include/linux/sysctl.h
+++ linux-3.2/include/linux/sysctl.h
diff --git a/include/linux/sysctl.h b/include/linux/sysctl.h
index 703cfa33..b954c41 100644
--- a/include/linux/sysctl.h
+++ b/include/linux/sysctl.h
@@ -932,6 +932,7 @@ enum
#include <linux/list.h>
#include <linux/rcupdate.h>
@ -19,3 +20,6 @@ Index: linux-3.2/include/linux/sysctl.h
/* For the /proc/sys support */
struct ctl_table;
--
1.7.10

View File

@ -1,6 +1,7 @@
Subject: net-flip-lock-dep-thingy.patch
From 7f2038cd9f9a170fb63f0ab16d1ff7a8b9ee92cf Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx@linutronix.de>
Date: Tue, 28 Jun 2011 10:59:58 +0200
Subject: [PATCH 060/267] 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.2/net/core/sock.c
===================================================================
--- linux-3.2.orig/net/core/sock.c
+++ linux-3.2/net/core/sock.c
@@ -2031,12 +2031,11 @@ void lock_sock_nested(struct sock *sk, i
diff --git a/net/core/sock.c b/net/core/sock.c
index b23f174..a87eb16 100644
--- a/net/core/sock.c
+++ b/net/core/sock.c
@@ -2031,12 +2031,11 @@ void lock_sock_nested(struct sock *sk, int subclass)
if (sk->sk_lock.owned)
__lock_sock(sk);
sk->sk_lock.owned = 1;
@ -111,3 +110,6 @@ Index: linux-3.2/net/core/sock.c
}
EXPORT_SYMBOL(lock_sock_nested);
--
1.7.10

View File

@ -1,6 +1,7 @@
Subject: softirq-thread-do-softirq.patch
From 96af58acea4b1f2d36ff57313a95c5cd6e8c0e9c Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx@linutronix.de>
Date: Tue, 28 Jun 2011 15:44:15 +0200
Subject: [PATCH 061/267] 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, 3 insertions(+), 1 deletion(-)
Index: linux-3.2/include/linux/interrupt.h
===================================================================
--- linux-3.2.orig/include/linux/interrupt.h
+++ linux-3.2/include/linux/interrupt.h
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
index a64b00e..21b94de 100644
--- a/include/linux/interrupt.h
+++ b/include/linux/interrupt.h
@@ -454,6 +454,8 @@ struct softirq_action
asmlinkage void do_softirq(void);
@ -21,10 +22,10 @@ Index: linux-3.2/include/linux/interrupt.h
extern void open_softirq(int nr, void (*action)(struct softirq_action *));
extern void softirq_init(void);
static inline void __raise_softirq_irqoff(unsigned int nr)
Index: linux-3.2/net/core/dev.c
===================================================================
--- linux-3.2.orig/net/core/dev.c
+++ linux-3.2/net/core/dev.c
diff --git a/net/core/dev.c b/net/core/dev.c
index 55cd370..c28987a 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -3037,7 +3037,7 @@ int netif_rx_ni(struct sk_buff *skb)
preempt_disable();
err = netif_rx(skb);
@ -34,3 +35,6 @@ Index: linux-3.2/net/core/dev.c
preempt_enable();
return err;
--
1.7.10

View File

@ -1,16 +1,17 @@
Subject: softirq-split-out-code.patch
From afd97d0727b378d48a20073ae838cb800ec0c7df Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx@linutronix.de>
Date: Tue, 28 Jun 2011 15:46:49 +0200
Subject: [PATCH 062/267] 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.2/kernel/softirq.c
===================================================================
--- linux-3.2.orig/kernel/softirq.c
+++ linux-3.2/kernel/softirq.c
diff --git a/kernel/softirq.c b/kernel/softirq.c
index a8becbf..c6c5824 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.2/kernel/softirq.c
#ifndef __ARCH_HAS_DO_SOFTIRQ
asmlinkage void do_softirq(void)
@@ -743,22 +761,14 @@ static int run_ksoftirqd(void * __bind_c
@@ -743,22 +761,14 @@ static int run_ksoftirqd(void * __bind_cpu)
while (!kthread_should_stop()) {
preempt_disable();
@ -153,3 +154,6 @@ Index: linux-3.2/kernel/softirq.c
__preempt_enable_no_resched();
cond_resched();
preempt_disable();
--
1.7.10

View File

@ -1,22 +1,23 @@
From f6adc04c439c56acd6163820b2ac6251a138755f 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: [PATCH 063/267] 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.2/arch/x86/kernel/apic/io_apic.c
===================================================================
--- linux-3.2.orig/arch/x86/kernel/apic/io_apic.c
+++ linux-3.2/arch/x86/kernel/apic/io_apic.c
@@ -2521,7 +2521,8 @@ static void ack_apic_level(struct irq_da
diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
index 8980555..91527bc 100644
--- a/arch/x86/kernel/apic/io_apic.c
+++ b/arch/x86/kernel/apic/io_apic.c
@@ -2521,7 +2521,8 @@ static void ack_apic_level(struct irq_data *data)
irq_complete_move(cfg);
#ifdef CONFIG_GENERIC_PENDING_IRQ
/* If we are moving the irq we need to mask it */
@ -26,3 +27,6 @@ Index: linux-3.2/arch/x86/kernel/apic/io_apic.c
do_unmask_irq = 1;
mask_ioapic(cfg);
}
--
1.7.10

View File

@ -1,17 +1,18 @@
Subject: x86-32-fix-signal-crap.patch
From 52c45c824d10baf0dd84cc56dc2fc35536d4fa49 Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx@linutronix.de>
Date: Mon, 18 Jul 2011 15:59:38 +0200
Subject: [PATCH 064/267] x86-32-fix-signal-crap.patch
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/x86/kernel/entry_32.S | 8 ++++++++
1 file changed, 8 insertions(+)
Index: linux-3.2/arch/x86/kernel/entry_32.S
===================================================================
--- linux-3.2.orig/arch/x86/kernel/entry_32.S
+++ linux-3.2/arch/x86/kernel/entry_32.S
@@ -626,7 +626,11 @@ work_notifysig: # deal with pending s
diff --git a/arch/x86/kernel/entry_32.S b/arch/x86/kernel/entry_32.S
index bcda816..426cf51 100644
--- a/arch/x86/kernel/entry_32.S
+++ b/arch/x86/kernel/entry_32.S
@@ -629,7 +629,11 @@ work_notifysig: # deal with pending signals and
jne work_notifysig_v86 # returning to kernel-space or
# vm86-space
xorl %edx, %edx
@ -23,7 +24,7 @@ Index: linux-3.2/arch/x86/kernel/entry_32.S
jmp resume_userspace_sig
ALIGN
@@ -639,7 +643,11 @@ work_notifysig_v86:
@@ -642,7 +646,11 @@ work_notifysig_v86:
movl %esp, %eax
#endif
xorl %edx, %edx
@ -35,3 +36,6 @@ Index: linux-3.2/arch/x86/kernel/entry_32.S
jmp resume_userspace_sig
END(work_pending)
--
1.7.10

View File

@ -1,5 +1,7 @@
Subject: x86: Do not disable preemption in int3 on 32bit
From 31561541540fcec25c731c360a66fab17d50fa33 Mon Sep 17 00:00:00 2001
From: Steven Rostedt <rostedt@goodmis.org>
Date: Tue, 10 Apr 2012 14:33:57 -0400
Subject: [PATCH 065/267] 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.2/arch/x86/kernel/traps.c
===================================================================
--- linux-3.2.orig/arch/x86/kernel/traps.c
+++ linux-3.2/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 31d9d0f..cc88aec 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.2/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.2/arch/x86/kernel/traps.c
}
static void __kprobes
@@ -222,9 +236,9 @@ dotraplinkage void do_stack_segment(stru
@@ -222,9 +236,9 @@ dotraplinkage void do_stack_segment(struct pt_regs *regs, long error_code)
if (notify_die(DIE_TRAP, "stack segment", regs, error_code,
12, SIGBUS) == NOTIFY_STOP)
return;
@ -76,7 +77,7 @@ Index: linux-3.2/arch/x86/kernel/traps.c
}
dotraplinkage void do_double_fault(struct pt_regs *regs, long error_code)
@@ -316,9 +330,9 @@ dotraplinkage void __kprobes do_int3(str
@@ -316,9 +330,9 @@ dotraplinkage void __kprobes do_int3(struct pt_regs *regs, long error_code)
return;
#endif
@ -88,7 +89,7 @@ Index: linux-3.2/arch/x86/kernel/traps.c
}
#ifdef CONFIG_X86_64
@@ -412,12 +426,12 @@ dotraplinkage void __kprobes do_debug(st
@@ -412,12 +426,12 @@ dotraplinkage void __kprobes do_debug(struct pt_regs *regs, long error_code)
return;
/* It's safe to allow irq's after DR6 has been saved */
@ -103,7 +104,7 @@ Index: linux-3.2/arch/x86/kernel/traps.c
return;
}
@@ -436,7 +450,7 @@ dotraplinkage void __kprobes do_debug(st
@@ -436,7 +450,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);
@ -112,3 +113,6 @@ Index: linux-3.2/arch/x86/kernel/traps.c
return;
}
--
1.7.10

View File

@ -1,6 +1,7 @@
Subject: rcu: Reduce lock section
From e48b25d1e88f0066fc74583020ad764cd0d002f5 Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx@linutronix.de>
Date: Fri, 24 Jun 2011 22:23:02 +0200
Subject: [PATCH 066/267] rcu: Reduce lock section
So the waitqueue wakeup is outside the raw locked section.
@ -11,11 +12,11 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
kernel/rcutree_plugin.h | 14 ++++++++------
3 files changed, 11 insertions(+), 8 deletions(-)
Index: linux-3.2/kernel/rcutree.c
===================================================================
--- linux-3.2.orig/kernel/rcutree.c
+++ linux-3.2/kernel/rcutree.c
@@ -1221,7 +1221,7 @@ static void __rcu_offline_cpu(int cpu, s
diff --git a/kernel/rcutree.c b/kernel/rcutree.c
index 6b76d81..8ef8675 100644
--- a/kernel/rcutree.c
+++ b/kernel/rcutree.c
@@ -1221,7 +1221,7 @@ static void __rcu_offline_cpu(int cpu, struct rcu_state *rsp)
else
raw_spin_unlock_irqrestore(&rnp->lock, flags);
if (need_report & RCU_OFL_TASKS_EXP_GP)
@ -24,11 +25,11 @@ Index: linux-3.2/kernel/rcutree.c
rcu_node_kthread_setaffinity(rnp, -1);
}
Index: linux-3.2/kernel/rcutree.h
===================================================================
--- linux-3.2.orig/kernel/rcutree.h
+++ linux-3.2/kernel/rcutree.h
@@ -451,7 +451,8 @@ static void rcu_preempt_check_callbacks(
diff --git a/kernel/rcutree.h b/kernel/rcutree.h
index 849ce9e..dca495d 100644
--- a/kernel/rcutree.h
+++ b/kernel/rcutree.h
@@ -451,7 +451,8 @@ static void rcu_preempt_check_callbacks(int cpu);
static void rcu_preempt_process_callbacks(void);
void call_rcu(struct rcu_head *head, void (*func)(struct rcu_head *rcu));
#if defined(CONFIG_HOTPLUG_CPU) || defined(CONFIG_TREE_PREEMPT_RCU)
@ -38,11 +39,11 @@ Index: linux-3.2/kernel/rcutree.h
#endif /* #if defined(CONFIG_HOTPLUG_CPU) || defined(CONFIG_TREE_PREEMPT_RCU) */
static int rcu_preempt_pending(int cpu);
static int rcu_preempt_needs_cpu(int cpu);
Index: linux-3.2/kernel/rcutree_plugin.h
===================================================================
--- linux-3.2.orig/kernel/rcutree_plugin.h
+++ linux-3.2/kernel/rcutree_plugin.h
@@ -407,7 +407,7 @@ static noinline void rcu_read_unlock_spe
diff --git a/kernel/rcutree_plugin.h b/kernel/rcutree_plugin.h
index 4b9b9f8..73cab33 100644
--- a/kernel/rcutree_plugin.h
+++ b/kernel/rcutree_plugin.h
@@ -407,7 +407,7 @@ static noinline void rcu_read_unlock_special(struct task_struct *t)
* then we need to report up the rcu_node hierarchy.
*/
if (!empty_exp && !rcu_preempted_readers_exp(rnp))
@ -51,7 +52,7 @@ Index: linux-3.2/kernel/rcutree_plugin.h
} else {
local_irq_restore(flags);
}
@@ -731,7 +731,8 @@ static int sync_rcu_preempt_exp_done(str
@@ -731,7 +731,8 @@ static int sync_rcu_preempt_exp_done(struct rcu_node *rnp)
*
* Caller must hold sync_rcu_preempt_exp_mutex.
*/
@ -61,7 +62,7 @@ Index: linux-3.2/kernel/rcutree_plugin.h
{
unsigned long flags;
unsigned long mask;
@@ -744,7 +745,8 @@ static void rcu_report_exp_rnp(struct rc
@@ -744,7 +745,8 @@ static void rcu_report_exp_rnp(struct rcu_state *rsp, struct rcu_node *rnp)
}
if (rnp->parent == NULL) {
raw_spin_unlock_irqrestore(&rnp->lock, flags);
@ -71,7 +72,7 @@ Index: linux-3.2/kernel/rcutree_plugin.h
break;
}
mask = rnp->grpmask;
@@ -777,7 +779,7 @@ sync_rcu_preempt_exp_init(struct rcu_sta
@@ -777,7 +779,7 @@ sync_rcu_preempt_exp_init(struct rcu_state *rsp, struct rcu_node *rnp)
must_wait = 1;
}
if (!must_wait)
@ -80,7 +81,7 @@ Index: linux-3.2/kernel/rcutree_plugin.h
}
/*
@@ -1069,9 +1071,9 @@ EXPORT_SYMBOL_GPL(synchronize_rcu_expedi
@@ -1069,9 +1071,9 @@ EXPORT_SYMBOL_GPL(synchronize_rcu_expedited);
* report on tasks preempted in RCU read-side critical sections during
* expedited RCU grace periods.
*/
@ -92,3 +93,6 @@ Index: linux-3.2/kernel/rcutree_plugin.h
}
#endif /* #ifdef CONFIG_HOTPLUG_CPU */
--
1.7.10

View File

@ -1,6 +1,7 @@
Subject: locking-various-init-fixes.patch
From dc11bfa3d93805ee1ad47b3b449f2ca456b2abd0 Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx@linutronix.de>
Date: Sun, 17 Jul 2011 21:25:03 +0200
Subject: [PATCH 067/267] 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.2/drivers/char/random.c
===================================================================
--- linux-3.2.orig/drivers/char/random.c
+++ linux-3.2/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 786a856..026bdbb 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.2/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.2/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.2/drivers/char/random.c
.pool = nonblocking_pool_data
};
Index: linux-3.2/drivers/usb/gadget/ci13xxx_udc.c
===================================================================
--- linux-3.2.orig/drivers/usb/gadget/ci13xxx_udc.c
+++ linux-3.2/drivers/usb/gadget/ci13xxx_udc.c
diff --git a/drivers/usb/gadget/ci13xxx_udc.c b/drivers/usb/gadget/ci13xxx_udc.c
index 9a0c397..f526873 100644
--- a/drivers/usb/gadget/ci13xxx_udc.c
+++ b/drivers/usb/gadget/ci13xxx_udc.c
@@ -819,7 +819,7 @@ static struct {
} dbg_data = {
.idx = 0,
@ -55,10 +56,10 @@ Index: linux-3.2/drivers/usb/gadget/ci13xxx_udc.c
};
/**
Index: linux-3.2/fs/file.c
===================================================================
--- linux-3.2.orig/fs/file.c
+++ linux-3.2/fs/file.c
diff --git a/fs/file.c b/fs/file.c
index 4c6992d..375472d 100644
--- a/fs/file.c
+++ b/fs/file.c
@@ -422,7 +422,7 @@ struct files_struct init_files = {
.close_on_exec = (fd_set *)&init_files.close_on_exec_init,
.open_fds = (fd_set *)&init_files.open_fds_init,
@ -68,10 +69,10 @@ Index: linux-3.2/fs/file.c
};
/*
Index: linux-3.2/include/linux/idr.h
===================================================================
--- linux-3.2.orig/include/linux/idr.h
+++ linux-3.2/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.2/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.2/kernel/cred.c
===================================================================
--- linux-3.2.orig/kernel/cred.c
+++ linux-3.2/kernel/cred.c
diff --git a/kernel/cred.c b/kernel/cred.c
index 48c6fd3..482a0e3 100644
--- a/kernel/cred.c
+++ b/kernel/cred.c
@@ -35,7 +35,7 @@ static struct kmem_cache *cred_jar;
static struct thread_group_cred init_tgcred = {
.usage = ATOMIC_INIT(2),
@ -94,3 +95,6 @@ Index: linux-3.2/kernel/cred.c
};
#endif
--
1.7.10

View File

@ -1,6 +1,7 @@
Subject: wait: Provide __wake_up_all_locked
From 90713b9e3f210d7ebb96dade4cc71b7397ce99d4 Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx@linutronix.de>
Date: Thu, 01 Dec 2011 00:04:00 +0100
Date: Thu, 1 Dec 2011 00:04:00 +0100
Subject: [PATCH 068/267] wait: Provide __wake_up_all_locked
For code which protects the waitqueue itself with another lock it
makes no sense to acquire the waitqueue lock for wakeup all. Provide
@ -13,11 +14,11 @@ Cc: stable-rt@vger.kernel.org
kernel/sched.c | 4 ++--
2 files changed, 5 insertions(+), 4 deletions(-)
Index: linux-3.2/include/linux/wait.h
===================================================================
--- linux-3.2.orig/include/linux/wait.h
+++ linux-3.2/include/linux/wait.h
@@ -157,7 +157,7 @@ void __wake_up(wait_queue_head_t *q, uns
diff --git a/include/linux/wait.h b/include/linux/wait.h
index 3efc9f3..1e904b8 100644
--- a/include/linux/wait.h
+++ b/include/linux/wait.h
@@ -157,7 +157,7 @@ void __wake_up(wait_queue_head_t *q, unsigned int mode, int nr, void *key);
void __wake_up_locked_key(wait_queue_head_t *q, unsigned int mode, void *key);
void __wake_up_sync_key(wait_queue_head_t *q, unsigned int mode, int nr,
void *key);
@ -26,7 +27,7 @@ Index: linux-3.2/include/linux/wait.h
void __wake_up_sync(wait_queue_head_t *q, unsigned int mode, int nr);
void __wake_up_bit(wait_queue_head_t *, void *, int);
int __wait_on_bit(wait_queue_head_t *, struct wait_bit_queue *, int (*)(void *), unsigned);
@@ -170,7 +170,8 @@ wait_queue_head_t *bit_waitqueue(void *,
@@ -170,7 +170,8 @@ wait_queue_head_t *bit_waitqueue(void *, int);
#define wake_up(x) __wake_up(x, TASK_NORMAL, 1, NULL)
#define wake_up_nr(x, nr) __wake_up(x, TASK_NORMAL, nr, NULL)
#define wake_up_all(x) __wake_up(x, TASK_NORMAL, 0, NULL)
@ -36,10 +37,10 @@ Index: linux-3.2/include/linux/wait.h
#define wake_up_interruptible(x) __wake_up(x, TASK_INTERRUPTIBLE, 1, NULL)
#define wake_up_interruptible_nr(x, nr) __wake_up(x, TASK_INTERRUPTIBLE, nr, NULL)
Index: linux-3.2/kernel/sched.c
===================================================================
--- linux-3.2.orig/kernel/sched.c
+++ linux-3.2/kernel/sched.c
diff --git a/kernel/sched.c b/kernel/sched.c
index e35f01c..bb93b0b 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -4637,9 +4637,9 @@ EXPORT_SYMBOL(__wake_up);
/*
* Same as __wake_up but called with the spinlock in wait_queue_head_t held.
@ -52,3 +53,6 @@ Index: linux-3.2/kernel/sched.c
}
EXPORT_SYMBOL_GPL(__wake_up_locked);
--
1.7.10

View File

@ -1,6 +1,8 @@
Subject: pci: Use __wake_up_all_locked pci_unblock_user_cfg_access()
From 0285604d1f4283b1bb59ec7efd683d4475c018db 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: [PATCH 069/267] 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.2/drivers/pci/access.c
===================================================================
--- linux-3.2.orig/drivers/pci/access.c
+++ linux-3.2/drivers/pci/access.c
@@ -441,7 +441,7 @@ void pci_unblock_user_cfg_access(struct
diff --git a/drivers/pci/access.c b/drivers/pci/access.c
index fdaa42a..1a6cc67 100644
--- a/drivers/pci/access.c
+++ b/drivers/pci/access.c
@@ -441,7 +441,7 @@ void pci_unblock_user_cfg_access(struct pci_dev *dev)
WARN_ON(!dev->block_ucfg_access);
dev->block_ucfg_access = 0;
@ -25,3 +27,6 @@ Index: linux-3.2/drivers/pci/access.c
raw_spin_unlock_irqrestore(&pci_lock, flags);
}
EXPORT_SYMBOL_GPL(pci_unblock_user_cfg_access);
--
1.7.10

View File

@ -1,6 +1,7 @@
Subject: latency-hist.patch
From e14a7c82d8bd43fbda64e57a9cae2a4fff5cb7fb Mon Sep 17 00:00:00 2001
From: Carsten Emde <C.Emde@osadl.org>
Date: Tue, 19 Jul 2011 14:03:41 +0100
Subject: [PATCH 070/267] 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.2/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.2/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.2/Documentation/trace/histograms.txt
+is provided.
+
+These data are also reset when the wakeup histogram is reset.
Index: linux-3.2/include/linux/sched.h
===================================================================
--- linux-3.2.orig/include/linux/sched.h
+++ linux-3.2/include/linux/sched.h
diff --git a/include/linux/sched.h b/include/linux/sched.h
index 8cb4365..30ac0b5 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -1570,6 +1570,12 @@ struct task_struct {
unsigned long trace;
/* bitmask and counter of trace recursion */
@ -232,10 +237,11 @@ Index: linux-3.2/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.2/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.2/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.2/include/trace/events/hist.h
+
+/* This part must be outside protection */
+#include <trace/define_trace.h>
Index: linux-3.2/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.2/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.2/include/trace/events/latency_hist.h
+
+#endif /* _LATENCY_HIST_H */
+
Index: linux-3.2/kernel/hrtimer.c
===================================================================
--- linux-3.2.orig/kernel/hrtimer.c
+++ linux-3.2/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.2/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.2/kernel/hrtimer.c
/*
* The immediate goal for using the softexpires is
* minimizing wakeups, not running timers at the
Index: linux-3.2/kernel/trace/Kconfig
===================================================================
--- linux-3.2.orig/kernel/trace/Kconfig
+++ linux-3.2/kernel/trace/Kconfig
diff --git a/kernel/trace/Kconfig b/kernel/trace/Kconfig
index cd31345..2685322 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.2/kernel/trace/Kconfig
config ENABLE_DEFAULT_TRACERS
bool "Trace process context switches and events"
depends on !GENERIC_TRACER
Index: linux-3.2/kernel/trace/Makefile
===================================================================
--- linux-3.2.orig/kernel/trace/Makefile
+++ linux-3.2/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.2/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.2/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.2/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.2/kernel/trace/latency_hist.c
+}
+
+__initcall(latency_hist_init);
Index: linux-3.2/kernel/trace/trace_irqsoff.c
===================================================================
--- linux-3.2.orig/kernel/trace/trace_irqsoff.c
+++ linux-3.2/kernel/trace/trace_irqsoff.c
diff --git a/kernel/trace/trace_irqsoff.c b/kernel/trace/trace_irqsoff.c
index 20dad0d..1e6c33e 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.2/kernel/trace/trace_irqsoff.c
if (preempt_trace() || irq_trace())
stop_critical_timing(CALLER_ADDR0, CALLER_ADDR1);
}
@@ -440,6 +443,7 @@ EXPORT_SYMBOL_GPL(stop_critical_timings)
@@ -440,6 +443,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.2/kernel/trace/trace_irqsoff.c
if (!preempt_trace() && irq_trace())
stop_critical_timing(a0, a1);
}
@@ -448,6 +452,7 @@ void time_hardirqs_off(unsigned long a0,
@@ -448,6 +452,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.2/kernel/trace/trace_irqsoff.c
}
#else /* !CONFIG_PROVE_LOCKING */
@@ -473,6 +478,7 @@ inline void print_irqtrace_events(struct
@@ -473,6 +478,7 @@ inline void print_irqtrace_events(struct task_struct *curr)
*/
void trace_hardirqs_on(void)
{
@ -1760,7 +1768,7 @@ Index: linux-3.2/kernel/trace/trace_irqsoff.c
if (!preempt_trace() && irq_trace())
stop_critical_timing(CALLER_ADDR0, caller_addr);
}
@@ -496,6 +504,7 @@ void trace_hardirqs_off_caller(unsigned
@@ -496,6 +504,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.2/kernel/trace/trace_irqsoff.c
}
EXPORT_SYMBOL(trace_hardirqs_off_caller);
@@ -505,12 +514,14 @@ EXPORT_SYMBOL(trace_hardirqs_off_caller)
@@ -505,12 +514,14 @@ EXPORT_SYMBOL(trace_hardirqs_off_caller);
#ifdef CONFIG_PREEMPT_TRACER
void trace_preempt_on(unsigned long a0, unsigned long a1)
{
@ -1783,3 +1791,6 @@ Index: linux-3.2/kernel/trace/trace_irqsoff.c
if (preempt_trace() && !irq_trace())
start_critical_timing(a0, a1);
}
--
1.7.10

View File

@ -1,25 +1,28 @@
Subject: hwlatdetect.patch
From 64c6278c3b79d72e2992c767dca658f4c7f65739 Mon Sep 17 00:00:00 2001
From: Carsten Emde <C.Emde@osadl.org>
Date: Tue, 19 Jul 2011 13:53:12 +0100
Subject: [PATCH 071/267] 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.2/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.2/Documentation/hwlat_detector.txt
+++ b/Documentation/hwlat_detector.txt
@@ -0,0 +1,64 @@
+Introduction:
+-------------
@ -85,10 +88,10 @@ Index: linux-3.2/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.2/MAINTAINERS
===================================================================
--- linux-3.2.orig/MAINTAINERS
+++ linux-3.2/MAINTAINERS
diff --git a/MAINTAINERS b/MAINTAINERS
index f986e7d..b257477 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -3008,6 +3008,15 @@ L: linuxppc-dev@lists.ozlabs.org
S: Odd Fixes
F: drivers/tty/hvc/
@ -105,10 +108,10 @@ Index: linux-3.2/MAINTAINERS
HARDWARE MONITORING
M: Jean Delvare <khali@linux-fr.org>
M: Guenter Roeck <guenter.roeck@ericsson.com>
Index: linux-3.2/drivers/misc/Kconfig
===================================================================
--- linux-3.2.orig/drivers/misc/Kconfig
+++ linux-3.2/drivers/misc/Kconfig
diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
index f3031a4..1cb530c 100644
--- a/drivers/misc/Kconfig
+++ b/drivers/misc/Kconfig
@@ -140,6 +140,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.2/drivers/misc/Kconfig
config PHANTOM
tristate "Sensable PHANToM (PCI)"
depends on PCI
Index: linux-3.2/drivers/misc/Makefile
===================================================================
--- linux-3.2.orig/drivers/misc/Makefile
+++ linux-3.2/drivers/misc/Makefile
diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile
index b26495a..84c4554 100644
--- a/drivers/misc/Makefile
+++ b/drivers/misc/Makefile
@@ -48,3 +48,4 @@ obj-y += lis3lv02d/
obj-y += carma/
obj-$(CONFIG_USB_SWITCH_FSA9480) += fsa9480.o
obj-$(CONFIG_ALTERA_STAPL) +=altera-stapl/
+obj-$(CONFIG_HWLAT_DETECTOR) += hwlat_detector.o
Index: linux-3.2/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.2/drivers/misc/hwlat_detector.c
+++ b/drivers/misc/hwlat_detector.c
@@ -0,0 +1,1212 @@
+/*
+ * hwlat_detector.c - A simple Hardware Latency detector.
@ -1371,3 +1375,6 @@ Index: linux-3.2/drivers/misc/hwlat_detector.c
+
+module_init(detector_init);
+module_exit(detector_exit);
--
1.7.10

View File

@ -0,0 +1,23 @@
From dc3a0b29103cadebe8c40fd3ad80b18b7d1af27b Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx@linutronix.de>
Date: Fri, 8 Jul 2011 20:25:16 +0200
Subject: [PATCH 072/267] localversion.patch
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/n/tip-8vdw4bfcsds27cvox6rpb334@git.kernel.org
---
localversion-rt | 1 +
1 file changed, 1 insertion(+)
create mode 100644 localversion-rt
diff --git a/localversion-rt b/localversion-rt
new file mode 100644
index 0000000..b2111a2
--- /dev/null
+++ b/localversion-rt
@@ -0,0 +1 @@
+-rt24
--
1.7.10

View File

@ -1,6 +1,7 @@
Subject: early-printk-consolidate.patch
From d6a466f7aef3ff53e864d1d0a8f5e93d61768714 Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx@linutronix.de>
Date: Sat, 23 Jul 2011 11:04:08 +0200
Subject: [PATCH 073/267] 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 | 27 ++++++++++++++++++++-------
15 files changed, 62 insertions(+), 110 deletions(-)
Index: linux-3.2/arch/arm/kernel/early_printk.c
===================================================================
--- linux-3.2.orig/arch/arm/kernel/early_printk.c
+++ linux-3.2/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.2/arch/arm/kernel/early_printk.c
return 0;
}
Index: linux-3.2/arch/blackfin/kernel/early_printk.c
===================================================================
--- linux-3.2.orig/arch/blackfin/kernel/early_printk.c
+++ linux-3.2/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.2/arch/blackfin/kernel/early_printk.c
/* Default console */
#define DEFAULT_PORT 0
#define DEFAULT_CFLAG CS8|B57600
Index: linux-3.2/arch/microblaze/kernel/early_printk.c
===================================================================
--- linux-3.2.orig/arch/microblaze/kernel/early_printk.c
+++ linux-3.2/arch/microblaze/kernel/early_printk.c
diff --git a/arch/microblaze/kernel/early_printk.c b/arch/microblaze/kernel/early_printk.c
index d26d92d..0420624 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.2/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.2/arch/microblaze/kernel/early_printk.c
- early_console_initialized = 0;
+ early_console = NULL;
}
Index: linux-3.2/arch/mips/kernel/early_printk.c
===================================================================
--- linux-3.2.orig/arch/mips/kernel/early_printk.c
+++ linux-3.2/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.2/arch/mips/kernel/early_printk.c
- register_console(&early_console);
+ register_console(&early_console_prom);
}
Index: linux-3.2/arch/powerpc/kernel/udbg.c
===================================================================
--- linux-3.2.orig/arch/powerpc/kernel/udbg.c
+++ linux-3.2/arch/powerpc/kernel/udbg.c
diff --git a/arch/powerpc/kernel/udbg.c b/arch/powerpc/kernel/udbg.c
index 57fa2c0..1b9174d 100644
--- a/arch/powerpc/kernel/udbg.c
+++ b/arch/powerpc/kernel/udbg.c
@@ -182,15 +182,13 @@ static struct console udbg_console = {
.index = 0,
};
@ -190,7 +191,7 @@ Index: linux-3.2/arch/powerpc/kernel/udbg.c
return;
if (!udbg_putc)
@@ -200,7 +198,7 @@ void __init register_early_udbg_console(
@@ -200,7 +198,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.2/arch/powerpc/kernel/udbg.c
register_console(&udbg_console);
}
Index: linux-3.2/arch/sh/kernel/sh_bios.c
===================================================================
--- linux-3.2.orig/arch/sh/kernel/sh_bios.c
+++ linux-3.2/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.2/arch/sh/kernel/sh_bios.c
static int __init setup_early_printk(char *buf)
{
int keep_early = 0;
Index: linux-3.2/arch/sparc/kernel/setup_32.c
===================================================================
--- linux-3.2.orig/arch/sparc/kernel/setup_32.c
+++ linux-3.2/arch/sparc/kernel/setup_32.c
diff --git a/arch/sparc/kernel/setup_32.c b/arch/sparc/kernel/setup_32.c
index fe1e3fc..e6475f0 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.2/arch/sparc/kernel/setup_32.c
register_console(&prom_early_console);
/* Set sparc_cpu_model */
Index: linux-3.2/arch/sparc/kernel/setup_64.c
===================================================================
--- linux-3.2.orig/arch/sparc/kernel/setup_64.c
+++ linux-3.2/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 a854a1c..b85d039 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.2/arch/sparc/kernel/setup_64.c
if (tlb_type == hypervisor)
printk("ARCH: SUN4V\n");
Index: linux-3.2/arch/tile/kernel/early_printk.c
===================================================================
--- linux-3.2.orig/arch/tile/kernel/early_printk.c
+++ linux-3.2/arch/tile/kernel/early_printk.c
@@ -32,25 +32,8 @@ static struct console early_hv_console =
diff --git a/arch/tile/kernel/early_printk.c b/arch/tile/kernel/early_printk.c
index 493a0e6..ba2ac00 100644
--- a/arch/tile/kernel/early_printk.c
+++ b/arch/tile/kernel/early_printk.c
@@ -32,25 +32,8 @@ static struct console early_hv_console = {
};
/* Direct interface for emergencies */
@ -296,7 +297,7 @@ Index: linux-3.2/arch/tile/kernel/early_printk.c
register_console(early_console);
return 0;
@@ -84,12 +66,12 @@ static int __init setup_early_printk(cha
@@ -84,12 +66,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.2/arch/tile/kernel/early_printk.c
return;
early_printk("\
Machine shutting down before console output is fully initialized.\n\
Index: linux-3.2/arch/um/kernel/early_printk.c
===================================================================
--- linux-3.2.orig/arch/um/kernel/early_printk.c
+++ linux-3.2/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.2/arch/um/kernel/early_printk.c
return 0;
}
Index: linux-3.2/arch/unicore32/kernel/early_printk.c
===================================================================
--- linux-3.2.orig/arch/unicore32/kernel/early_printk.c
+++ linux-3.2/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.2/arch/unicore32/kernel/early_printk.c
if (keep_early)
early_console->flags &= ~CON_BOOT;
Index: linux-3.2/arch/x86/kernel/early_printk.c
===================================================================
--- linux-3.2.orig/arch/x86/kernel/early_printk.c
+++ linux-3.2/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 cd28a35..5f3d9c5 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.2/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.2/arch/x86/kernel/early_printk.c
keep = (strstr(buf, "keep") != NULL);
Index: linux-3.2/include/linux/console.h
===================================================================
--- linux-3.2.orig/include/linux/console.h
+++ linux-3.2/include/linux/console.h
diff --git a/include/linux/console.h b/include/linux/console.h
index 7453cfd..e5b5dc0 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.2/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.2/include/linux/printk.h
===================================================================
--- linux-3.2.orig/include/linux/printk.h
+++ linux-3.2/include/linux/printk.h
diff --git a/include/linux/printk.h b/include/linux/printk.h
index f0e22f7..be10455 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.2/include/linux/printk.h
extern int printk_needs_cpu(int cpu);
extern void printk_tick(void);
Index: linux-3.2/kernel/printk.c
===================================================================
--- linux-3.2.orig/kernel/printk.c
+++ linux-3.2/kernel/printk.c
diff --git a/kernel/printk.c b/kernel/printk.c
index 7982a0a..b7aa50e 100644
--- a/kernel/printk.c
+++ b/kernel/printk.c
@@ -44,13 +44,6 @@
#include <asm/uaccess.h>
@ -466,7 +467,7 @@ Index: linux-3.2/kernel/printk.c
#define __LOG_BUF_LEN (1 << CONFIG_LOG_BUF_SHIFT)
/* printk's without a loglevel use this.. */
@@ -521,6 +514,26 @@ static void __call_console_drivers(unsig
@@ -521,6 +514,26 @@ static void __call_console_drivers(unsigned start, unsigned end)
}
}
@ -493,3 +494,6 @@ Index: linux-3.2/kernel/printk.c
static int __read_mostly ignore_loglevel;
static int __init ignore_loglevel_setup(char *str)
--
1.7.10

View File

@ -1,6 +1,7 @@
Subject: printk-kill.patch
From 91869f3a1488dba10d311b5892e4555e94f67353 Mon Sep 17 00:00:00 2001
From: Ingo Molnar <mingo@elte.hu>
Date: Fri, 22 Jul 2011 17:58:40 +0200
Subject: [PATCH 074/267] 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.2/include/linux/printk.h
===================================================================
--- linux-3.2.orig/include/linux/printk.h
+++ linux-3.2/include/linux/printk.h
diff --git a/include/linux/printk.h b/include/linux/printk.h
index be10455..a53adf6 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.2/include/linux/printk.h
#endif
extern int printk_needs_cpu(int cpu);
@@ -114,7 +116,6 @@ extern int __printk_ratelimit(const char
@@ -114,7 +116,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.2/include/linux/printk.h
extern int printk_delay_msec;
extern int dmesg_restrict;
extern int kptr_restrict;
Index: linux-3.2/kernel/printk.c
===================================================================
--- linux-3.2.orig/kernel/printk.c
+++ linux-3.2/kernel/printk.c
@@ -532,6 +532,32 @@ asmlinkage void early_printk(const char
diff --git a/kernel/printk.c b/kernel/printk.c
index b7aa50e..96ee3cd 100644
--- a/kernel/printk.c
+++ b/kernel/printk.c
@@ -532,6 +532,32 @@ asmlinkage void early_printk(const char *fmt, ...)
early_vprintk(fmt, ap);
va_end(ap);
}
@ -70,7 +71,7 @@ Index: linux-3.2/kernel/printk.c
#endif
static int __read_mostly ignore_loglevel;
@@ -850,6 +876,13 @@ asmlinkage int vprintk(const char *fmt,
@@ -850,6 +876,13 @@ asmlinkage int vprintk(const char *fmt, va_list args)
size_t plen;
char special;
@ -84,11 +85,11 @@ Index: linux-3.2/kernel/printk.c
boot_delay_msec();
printk_delay();
Index: linux-3.2/kernel/watchdog.c
===================================================================
--- linux-3.2.orig/kernel/watchdog.c
+++ linux-3.2/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 1d7bca7..c7e2a2f 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.2/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;
@ -119,3 +120,6 @@ Index: linux-3.2/kernel/watchdog.c
__this_cpu_write(hard_watchdog_warn, true);
return;
--
1.7.10

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 7e09744cd7ca0c94a940049f7557916e764ef9ea 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: [PATCH 075/267] 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.2/kernel/printk.c
===================================================================
--- linux-3.2.orig/kernel/printk.c
+++ linux-3.2/kernel/printk.c
@@ -541,6 +541,13 @@ asmlinkage void early_printk(const char
diff --git a/kernel/printk.c b/kernel/printk.c
index 96ee3cd..1f06626 100644
--- a/kernel/printk.c
+++ b/kernel/printk.c
@@ -541,6 +541,13 @@ asmlinkage void early_printk(const char *fmt, ...)
*/
static int __read_mostly printk_killswitch;
@ -35,3 +33,6 @@ Index: linux-3.2/kernel/printk.c
void printk_kill(void)
{
printk_killswitch = 1;
--
1.7.10

View File

@ -1,16 +1,17 @@
Subject: rt-preempt-base-config.patch
From fa80496475ea56404325811b11eb95bdb1519b13 Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx@linutronix.de>
Date: Fri, 17 Jun 2011 12:39:57 +0200
Subject: [PATCH 076/267] 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.2/kernel/Kconfig.preempt
===================================================================
--- linux-3.2.orig/kernel/Kconfig.preempt
+++ linux-3.2/kernel/Kconfig.preempt
diff --git a/kernel/Kconfig.preempt b/kernel/Kconfig.preempt
index 24e7cb0..35c6f20 100644
--- a/kernel/Kconfig.preempt
+++ b/kernel/Kconfig.preempt
@@ -1,3 +1,10 @@
+config PREEMPT
+ bool
@ -49,3 +50,6 @@ Index: linux-3.2/kernel/Kconfig.preempt
endchoice
config PREEMPT_COUNT
--
1.7.10

View File

@ -1,18 +1,18 @@
From 7258f0c5442a0dde07c06e12f431134e4b9bff47 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: [PATCH 077/267] 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.2/include/asm-generic/bug.h
===================================================================
--- linux-3.2.orig/include/asm-generic/bug.h
+++ linux-3.2/include/asm-generic/bug.h
diff --git a/include/asm-generic/bug.h b/include/asm-generic/bug.h
index 84458b0..97c1eaf 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.2/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
@ -43,3 +43,6 @@ Index: linux-3.2/include/asm-generic/bug.h
+#endif
+
#endif
--
1.7.10

View File

@ -1,23 +1,23 @@
From 7ff90eac6ba7e1e5fefaf931f42ec83ed6534a7c 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: [PATCH 078/267] 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.2/include/linux/interrupt.h
===================================================================
--- linux-3.2.orig/include/linux/interrupt.h
+++ linux-3.2/include/linux/interrupt.h
@@ -219,7 +219,7 @@ extern void devm_free_irq(struct device
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
index 21b94de..ddd6b2a 100644
--- a/include/linux/interrupt.h
+++ b/include/linux/interrupt.h
@@ -219,7 +219,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.2/include/linux/interrupt.h
#endif
extern void disable_irq_nosync(unsigned int irq);
Index: linux-3.2/include/linux/irqflags.h
===================================================================
--- linux-3.2.orig/include/linux/irqflags.h
+++ linux-3.2/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 */
@ -54,3 +54,6 @@ Index: linux-3.2/include/linux/irqflags.h
+#endif
+
#endif
--
1.7.10

View File

@ -1,20 +1,20 @@
From b114ea4baca627525d85c109fefcb2ba3de55ffa 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: [PATCH 079/267] 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.2/include/linux/preempt.h
===================================================================
--- linux-3.2.orig/include/linux/preempt.h
+++ linux-3.2/include/linux/preempt.h
diff --git a/include/linux/preempt.h b/include/linux/preempt.h
index 227b0f5..29db25f 100644
--- a/include/linux/preempt.h
+++ b/include/linux/preempt.h
@@ -54,11 +54,15 @@ do { \
dec_preempt_count(); \
} while (0)
@ -52,3 +52,6 @@ Index: linux-3.2/include/linux/preempt.h
#ifdef CONFIG_PREEMPT_NOTIFIERS
struct preempt_notifier;
--
1.7.10

View File

@ -1,22 +1,23 @@
From 8568db0e556b5159c9c7d85ce78f66d1df5d50ee 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: [PATCH 080/267] 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.2/drivers/ata/libata-sff.c
===================================================================
--- linux-3.2.orig/drivers/ata/libata-sff.c
+++ linux-3.2/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 4cadfa2..100f85c 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 +29,7 @@ Index: linux-3.2/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 +38,7 @@ Index: linux-3.2/drivers/ata/libata-sff.c
buf = kmap_atomic(page, KM_IRQ0);
/* 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, KM_IRQ0);
@ -64,3 +65,6 @@ Index: linux-3.2/drivers/ata/libata-sff.c
} else {
buf = page_address(page);
consumed = ap->ops->sff_data_xfer(dev, buf + offset,
--
1.7.10

View File

@ -1,12 +1,12 @@
From 56ffc28ceb835c0eb0bff7fb3395cd66ba0860b0 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: [PATCH 081/267] 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.2/drivers/ide/alim15x3.c
===================================================================
--- linux-3.2.orig/drivers/ide/alim15x3.c
+++ linux-3.2/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.2/drivers/ide/alim15x3.c
return 0;
}
Index: linux-3.2/drivers/ide/hpt366.c
===================================================================
--- linux-3.2.orig/drivers/ide/hpt366.c
+++ linux-3.2/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.2/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.2/drivers/ide/hpt366.c
printk(KERN_INFO " %s: BM-DMA at 0x%04lx-0x%04lx\n",
hwif->name, base, base + 7);
Index: linux-3.2/drivers/ide/ide-io-std.c
===================================================================
--- linux-3.2.orig/drivers/ide/ide-io-std.c
+++ linux-3.2/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.2/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.2/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.2/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.2/drivers/ide/ide-io-std.c
if (((len + 1) & 3) < 2)
return;
Index: linux-3.2/drivers/ide/ide-io.c
===================================================================
--- linux-3.2.orig/drivers/ide/ide-io.c
+++ linux-3.2/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.2/drivers/ide/ide-io.c
if (hwif->polling) {
startstop = handler(drive);
} else if (drive_is_ready(drive)) {
Index: linux-3.2/drivers/ide/ide-iops.c
===================================================================
--- linux-3.2.orig/drivers/ide/ide-iops.c
+++ linux-3.2/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.2/drivers/ide/ide-iops.c
}
/*
* Allow status to settle, then read it again.
Index: linux-3.2/drivers/ide/ide-probe.c
===================================================================
--- linux-3.2.orig/drivers/ide/ide-probe.c
+++ linux-3.2/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.2/drivers/ide/ide-probe.c
drive->dev_flags |= IDE_DFLAG_ID_READ;
#ifdef DEBUG
Index: linux-3.2/drivers/ide/ide-taskfile.c
===================================================================
--- linux-3.2.orig/drivers/ide/ide-taskfile.c
+++ linux-3.2/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 5bc2839..da861a6 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.2/drivers/ide/ide-taskfile.c
buf = kmap_atomic(page, KM_BIO_SRC_IRQ) + 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, KM_BIO_SRC_IRQ);
if (page_is_high)
@ -172,7 +172,7 @@ Index: linux-3.2/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)
@ -181,3 +181,6 @@ Index: linux-3.2/drivers/ide/ide-taskfile.c
ide_set_handler(drive, &task_pio_intr, WAIT_WORSTCASE);
--
1.7.10

View File

@ -1,6 +1,8 @@
From cd9cb9fbaf1df154b72fa6be9a3665ba7ad81433 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: [PATCH 082/267] 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.2/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
===================================================================
--- linux-3.2.orig/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
+++ linux-3.2/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
@@ -806,7 +806,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 e5069b4..2683192 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
@@ -799,7 +799,7 @@ void ipoib_mcast_restart_task(struct work_struct *work)
ipoib_mcast_stop_thread(dev, 0);
@ -31,7 +32,7 @@ Index: linux-3.2/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
netif_addr_lock(dev);
spin_lock(&priv->lock);
@@ -888,7 +888,7 @@ void ipoib_mcast_restart_task(struct wor
@@ -881,7 +881,7 @@ void ipoib_mcast_restart_task(struct work_struct *work)
spin_unlock(&priv->lock);
netif_addr_unlock(dev);
@ -40,3 +41,6 @@ Index: linux-3.2/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
/* We have to cancel outside of the spinlock */
list_for_each_entry_safe(mcast, tmcast, &remove_list, list) {
--
1.7.10

View File

@ -1,21 +1,22 @@
From 359b7e30fef466df9d38227b1f570e21fcb37b5e 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: [PATCH 083/267] 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.2/drivers/input/gameport/gameport.c
===================================================================
--- linux-3.2.orig/drivers/input/gameport/gameport.c
+++ linux-3.2/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 c351aa4..1ecaf60 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 +31,7 @@ Index: linux-3.2/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++) {
@ -44,3 +45,6 @@ Index: linux-3.2/drivers/input/gameport/gameport.c
udelay(i * 10);
if (t2 - t1 < tx) tx = t2 - t1;
}
--
1.7.10

View File

@ -1,19 +1,19 @@
From 6bd3fc45f9c1bd877a0fd6776610ca5658dae3b1 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: [PATCH 084/267] 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.2/arch/x86/include/asm/acpi.h
===================================================================
--- linux-3.2.orig/arch/x86/include/asm/acpi.h
+++ linux-3.2/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
@ -25,3 +25,6 @@ Index: linux-3.2/arch/x86/include/asm/acpi.h
#define ACPI_FLUSH_CPU_CACHE() wbinvd()
int __acpi_acquire_global_lock(unsigned int *lock);
--
1.7.10

View File

@ -1,20 +1,21 @@
From 1e9f1cee0ada298f8ffa264a72156c25d9e1b5c1 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: [PATCH 085/267] 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.2/kernel/user.c
===================================================================
--- linux-3.2.orig/kernel/user.c
+++ linux-3.2/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;
@ -29,3 +30,6 @@ Index: linux-3.2/kernel/user.c
}
struct user_struct *alloc_uid(struct user_namespace *ns, uid_t uid)
--
1.7.10

View File

@ -1,6 +1,8 @@
From fadf7cb3af643dd7aa4ad2322df4916621e09e03 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: [PATCH 086/267] core: Do not disable interrupts on RT in
res_counter.c
Frederic Weisbecker reported this warning:
@ -41,16 +43,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.2/kernel/res_counter.c
===================================================================
--- linux-3.2.orig/kernel/res_counter.c
+++ linux-3.2/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 34683ef..21e9ec4 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 +69,7 @@ Index: linux-3.2/kernel/res_counter.c
return ret;
}
@@ -79,13 +79,13 @@ void res_counter_uncharge(struct res_cou
@@ -79,13 +79,13 @@ void res_counter_uncharge(struct res_counter *counter, unsigned long val)
unsigned long flags;
struct res_counter *c;
@ -84,3 +85,6 @@ Index: linux-3.2/kernel/res_counter.c
}
--
1.7.10

View File

@ -1,22 +1,22 @@
From aede9f913c631a8c15d7e4bc1898eb7021dc234c 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: [PATCH 087/267] 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.2/drivers/usb/core/hcd.c
===================================================================
--- linux-3.2.orig/drivers/usb/core/hcd.c
+++ linux-3.2/drivers/usb/core/hcd.c
@@ -2145,7 +2145,7 @@ irqreturn_t usb_hcd_irq (int irq, void *
diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
index 8cb9304..32dfd76 100644
--- a/drivers/usb/core/hcd.c
+++ b/drivers/usb/core/hcd.c
@@ -2145,7 +2145,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.2/drivers/usb/core/hcd.c
if (unlikely(HCD_DEAD(hcd) || !HCD_HW_ACCESSIBLE(hcd))) {
rc = IRQ_NONE;
@@ -2158,7 +2158,7 @@ irqreturn_t usb_hcd_irq (int irq, void *
@@ -2158,7 +2158,7 @@ irqreturn_t usb_hcd_irq (int irq, void *__hcd)
rc = IRQ_HANDLED;
}
@ -34,3 +34,6 @@ Index: linux-3.2/drivers/usb/core/hcd.c
return rc;
}
EXPORT_SYMBOL_GPL(usb_hcd_irq);
--
1.7.10

View File

@ -1,6 +1,7 @@
From 6dabd1ea3f534ed222bd7fb1391308d5e5ffc844 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: [PATCH 088/267] 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.2/drivers/tty/tty_ldisc.c
===================================================================
--- linux-3.2.orig/drivers/tty/tty_ldisc.c
+++ linux-3.2/drivers/tty/tty_ldisc.c
@@ -71,7 +71,7 @@ static void put_ldisc(struct tty_ldisc *
diff --git a/drivers/tty/tty_ldisc.c b/drivers/tty/tty_ldisc.c
index 8e0924f..820f7dc 100644
--- a/drivers/tty/tty_ldisc.c
+++ b/drivers/tty/tty_ldisc.c
@@ -71,7 +71,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.2/drivers/tty/tty_ldisc.c
if (atomic_dec_and_lock(&ld->users, &tty_ldisc_lock)) {
struct tty_ldisc_ops *ldo = ld->ops;
@@ -82,7 +82,7 @@ static void put_ldisc(struct tty_ldisc *
@@ -82,7 +82,7 @@ static void put_ldisc(struct tty_ldisc *ld)
kfree(ld);
return;
}
@ -47,3 +47,6 @@ Index: linux-3.2/drivers/tty/tty_ldisc.c
wake_up(&tty_ldisc_idle);
}
--
1.7.10

View File

@ -1,17 +1,18 @@
From 2d38de27401078dc4dce8c56993479d6e1dac21c 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: [PATCH 089/267] 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.2/lib/scatterlist.c
===================================================================
--- linux-3.2.orig/lib/scatterlist.c
+++ linux-3.2/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 4ceb05d..181f364 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.2/lib/scatterlist.c
kunmap_atomic(miter->addr, KM_BIO_SRC_IRQ);
} 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.2/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);
@ -38,3 +39,6 @@ Index: linux-3.2/lib/scatterlist.c
return offset;
}
--
1.7.10

View File

@ -1,17 +1,18 @@
Subject: signal-fix-up-rcu-wreckage.patch
From 8dae1f2c7df48338f0aa39dc07d65ec2c2faabe6 Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx@linutronix.de>
Date: Fri, 22 Jul 2011 08:07:08 +0200
Subject: [PATCH 090/267] 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.2/kernel/signal.c
===================================================================
--- linux-3.2.orig/kernel/signal.c
+++ linux-3.2/kernel/signal.c
@@ -1362,12 +1362,12 @@ struct sighand_struct *__lock_task_sigha
diff --git a/kernel/signal.c b/kernel/signal.c
index c8b1bc1..739c2e4 100644
--- a/kernel/signal.c
+++ b/kernel/signal.c
@@ -1362,12 +1362,12 @@ struct sighand_struct *__lock_task_sighand(struct task_struct *tsk,
struct sighand_struct *sighand;
for (;;) {
@ -26,7 +27,7 @@ Index: linux-3.2/kernel/signal.c
break;
}
@@ -1378,7 +1378,7 @@ struct sighand_struct *__lock_task_sigha
@@ -1378,7 +1378,7 @@ struct sighand_struct *__lock_task_sighand(struct task_struct *tsk,
}
spin_unlock(&sighand->siglock);
rcu_read_unlock();
@ -35,3 +36,6 @@ Index: linux-3.2/kernel/signal.c
}
return sighand;
--
1.7.10

View File

@ -1,17 +1,18 @@
Subject: net-wireless-warn-nort.patch
From 384bc8236ecff10777676ea6f2e5cc5d03fbe2c4 Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx@linutronix.de>
Date: Thu, 21 Jul 2011 21:05:33 +0200
Subject: [PATCH 091/267] 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.2/net/mac80211/rx.c
===================================================================
--- linux-3.2.orig/net/mac80211/rx.c
+++ linux-3.2/net/mac80211/rx.c
@@ -2958,7 +2958,7 @@ void ieee80211_rx(struct ieee80211_hw *h
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
index 064d20f..642d96c 100644
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -2958,7 +2958,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);
@ -20,3 +21,6 @@ Index: linux-3.2/net/mac80211/rx.c
if (WARN_ON(status->band < 0 ||
status->band >= IEEE80211_NUM_BANDS))
--
1.7.10

View File

@ -1,20 +1,20 @@
From d553f4dded23aedcf07184908178b715c78cc492 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: [PATCH 092/267] 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 | 28 ++++++++++++++++++++++++++++
mm/page_cgroup.c | 1 +
2 files changed, 29 insertions(+)
Index: linux-3.2/include/linux/page_cgroup.h
===================================================================
--- linux-3.2.orig/include/linux/page_cgroup.h
+++ linux-3.2/include/linux/page_cgroup.h
diff --git a/include/linux/page_cgroup.h b/include/linux/page_cgroup.h
index 961ecc7..2927c08 100644
--- a/include/linux/page_cgroup.h
+++ b/include/linux/page_cgroup.h
@@ -30,6 +30,10 @@ enum {
*/
struct page_cgroup {
@ -26,7 +26,7 @@ Index: linux-3.2/include/linux/page_cgroup.h
struct mem_cgroup *mem_cgroup;
struct list_head lru; /* per cgroup LRU list */
};
@@ -96,30 +100,54 @@ static inline void lock_page_cgroup(stru
@@ -96,30 +100,54 @@ 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, CACHE, MIGRATION
*/
@ -81,11 +81,11 @@ Index: linux-3.2/include/linux/page_cgroup.h
}
#ifdef CONFIG_SPARSEMEM
Index: linux-3.2/mm/page_cgroup.c
===================================================================
--- linux-3.2.orig/mm/page_cgroup.c
+++ linux-3.2/mm/page_cgroup.c
@@ -17,6 +17,7 @@ static void __meminit init_page_cgroup(s
diff --git a/mm/page_cgroup.c b/mm/page_cgroup.c
index 2d123f9..2e0d18d 100644
--- a/mm/page_cgroup.c
+++ b/mm/page_cgroup.c
@@ -17,6 +17,7 @@ static void __meminit init_page_cgroup(struct page_cgroup *pc, unsigned long id)
set_page_cgroup_array_id(pc, id);
pc->mem_cgroup = NULL;
INIT_LIST_HEAD(&pc->lru);
@ -93,3 +93,6 @@ Index: linux-3.2/mm/page_cgroup.c
}
static unsigned long total_usage;
--
1.7.10

View File

@ -1,6 +1,7 @@
From 0d6994d78eab6e6ebe324aa490ad10ddd2fc4e31 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: [PATCH 093/267] 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.2/fs/buffer.c
===================================================================
--- linux-3.2.orig/fs/buffer.c
+++ linux-3.2/fs/buffer.c
@@ -331,8 +331,7 @@ static void end_buffer_async_read(struct
diff --git a/fs/buffer.c b/fs/buffer.c
index 19d8eb7..32c4680 100644
--- a/fs/buffer.c
+++ b/fs/buffer.c
@@ -331,8 +331,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.2/fs/buffer.c
clear_buffer_async_read(bh);
unlock_buffer(bh);
tmp = bh;
@@ -345,8 +344,7 @@ static void end_buffer_async_read(struct
@@ -345,8 +344,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.2/fs/buffer.c
/*
* If none of the buffers had errors and they are all
@@ -358,9 +356,7 @@ static void end_buffer_async_read(struct
@@ -358,9 +356,7 @@ static void end_buffer_async_read(struct buffer_head *bh, int uptodate)
return;
still_busy:
@ -47,7 +48,7 @@ Index: linux-3.2/fs/buffer.c
}
/*
@@ -394,8 +390,7 @@ void end_buffer_async_write(struct buffe
@@ -394,8 +390,7 @@ void end_buffer_async_write(struct buffer_head *bh, int uptodate)
}
first = page_buffers(page);
@ -57,7 +58,7 @@ Index: linux-3.2/fs/buffer.c
clear_buffer_async_write(bh);
unlock_buffer(bh);
@@ -407,15 +402,12 @@ void end_buffer_async_write(struct buffe
@@ -407,15 +402,12 @@ void end_buffer_async_write(struct buffer_head *bh, int uptodate)
}
tmp = tmp->b_this_page;
}
@ -75,7 +76,7 @@ Index: linux-3.2/fs/buffer.c
}
EXPORT_SYMBOL(end_buffer_async_write);
@@ -3223,6 +3215,7 @@ struct buffer_head *alloc_buffer_head(gf
@@ -3223,6 +3215,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.2/fs/buffer.c
preempt_disable();
__this_cpu_inc(bh_accounting.nr);
recalc_bh_state();
Index: linux-3.2/fs/ntfs/aops.c
===================================================================
--- linux-3.2.orig/fs/ntfs/aops.c
+++ linux-3.2/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 0b1e885b..7fb7f1b 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.2/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.2/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.2/fs/ntfs/aops.c
}
/**
Index: linux-3.2/include/linux/buffer_head.h
===================================================================
--- linux-3.2.orig/include/linux/buffer_head.h
+++ linux-3.2/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 */
@ -165,3 +166,6 @@ Index: linux-3.2/include/linux/buffer_head.h
/*
* macro tricks to expand the set_buffer_foo(), clear_buffer_foo()
* and buffer_foo() functions.
--
1.7.10

View File

@ -1,6 +1,8 @@
From c9293d9a9b626e39108b276a74a6d4794374a973 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: [PATCH 094/267] 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.2/include/linux/buffer_head.h
===================================================================
--- linux-3.2.orig/include/linux/buffer_head.h
+++ linux-3.2/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.2/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.2/include/linux/buffer_head.h
#endif
}
Index: linux-3.2/include/linux/jbd_common.h
===================================================================
--- linux-3.2.orig/include/linux/jbd_common.h
+++ linux-3.2/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)
{
@ -102,3 +108,6 @@ Index: linux-3.2/include/linux/jbd_common.h
}
#endif
--
1.7.10

View File

@ -1,16 +1,17 @@
From 5b808390bbd3ef32efd5d44116bd0e5a17860200 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: [PATCH 095/267] 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.2/lib/Kconfig.debug
===================================================================
--- linux-3.2.orig/lib/Kconfig.debug
+++ linux-3.2/lib/Kconfig.debug
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index 82928f5..c347db3 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -151,7 +151,7 @@ config DEBUG_KERNEL
config DEBUG_SHIRQ
@ -20,3 +21,6 @@ Index: linux-3.2/lib/Kconfig.debug
help
Enable this to generate a spurious interrupt as soon as a shared
interrupt handler is registered, and just before one is deregistered.
--
1.7.10

View File

@ -1,21 +1,21 @@
From f190b6f8506745170cbb3754f21ab36267847483 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: [PATCH 096/267] 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.2/kernel/irq/handle.c
===================================================================
--- linux-3.2.orig/kernel/irq/handle.c
+++ linux-3.2/kernel/irq/handle.c
@@ -156,8 +156,11 @@ handle_irq_event_percpu(struct irq_desc
diff --git a/kernel/irq/handle.c b/kernel/irq/handle.c
index 470d08c..634620c 100644
--- a/kernel/irq/handle.c
+++ b/kernel/irq/handle.c
@@ -156,8 +156,11 @@ handle_irq_event_percpu(struct irq_desc *desc, struct irqaction *action)
action = action->next;
} while (action);
@ -27,3 +27,6 @@ Index: linux-3.2/kernel/irq/handle.c
if (!noirqdebug)
note_interrupt(irq, desc, retval);
--
1.7.10

View File

@ -1,21 +1,21 @@
From c52440d3a3faff677bbba7d09e44222de48b6cf2 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: [PATCH 097/267] 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.2/kernel/irq/spurious.c
===================================================================
--- linux-3.2.orig/kernel/irq/spurious.c
+++ linux-3.2/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 dc813a9..d09e0f5 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)
{
@ -39,3 +39,6 @@ Index: linux-3.2/kernel/irq/spurious.c
irqfixup = 2;
printk(KERN_WARNING "Misrouted IRQ fixup and polling support "
"enabled\n");
--
1.7.10

View File

@ -1,6 +1,7 @@
Subject: genirq-force-threading.patch
From 63d0b60e274fb76c5b8b1a2fd74a5d93eacc656a 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: [PATCH 098/267] 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.2/include/linux/interrupt.h
===================================================================
--- linux-3.2.orig/include/linux/interrupt.h
+++ linux-3.2/include/linux/interrupt.h
@@ -396,9 +396,13 @@ static inline int disable_irq_wake(unsig
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
index ddd6b2a..b9162dc 100644
--- a/include/linux/interrupt.h
+++ b/include/linux/interrupt.h
@@ -396,9 +396,13 @@ static inline int disable_irq_wake(unsigned int irq)
#ifdef CONFIG_IRQ_FORCED_THREADING
@ -28,10 +29,10 @@ Index: linux-3.2/include/linux/interrupt.h
#endif
#ifndef __ARCH_SET_SOFTIRQ_PENDING
Index: linux-3.2/kernel/irq/manage.c
===================================================================
--- linux-3.2.orig/kernel/irq/manage.c
+++ linux-3.2/kernel/irq/manage.c
diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
index 7600092..b3e6228 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.2/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);
@ -48,3 +49,6 @@ Index: linux-3.2/kernel/irq/manage.c
#endif
/**
--
1.7.10

View File

@ -1,6 +1,7 @@
From 91639026470adfb7ab98a86b62dfefedb485e3a4 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: [PATCH 099/267] 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.2/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
===================================================================
--- linux-3.2.orig/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
+++ linux-3.2/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
@@ -2236,11 +2236,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 eccdcff..ee8d8a2 100644
--- a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
+++ b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
@@ -2236,11 +2236,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.2/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.2/drivers/net/ethernet/atheros/atl1e/atl1e_main.c
===================================================================
--- linux-3.2.orig/drivers/net/ethernet/atheros/atl1e/atl1e_main.c
+++ linux-3.2/drivers/net/ethernet/atheros/atl1e/atl1e_main.c
@@ -1819,8 +1819,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 95483bc..eaf84e9 100644
--- a/drivers/net/ethernet/atheros/atl1e/atl1e_main.c
+++ b/drivers/net/ethernet/atheros/atl1e/atl1e_main.c
@@ -1819,8 +1819,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.2/drivers/net/ethernet/atheros/atl1e/atl1e_main.c
if (atl1e_tpd_avail(adapter) < tpd_req) {
/* no enough descriptor, just stop queue */
Index: linux-3.2/drivers/net/ethernet/chelsio/cxgb/sge.c
===================================================================
--- linux-3.2.orig/drivers/net/ethernet/chelsio/cxgb/sge.c
+++ linux-3.2/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 f9b6023..6d7412a 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.2/drivers/net/ethernet/chelsio/cxgb/sge.c
reclaim_completed_tx(sge, q);
Index: linux-3.2/drivers/net/ethernet/neterion/s2io.c
===================================================================
--- linux-3.2.orig/drivers/net/ethernet/neterion/s2io.c
+++ linux-3.2/drivers/net/ethernet/neterion/s2io.c
@@ -4090,12 +4090,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 c27fb3d..4624278 100644
--- a/drivers/net/ethernet/neterion/s2io.c
+++ b/drivers/net/ethernet/neterion/s2io.c
@@ -4090,12 +4090,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.2/drivers/net/ethernet/neterion/s2io.c
if (sp->config.multiq) {
if (__netif_subqueue_stopped(dev, fifo->fifo_no)) {
Index: linux-3.2/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
===================================================================
--- linux-3.2.orig/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
+++ linux-3.2/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
@@ -1931,10 +1931,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 43c7b25..c084bea 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
@@ -1937,10 +1937,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.2/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.2/drivers/net/ethernet/tehuti/tehuti.c
===================================================================
--- linux-3.2.orig/drivers/net/ethernet/tehuti/tehuti.c
+++ linux-3.2/drivers/net/ethernet/tehuti/tehuti.c
@@ -1605,13 +1605,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 3a90af6..e2e930e 100644
--- a/drivers/net/ethernet/tehuti/tehuti.c
+++ b/drivers/net/ethernet/tehuti/tehuti.c
@@ -1605,13 +1605,8 @@ static netdev_tx_t bdx_tx_transmit(struct sk_buff *skb,
unsigned long flags;
ENTER;
@ -122,11 +122,11 @@ Index: linux-3.2/drivers/net/ethernet/tehuti/tehuti.c
/* build tx descriptor */
BDX_ASSERT(f->m.wptr >= f->m.memsz); /* started with valid wptr */
Index: linux-3.2/drivers/net/rionet.c
===================================================================
--- linux-3.2.orig/drivers/net/rionet.c
+++ linux-3.2/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 7145714..2a1ed18 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;
@ -139,3 +139,6 @@ Index: linux-3.2/drivers/net/rionet.c
if ((rnet->tx_cnt + 1) > RIONET_TX_RING_SIZE) {
netif_stop_queue(ndev);
--
1.7.10

Some files were not shown because too many files have changed in this diff Show More