diff for duplicates of <200811112256.58467.rusty@rustcorp.com.au> diff --git a/a/1.txt b/N1/1.txt index d5d8c4b..6e02e46 100644 Binary files a/a/1.txt and b/N1/1.txt differ diff --git a/a/content_digest b/N1/content_digest index 78d5c23..4634fe9 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -1,114 +1,29 @@ "ref\0YrUCLn0F-xH.A.fhE.E4zFJB@chimera\0" "ref\0200811102355.42389.rjw@sisk.pl\0" "ref\020081111105214.GA15645@elte.hu\0" - "ref\020081111105214.GA15645-X9Un+BFzKDI@public.gmane.org\0" - "From\0Rusty Russell <rusty-8n+1lVoiYb80n/F98K4Iww@public.gmane.org>\0" + "From\0Rusty Russell <rusty@rustcorp.com.au>\0" "Subject\0Re: [Bug #11989] Suspend failure on NForce4-based boards due to chanes in stop_machine\0" "Date\0Wed, 12 Nov 2008 14:09:49 +1030\0" - "To\0Ingo Molnar <mingo-X9Un+BFzKDI@public.gmane.org>\0" - "Cc\0Rafael J. Wysocki <rjw-KKrjLPT3xs0@public.gmane.org>" - Heiko Carstens <heiko.carstens-tA70FqPdS9bQT0dZR+AlfA@public.gmane.org> - Linux Kernel Mailing List <linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org> - Kernel Testers List <kernel-testers-u79uwXL29TY76Z2rM5mHXA@public.gmane.org> - Vegard Nossum <vegard.nossum-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> - Peter Zijlstra <a.p.zijlstra-/NLkJaSkS4VmR6Xm/wNWPw@public.gmane.org> - Oleg Nesterov <oleg-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> - Dmitry Adamushko <dmitry.adamushko-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> - " Andrew Morton <akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org>\0" + "To\0Ingo Molnar <mingo@elte.hu>\0" + "Cc\0Rafael J. Wysocki <rjw@sisk.pl>" + Heiko Carstens <heiko.carstens@de.ibm.com> + Linux Kernel Mailing List <linux-kernel@vger.kernel.org> + Kernel Testers List <kernel-testers@vger.kernel.org> + Vegard Nossum <vegard.nossum@gmail.com> + Peter Zijlstra <a.p.zijlstra@chello.nl> + Oleg Nesterov <oleg@redhat.com> + Dmitry Adamushko <dmitry.adamushko@gmail.com> + " Andrew Morton <akpm@linux-foundation.org>\0" "\00:1\0" "b\0" - "On Tuesday 11 November 2008 21:22:14 Ingo Molnar wrote:\n" - "> * Rafael J. Wysocki <rjw@sisk.pl> wrote:\n" - "> > So, it evidently fails while re-enabling the non-boot CPU and not\n" - "> > during disabling it as I thought before.\n" - "\n" + "On Tuesday 11 November 2008 21:22:14 Ingo Molnar wrote:> * Rafael J. Wysocki <rjw@sisk.pl> wrote:> > So, it evidently fails while re-enabling the non-boot CPU and not> > during disabling it as I thought before.\n" "(Resend, due to HTML version previously)\n" - "\n" "But what is calling stop_machine in that path?\n" - "\n" - "There *is* a race, but I don't think it could cause this (we should make a\n" - "copy of active.fnret inside the lock before returning it).\n" - "\n" + "There *is* a race, but I don't think it could cause this (we should make acopy of active.fnret inside the lock before returning it).\n" "Two patches: one fixes that race, the next adds debugging spew.\n" - "\n" "stop_machine: fix race with return value\n" - "\n" - "We should not access active.fnret outside the lock; in theory the next\n" - "stop_machine could overwrite it.\n" - "\n" - "Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>\n" - "---\n" - " kernel/stop_machine.c | 5 +++--\n" - " 1 file changed, 3 insertions(+), 2 deletions(-)\n" - "\n" - "diff -r d7c9a15da615 kernel/stop_machine.c\n" - "--- a/kernel/stop_machine.c\tMon Nov 10 09:47:45 2008 +1100\n" - "+++ b/kernel/stop_machine.c\tTue Nov 11 23:19:47 2008 +1030\n" - "@@ -112,7 +112,7 @@\n" - " int __stop_machine(int (*fn)(void *), void *data, const cpumask_t *cpus)\n" - " {\n" - " \tstruct work_struct *sm_work;\n" - "-\tint i;\n" - "+\tint i, ret;\n" - " \n" - " \t/* Set up initial state. */\n" - " \tmutex_lock(&lock);\n" - "@@ -137,8 +137,9 @@\n" - " \t/* This will release the thread on our CPU. */\n" - " \tput_cpu();\n" - " \tflush_workqueue(stop_machine_wq);\n" - "+\tret = active.fnret;\n" - " \tmutex_unlock(&lock);\n" - "-\treturn active.fnret;\n" - "+\treturn ret;\n" - " }\n" - " \n" - " int stop_machine(int (*fn)(void *), void *data, const cpumask_t *cpus)\n" - "===\n" - "diff -r fe7dd39b1cff kernel/stop_machine.c\n" - "--- a/kernel/stop_machine.c\tWed Nov 12 14:07:18 2008 +1030\n" - "+++ b/kernel/stop_machine.c\tWed Nov 12 14:09:08 2008 +1030\n" - "@@ -89,6 +89,8 @@\n" - " \t\t\tcase STOPMACHINE_RUN:\n" - " \t\t\t\t/* On multiple CPUs only a single error code\n" - " \t\t\t\t * is needed to tell that something failed. */\n" - "+\t\t\t\tprintk(\"stop_machine: %i running %p\\n\",\n" - "+\t\t\t\t smp_processor_id(), smdata->fn);\n" - " \t\t\t\terr = smdata->fn(smdata->data);\n" - " \t\t\t\tif (err)\n" - " \t\t\t\t\tsmdata->fnret = err;\n" - "@@ -106,6 +108,7 @@\n" - " /* Callback for CPUs which aren't supposed to do anything. */\n" - " static int chill(void *unused)\n" - " {\n" - "+\tprintk(\"stop_machine: %i chilling\\n\", smp_processor_id());\n" - " \treturn 0;\n" - " }\n" - " \n" - "@@ -126,17 +129,23 @@\n" - " \n" - " \tset_state(STOPMACHINE_PREPARE);\n" - " \n" - "+\tprintk(\"stop_machine: running on %i cpus:\\n\", num_threads);\n" - "+\tdump_stack();\n" - "+\n" - " \t/* Schedule the stop_cpu work on all cpus: hold this CPU so one\n" - " \t * doesn't hit this CPU until we're ready. */\n" - " \tget_cpu();\n" - " \tfor_each_online_cpu(i) {\n" - "+\t\tprintk(\"stop_machine: setting up cpu %i\\n\", i);\n" - " \t\tsm_work = percpu_ptr(stop_machine_work, i);\n" - " \t\tINIT_WORK(sm_work, stop_cpu);\n" - " \t\tqueue_work_on(i, stop_machine_wq, sm_work);\n" - " \t}\n" - " \t/* This will release the thread on our CPU. */\n" - "+\tprintk(\"stop_machine: releasing CPU %i\\n\", smp_processor_id());\n" - " \tput_cpu();\n" - " \tflush_workqueue(stop_machine_wq);\n" - "+\tprintk(\"stop_machine: done\\n\");\n" - " \tret = active.fnret;\n" - " \tmutex_unlock(&lock);\n" - " \treturn ret;\n" - "\0" + "We should not access active.fnret outside the lock; in theory the nextstop_machine could overwrite it.\n" + "Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>--- kernel/stop_machine.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)\n" + "diff -r d7c9a15da615 kernel/stop_machine.c--- a/kernel/stop_machine.c\tMon Nov 10 09:47:45 2008 +1100+++ b/kernel/stop_machine.c\tTue Nov 11 23:19:47 2008 +1030@@ -112,7 +112,7 @@ int __stop_machine(int (*fn)(void *), void *data, const cpumask_t *cpus) { \tstruct work_struct *sm_work;-\tint i;+\tint i, ret; \t/* Set up initial state. */ \tmutex_lock(&lock);@@ -137,8 +137,9 @@ \t/* This will release the thread on our CPU. */ \tput_cpu(); \tflush_workqueue(stop_machine_wq);+\tret = active.fnret; \tmutex_unlock(&lock);-\treturn active.fnret;+\treturn ret; } int stop_machine(int (*fn)(void *), void *data, const cpumask_t *cpus)===diff -r fe7dd39b1cff kernel/stop_machine.c--- a/kernel/stop_machine.c\tWed Nov 12 14:07:18 2008 +1030+++ b/kernel/stop_machine.c\tWed Nov 12 14:09:08 2008 +1030@@ -89,6 +89,8 @@ \t\t\tcase STOPMACHINE_RUN: \t\t\t\t/* On multiple CPUs only a single error code \t\t\t\t * is needed to tell that something failed. */+\t\t\t\tprintk(\"stop_machine: %i running %p\\n\",+\t\t\t\t smp_processor_id(), smdata->fn); \t\t\t\terr = smdata->fn(smdata->data); \t\t\t\tif (err) \t\t\t\t\tsmdata->fnret = err;@@ -106,6 +108,7 @@ /* Callback for CPUs which aren't supposed to do anything. */ static int chill(void *unused) {+\tprintk(\"stop_machine: %i chilling\\n\", smp_processor_id()); \treturn 0; } @@ -126,17 +129,23 @@ \tset_state(STOPMACHINE_PREPARE); +\tprintk(\"stop_machine: running on %i cpus:\\n\", num_threads);+\tdump_stack();+ \t/* Schedule the stop_cpu work on all cpus: hold this CPU so one \t * doesn't hit this CPU until we're ready. */ \tget_cpu(); \tfor_each_online_cpu(i) {+\t\tprintk(\"stop_machine: setting up cpu %i\\n\", i); \t\tsm_work = percpu_ptr(stop_machine_work, i); \t\tINIT_WORK(sm_work, stop_cpu); \t\tqueue_work_on(i, stop_machine_wq, sm_work); \t} \t/* This will release the thread on our CPU. */+\tprintk(\"stop_machine: releasing CPU %i\\n\", smp_processor_id()); \tput_cpu(); \tflush_workqueue(stop_machine_wq);+\tprintk(\"stop_machine: done\\n\"); \tret = active.fnret; \tmutex_unlock(&lock); \treturn ret;\0\303\277\303\264\303\250\302\272{.n\303\207+\302\211\302\267\302\237\302\256\302\211\302\255\302\206+%\302\212\303\213\303\277\302\261\303\251\303\235\302\266\027\302\245\302\212w\303\277\302\272{.n\303\207+\302\211\302\267\302\245\302\212{\302\261\303\276G\302\253\302\235\303\251\303\277\302\212{ay\302\272\035\303\212\302\207\303\232\302\231\303\253,j\a\302\255\302\242f\302\243\302\242\302\267h\302\232\302\217\303\257\302\201\303\252\303\277\302\221\303\252\303\247z_\303\250\302\256\003(\302\255\303\251\302\232\302\216\302\212\303\235\302\242j\"\302\235\303\272\032\302\266\033m\302\247\303\277\303\277\302\276\a\302\253\303\276G\302\253\302\235\303\251\303\277\302\242\302\270?\302\231\302\250\303\250\302\255\303\232&\302\243\303\270\302\247~\302\217\303\241\302\266iO\302\225\303\246\302\254z\302\267\302\232v\303\230^\024\004\032\302\266\033m\302\247\303\277\303\277\303\203\f\303\277\302\266\303\254\303\277\302\242\302\270?\302\226I\302\245" -8d470b4a458b051708ab6a5d816f2b282b722315784d0deb351c44453adfedc5 +8d4ee7ac9f082aa87d0e7df5e828a91af5234eeda2234c3507937c2ace1e9913
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.