From: Jody McIntyre <scjody@sun.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org
Subject: Re: 2.6.29-rc1: BUG: unable to handle kernel paging request at 000077fed87bb6bf
Date: Mon, 19 Jan 2009 16:23:29 -0500 [thread overview]
Message-ID: <20090119212329.GS28831@clouds> (raw)
In-Reply-To: <20090114215120.b0ad7c4b.akpm@linux-foundation.org>
On Wed, Jan 14, 2009 at 09:51:20PM -0800, Andrew Morton wrote:
> It needs to be bisected :(
>
> At a guess I'd say that some piece of code somewhere did
> schedule_delayed_work(work) and then scribbled on *work before the
> timer got to run. It could be anywhere at all in your kernel.
I tried your patch on Friday and couldn't find the bug with it. I was
going to try more debugging today but happily, a commit made over the
weekend has fixed the issue.
Thanks,
Jody
> Thomas's debugobjects code could perhaps be used to find the culprit,
> but alas the workqueue code hasn't been taught to use that framework.
>
> We could do something like this:
>
> --- a/kernel/workqueue.c~a
> +++ a/kernel/workqueue.c
> @@ -196,9 +196,14 @@ EXPORT_SYMBOL_GPL(queue_work_on);
>
> static void delayed_work_timer_fn(unsigned long __data)
> {
> - struct delayed_work *dwork = (struct delayed_work *)__data;
> - struct cpu_workqueue_struct *cwq = get_wq_data(&dwork->work);
> - struct workqueue_struct *wq = cwq->wq;
> + struct delayed_work *dwork;
> + struct cpu_workqueue_struct *cwq;
> + struct workqueue_struct *wq;
> +
> + dwork = (struct delayed_work *)__data;
> + printk("delayed_work_timer_fn: handling %p\n", dwork);
> + cwq = get_wq_data(&dwork->work);
> + wq = cwq->wq;
>
> __queue_work(wq_per_cpu(wq, smp_processor_id()), &dwork->work);
> }
> @@ -214,6 +219,8 @@ static void delayed_work_timer_fn(unsign
> int queue_delayed_work(struct workqueue_struct *wq,
> struct delayed_work *dwork, unsigned long delay)
> {
> + printk("queue_delayed_work: queueing %p\n", dwork);
> + dump_stack();
> if (delay == 0)
> return queue_work(wq, &dwork->work);
>
> _
>
> It will print an object address and a call trace in
> queue_delayed_work() and will print an object address in
> delayed_work_timer_fn().
>
> Hopefully when it oopses you'll see the bad object address which was
> obtained by delayed_work_timer_fn(). Then, you can go back through the
> trace and determine which callsite passed that object address to
> queue_delayed_work(). Then we will have our culprit.
>
> It'll possibly generate a lot of output, so logged netconsole might be
> needed.
>
prev parent reply other threads:[~2009-01-19 21:23 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-01-13 21:47 2.6.29-rc1: BUG: unable to handle kernel paging request at 000077fed87bb6bf Jody McIntyre
2009-01-15 5:51 ` Andrew Morton
2009-01-19 21:23 ` Jody McIntyre [this message]
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=20090119212329.GS28831@clouds \
--to=scjody@sun.com \
--cc=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
/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