Re: [1/2] [NET] link_watch: Move link watch list into net_device

Andrew Morton
2007-05-10T22:16:47Z

On Thu, 10 May 2007 15:00:05 -0700
Jeremy Fitzhardinge <jeremy@goop.org> wrote:

> Herbert Xu wrote:
> > [NET] link_watch: Move link watch list into net_device
> >
> > These days the link watch mechanism is an integral part of the
> > network subsystem as it manages the carrier status. So it now
> > makes sense to allocate some memory for it in net_device rather
> > than allocating it on demand.
>
> I think there's a problem with one of these two patches. I've been
> noticing that one of my events/X threads has been going into a spin for
> about 5 mins after boot. I added some debugging to
> kernel/workqueue.c:run_workqueue, since its that loop which seems to be
> spinning due to list corruption.
>
> When I look to see if that loop has iterated for more than 100 times in
> one go (which seems unlikely), I get this:
>
> BUG: cpu 3, count=101 list screwup on c04babe4, func c03217e8
> func=linkwatch_event+0x0/0x2a
> [<c0109173>] show_trace_log_lvl+0x1a/0x30
> [<c0109c7f>] show_trace+0x12/0x14
> [<c0109d0c>] dump_stack+0x16/0x18
> [<c0137c25>] run_workqueue+0x97/0x18c
> [<c01386a4>] worker_thread+0xe5/0xf5
> [<c013afe9>] kthread+0x3b/0x62
> [<c0108d47>] kernel_thread_helper+0x7/0x10
> =======================
>
>
> I wonder if the problem is that the linkwatch_work is being rescheduled
> when its already been scheduled, or something like that?

Five minutes after boot is when jiffies wraps. Are you sure it's
a list-screwup rather than a jiffy-wrap screwup?