Re: [PATCH][2.5] BUG check in elevator.c:237

Jens Axboe (axboe@suse.de)
Mon, 11 Mar 2002 10:44:45 +0100


On Fri, Mar 08 2002, Martin Dalecki wrote:
> After having a look at the oops I think that this may be very well a
> symptom of another problem in the ide-cd.c drivers overall
> way of working. Please let me elaborate a bit.
>
> In ide.c there is one central interrupt handler, namely:
>
> void ide_timer_expiry(unsigned long data)
>
> This function is called upon finish of every command.

Eh? ide_timer_expiry is the timer handler called if a interrupt timeout
occurs.

> However for cd-rom there are commands, which can
> take quite a long time. Therefore there is the possiblity there
> to provide a polling function, which will be engaged after the
> interrupt happens in the above function:
>
> /* continue */
> if ((wait = expiry(drive)) != 0) {

[snip]

That's nonsense too. I added the expiry hook to let lower levels decide
what should happen when an interrupt timeout occurs. So there's been
_no_ interrupt if we enter this from the timer handler.

> And plase guess whot? CD-ROM is the only driver which is using
> this facility. Please have a look at the last

Right, it was added to handle long commands like format unit etc.

> argument of ide_set_handler(). The second argument is the
> interrutp handler for a command. The third is supposed to be
> the poll timerout function. But if you look at the
> actual poll function found in ide-cd.c (and only there).
> You may as well feel to try to just execute its commands directly in
> ide_timer_expiry, thus reducing tons of possible races ind the
> overall intr handling found currently there.

I don't know what tangent you are going off on here, I think you should
re-read this code a lot more carefully. There's no polling going on
here.

-- 
Jens Axboe

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/