qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Anthony Liguori <anthony@codemonkey.ws>
To: Kevin Wolf <kwolf@redhat.com>
Cc: qemu-devel@nongnu.org, Markus Armbruster <armbru@redhat.com>
Subject: Re: [Qemu-devel] [PATCH 23/25] fdc: Move floppy geometry guessing back from block.c
Date: Mon, 09 Jul 2012 10:01:53 -0500	[thread overview]
Message-ID: <4FFAF261.5010804@codemonkey.ws> (raw)
In-Reply-To: <1341843388-5663-24-git-send-email-kwolf@redhat.com>

On 07/09/2012 09:16 AM, Kevin Wolf wrote:
> From: Markus Armbruster<armbru@redhat.com>
>
> Commit 5bbdbb46 moved it to block.c because "other geometry guessing
> functions already reside in block.c".  Device-specific functionality
> should be kept in device code, not the block layer.  Move it back.
>
> Disk geometry guessing is still in block.c.  To be moved out in a
> later patch series.
>
> Bonus: the floppy type used in pc_cmos_init() now obviously matches
> the one in the FDrive.  Before, we relied on
> bdrv_get_floppy_geometry_hint() picking the same type both in
> fd_revalidate() and in pc_cmos_init().
>
> Signed-off-by: Markus Armbruster<armbru@redhat.com>
> Signed-off-by: Kevin Wolf<kwolf@redhat.com>
> ---
>   block.c  |  101 ---------------------------------------------------
>   block.h  |   18 ---------
>   hw/fdc.c |  122 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
>   hw/fdc.h |   10 +++++-
>   hw/pc.c  |   13 ++-----
>   5 files changed, 124 insertions(+), 140 deletions(-)
>
> diff --git a/block.c b/block.c
> index f2540b9..fa1789c 100644
> --- a/block.c
> +++ b/block.c
> @@ -2272,107 +2272,6 @@ void bdrv_set_io_limits(BlockDriverState *bs,
>       bs->io_limits_enabled = bdrv_io_limits_enabled(bs);
>   }
>
> -/* Recognize floppy formats */
> -typedef struct FDFormat {
> -    FDriveType drive;
> -    uint8_t last_sect;
> -    uint8_t max_track;
> -    uint8_t max_head;
> -    FDriveRate rate;
> -} FDFormat;
> -
> -static const FDFormat fd_formats[] = {
> -    /* First entry is default format */
> -    /* 1.44 MB 3"1/2 floppy disks */
> -    { FDRIVE_DRV_144, 18, 80, 1, FDRIVE_RATE_500K, },
> -    { FDRIVE_DRV_144, 20, 80, 1, FDRIVE_RATE_500K, },
> -    { FDRIVE_DRV_144, 21, 80, 1, FDRIVE_RATE_500K, },
> -    { FDRIVE_DRV_144, 21, 82, 1, FDRIVE_RATE_500K, },
> -    { FDRIVE_DRV_144, 21, 83, 1, FDRIVE_RATE_500K, },
> -    { FDRIVE_DRV_144, 22, 80, 1, FDRIVE_RATE_500K, },
> -    { FDRIVE_DRV_144, 23, 80, 1, FDRIVE_RATE_500K, },
> -    { FDRIVE_DRV_144, 24, 80, 1, FDRIVE_RATE_500K, },
> -    /* 2.88 MB 3"1/2 floppy disks */
> -    { FDRIVE_DRV_288, 36, 80, 1, FDRIVE_RATE_1M, },
> -    { FDRIVE_DRV_288, 39, 80, 1, FDRIVE_RATE_1M, },
> -    { FDRIVE_DRV_288, 40, 80, 1, FDRIVE_RATE_1M, },
> -    { FDRIVE_DRV_288, 44, 80, 1, FDRIVE_RATE_1M, },
> -    { FDRIVE_DRV_288, 48, 80, 1, FDRIVE_RATE_1M, },
> -    /* 720 kB 3"1/2 floppy disks */
> -    { FDRIVE_DRV_144,  9, 80, 1, FDRIVE_RATE_250K, },
> -    { FDRIVE_DRV_144, 10, 80, 1, FDRIVE_RATE_250K, },
> -    { FDRIVE_DRV_144, 10, 82, 1, FDRIVE_RATE_250K, },
> -    { FDRIVE_DRV_144, 10, 83, 1, FDRIVE_RATE_250K, },
> -    { FDRIVE_DRV_144, 13, 80, 1, FDRIVE_RATE_250K, },
> -    { FDRIVE_DRV_144, 14, 80, 1, FDRIVE_RATE_250K, },
> -    /* 1.2 MB 5"1/4 floppy disks */
> -    { FDRIVE_DRV_120, 15, 80, 1, FDRIVE_RATE_500K, },
> -    { FDRIVE_DRV_120, 18, 80, 1, FDRIVE_RATE_500K, },
> -    { FDRIVE_DRV_120, 18, 82, 1, FDRIVE_RATE_500K, },
> -    { FDRIVE_DRV_120, 18, 83, 1, FDRIVE_RATE_500K, },
> -    { FDRIVE_DRV_120, 20, 80, 1, FDRIVE_RATE_500K, },
> -    /* 720 kB 5"1/4 floppy disks */
> -    { FDRIVE_DRV_120,  9, 80, 1, FDRIVE_RATE_250K, },
> -    { FDRIVE_DRV_120, 11, 80, 1, FDRIVE_RATE_250K, },
> -    /* 360 kB 5"1/4 floppy disks */
> -    { FDRIVE_DRV_120,  9, 40, 1, FDRIVE_RATE_300K, },
> -    { FDRIVE_DRV_120,  9, 40, 0, FDRIVE_RATE_300K, },
> -    { FDRIVE_DRV_120, 10, 41, 1, FDRIVE_RATE_300K, },
> -    { FDRIVE_DRV_120, 10, 42, 1, FDRIVE_RATE_300K, },
> -    /* 320 kB 5"1/4 floppy disks */
> -    { FDRIVE_DRV_120,  8, 40, 1, FDRIVE_RATE_250K, },
> -    { FDRIVE_DRV_120,  8, 40, 0, FDRIVE_RATE_250K, },
> -    /* 360 kB must match 5"1/4 better than 3"1/2... */
> -    { FDRIVE_DRV_144,  9, 80, 0, FDRIVE_RATE_250K, },
> -    /* end */
> -    { FDRIVE_DRV_NONE, -1, -1, 0, 0, },
> -};
> -
> -void bdrv_get_floppy_geometry_hint(BlockDriverState *bs, int *nb_heads,
> -                                   int *max_track, int *last_sect,
> -                                   FDriveType drive_in, FDriveType *drive,
> -                                   FDriveRate *rate)
> -{
> -    const FDFormat *parse;
> -    uint64_t nb_sectors, size;
> -    int i, first_match, match;
> -
> -    bdrv_get_geometry(bs,&nb_sectors);
> -    match = -1;
> -    first_match = -1;
> -    for (i = 0; ; i++) {
> -        parse =&fd_formats[i];
> -        if (parse->drive == FDRIVE_DRV_NONE) {
> -            break;
> -        }
> -        if (drive_in == parse->drive ||
> -            drive_in == FDRIVE_DRV_NONE) {
> -            size = (parse->max_head + 1) * parse->max_track *
> -                parse->last_sect;
> -            if (nb_sectors == size) {
> -                match = i;
> -                break;
> -            }
> -            if (first_match == -1) {
> -                first_match = i;
> -            }
> -        }
> -    }
> -    if (match == -1) {
> -        if (first_match == -1) {
> -            match = 1;
> -        } else {
> -            match = first_match;
> -        }
> -        parse =&fd_formats[match];
> -    }
> -    *nb_heads = parse->max_head + 1;
> -    *max_track = parse->max_track;
> -    *last_sect = parse->last_sect;
> -    *drive = parse->drive;
> -    *rate = parse->rate;
> -}
> -
>   int bdrv_get_translation_hint(BlockDriverState *bs)
>   {
>       return bs->translation;
> diff --git a/block.h b/block.h
> index 3af93c6..c1c7500 100644
> --- a/block.h
> +++ b/block.h
> @@ -267,24 +267,6 @@ void bdrv_set_geometry_hint(BlockDriverState *bs,
>   void bdrv_set_translation_hint(BlockDriverState *bs, int translation);
>   void bdrv_get_geometry_hint(BlockDriverState *bs,
>                               int *pcyls, int *pheads, int *psecs);
> -typedef enum FDriveType {
> -    FDRIVE_DRV_144  = 0x00,   /* 1.44 MB 3"5 drive      */
> -    FDRIVE_DRV_288  = 0x01,   /* 2.88 MB 3"5 drive      */
> -    FDRIVE_DRV_120  = 0x02,   /* 1.2  MB 5"25 drive     */
> -    FDRIVE_DRV_NONE = 0x03,   /* No drive connected     */
> -} FDriveType;
> -
> -typedef enum FDriveRate {
> -    FDRIVE_RATE_500K = 0x00,  /* 500 Kbps */
> -    FDRIVE_RATE_300K = 0x01,  /* 300 Kbps */
> -    FDRIVE_RATE_250K = 0x02,  /* 250 Kbps */
> -    FDRIVE_RATE_1M   = 0x03,  /*   1 Mbps */
> -} FDriveRate;
> -
> -void bdrv_get_floppy_geometry_hint(BlockDriverState *bs, int *nb_heads,
> -                                   int *max_track, int *last_sect,
> -                                   FDriveType drive_in, FDriveType *drive,
> -                                   FDriveRate *rate);
>   int bdrv_get_translation_hint(BlockDriverState *bs);
>   void bdrv_set_on_error(BlockDriverState *bs, BlockErrorAction on_read_error,
>                          BlockErrorAction on_write_error);
> diff --git a/hw/fdc.c b/hw/fdc.c
> index edf0706..41191c7 100644
> --- a/hw/fdc.c
> +++ b/hw/fdc.c
> @@ -52,6 +52,113 @@
>   /********************************************************/
>   /* Floppy drive emulation                               */
>
> +typedef enum FDriveRate {
> +    FDRIVE_RATE_500K = 0x00,  /* 500 Kbps */
> +    FDRIVE_RATE_300K = 0x01,  /* 300 Kbps */
> +    FDRIVE_RATE_250K = 0x02,  /* 250 Kbps */
> +    FDRIVE_RATE_1M   = 0x03,  /*   1 Mbps */
> +} FDriveRate;
> +
> +typedef struct FDFormat {
> +    FDriveType drive;
> +    uint8_t last_sect;
> +    uint8_t max_track;
> +    uint8_t max_head;
> +    FDriveRate rate;
> +} FDFormat;
> +
> +static const FDFormat fd_formats[] = {
> +    /* First entry is default format */
> +    /* 1.44 MB 3"1/2 floppy disks */
> +    { FDRIVE_DRV_144, 18, 80, 1, FDRIVE_RATE_500K, },
> +    { FDRIVE_DRV_144, 20, 80, 1, FDRIVE_RATE_500K, },
> +    { FDRIVE_DRV_144, 21, 80, 1, FDRIVE_RATE_500K, },
> +    { FDRIVE_DRV_144, 21, 82, 1, FDRIVE_RATE_500K, },
> +    { FDRIVE_DRV_144, 21, 83, 1, FDRIVE_RATE_500K, },
> +    { FDRIVE_DRV_144, 22, 80, 1, FDRIVE_RATE_500K, },
> +    { FDRIVE_DRV_144, 23, 80, 1, FDRIVE_RATE_500K, },
> +    { FDRIVE_DRV_144, 24, 80, 1, FDRIVE_RATE_500K, },
> +    /* 2.88 MB 3"1/2 floppy disks */
> +    { FDRIVE_DRV_288, 36, 80, 1, FDRIVE_RATE_1M, },
> +    { FDRIVE_DRV_288, 39, 80, 1, FDRIVE_RATE_1M, },
> +    { FDRIVE_DRV_288, 40, 80, 1, FDRIVE_RATE_1M, },
> +    { FDRIVE_DRV_288, 44, 80, 1, FDRIVE_RATE_1M, },
> +    { FDRIVE_DRV_288, 48, 80, 1, FDRIVE_RATE_1M, },
> +    /* 720 kB 3"1/2 floppy disks */
> +    { FDRIVE_DRV_144,  9, 80, 1, FDRIVE_RATE_250K, },
> +    { FDRIVE_DRV_144, 10, 80, 1, FDRIVE_RATE_250K, },
> +    { FDRIVE_DRV_144, 10, 82, 1, FDRIVE_RATE_250K, },
> +    { FDRIVE_DRV_144, 10, 83, 1, FDRIVE_RATE_250K, },
> +    { FDRIVE_DRV_144, 13, 80, 1, FDRIVE_RATE_250K, },
> +    { FDRIVE_DRV_144, 14, 80, 1, FDRIVE_RATE_250K, },
> +    /* 1.2 MB 5"1/4 floppy disks */
> +    { FDRIVE_DRV_120, 15, 80, 1, FDRIVE_RATE_500K, },
> +    { FDRIVE_DRV_120, 18, 80, 1, FDRIVE_RATE_500K, },
> +    { FDRIVE_DRV_120, 18, 82, 1, FDRIVE_RATE_500K, },
> +    { FDRIVE_DRV_120, 18, 83, 1, FDRIVE_RATE_500K, },
> +    { FDRIVE_DRV_120, 20, 80, 1, FDRIVE_RATE_500K, },
> +    /* 720 kB 5"1/4 floppy disks */
> +    { FDRIVE_DRV_120,  9, 80, 1, FDRIVE_RATE_250K, },
> +    { FDRIVE_DRV_120, 11, 80, 1, FDRIVE_RATE_250K, },
> +    /* 360 kB 5"1/4 floppy disks */
> +    { FDRIVE_DRV_120,  9, 40, 1, FDRIVE_RATE_300K, },
> +    { FDRIVE_DRV_120,  9, 40, 0, FDRIVE_RATE_300K, },
> +    { FDRIVE_DRV_120, 10, 41, 1, FDRIVE_RATE_300K, },
> +    { FDRIVE_DRV_120, 10, 42, 1, FDRIVE_RATE_300K, },
> +    /* 320 kB 5"1/4 floppy disks */
> +    { FDRIVE_DRV_120,  8, 40, 1, FDRIVE_RATE_250K, },
> +    { FDRIVE_DRV_120,  8, 40, 0, FDRIVE_RATE_250K, },
> +    /* 360 kB must match 5"1/4 better than 3"1/2... */
> +    { FDRIVE_DRV_144,  9, 80, 0, FDRIVE_RATE_250K, },
> +    /* end */
> +    { FDRIVE_DRV_NONE, -1, -1, 0, 0, },
> +};
> +
> +static void pick_geometry(BlockDriverState *bs, int *nb_heads,
> +                          int *max_track, int *last_sect,
> +                          FDriveType drive_in, FDriveType *drive,
> +                          FDriveRate *rate)
> +{
> +    const FDFormat *parse;
> +    uint64_t nb_sectors, size;
> +    int i, first_match, match;
> +
> +    bdrv_get_geometry(bs,&nb_sectors);
> +    match = -1;
> +    first_match = -1;
> +    for (i = 0; ; i++) {
> +        parse =&fd_formats[i];
> +        if (parse->drive == FDRIVE_DRV_NONE) {
> +            break;
> +        }
> +        if (drive_in == parse->drive ||
> +            drive_in == FDRIVE_DRV_NONE) {
> +            size = (parse->max_head + 1) * parse->max_track *
> +                parse->last_sect;
> +            if (nb_sectors == size) {
> +                match = i;
> +                break;
> +            }
> +            if (first_match == -1) {
> +                first_match = i;
> +            }
> +        }
> +    }
> +    if (match == -1) {
> +        if (first_match == -1) {
> +            match = 1;
> +        } else {
> +            match = first_match;
> +        }
> +        parse =&fd_formats[match];
> +    }
> +    *nb_heads = parse->max_head + 1;
> +    *max_track = parse->max_track;
> +    *last_sect = parse->last_sect;
> +    *drive = parse->drive;
> +    *rate = parse->rate;
> +}
> +
>   #define GET_CUR_DRV(fdctrl) ((fdctrl)->cur_drv)
>   #define SET_CUR_DRV(fdctrl, drive) ((fdctrl)->cur_drv = (drive))
>
> @@ -187,8 +294,8 @@ static void fd_revalidate(FDrive *drv)
>       FLOPPY_DPRINTF("revalidate\n");
>       if (drv->bs != NULL) {
>           ro = bdrv_is_read_only(drv->bs);
> -        bdrv_get_floppy_geometry_hint(drv->bs,&nb_heads,&max_track,
> -&last_sect, drv->drive,&drive,&rate);
> +        pick_geometry(drv->bs,&nb_heads,&max_track,
> +&last_sect, drv->drive,&drive,&rate);
>           if (!bdrv_is_inserted(drv->bs)) {
>               FLOPPY_DPRINTF("No disk in drive\n");
>           } else {
> @@ -2054,18 +2161,13 @@ static int sun4m_fdc_init1(SysBusDevice *dev)
>       return fdctrl_init_common(fdctrl);
>   }
>
> -void fdc_get_bs(BlockDriverState *bs[], ISADevice *dev)
> +FDriveType isa_fdc_get_drive_type(ISADevice *fdc, int i)
>   {
> -    FDCtrlISABus *isa = DO_UPCAST(FDCtrlISABus, busdev, dev);
> -    FDCtrl *fdctrl =&isa->state;
> -    int i;
> +    FDCtrlISABus *isa = DO_UPCAST(FDCtrlISABus, busdev, fdc);
>
> -    for (i = 0; i<  MAX_FD; i++) {
> -        bs[i] = fdctrl->drives[i].bs;
> -    }
> +    return isa->state.drives[i].drive;
>   }
>
> -
>   static const VMStateDescription vmstate_isa_fdc ={
>       .name = "fdc",
>       .version_id = 2,
> diff --git a/hw/fdc.h b/hw/fdc.h
> index 1b32b17..b5c9f31 100644
> --- a/hw/fdc.h
> +++ b/hw/fdc.h
> @@ -6,11 +6,19 @@
>   /* fdc.c */
>   #define MAX_FD 2
>
> +typedef enum FDriveType {
> +    FDRIVE_DRV_144  = 0x00,   /* 1.44 MB 3"5 drive      */
> +    FDRIVE_DRV_288  = 0x01,   /* 2.88 MB 3"5 drive      */
> +    FDRIVE_DRV_120  = 0x02,   /* 1.2  MB 5"25 drive     */
> +    FDRIVE_DRV_NONE = 0x03,   /* No drive connected     */
> +} FDriveType;
> +
>   ISADevice *fdctrl_init_isa(ISABus *bus, DriveInfo **fds);
>   void fdctrl_init_sysbus(qemu_irq irq, int dma_chann,
>                           target_phys_addr_t mmio_base, DriveInfo **fds);
>   void sun4m_fdctrl_init(qemu_irq irq, target_phys_addr_t io_base,
>                          DriveInfo **fds, qemu_irq *fdc_tc);
> -void fdc_get_bs(BlockDriverState *bs[], ISADevice *dev);
> +
> +FDriveType isa_fdc_get_drive_type(ISADevice *fdc, int i);
>
>   #endif
> diff --git a/hw/pc.c b/hw/pc.c
> index c7e9ab3..e5e7647 100644
> --- a/hw/pc.c
> +++ b/hw/pc.c
> @@ -335,10 +335,8 @@ void pc_cmos_init(ram_addr_t ram_size, ram_addr_t above_4g_mem_size,
>                     ISADevice *floppy, BusState *idebus0, BusState *idebus1,
>                     ISADevice *s)
>   {
> -    int val, nb, nb_heads, max_track, last_sect, i;
> -    FDriveType fd_type[2] = { FDRIVE_DRV_NONE, FDRIVE_DRV_NONE };
> -    FDriveRate rate;
> -    BlockDriverState *fd[MAX_FD];
> +    int val, nb, i;
> +    FDriveType fd_type[2];

This results in:

   CC    i386-softmmu/hw/i386/../pc.o
/home/anthony/git/qemu/hw/i386/../pc.c: In function ‘pc_cmos_init’:
/home/anthony/git/qemu/hw/i386/../pc.c:339:16: error: ‘fd_type[1]’ may be used 
uninitialized in this function [-Werror=uninitialized]
/home/anthony/git/qemu/hw/i386/../pc.c:339:16: error: ‘fd_type[0]’ may be used 
uninitialized in this function [-Werror=uninitialized]
cc1: all warnings being treated as errors

And GCC is right as:

>       static pc_cmos_init_late_arg arg;
>
>       /* various important CMOS locations needed by PC/Bochs bios */
> @@ -381,13 +379,8 @@ void pc_cmos_init(ram_addr_t ram_size, ram_addr_t above_4g_mem_size,
>
>       /* floppy type */
>       if (floppy) {
> -        fdc_get_bs(fd, floppy);
>           for (i = 0; i<  2; i++) {
> -            if (fd[i]) {
> -                bdrv_get_floppy_geometry_hint(fd[i],&nb_heads,&max_track,
> -&last_sect, FDRIVE_DRV_NONE,
> -&fd_type[i],&rate);
> -            }
> +            fd_type[i] = isa_fdc_get_drive_type(floppy, i);
>           }
>       }
>       val = (cmos_get_fd_drive_type(fd_type[0])<<  4) |

This is an unconditional use of fd_type[0].  If floppy == NULL, this is 
dereferencing an uninitialized value.

I'm not sure why the explicit initialization was removed...

Regards,

Anthony Liguori

  reply	other threads:[~2012-07-09 15:02 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-07-09 14:16 [Qemu-devel] [PULL 00/25] Block patches Kevin Wolf
2012-07-09 14:16 ` [Qemu-devel] [PATCH 01/25] qcow2: fix #ifdef'd qcow2_check_refcounts() callers Kevin Wolf
2012-07-09 14:16 ` [Qemu-devel] [PATCH 02/25] qcow2: preserve free_byte_offset when qcow2_alloc_bytes() fails Kevin Wolf
2012-07-09 14:16 ` [Qemu-devel] [PATCH 03/25] blockdev: warn when copy_on_read=on and readonly=on Kevin Wolf
2012-07-09 14:16 ` [Qemu-devel] [PATCH 04/25] sheepdog: fix dprintf format strings Kevin Wolf
2012-07-09 14:16 ` [Qemu-devel] [PATCH 05/25] sheepdog: restart I/O when socket becomes ready in do_co_req() Kevin Wolf
2012-07-09 14:16 ` [Qemu-devel] [PATCH 06/25] sheepdog: use coroutine based socket functions in coroutine context Kevin Wolf
2012-07-09 14:16 ` [Qemu-devel] [PATCH 07/25] sheepdog: make sure we don't free aiocb before sending all requests Kevin Wolf
2012-07-09 14:16 ` [Qemu-devel] [PATCH 08/25] sheepdog: split outstanding list into inflight and pending Kevin Wolf
2012-07-09 14:16 ` [Qemu-devel] [PATCH 09/25] sheepdog: traverse pending_list from the first for each time Kevin Wolf
2012-07-09 14:16 ` [Qemu-devel] [PATCH 10/25] blkdebug: remove sync i/o events Kevin Wolf
2012-07-09 14:16 ` [Qemu-devel] [PATCH 11/25] blkdebug: tiny cleanup Kevin Wolf
2012-07-09 14:16 ` [Qemu-devel] [PATCH 12/25] blkdebug: pass getlength to underlying file Kevin Wolf
2012-07-09 14:16 ` [Qemu-devel] [PATCH 13/25] blkdebug: store list of active rules Kevin Wolf
2012-07-09 14:16 ` [Qemu-devel] [PATCH 14/25] blkdebug: optionally tie errors to a specific sector Kevin Wolf
2012-07-09 14:16 ` [Qemu-devel] [PATCH 15/25] raw: hook into blkdebug Kevin Wolf
2012-07-09 14:16 ` [Qemu-devel] [PATCH 16/25] block: copy over job and dirty bitmap fields in bdrv_append Kevin Wolf
2012-07-09 14:16 ` [Qemu-devel] [PATCH 17/25] block: introduce bdrv_swap, implement bdrv_append on top of it Kevin Wolf
2012-07-09 14:16 ` [Qemu-devel] [PATCH 18/25] fdc: rewrite seek and DSKCHG bit handling Kevin Wolf
2012-07-09 14:16 ` [Qemu-devel] [PATCH 19/25] fdc: fix interrupt handling Kevin Wolf
2012-07-09 14:16 ` [Qemu-devel] [PATCH 20/25] fdc_test: update media_change test Kevin Wolf
2012-07-09 14:16 ` [Qemu-devel] [PATCH 21/25] fdc_test: introduce test_sense_interrupt Kevin Wolf
2012-07-09 14:16 ` [Qemu-devel] [PATCH 22/25] fdc: Drop broken code for user-defined floppy geometry Kevin Wolf
2012-07-09 14:16 ` [Qemu-devel] [PATCH 23/25] fdc: Move floppy geometry guessing back from block.c Kevin Wolf
2012-07-09 15:01   ` Anthony Liguori [this message]
2012-07-09 15:24     ` Kevin Wolf
2012-07-09 15:45       ` Anthony Liguori
2012-07-09 16:07       ` Markus Armbruster
2012-07-09 16:46         ` Eric Blake
2012-07-09 17:01           ` Anthony Liguori
2012-07-10  7:41             ` Kevin Wolf
2012-07-09 14:16 ` [Qemu-devel] [PATCH 24/25] qtest: Tidy up temporary files properly Kevin Wolf
2012-07-09 14:16 ` [Qemu-devel] [PATCH 25/25] block: Factor bdrv_read_unthrottled() out of guess_disk_lchs() Kevin Wolf
2012-07-09 16:49 ` [Qemu-devel] [PULL 00/25] Block patches Anthony Liguori

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4FFAF261.5010804@codemonkey.ws \
    --to=anthony@codemonkey.ws \
    --cc=armbru@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).