atapi migration: Throw recoverable error to avoid recovery
authorDr. David Alan Gilbert <dgilbert@redhat.com>
Tue, 9 Dec 2014 18:15:09 +0000 (18:15 +0000)
committerKevin Wolf <kwolf@redhat.com>
Fri, 6 Feb 2015 16:24:20 +0000 (17:24 +0100)
commita71754e5b03fd3b8b8c6d3bc2a39f75bead729de
tree4e31554afb7c37219fa4a626c71c86abc56e9240
parent819fa276311ce328a8e38ad9306c1093961b3f4b
atapi migration: Throw recoverable error to avoid recovery

(With the previous atapi_dma flag recovery)
If migration happens between the ATAPI command being written and the
bmdma being started, the DMA is dropped.  Eventually the guest times
out and recovers, but that can take many seconds.
(This is rare, on a pingpong reading the CD continuously I hit
this about ~1/30-1/50 migrates)

I don't think we've got enough state to be able to recover safely
at this point, so I throw a 'medium error, no seek complete'
that I'm assuming guests will try and recover from an apparently
dirty CD.

OK, it's a hack, the real solution is probably to push a lot of
ATAPI state into the migration stream, but this is a fix that
works with no stream changes. Tested only on Linux (both RHEL5
(pre-libata) and RHEL7).

Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Reviewed-by: John Snow <jsnow@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
hw/ide/atapi.c
hw/ide/internal.h
hw/ide/pci.c