diff options
author | Paul Gortmaker <paul.gortmaker@windriver.com> | 2012-11-02 11:49:46 -0400 |
---|---|---|
committer | Paul Gortmaker <paul.gortmaker@windriver.com> | 2012-11-02 11:49:46 -0400 |
commit | 8b55694b6855de73061b83b8b7e887c6946d47f2 (patch) | |
tree | 01b7eecf9818f36c6aba74d533d28c097e29d962 | |
parent | 3ecb8a6df31d2f6acef5dae855d9b13ce7cb8215 (diff) | |
download | 3.6-rt-patches-8b55694b6855de73061b83b8b7e887c6946d47f2.tar.gz |
patches-3.6.5-rt13.tar.xzv3.6.5-rt13
md5sum:
ee8c10af98e17aa33b23823fa54f6bc7 patches-3.6.5-rt13.tar.xz
No announce (but see rt14 announce for retroactive
perspective on rt13).
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
-rw-r--r-- | cpufreq-powernow-k8-fix-bogus-smp-processor-id-usage.patch | 79 | ||||
-rw-r--r-- | localversion.patch | 2 | ||||
-rw-r--r-- | preempt-lazy-support.patch | 2 | ||||
-rw-r--r-- | series | 1 |
4 files changed, 2 insertions, 82 deletions
diff --git a/cpufreq-powernow-k8-fix-bogus-smp-processor-id-usage.patch b/cpufreq-powernow-k8-fix-bogus-smp-processor-id-usage.patch deleted file mode 100644 index 18bb630..0000000 --- a/cpufreq-powernow-k8-fix-bogus-smp-processor-id-usage.patch +++ /dev/null @@ -1,79 +0,0 @@ -Subject: cpufreq: powernow-k8: Remove bogus smp_processor_id() usage -From: Thomas Gleixner <tglx@linutronix.de> -Date: Sat, 27 Oct 2012 12:26:44 +0200 - -commit 6889125b (cpufreq/powernow-k8: workqueue user shouldn't migrate -the kworker to another CPU) has a broken optimization of calling -powernowk8_target_fn() directly from powernowk8_target() which -results in the following splat: - -[ 11.789468] BUG: using smp_processor_id() in preemptible [00000000] code: - modprobe/505 -[ 11.809594] caller is powernowk8_target+0x20/0x48 [powernow_k8] -[ 12.001748] Pid: 505, comm: modprobe Not tainted 3.6.3 #3 -[ 12.016836] Call Trace: -[ 12.025971] [<ffffffff81241554>] debug_smp_processor_id+0xcc/0xe8 -[ 12.042518] [<ffffffffa05bb07f>] powernowk8_target+0x20/0x48 [powernow_k8] -[ 12.060733] [<ffffffff813b3c23>] __cpufreq_driver_target+0x82/0x8a -[ 12.077550] [<ffffffff813b64a9>] cpufreq_governor_userspace+0x265/0x2c0 -[ 12.120378] [<ffffffff81063c5c>] ? __blocking_notifier_call_chain+0x56/0x60 -[ 12.138862] [<ffffffff813b3d8b>] __cpufreq_governor+0x8c/0xc9 -[ 12.155193] [<ffffffff813b4031>] __cpufreq_set_policy+0x212/0x21e -[ 12.172148] [<ffffffff813b501e>] cpufreq_add_dev_interface+0x2a2/0x2bc -[ 12.189855] [<ffffffff813b602b>] ? cpufreq_update_policy+0x124/0x124 -[ 12.207096] [<ffffffff813b54dc>] cpufreq_add_dev+0x4a4/0x4b4 -[ 12.223161] [<ffffffff812f8136>] subsys_interface_register+0x95/0xc5 -[ 12.240386] [<ffffffff8149aaf9>] ? _raw_spin_lock_irqsave+0x24/0x46 -[ 12.257477] [<ffffffff813b5928>] cpufreq_register_driver+0xd2/0x1bf -[ 12.274545] [<ffffffffa05bc087>] powernowk8_init+0x193/0x1dc [powernow_k8] -[ 12.292794] [<ffffffffa05bbef4>] ? powernowk8_cpu_init+0xc53/0xc53 [powernow_k8] -[ 12.312004] [<ffffffff81002195>] do_one_initcall+0x7f/0x136 -[ 12.327594] [<ffffffff8108f48f>] sys_init_module+0x17b0/0x197e -[ 12.343718] [<ffffffff81249494>] ? ddebug_proc_write+0xde/0xde -[ 12.359767] [<ffffffff8149f639>] system_call_fastpath+0x16/0x1b - -This is fully preemptible non cpu bound context though the comment in the -code says: - - * Must run on @pol->cpu. cpufreq core is responsible for ensuring - * that we're bound to the current CPU and pol->cpu stays online. - -The core only guarantees that pol->cpu stays online, but it has no way -to bind the thread and this needs to be fully preemptible context as -powernowk8_target_fn() calls functions which might sleep. - -So the correct solution is to always go through work_on_cpu(). - -Reported-and-tested-by: Carsten Emde <C.Emde@osadl.org> -Cc: Tejun Heo <tj@kernel.org> -Cc: Rafael J. Wysocki <rjw@sisk.pl> -Cc: Andreas Herrmann <andreas.herrmann3@amd.com> -Cc: stable@vger.kernel.org -Signed-off-by: Thomas Gleixner <tglx@linutronix.de> ---- - drivers/cpufreq/powernow-k8.c | 11 +++++------ - 1 file changed, 5 insertions(+), 6 deletions(-) - -Index: linux-stable/drivers/cpufreq/powernow-k8.c -=================================================================== ---- linux-stable.orig/drivers/cpufreq/powernow-k8.c -+++ linux-stable/drivers/cpufreq/powernow-k8.c -@@ -1224,13 +1224,12 @@ static int powernowk8_target(struct cpuf - .relation = relation }; - - /* -- * Must run on @pol->cpu. cpufreq core is responsible for ensuring -- * that we're bound to the current CPU and pol->cpu stays online. -+ * Must run on @pol->cpu. We queue it on the target cpu even -+ * if we are currently on the target cpu. This is preemptible -+ * non cpu bound context, so we can't call the target function -+ * directly. - */ -- if (smp_processor_id() == pol->cpu) -- return powernowk8_target_fn(&pta); -- else -- return work_on_cpu(pol->cpu, powernowk8_target_fn, &pta); -+ return work_on_cpu(pol->cpu, powernowk8_target_fn, &pta); - } - - /* Driver entry point to verify the policy and range of frequencies */ diff --git a/localversion.patch b/localversion.patch index aa55f5b..8047704 100644 --- a/localversion.patch +++ b/localversion.patch @@ -14,4 +14,4 @@ Index: linux-stable/localversion-rt --- /dev/null +++ linux-stable/localversion-rt @@ -0,0 +1 @@ -+-rt12 ++-rt13 diff --git a/preempt-lazy-support.patch b/preempt-lazy-support.patch index 7176edf..9617016 100644 --- a/preempt-lazy-support.patch +++ b/preempt-lazy-support.patch @@ -299,7 +299,7 @@ Index: linux-stable/kernel/sched/core.c task_thread_info(p)->preempt_count = 1; #endif +#ifdef CONFIG_HAVE_PREEMPT_LAZY -+ task_thread_info(idle)->preempt_lazy_count = 0; ++ task_thread_info(p)->preempt_lazy_count = 0; +#endif #ifdef CONFIG_SMP plist_node_init(&p->pushable_tasks, MAX_PRIO); @@ -595,7 +595,6 @@ softirq-split-locks.patch rcu-tiny-solve-rt-mistery.patch slub-correct-per-cpu-slab.patch mm-enable-slub.patch -cpufreq-powernow-k8-fix-bogus-smp-processor-id-usage.patch hrtimer-raise-softirq-if-hrtimer-irq-stalled.patch rcu-disable-rcu-fast-no-hz-on-rt.patch |