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 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.