Re: wait_even_interruptible_timeout(), signal, spin_lock() = systemhang
From: Jeff Layton
Date: Fri Jun 04 2010 - 07:50:17 EST
On Fri, 28 May 2010 11:44:46 -0500
Shirish Pargaonkar <shirishpargaonkar@xxxxxxxxx> wrote:
> After this sequence of calls, system hangs (smp, x86 box based with
> .34 kernel), can ping only.
> I have not been able to break in with Alt Sysrq t, working on that
>
> rc = wait_event_interruptible_timeout(ses->server->response_q,
> (midQ->midState != MID_REQUEST_SUBMITTED), timeout);
> if (rc < 0) {
> cFYI(1, ("command 0x%x interrupted", midQ->command));
> return -1;
> }
>
> and when function that invoking function after coming out with ERESTARTSYS
> (I kill the command with Ctrl C) calls
> spin_lock(&GlobalMid_Lock);
>
> system hangs. If I sleep before return -1 (e.g. msleep(1), no hang)
>
Sounds like a race of some sort, but could also be that msleep() is
doing something (perhaps relating to the pending signal) that prevents
the hang. Without some sort of clue as to what the box is hung on at
the time there is no way to know.
> I do not have to use wait_event_interruptible_timeout and no such problems with
> wait_event_timeout, it is only when signal/interrupt is involved, I
> run into this problem
>
> Any pointers/ideas what could be happening, would be really really appreciated.
>
No idea right offhand. I'd suggest getting a core or sysrq data and see
what it's doing.
--
Jeff Layton <jlayton@xxxxxxxxxx>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/