[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] Windows Bug Check 0x101 issue



Certainly it looks better. What do you think, Samuel?

 -- Keir

On 25/3/08 10:54, "Kouya Shimura" <kouya@xxxxxxxxxxxxxx> wrote:

> Keir Fraser writes:
>> However in this case I guess the IDE/SCSI device model could allow
>> asynchronous reporting of flush completion to the guest, and this new aspect
>> of the device model would obviously tie into your patch, being done on
>> aio_fsync_cb().
> 
> Here is a revised patch. Is this a good fix?
> 
> I'm not an expert on the SCSI. So please excuse
> the SCSI side is not implemented yet.
> (I tried but it doesn't work well)
> 
> Thanks,
> Kouya
> 
> Signed-off-by: Kouya Shimura <kouya@xxxxxxxxxxxxxx>
> 
> diff -r 76c9cf11ce23 tools/ioemu/block-raw.c
> --- a/tools/ioemu/block-raw.c Fri Mar 21 09:45:34 2008 +0000
> +++ b/tools/ioemu/block-raw.c Tue Mar 25 19:40:42 2008 +0900
> @@ -606,6 +606,18 @@ static void raw_flush(BlockDriverState *
>      fsync(s->fd);
>  }
>  
> +void bdrv_aio_flush(BlockDriverState *bs,
> +                    BlockDriverCompletionFunc *cb, void *opaque)
> +{
> +    RawAIOCB *acb;
> +
> +    acb = raw_aio_setup(bs, 0, NULL, 0, cb, opaque);
> +    if (!acb)
> +        return;
> +    if (aio_fsync(O_SYNC, &acb->aiocb) < 0)
> +        qemu_aio_release(acb);
> +}
> +
>  BlockDriver bdrv_raw = {
>      "raw",
>      sizeof(BDRVRawState),
> diff -r 76c9cf11ce23 tools/ioemu/hw/ide.c
> --- a/tools/ioemu/hw/ide.c Fri Mar 21 09:45:34 2008 +0000
> +++ b/tools/ioemu/hw/ide.c Tue Mar 25 19:40:42 2008 +0900
> @@ -1738,6 +1738,13 @@ static void ide_clear_hob(IDEState *ide_
>      ide_if[1].select &= ~(1 << 7);
>  }
>  
> +static void ide_flush_cb(void *opaque, int ret)
> +{
> +    IDEState *s = (IDEState *)opaque;
> +    s->status = READY_STAT;
> +    ide_set_irq(s);
> +}
> +
>  static void ide_ioport_write(void *opaque, uint32_t addr, uint32_t val)
>  {
>      IDEState *ide_if = opaque;
> @@ -1976,10 +1983,13 @@ static void ide_ioport_write(void *opaqu
>              break;
>          case WIN_FLUSH_CACHE:
>          case WIN_FLUSH_CACHE_EXT:
> -            if (s->bs)
> -                bdrv_flush(s->bs);
> -     s->status = READY_STAT;
> -            ide_set_irq(s);
> +            if (s->bs) {
> +                bdrv_aio_flush(s->bs, ide_flush_cb, s);
> +                s->status = BUSY_STAT;
> +            } else {
> +                s->status = READY_STAT;
> +                ide_set_irq(s);
> +            }
>              break;
>          case WIN_IDLEIMMEDIATE:
>          case WIN_STANDBY:
> diff -r 76c9cf11ce23 tools/ioemu/vl.h
> --- a/tools/ioemu/vl.h Fri Mar 21 09:45:34 2008 +0000
> +++ b/tools/ioemu/vl.h Tue Mar 25 19:40:42 2008 +0900
> @@ -653,6 +653,8 @@ BlockDriverAIOCB *bdrv_aio_write(BlockDr
>                                   const uint8_t *buf, int nb_sectors,
>                                   BlockDriverCompletionFunc *cb, void
> *opaque);
>  void bdrv_aio_cancel(BlockDriverAIOCB *acb);
> +void bdrv_aio_flush(BlockDriverState *bs,
> +                    BlockDriverCompletionFunc *cb, void *opaque);
>  
>  void qemu_aio_init(void);
>  void qemu_aio_poll(void);



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.