dev: Fix race conditions in IDE device on newer kernels
authorGeoffrey Blake <Geoffrey.Blake@arm.com>
Thu, 31 Oct 2013 18:41:13 +0000 (13:41 -0500)
committerGeoffrey Blake <Geoffrey.Blake@arm.com>
Thu, 31 Oct 2013 18:41:13 +0000 (13:41 -0500)
commitbe4aa2b6ba0b70b13df2ad84a372320c5a7ea939
treeff113f004f0efc3d9aaf708ead4c746ff4a7c8ae
parentfb0496498d06def8e9b1b2ae2099b3013716b7dc
dev: Fix race conditions in IDE device on newer kernels

Newer linux kernels and distros exercise more functionality in the IDE device
than previously, exposing 2 races. The first race is the handling of aborted
DMA commands would immediately report the device is ready back to the kernel
and cause already in flight commands to assert the simulator when they returned
and discovered an inconsitent device state.  The second race was due to the
Status register not being handled correctly, the interrupt status bit would get
stuck at 1 and the driver eventually views this as a bad state and logs the
condition to the terminal.  This patch fixes these two conditions by making the
device handle aborted commands gracefully and properly handles clearing the
interrupt status bit in the Status register.
src/dev/ide_ctrl.cc
src/dev/ide_disk.cc
src/dev/ide_disk.hh
src/sim/serialize.hh
util/cpt_upgrader.py