From: "Rafael J. Wysocki" <rjw@sisk.pl>
To: Ingo Molnar <mingo@elte.hu>
Cc: Maciej Rutecki <maciej.rutecki@gmail.com>,
Dieter Ries <clip2@gmx.de>,
travis@sgi.com, rusty@rustcorp.com.au,
linux-kernel@vger.kernel.org,
Zdenek Kabelac <zdenek.kabelac@gmail.com>
Subject: Re: 2.6.29-rc1 does not boot and fails to resume
Date: Mon, 12 Jan 2009 18:22:08 +0100 [thread overview]
Message-ID: <200901121822.09492.rjw@sisk.pl> (raw)
In-Reply-To: <20090112112608.GB19388@elte.hu>
On Monday 12 January 2009, Ingo Molnar wrote:
>
> * Maciej Rutecki <maciej.rutecki@gmail.com> wrote:
>
> > 2009/1/11 Dieter Ries <clip2@gmx.de>:
> > > Hi,
> > >
> > > Ingo Molnar schrieb:
> > >>>> * Dieter Ries <clip2@gmx.de> wrote:
> > >>>>
> > >>>>> Hi,
> > >>>>>
> > >>>>> I just pulled 2.6.29-rc1, ran oldconfig with defaults and built it.
> > >>>>> When I try to boot it, that kind of works until init should start. Then
> > >>>>> nothing happens. I tried with init=/bin/bash, which sometimes works, and
> > >>>>> sometimes gets me a bash without the prompt flashing.
> > >>>>>
> >
> > Simmilar issue, described:
> > http://lkml.indiana.edu/hypermail/linux/kernel/0901.1/01701.html
> >
> > [...]
> > ####################################################################
> > > 7503bfbae89eba07b46441a5d1594647f6b8ab7d is first bad commit
> > > commit 7503bfbae89eba07b46441a5d1594647f6b8ab7d
> > > Author: Mike Travis <travis@sgi.com>
> > > Date: Sun Jan 4 05:18:09 2009 -0800
> > >
> > > cpumask: use work_on_cpu in acpi-cpufreq.c for drv_read and drv_write
> > >
> > > Impact: use new cpumask API to reduce stack usage
> > >
> > > Replace the saving of current->cpus_allowed and set_cpus_allowed_ptr()
> > > with a work_on_cpu function for drv_read() and drv_write().
> > >
> > > Basically converts do_drv_{read,write} into "work_on_cpu" functions that
> > > are now called by drv_read and drv_write.
> > >
> > > Signed-off-by: Mike Travis <travis@sgi.com>
> > > Acked-by: Rusty Russell <rusty@rustcorp.com.au>
> > > Signed-off-by: Ingo Molnar <mingo@elte.hu>
> >
> > Revert this commit also solves problem on my laptoop.
>
> yes - the revert patch can be found below.
Just for the record, apart from the boot problems the commit the patch below
reverts is also causing a suspend-resume regression for people.
Thanks,
Rafael
> ------------------->
> From e0b7a3bea054249b27ca3c843bf6eefcb509d1c2 Mon Sep 17 00:00:00 2001
> From: Ingo Molnar <mingo@elte.hu>
> Date: Mon, 12 Jan 2009 10:49:53 +0100
> Subject: [PATCH] Revert "cpumask: use work_on_cpu in acpi-cpufreq.c for drv_read and drv_write"
>
> This reverts commit 7503bfbae89eba07b46441a5d1594647f6b8ab7d.
>
> Dieter Ries reported bootup soft-hangs and bisected it back to
> this commit, and reverting this commit gave him a working system.
>
> The commit introduces work_on_cpu() use into the cpufreq code,
> but that is subtly problematic from a lock hierarchy POV: the
> hotplug-cpu lock is an highlevel lock that is taken before
> lowlevel locks, and in this codepath we are called with the
> policy lock taken.
>
> Dieter did not have lockdep enabled so we dont have a nice stack
> trace proof for this, but using work_on_cpu() in such a lowlevel
> place certainly looks wrong, so we revert the patch.
>
> work_on_cpu() needs to be reworked to be more generally usable.
>
> Reported-by: Dieter Ries <clip2@gmx.de>
> Tested-by: Dieter Ries <clip2@gmx.de>
> Signed-off-by: Ingo Molnar <mingo@elte.hu>
> ---
> arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c | 25 ++++++++++++-------------
> 1 files changed, 12 insertions(+), 13 deletions(-)
>
> diff --git a/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c b/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c
> index 06fcd8f..6f11e02 100644
> --- a/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c
> +++ b/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c
> @@ -150,9 +150,8 @@ struct drv_cmd {
> u32 val;
> };
>
> -static long do_drv_read(void *_cmd)
> +static void do_drv_read(struct drv_cmd *cmd)
> {
> - struct drv_cmd *cmd = _cmd;
> u32 h;
>
> switch (cmd->type) {
> @@ -167,12 +166,10 @@ static long do_drv_read(void *_cmd)
> default:
> break;
> }
> - return 0;
> }
>
> -static long do_drv_write(void *_cmd)
> +static void do_drv_write(struct drv_cmd *cmd)
> {
> - struct drv_cmd *cmd = _cmd;
> u32 lo, hi;
>
> switch (cmd->type) {
> @@ -189,23 +186,30 @@ static long do_drv_write(void *_cmd)
> default:
> break;
> }
> - return 0;
> }
>
> static void drv_read(struct drv_cmd *cmd)
> {
> + cpumask_t saved_mask = current->cpus_allowed;
> cmd->val = 0;
>
> - work_on_cpu(cpumask_any(cmd->mask), do_drv_read, cmd);
> + set_cpus_allowed_ptr(current, cmd->mask);
> + do_drv_read(cmd);
> + set_cpus_allowed_ptr(current, &saved_mask);
> }
>
> static void drv_write(struct drv_cmd *cmd)
> {
> + cpumask_t saved_mask = current->cpus_allowed;
> unsigned int i;
>
> for_each_cpu(i, cmd->mask) {
> - work_on_cpu(i, do_drv_write, cmd);
> + set_cpus_allowed_ptr(current, cpumask_of(i));
> + do_drv_write(cmd);
> }
> +
> + set_cpus_allowed_ptr(current, &saved_mask);
> + return;
> }
>
> static u32 get_cur_val(const struct cpumask *mask)
> @@ -231,15 +235,10 @@ static u32 get_cur_val(const struct cpumask *mask)
> return 0;
> }
>
> - if (unlikely(!alloc_cpumask_var(&cmd.mask, GFP_KERNEL)))
> - return 0;
> -
> cpumask_copy(cmd.mask, mask);
>
> drv_read(&cmd);
>
> - free_cpumask_var(cmd.mask);
> -
> dprintk("get_cur_val = %u\n", cmd.val);
>
> return cmd.val;
> --
next prev parent reply other threads:[~2009-01-12 17:22 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-01-11 14:55 2.6.29-rc1 does not boot Dieter Ries
2009-01-11 15:19 ` Ingo Molnar
2009-01-11 15:30 ` Dieter Ries
2009-01-11 15:35 ` Ingo Molnar
2009-01-11 15:41 ` Dieter Ries
2009-01-11 18:50 ` Dieter Ries
2009-01-11 19:02 ` Mike Travis
2009-01-11 19:30 ` Dieter Ries
2009-01-12 10:00 ` Ingo Molnar
2009-01-12 17:53 ` Mike Travis
2009-01-12 18:55 ` Ingo Molnar
2009-01-15 0:54 ` Rusty Russell
2009-01-11 19:02 ` Ingo Molnar
2009-01-11 19:14 ` Mike Travis
2009-01-11 23:19 ` Mike Travis
2009-01-12 1:01 ` H. Peter Anvin
2009-01-12 11:22 ` Maciej Rutecki
2009-01-12 11:26 ` Ingo Molnar
2009-01-12 11:28 ` Maciej Rutecki
2009-01-12 12:10 ` Dieter Ries
2009-01-12 12:21 ` Ingo Molnar
2009-01-12 16:37 ` Dieter Ries
2009-01-12 18:59 ` Ingo Molnar
2009-01-13 4:45 ` Michal Jaegermann
2009-01-12 17:22 ` Rafael J. Wysocki [this message]
2009-01-14 1:16 ` Rusty Russell
2009-01-14 11:30 ` Ingo Molnar
2009-01-14 12:47 ` Dieter Ries
2009-01-15 20:01 ` Mike Travis
2009-01-15 21:03 ` Dieter Ries
2009-01-15 21:48 ` Maciej Rutecki
2009-01-15 21:54 ` Mike Travis
2009-01-15 23:04 ` Maciej Rutecki
2009-01-15 23:31 ` Mike Travis
2009-01-15 21:54 ` Mike Travis
2009-01-15 23:02 ` Dieter Ries
2009-01-15 23:30 ` Mike Travis
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200901121822.09492.rjw@sisk.pl \
--to=rjw@sisk.pl \
--cc=clip2@gmx.de \
--cc=linux-kernel@vger.kernel.org \
--cc=maciej.rutecki@gmail.com \
--cc=mingo@elte.hu \
--cc=rusty@rustcorp.com.au \
--cc=travis@sgi.com \
--cc=zdenek.kabelac@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome