On Wed, Mar 28, 2012 at 11:43 PM, Stefan Hajnoczi <stefa...@linux.vnet.ibm.com> wrote: > IDE PIO mode is currently implemented using synchronous I/O functions. > There's > no need to do this because the IDE interface is actually designed with polling > and interrupts in mind - we can do asynchronous I/O and let the guest know > when > the operation has completed. The benefit of asynchronous I/O is that the > guest > can continue executing code and is more responsive. > > The second aim of this conversion is to avoid calling bdrv_read()/bdrv_write() > since they do not work with I/O throttling. This means guests should now boot > IDE drives successfully when I/O throttling is enabled. > > Note that ATAPI is not converted yet and still uses bdrv_read() in two > locations. A future patch will have to convert ATAPI so CD-ROMs also do > asynchronous I/O. > > I have tested both Windows 7 Home Premium and Red Hat Enterprise Linux 6.0 > guests with these patches. In Windows, use the device manager to disable DMA > on the IDE channels. Under recent Linux kernels, use the libata.dma=0 kernel > parameter. > > Chris and Richard: Please test this to confirm that it fixes the hang you > reported. > > Stefan Hajnoczi (2): > ide: convert ide_sector_read() to asynchronous I/O > ide: convert ide_sector_write() to asynchronous I/O > > hw/ide/core.c | 129 ++++++++++++++++++++++++++++++++++++---------------- > hw/ide/internal.h | 2 + > 2 files changed, 91 insertions(+), 40 deletions(-) > > -- > 1.7.9.1 > >
Reviewed-by: Zhi Yong Wu <wu...@linux.vnet.ibm.com> -- Regards, Zhi Yong Wu