On Thu, Mar 29, 2012 at 5:31 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. > > v2: > * Keep aiocb and cancel request on reset [mjt] > > 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 | 137 +++++++++++++++++++++++++++++++++++++--------------- > hw/ide/internal.h | 3 + > 2 files changed, 100 insertions(+), 40 deletions(-) > > -- > 1.7.9.1 > > Zhi Yong Wu <wu...@linux.vnet.ibm.com>
-- Regards, Zhi Yong Wu