23450319e2
It is possible for the timer expiry function to run even though the request has already been handled: ide_timer_expiry() only checks that the handler is not NULL, but it is possible that we have handled a request (thus clearing the handler) and then started a new request (thus starting the timer again, and setting a handler). A simple way to exhibit this is to set the DMA timeout to 1 jiffy and run dd: The kernel will panic after a few minutes because ide_timer_expiry() tries to add a timer when it's already active. To fix this, we simply add a request generation count that gets incremented at every interrupt, and check in ide_timer_expiry() that we have not already handled a new interrupt before running the expiry function. Signed-off-by: Suleiman Souhlal <suleiman@google.com> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> |
||
---|---|---|
.. | ||
arm | ||
cris | ||
h8300 | ||
legacy | ||
mips | ||
pci | ||
ppc | ||
ide-acpi.c | ||
ide-cd.c | ||
ide-cd.h | ||
ide-disk.c | ||
ide-dma.c | ||
ide-floppy.c | ||
ide-generic.c | ||
ide-io.c | ||
ide-iops.c | ||
ide-lib.c | ||
ide-pnp.c | ||
ide-probe.c | ||
ide-proc.c | ||
ide-tape.c | ||
ide-taskfile.c | ||
ide-timing.h | ||
ide.c | ||
Kconfig | ||
Makefile | ||
setup-pci.c |