All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 00/14] Block-related fixes and cleanups
@ 2010-05-28 13:38 Markus Armbruster
  2010-05-28 13:38 ` [Qemu-devel] [PATCH 01/14] blockdev: Belatedly remove MAX_DRIVES Markus Armbruster
                   ` (14 more replies)
  0 siblings, 15 replies; 22+ messages in thread
From: Markus Armbruster @ 2010-05-28 13:38 UTC (permalink / raw)
  To: qemu-devel; +Cc: kwolf, kraxel

I'm working on cleanly separating block device host and guest parts.
I'd like to route all this work through Kevin's block tree.  This is
just preliminaries.

Markus Armbruster (14):
  blockdev: Belatedly remove MAX_DRIVES
  blockdev: Belatedly remove driveopts
  usb: Remove unused usb_device_add() parameter is_hotplug
  ide: Remove useless IDEDeviceInfo members unit, drive
  ide: Remove redundant IDEState member conf
  ide: Split ide_init1() off ide_init2()
  ide: Change ide_init_drive() to require valid dinfo argument
  ide: Split non-qdev code off ide_init2()
  qdev: New qdev_prop_set_string()
  qdev: Don't leak string property value on hot unplug
  ide: Turn drive serial into a qdev property ide-drive.serial
  ide: Fix info qtree for ide-drive.ver
  scsi: Turn drive serial into a qdev property scsi-disk.serial
  scsi: Fix info qtree for scsi-disk.ver

 hw/ide/cmd646.c      |    4 +-
 hw/ide/core.c        |  106 +++++++++++++++++++++++++++++---------------------
 hw/ide/internal.h    |   13 +++---
 hw/ide/isa.c         |    2 +-
 hw/ide/macio.c       |    2 +-
 hw/ide/microdrive.c  |    3 +-
 hw/ide/mmio.c        |    2 +-
 hw/ide/piix.c        |    4 +-
 hw/ide/qdev.c        |   20 ++++++++-
 hw/qdev-properties.c |   11 +++++
 hw/qdev.c            |    6 +++
 hw/qdev.h            |    2 +
 hw/scsi-disk.c       |   24 ++++++++---
 sysemu.h             |    2 -
 vl.c                 |    9 +---
 15 files changed, 135 insertions(+), 75 deletions(-)

^ permalink raw reply	[flat|nested] 22+ messages in thread

* [Qemu-devel] [PATCH 01/14] blockdev: Belatedly remove MAX_DRIVES
  2010-05-28 13:38 [Qemu-devel] [PATCH 00/14] Block-related fixes and cleanups Markus Armbruster
@ 2010-05-28 13:38 ` Markus Armbruster
  2010-05-28 13:38 ` [Qemu-devel] [PATCH 02/14] blockdev: Belatedly remove driveopts Markus Armbruster
                   ` (13 subsequent siblings)
  14 siblings, 0 replies; 22+ messages in thread
From: Markus Armbruster @ 2010-05-28 13:38 UTC (permalink / raw)
  To: qemu-devel; +Cc: kwolf, kraxel

Unused since commit 751c6a17.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 sysemu.h |    1 -
 vl.c     |    2 --
 2 files changed, 0 insertions(+), 3 deletions(-)

diff --git a/sysemu.h b/sysemu.h
index 879446a..063319c 100644
--- a/sysemu.h
+++ b/sysemu.h
@@ -176,7 +176,6 @@ typedef struct DriveInfo {
 
 #define MAX_IDE_DEVS	2
 #define MAX_SCSI_DEVS	7
-#define MAX_DRIVES 32
 
 extern QTAILQ_HEAD(drivelist, DriveInfo) drives;
 extern QTAILQ_HEAD(driveoptlist, DriveOpt) driveopts;
diff --git a/vl.c b/vl.c
index 7121cd0..f8d3034 100644
--- a/vl.c
+++ b/vl.c
@@ -172,8 +172,6 @@ int main(int argc, char **argv)
 
 static const char *data_dir;
 const char *bios_name = NULL;
-/* Note: drives_table[MAX_DRIVES] is a dummy block driver if none available
-   to store the VM snapshots */
 struct drivelist drives = QTAILQ_HEAD_INITIALIZER(drives);
 struct driveoptlist driveopts = QTAILQ_HEAD_INITIALIZER(driveopts);
 enum vga_retrace_method vga_retrace_method = VGA_RETRACE_DUMB;
-- 
1.6.6.1

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [Qemu-devel] [PATCH 02/14] blockdev: Belatedly remove driveopts
  2010-05-28 13:38 [Qemu-devel] [PATCH 00/14] Block-related fixes and cleanups Markus Armbruster
  2010-05-28 13:38 ` [Qemu-devel] [PATCH 01/14] blockdev: Belatedly remove MAX_DRIVES Markus Armbruster
@ 2010-05-28 13:38 ` Markus Armbruster
  2010-05-28 13:38 ` [Qemu-devel] [PATCH 03/14] usb: Remove unused usb_device_add() parameter is_hotplug Markus Armbruster
                   ` (12 subsequent siblings)
  14 siblings, 0 replies; 22+ messages in thread
From: Markus Armbruster @ 2010-05-28 13:38 UTC (permalink / raw)
  To: qemu-devel; +Cc: kwolf, kraxel

Unused since commit 9dfd7c7a.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 sysemu.h |    1 -
 vl.c     |    1 -
 2 files changed, 0 insertions(+), 2 deletions(-)

diff --git a/sysemu.h b/sysemu.h
index 063319c..fd83b7d 100644
--- a/sysemu.h
+++ b/sysemu.h
@@ -178,7 +178,6 @@ typedef struct DriveInfo {
 #define MAX_SCSI_DEVS	7
 
 extern QTAILQ_HEAD(drivelist, DriveInfo) drives;
-extern QTAILQ_HEAD(driveoptlist, DriveOpt) driveopts;
 
 extern DriveInfo *drive_get(BlockInterfaceType type, int bus, int unit);
 extern DriveInfo *drive_get_by_id(const char *id);
diff --git a/vl.c b/vl.c
index f8d3034..9283469 100644
--- a/vl.c
+++ b/vl.c
@@ -173,7 +173,6 @@ int main(int argc, char **argv)
 static const char *data_dir;
 const char *bios_name = NULL;
 struct drivelist drives = QTAILQ_HEAD_INITIALIZER(drives);
-struct driveoptlist driveopts = QTAILQ_HEAD_INITIALIZER(driveopts);
 enum vga_retrace_method vga_retrace_method = VGA_RETRACE_DUMB;
 DisplayType display_type = DT_DEFAULT;
 const char* keyboard_layout = NULL;
-- 
1.6.6.1

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [Qemu-devel] [PATCH 03/14] usb: Remove unused usb_device_add() parameter is_hotplug
  2010-05-28 13:38 [Qemu-devel] [PATCH 00/14] Block-related fixes and cleanups Markus Armbruster
  2010-05-28 13:38 ` [Qemu-devel] [PATCH 01/14] blockdev: Belatedly remove MAX_DRIVES Markus Armbruster
  2010-05-28 13:38 ` [Qemu-devel] [PATCH 02/14] blockdev: Belatedly remove driveopts Markus Armbruster
@ 2010-05-28 13:38 ` Markus Armbruster
  2010-05-28 13:38 ` [Qemu-devel] [PATCH 04/14] ide: Remove useless IDEDeviceInfo members unit, drive Markus Armbruster
                   ` (11 subsequent siblings)
  14 siblings, 0 replies; 22+ messages in thread
From: Markus Armbruster @ 2010-05-28 13:38 UTC (permalink / raw)
  To: qemu-devel; +Cc: kwolf, kraxel

Unused since commit b3e461d3.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 vl.c |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/vl.c b/vl.c
index 9283469..76a9b25 100644
--- a/vl.c
+++ b/vl.c
@@ -1315,7 +1315,7 @@ static void smp_parse(const char *optarg)
 /***********************************************************/
 /* USB devices */
 
-static int usb_device_add(const char *devname, int is_hotplug)
+static int usb_device_add(const char *devname)
 {
     const char *p;
     USBDevice *dev = NULL;
@@ -1367,7 +1367,7 @@ static int usb_device_del(const char *devname)
 static int usb_parse(const char *cmdline)
 {
     int r;
-    r = usb_device_add(cmdline, 0);
+    r = usb_device_add(cmdline);
     if (r < 0) {
         fprintf(stderr, "qemu: could not add USB device '%s'\n", cmdline);
     }
@@ -1377,7 +1377,7 @@ static int usb_parse(const char *cmdline)
 void do_usb_add(Monitor *mon, const QDict *qdict)
 {
     const char *devname = qdict_get_str(qdict, "devname");
-    if (usb_device_add(devname, 1) < 0) {
+    if (usb_device_add(devname) < 0) {
         error_report("could not add USB device '%s'", devname);
     }
 }
-- 
1.6.6.1

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [Qemu-devel] [PATCH 04/14] ide: Remove useless IDEDeviceInfo members unit, drive
  2010-05-28 13:38 [Qemu-devel] [PATCH 00/14] Block-related fixes and cleanups Markus Armbruster
                   ` (2 preceding siblings ...)
  2010-05-28 13:38 ` [Qemu-devel] [PATCH 03/14] usb: Remove unused usb_device_add() parameter is_hotplug Markus Armbruster
@ 2010-05-28 13:38 ` Markus Armbruster
  2010-05-28 13:38 ` [Qemu-devel] [PATCH 05/14] ide: Remove redundant IDEState member conf Markus Armbruster
                   ` (10 subsequent siblings)
  14 siblings, 0 replies; 22+ messages in thread
From: Markus Armbruster @ 2010-05-28 13:38 UTC (permalink / raw)
  To: qemu-devel; +Cc: kwolf, kraxel


Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 hw/ide/internal.h |    2 --
 1 files changed, 0 insertions(+), 2 deletions(-)

diff --git a/hw/ide/internal.h b/hw/ide/internal.h
index 2efc784..b4554ce 100644
--- a/hw/ide/internal.h
+++ b/hw/ide/internal.h
@@ -464,8 +464,6 @@ typedef int (*ide_qdev_initfn)(IDEDevice *dev);
 struct IDEDeviceInfo {
     DeviceInfo qdev;
     ide_qdev_initfn init;
-    uint32_t unit;
-    DriveInfo *drive;
 };
 
 #define BM_STATUS_DMAING 0x01
-- 
1.6.6.1

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [Qemu-devel] [PATCH 05/14] ide: Remove redundant IDEState member conf
  2010-05-28 13:38 [Qemu-devel] [PATCH 00/14] Block-related fixes and cleanups Markus Armbruster
                   ` (3 preceding siblings ...)
  2010-05-28 13:38 ` [Qemu-devel] [PATCH 04/14] ide: Remove useless IDEDeviceInfo members unit, drive Markus Armbruster
@ 2010-05-28 13:38 ` Markus Armbruster
  2010-05-31 14:56   ` [Qemu-devel] " Kevin Wolf
  2010-05-28 13:38 ` [Qemu-devel] [PATCH 06/14] ide: Split ide_init1() off ide_init2() Markus Armbruster
                   ` (9 subsequent siblings)
  14 siblings, 1 reply; 22+ messages in thread
From: Markus Armbruster @ 2010-05-28 13:38 UTC (permalink / raw)
  To: qemu-devel; +Cc: kwolf, kraxel

Commit 428c149b added IDEState member conf to let commit 0009baf1 find
the BlockConf from there.  It exists only for qdev drives, created via
ide_drive_initfn(), not for drives created via ide_init2().

But for a qdev drive, we can just as well reach its IDEDevice, which
contains the BlockConf.  Do that, and revert the parts of commit
428c149b that add IDEState member conf.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 hw/ide/core.c     |   16 +++++++---------
 hw/ide/internal.h |    4 +---
 hw/ide/qdev.c     |    3 +--
 3 files changed, 9 insertions(+), 14 deletions(-)

diff --git a/hw/ide/core.c b/hw/ide/core.c
index 066fecb..c3334b1 100644
--- a/hw/ide/core.c
+++ b/hw/ide/core.c
@@ -98,6 +98,7 @@ static void ide_identify(IDEState *s)
 {
     uint16_t *p;
     unsigned int oldsize;
+    IDEDevice *dev;
 
     if (s->identify_set) {
 	memcpy(s->io_buffer, s->identify_data, sizeof(s->identify_data));
@@ -165,8 +166,9 @@ static void ide_identify(IDEState *s)
     put_le16(p + 101, s->nb_sectors >> 16);
     put_le16(p + 102, s->nb_sectors >> 32);
     put_le16(p + 103, s->nb_sectors >> 48);
-    if (s->conf && s->conf->physical_block_size)
-        put_le16(p + 106, 0x6000 | get_physical_block_exp(s->conf));
+    dev = s->unit ? s->bus->slave : s->bus->master;
+    if (dev && dev->conf.physical_block_size)
+        put_le16(p + 106, 0x6000 | get_physical_block_exp(&dev->conf));
 
     memcpy(s->identify_data, p, sizeof(s->identify_data));
     s->identify_set = 1;
@@ -2594,8 +2596,7 @@ void ide_bus_reset(IDEBus *bus)
     ide_clear_hob(bus);
 }
 
-void ide_init_drive(IDEState *s, DriveInfo *dinfo, BlockConf *conf,
-        const char *version)
+void ide_init_drive(IDEState *s, DriveInfo *dinfo, const char *version)
 {
     int cylinders, heads, secs;
     uint64_t nb_sectors;
@@ -2620,9 +2621,6 @@ void ide_init_drive(IDEState *s, DriveInfo *dinfo, BlockConf *conf,
         }
         strncpy(s->drive_serial_str, drive_get_serial(s->bs),
                 sizeof(s->drive_serial_str));
-        if (conf) {
-            s->conf = conf;
-        }
     }
     if (strlen(s->drive_serial_str) == 0)
         snprintf(s->drive_serial_str, sizeof(s->drive_serial_str),
@@ -2653,9 +2651,9 @@ void ide_init2(IDEBus *bus, DriveInfo *hd0, DriveInfo *hd1,
         s->sector_write_timer = qemu_new_timer(vm_clock,
                                                ide_sector_write_timer_cb, s);
         if (i == 0)
-            ide_init_drive(s, hd0, NULL, NULL);
+            ide_init_drive(s, hd0, NULL);
         if (i == 1)
-            ide_init_drive(s, hd1, NULL, NULL);
+            ide_init_drive(s, hd1, NULL);
     }
     bus->irq = irq;
 }
diff --git a/hw/ide/internal.h b/hw/ide/internal.h
index b4554ce..cf71019 100644
--- a/hw/ide/internal.h
+++ b/hw/ide/internal.h
@@ -398,7 +398,6 @@ struct IDEState {
     /* set for lba48 access */
     uint8_t lba48;
     BlockDriverState *bs;
-    BlockConf *conf;
     char version[9];
     /* ATAPI specific */
     uint8_t sense_key;
@@ -555,8 +554,7 @@ uint32_t ide_data_readw(void *opaque, uint32_t addr);
 void ide_data_writel(void *opaque, uint32_t addr, uint32_t val);
 uint32_t ide_data_readl(void *opaque, uint32_t addr);
 
-void ide_init_drive(IDEState *s, DriveInfo *dinfo, BlockConf *conf,
-    const char *version);
+void ide_init_drive(IDEState *s, DriveInfo *dinfo, const char *version);
 void ide_init2(IDEBus *bus, DriveInfo *hd0, DriveInfo *hd1,
                qemu_irq irq);
 void ide_init_ioport(IDEBus *bus, int iobase, int iobase2);
diff --git a/hw/ide/qdev.c b/hw/ide/qdev.c
index b18693d..9ebb906 100644
--- a/hw/ide/qdev.c
+++ b/hw/ide/qdev.c
@@ -99,8 +99,7 @@ typedef struct IDEDrive {
 static int ide_drive_initfn(IDEDevice *dev)
 {
     IDEBus *bus = DO_UPCAST(IDEBus, qbus, dev->qdev.parent_bus);
-    ide_init_drive(bus->ifs + dev->unit, dev->conf.dinfo, &dev->conf,
-                   dev->version);
+    ide_init_drive(bus->ifs + dev->unit, dev->conf.dinfo, dev->version);
     return 0;
 }
 
-- 
1.6.6.1

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [Qemu-devel] [PATCH 06/14] ide: Split ide_init1() off ide_init2()
  2010-05-28 13:38 [Qemu-devel] [PATCH 00/14] Block-related fixes and cleanups Markus Armbruster
                   ` (4 preceding siblings ...)
  2010-05-28 13:38 ` [Qemu-devel] [PATCH 05/14] ide: Remove redundant IDEState member conf Markus Armbruster
@ 2010-05-28 13:38 ` Markus Armbruster
  2010-05-28 13:38 ` [Qemu-devel] [PATCH 07/14] ide: Change ide_init_drive() to require valid dinfo argument Markus Armbruster
                   ` (8 subsequent siblings)
  14 siblings, 0 replies; 22+ messages in thread
From: Markus Armbruster @ 2010-05-28 13:38 UTC (permalink / raw)
  To: qemu-devel; +Cc: kwolf, kraxel


Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 hw/ide/core.c |   32 +++++++++++++++++---------------
 1 files changed, 17 insertions(+), 15 deletions(-)

diff --git a/hw/ide/core.c b/hw/ide/core.c
index c3334b1..443ff10 100644
--- a/hw/ide/core.c
+++ b/hw/ide/core.c
@@ -2633,27 +2633,29 @@ void ide_init_drive(IDEState *s, DriveInfo *dinfo, const char *version)
     ide_reset(s);
 }
 
+static void ide_init1(IDEBus *bus, int unit, DriveInfo *dinfo)
+{
+    static int drive_serial = 1;
+    IDEState *s = &bus->ifs[unit];
+
+    s->bus = bus;
+    s->unit = unit;
+    s->drive_serial = drive_serial++;
+    s->io_buffer = qemu_blockalign(s->bs, IDE_DMA_BUF_SECTORS*512 + 4);
+    s->io_buffer_total_len = IDE_DMA_BUF_SECTORS*512 + 4;
+    s->smart_selftest_data = qemu_blockalign(s->bs, 512);
+    s->sector_write_timer = qemu_new_timer(vm_clock,
+                                           ide_sector_write_timer_cb, s);
+    ide_init_drive(s, dinfo, NULL);
+}
+
 void ide_init2(IDEBus *bus, DriveInfo *hd0, DriveInfo *hd1,
                qemu_irq irq)
 {
-    IDEState *s;
-    static int drive_serial = 1;
     int i;
 
     for(i = 0; i < 2; i++) {
-        s = bus->ifs + i;
-        s->bus = bus;
-        s->unit = i;
-        s->drive_serial = drive_serial++;
-        s->io_buffer = qemu_blockalign(s->bs, IDE_DMA_BUF_SECTORS*512 + 4);
-        s->io_buffer_total_len = IDE_DMA_BUF_SECTORS*512 + 4;
-        s->smart_selftest_data = qemu_blockalign(s->bs, 512);
-        s->sector_write_timer = qemu_new_timer(vm_clock,
-                                               ide_sector_write_timer_cb, s);
-        if (i == 0)
-            ide_init_drive(s, hd0, NULL);
-        if (i == 1)
-            ide_init_drive(s, hd1, NULL);
+        ide_init1(bus, i, i == 0 ? hd0 : hd1);
     }
     bus->irq = irq;
 }
-- 
1.6.6.1

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [Qemu-devel] [PATCH 07/14] ide: Change ide_init_drive() to require valid dinfo argument
  2010-05-28 13:38 [Qemu-devel] [PATCH 00/14] Block-related fixes and cleanups Markus Armbruster
                   ` (5 preceding siblings ...)
  2010-05-28 13:38 ` [Qemu-devel] [PATCH 06/14] ide: Split ide_init1() off ide_init2() Markus Armbruster
@ 2010-05-28 13:38 ` Markus Armbruster
  2010-06-01 14:57   ` [Qemu-devel] " Kevin Wolf
  2010-05-28 13:38 ` [Qemu-devel] [PATCH 08/14] ide: Split non-qdev code off ide_init2() Markus Armbruster
                   ` (7 subsequent siblings)
  14 siblings, 1 reply; 22+ messages in thread
From: Markus Armbruster @ 2010-05-28 13:38 UTC (permalink / raw)
  To: qemu-devel; +Cc: kwolf, kraxel

IDEState members drive_serial_str and version are now left empty until
an actual drive is connected.  Before, they got a default value that
was overwritten when a drive got connected.  Doesn't matter, because
they're used only while a drive is connected.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 hw/ide/core.c |   47 +++++++++++++++++++++++++----------------------
 1 files changed, 25 insertions(+), 22 deletions(-)

diff --git a/hw/ide/core.c b/hw/ide/core.c
index 443ff10..f72d37f 100644
--- a/hw/ide/core.c
+++ b/hw/ide/core.c
@@ -2601,30 +2601,29 @@ void ide_init_drive(IDEState *s, DriveInfo *dinfo, const char *version)
     int cylinders, heads, secs;
     uint64_t nb_sectors;
 
-    if (dinfo && dinfo->bdrv) {
-        s->bs = dinfo->bdrv;
-        bdrv_get_geometry(s->bs, &nb_sectors);
-        bdrv_guess_geometry(s->bs, &cylinders, &heads, &secs);
-        s->cylinders = cylinders;
-        s->heads = heads;
-        s->sectors = secs;
-        s->nb_sectors = nb_sectors;
-        /* The SMART values should be preserved across power cycles
-           but they aren't.  */
-        s->smart_enabled = 1;
-        s->smart_autosave = 1;
-        s->smart_errors = 0;
-        s->smart_selftest_count = 0;
-        if (bdrv_get_type_hint(s->bs) == BDRV_TYPE_CDROM) {
-            s->is_cdrom = 1;
-            bdrv_set_change_cb(s->bs, cdrom_change_cb, s);
-        }
-        strncpy(s->drive_serial_str, drive_get_serial(s->bs),
-                sizeof(s->drive_serial_str));
+    s->bs = dinfo->bdrv;
+    bdrv_get_geometry(s->bs, &nb_sectors);
+    bdrv_guess_geometry(s->bs, &cylinders, &heads, &secs);
+    s->cylinders = cylinders;
+    s->heads = heads;
+    s->sectors = secs;
+    s->nb_sectors = nb_sectors;
+    /* The SMART values should be preserved across power cycles
+       but they aren't.  */
+    s->smart_enabled = 1;
+    s->smart_autosave = 1;
+    s->smart_errors = 0;
+    s->smart_selftest_count = 0;
+    if (bdrv_get_type_hint(s->bs) == BDRV_TYPE_CDROM) {
+        s->is_cdrom = 1;
+        bdrv_set_change_cb(s->bs, cdrom_change_cb, s);
     }
-    if (strlen(s->drive_serial_str) == 0)
+    strncpy(s->drive_serial_str, drive_get_serial(s->bs),
+            sizeof(s->drive_serial_str));
+    if (*s->drive_serial_str) {
         snprintf(s->drive_serial_str, sizeof(s->drive_serial_str),
                  "QM%05d", s->drive_serial);
+    }
     if (version) {
         pstrcpy(s->version, sizeof(s->version), version);
     } else {
@@ -2646,7 +2645,11 @@ static void ide_init1(IDEBus *bus, int unit, DriveInfo *dinfo)
     s->smart_selftest_data = qemu_blockalign(s->bs, 512);
     s->sector_write_timer = qemu_new_timer(vm_clock,
                                            ide_sector_write_timer_cb, s);
-    ide_init_drive(s, dinfo, NULL);
+    if (dinfo) {
+        ide_init_drive(s, dinfo, NULL);
+    } else {
+        ide_reset(s);
+    }
 }
 
 void ide_init2(IDEBus *bus, DriveInfo *hd0, DriveInfo *hd1,
-- 
1.6.6.1

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [Qemu-devel] [PATCH 08/14] ide: Split non-qdev code off ide_init2()
  2010-05-28 13:38 [Qemu-devel] [PATCH 00/14] Block-related fixes and cleanups Markus Armbruster
                   ` (6 preceding siblings ...)
  2010-05-28 13:38 ` [Qemu-devel] [PATCH 07/14] ide: Change ide_init_drive() to require valid dinfo argument Markus Armbruster
@ 2010-05-28 13:38 ` Markus Armbruster
  2010-05-28 13:38 ` [Qemu-devel] [PATCH 09/14] qdev: New qdev_prop_set_string() Markus Armbruster
                   ` (6 subsequent siblings)
  14 siblings, 0 replies; 22+ messages in thread
From: Markus Armbruster @ 2010-05-28 13:38 UTC (permalink / raw)
  To: qemu-devel; +Cc: kwolf, kraxel


Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 hw/ide/cmd646.c     |    4 ++--
 hw/ide/core.c       |   30 ++++++++++++++++++++++--------
 hw/ide/internal.h   |    5 +++--
 hw/ide/isa.c        |    2 +-
 hw/ide/macio.c      |    2 +-
 hw/ide/microdrive.c |    3 ++-
 hw/ide/mmio.c       |    2 +-
 hw/ide/piix.c       |    4 ++--
 8 files changed, 34 insertions(+), 18 deletions(-)

diff --git a/hw/ide/cmd646.c b/hw/ide/cmd646.c
index cdcc9bf..559147f 100644
--- a/hw/ide/cmd646.c
+++ b/hw/ide/cmd646.c
@@ -260,8 +260,8 @@ static int pci_cmd646_ide_initfn(PCIDevice *dev)
     irq = qemu_allocate_irqs(cmd646_set_irq, d, 2);
     ide_bus_new(&d->bus[0], &d->dev.qdev);
     ide_bus_new(&d->bus[1], &d->dev.qdev);
-    ide_init2(&d->bus[0], NULL, NULL, irq[0]);
-    ide_init2(&d->bus[1], NULL, NULL, irq[1]);
+    ide_init2(&d->bus[0], irq[0]);
+    ide_init2(&d->bus[1], irq[1]);
 
     vmstate_register(0, &vmstate_ide_pci, d);
     qemu_register_reset(cmd646_reset, d);
diff --git a/hw/ide/core.c b/hw/ide/core.c
index f72d37f..d6381aa 100644
--- a/hw/ide/core.c
+++ b/hw/ide/core.c
@@ -2632,7 +2632,7 @@ void ide_init_drive(IDEState *s, DriveInfo *dinfo, const char *version)
     ide_reset(s);
 }
 
-static void ide_init1(IDEBus *bus, int unit, DriveInfo *dinfo)
+static void ide_init1(IDEBus *bus, int unit)
 {
     static int drive_serial = 1;
     IDEState *s = &bus->ifs[unit];
@@ -2645,20 +2645,34 @@ static void ide_init1(IDEBus *bus, int unit, DriveInfo *dinfo)
     s->smart_selftest_data = qemu_blockalign(s->bs, 512);
     s->sector_write_timer = qemu_new_timer(vm_clock,
                                            ide_sector_write_timer_cb, s);
-    if (dinfo) {
-        ide_init_drive(s, dinfo, NULL);
-    } else {
-        ide_reset(s);
+}
+
+void ide_init2(IDEBus *bus, qemu_irq irq)
+{
+    int i;
+
+    for(i = 0; i < 2; i++) {
+        ide_init1(bus, i);
+        ide_reset(&bus->ifs[i]);
     }
+    bus->irq = irq;
 }
 
-void ide_init2(IDEBus *bus, DriveInfo *hd0, DriveInfo *hd1,
-               qemu_irq irq)
+/* TODO convert users to qdev and remove */
+void ide_init2_with_non_qdev_drives(IDEBus *bus, DriveInfo *hd0,
+                                    DriveInfo *hd1, qemu_irq irq)
 {
     int i;
+    DriveInfo *dinfo;
 
     for(i = 0; i < 2; i++) {
-        ide_init1(bus, i, i == 0 ? hd0 : hd1);
+        dinfo = i == 0 ? hd0 : hd1;
+        ide_init1(bus, i);
+        if (dinfo) {
+            ide_init_drive(&bus->ifs[i], dinfo, NULL);
+        } else {
+            ide_reset(&bus->ifs[i]);
+        }
     }
     bus->irq = irq;
 }
diff --git a/hw/ide/internal.h b/hw/ide/internal.h
index cf71019..6b0024d 100644
--- a/hw/ide/internal.h
+++ b/hw/ide/internal.h
@@ -555,8 +555,9 @@ void ide_data_writel(void *opaque, uint32_t addr, uint32_t val);
 uint32_t ide_data_readl(void *opaque, uint32_t addr);
 
 void ide_init_drive(IDEState *s, DriveInfo *dinfo, const char *version);
-void ide_init2(IDEBus *bus, DriveInfo *hd0, DriveInfo *hd1,
-               qemu_irq irq);
+void ide_init2(IDEBus *bus, qemu_irq irq);
+void ide_init2_with_non_qdev_drives(IDEBus *bus, DriveInfo *hd0,
+                                    DriveInfo *hd1, qemu_irq irq);
 void ide_init_ioport(IDEBus *bus, int iobase, int iobase2);
 
 /* hw/ide/qdev.c */
diff --git a/hw/ide/isa.c b/hw/ide/isa.c
index dff7c79..b6c6347 100644
--- a/hw/ide/isa.c
+++ b/hw/ide/isa.c
@@ -70,7 +70,7 @@ static int isa_ide_initfn(ISADevice *dev)
     ide_bus_new(&s->bus, &s->dev.qdev);
     ide_init_ioport(&s->bus, s->iobase, s->iobase2);
     isa_init_irq(dev, &s->irq, s->isairq);
-    ide_init2(&s->bus, NULL, NULL, s->irq);
+    ide_init2(&s->bus, s->irq);
     vmstate_register(0, &vmstate_ide_isa, s);
     return 0;
 };
diff --git a/hw/ide/macio.c b/hw/ide/macio.c
index 639f3f6..f76c0fa 100644
--- a/hw/ide/macio.c
+++ b/hw/ide/macio.c
@@ -314,7 +314,7 @@ int pmac_ide_init (DriveInfo **hd_table, qemu_irq irq,
     int pmac_ide_memory;
 
     d = qemu_mallocz(sizeof(MACIOIDEState));
-    ide_init2(&d->bus, hd_table[0], hd_table[1], irq);
+    ide_init2_with_non_qdev_drives(&d->bus, hd_table[0], hd_table[1], irq);
 
     if (dbdma)
         DBDMA_register_channel(dbdma, channel, dma_irq, pmac_ide_transfer, pmac_ide_flush, d);
diff --git a/hw/ide/microdrive.c b/hw/ide/microdrive.c
index bfdb8c8..a7beac5 100644
--- a/hw/ide/microdrive.c
+++ b/hw/ide/microdrive.c
@@ -539,7 +539,8 @@ PCMCIACardState *dscm1xxxx_init(DriveInfo *bdrv)
     md->card.cis = dscm1xxxx_cis;
     md->card.cis_len = sizeof(dscm1xxxx_cis);
 
-    ide_init2(&md->bus, bdrv, NULL, qemu_allocate_irqs(md_set_irq, md, 1)[0]);
+    ide_init2_with_non_qdev_drives(&md->bus, bdrv, NULL,
+                                   qemu_allocate_irqs(md_set_irq, md, 1)[0]);
     md->bus.ifs[0].is_cf = 1;
     md->bus.ifs[0].mdata_size = METADATA_SIZE;
     md->bus.ifs[0].mdata_storage = (uint8_t *) qemu_mallocz(METADATA_SIZE);
diff --git a/hw/ide/mmio.c b/hw/ide/mmio.c
index cca883f..e75cccf 100644
--- a/hw/ide/mmio.c
+++ b/hw/ide/mmio.c
@@ -125,7 +125,7 @@ void mmio_ide_init (target_phys_addr_t membase, target_phys_addr_t membase2,
     MMIOState *s = qemu_mallocz(sizeof(MMIOState));
     int mem1, mem2;
 
-    ide_init2(&s->bus, hd0, hd1, irq);
+    ide_init2_with_non_qdev_drives(&s->bus, hd0, hd1, irq);
 
     s->shift = shift;
 
diff --git a/hw/ide/piix.c b/hw/ide/piix.c
index 4fa3851..dad6e86 100644
--- a/hw/ide/piix.c
+++ b/hw/ide/piix.c
@@ -135,8 +135,8 @@ static int pci_piix_ide_initfn(PCIIDEState *d)
     ide_init_ioport(&d->bus[0], 0x1f0, 0x3f6);
     ide_init_ioport(&d->bus[1], 0x170, 0x376);
 
-    ide_init2(&d->bus[0], NULL, NULL, isa_reserve_irq(14));
-    ide_init2(&d->bus[1], NULL, NULL, isa_reserve_irq(15));
+    ide_init2(&d->bus[0], isa_reserve_irq(14));
+    ide_init2(&d->bus[1], isa_reserve_irq(15));
     return 0;
 }
 
-- 
1.6.6.1

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [Qemu-devel] [PATCH 09/14] qdev: New qdev_prop_set_string()
  2010-05-28 13:38 [Qemu-devel] [PATCH 00/14] Block-related fixes and cleanups Markus Armbruster
                   ` (7 preceding siblings ...)
  2010-05-28 13:38 ` [Qemu-devel] [PATCH 08/14] ide: Split non-qdev code off ide_init2() Markus Armbruster
@ 2010-05-28 13:38 ` Markus Armbruster
  2010-05-28 13:38 ` [Qemu-devel] [PATCH 10/14] qdev: Don't leak string property value on hot unplug Markus Armbruster
                   ` (5 subsequent siblings)
  14 siblings, 0 replies; 22+ messages in thread
From: Markus Armbruster @ 2010-05-28 13:38 UTC (permalink / raw)
  To: qemu-devel; +Cc: kwolf, kraxel


Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 hw/qdev-properties.c |    5 +++++
 hw/qdev.h            |    1 +
 2 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/hw/qdev-properties.c b/hw/qdev-properties.c
index 9ffdba7..b6ee50f 100644
--- a/hw/qdev-properties.c
+++ b/hw/qdev-properties.c
@@ -617,6 +617,11 @@ void qdev_prop_set_uint64(DeviceState *dev, const char *name, uint64_t value)
     qdev_prop_set(dev, name, &value, PROP_TYPE_UINT64);
 }
 
+void qdev_prop_set_string(DeviceState *dev, const char *name, char *value)
+{
+    qdev_prop_set(dev, name, &value, PROP_TYPE_STRING);
+}
+
 void qdev_prop_set_drive(DeviceState *dev, const char *name, DriveInfo *value)
 {
     qdev_prop_set(dev, name, &value, PROP_TYPE_DRIVE);
diff --git a/hw/qdev.h b/hw/qdev.h
index a44060e..7c25a94 100644
--- a/hw/qdev.h
+++ b/hw/qdev.h
@@ -268,6 +268,7 @@ void qdev_prop_set_uint16(DeviceState *dev, const char *name, uint16_t value);
 void qdev_prop_set_uint32(DeviceState *dev, const char *name, uint32_t value);
 void qdev_prop_set_int32(DeviceState *dev, const char *name, int32_t value);
 void qdev_prop_set_uint64(DeviceState *dev, const char *name, uint64_t value);
+void qdev_prop_set_string(DeviceState *dev, const char *name, char *value);
 void qdev_prop_set_chr(DeviceState *dev, const char *name, CharDriverState *value);
 void qdev_prop_set_netdev(DeviceState *dev, const char *name, VLANClientState *value);
 void qdev_prop_set_vlan(DeviceState *dev, const char *name, VLANState *value);
-- 
1.6.6.1

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [Qemu-devel] [PATCH 10/14] qdev: Don't leak string property value on hot unplug
  2010-05-28 13:38 [Qemu-devel] [PATCH 00/14] Block-related fixes and cleanups Markus Armbruster
                   ` (8 preceding siblings ...)
  2010-05-28 13:38 ` [Qemu-devel] [PATCH 09/14] qdev: New qdev_prop_set_string() Markus Armbruster
@ 2010-05-28 13:38 ` Markus Armbruster
  2010-05-28 13:38 ` [Qemu-devel] [PATCH 11/14] ide: Turn drive serial into a qdev property ide-drive.serial Markus Armbruster
                   ` (4 subsequent siblings)
  14 siblings, 0 replies; 22+ messages in thread
From: Markus Armbruster @ 2010-05-28 13:38 UTC (permalink / raw)
  To: qemu-devel; +Cc: kwolf, kraxel

parse_string() qemu_strdup()s the property value.  It is never freed.
It needs to be freed along with the device.  Otherwise, the value of
scsi-disk property "ver" gets leaked when hot-unplugging the disk, for
instance.

Call new PropertyInfo method free() from qdev_free().  Implement it
for qdev_prop_string.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 hw/qdev-properties.c |    6 ++++++
 hw/qdev.c            |    6 ++++++
 hw/qdev.h            |    1 +
 3 files changed, 13 insertions(+), 0 deletions(-)

diff --git a/hw/qdev-properties.c b/hw/qdev-properties.c
index b6ee50f..48a6b45 100644
--- a/hw/qdev-properties.c
+++ b/hw/qdev-properties.c
@@ -260,6 +260,11 @@ static int parse_string(DeviceState *dev, Property *prop, const char *str)
     return 0;
 }
 
+static void free_string(DeviceState *dev, Property *prop)
+{
+    qemu_free(*(char **)qdev_get_prop_ptr(dev, prop));
+}
+
 static int print_string(DeviceState *dev, Property *prop, char *dest, size_t len)
 {
     char **ptr = qdev_get_prop_ptr(dev, prop);
@@ -274,6 +279,7 @@ PropertyInfo qdev_prop_string = {
     .size  = sizeof(char*),
     .parse = parse_string,
     .print = print_string,
+    .free  = free_string,
 };
 
 /* --- drive --- */
diff --git a/hw/qdev.c b/hw/qdev.c
index af17486..09ff6fc 100644
--- a/hw/qdev.c
+++ b/hw/qdev.c
@@ -334,6 +334,7 @@ void qdev_init_nofail(DeviceState *dev)
 void qdev_free(DeviceState *dev)
 {
     BusState *bus;
+    Property *prop;
 
     if (dev->state == DEV_STATE_INITIALIZED) {
         while (dev->num_child_bus) {
@@ -349,6 +350,11 @@ void qdev_free(DeviceState *dev)
     }
     qemu_unregister_reset(qdev_reset, dev);
     QLIST_REMOVE(dev, sibling);
+    for (prop = dev->info->props; prop && prop->name; prop++) {
+        if (prop->info->free) {
+            prop->info->free(dev, prop);
+        }
+    }
     qemu_free(dev);
 }
 
diff --git a/hw/qdev.h b/hw/qdev.h
index 7c25a94..51a24e2 100644
--- a/hw/qdev.h
+++ b/hw/qdev.h
@@ -98,6 +98,7 @@ struct PropertyInfo {
     enum PropertyType type;
     int (*parse)(DeviceState *dev, Property *prop, const char *str);
     int (*print)(DeviceState *dev, Property *prop, char *dest, size_t len);
+    void (*free)(DeviceState *dev, Property *prop);
 };
 
 typedef struct GlobalProperty {
-- 
1.6.6.1

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [Qemu-devel] [PATCH 11/14] ide: Turn drive serial into a qdev property ide-drive.serial
  2010-05-28 13:38 [Qemu-devel] [PATCH 00/14] Block-related fixes and cleanups Markus Armbruster
                   ` (9 preceding siblings ...)
  2010-05-28 13:38 ` [Qemu-devel] [PATCH 10/14] qdev: Don't leak string property value on hot unplug Markus Armbruster
@ 2010-05-28 13:38 ` Markus Armbruster
  2010-05-28 13:38 ` [Qemu-devel] [PATCH 12/14] ide: Fix info qtree for ide-drive.ver Markus Armbruster
                   ` (3 subsequent siblings)
  14 siblings, 0 replies; 22+ messages in thread
From: Markus Armbruster @ 2010-05-28 13:38 UTC (permalink / raw)
  To: qemu-devel; +Cc: kwolf, kraxel

It needs to be a qdev property, because it belongs to the drive's
guest part.

Bonus: info qtree now shows the serial number.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 hw/ide/core.c     |   11 ++++++-----
 hw/ide/internal.h |    4 +++-
 hw/ide/qdev.c     |   16 +++++++++++++++-
 3 files changed, 24 insertions(+), 7 deletions(-)

diff --git a/hw/ide/core.c b/hw/ide/core.c
index d6381aa..70af1b6 100644
--- a/hw/ide/core.c
+++ b/hw/ide/core.c
@@ -2596,7 +2596,8 @@ void ide_bus_reset(IDEBus *bus)
     ide_clear_hob(bus);
 }
 
-void ide_init_drive(IDEState *s, DriveInfo *dinfo, const char *version)
+void ide_init_drive(IDEState *s, DriveInfo *dinfo,
+                    const char *version, const char *serial)
 {
     int cylinders, heads, secs;
     uint64_t nb_sectors;
@@ -2618,9 +2619,9 @@ void ide_init_drive(IDEState *s, DriveInfo *dinfo, const char *version)
         s->is_cdrom = 1;
         bdrv_set_change_cb(s->bs, cdrom_change_cb, s);
     }
-    strncpy(s->drive_serial_str, drive_get_serial(s->bs),
-            sizeof(s->drive_serial_str));
-    if (*s->drive_serial_str) {
+    if (serial && *serial) {
+        strncpy(s->drive_serial_str, serial, sizeof(s->drive_serial_str));
+    } else {
         snprintf(s->drive_serial_str, sizeof(s->drive_serial_str),
                  "QM%05d", s->drive_serial);
     }
@@ -2669,7 +2670,7 @@ void ide_init2_with_non_qdev_drives(IDEBus *bus, DriveInfo *hd0,
         dinfo = i == 0 ? hd0 : hd1;
         ide_init1(bus, i);
         if (dinfo) {
-            ide_init_drive(&bus->ifs[i], dinfo, NULL);
+            ide_init_drive(&bus->ifs[i], dinfo, NULL, dinfo->serial);
         } else {
             ide_reset(&bus->ifs[i]);
         }
diff --git a/hw/ide/internal.h b/hw/ide/internal.h
index 6b0024d..eef1ee1 100644
--- a/hw/ide/internal.h
+++ b/hw/ide/internal.h
@@ -457,6 +457,7 @@ struct IDEDevice {
     uint32_t unit;
     BlockConf conf;
     char *version;
+    char *serial;
 };
 
 typedef int (*ide_qdev_initfn)(IDEDevice *dev);
@@ -554,7 +555,8 @@ uint32_t ide_data_readw(void *opaque, uint32_t addr);
 void ide_data_writel(void *opaque, uint32_t addr, uint32_t val);
 uint32_t ide_data_readl(void *opaque, uint32_t addr);
 
-void ide_init_drive(IDEState *s, DriveInfo *dinfo, const char *version);
+void ide_init_drive(IDEState *s, DriveInfo *dinfo,
+                    const char *version, const char *serial);
 void ide_init2(IDEBus *bus, qemu_irq irq);
 void ide_init2_with_non_qdev_drives(IDEBus *bus, DriveInfo *hd0,
                                     DriveInfo *hd1, qemu_irq irq);
diff --git a/hw/ide/qdev.c b/hw/ide/qdev.c
index 9ebb906..5f301bc 100644
--- a/hw/ide/qdev.c
+++ b/hw/ide/qdev.c
@@ -99,7 +99,20 @@ typedef struct IDEDrive {
 static int ide_drive_initfn(IDEDevice *dev)
 {
     IDEBus *bus = DO_UPCAST(IDEBus, qbus, dev->qdev.parent_bus);
-    ide_init_drive(bus->ifs + dev->unit, dev->conf.dinfo, dev->version);
+    IDEState *s = bus->ifs + dev->unit;
+    const char *serial;
+
+    serial = dev->serial;
+    if (!serial) {
+        /* try to fall back to value set with legacy -drive serial=... */
+        serial = drive_get_serial(s->bs);
+    }
+
+    ide_init_drive(s, dev->conf.dinfo, dev->version, serial);
+
+    if (!dev->serial) {
+        dev->serial = qemu_strdup(s->drive_serial_str);
+    }
     return 0;
 }
 
@@ -111,6 +124,7 @@ static IDEDeviceInfo ide_drive_info = {
         DEFINE_PROP_UINT32("unit", IDEDrive, dev.unit, -1),
         DEFINE_BLOCK_PROPERTIES(IDEDrive, dev.conf),
         DEFINE_PROP_STRING("ver",  IDEDrive, dev.version),
+        DEFINE_PROP_STRING("serial",  IDEDrive, dev.serial),
         DEFINE_PROP_END_OF_LIST(),
     }
 };
-- 
1.6.6.1

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [Qemu-devel] [PATCH 12/14] ide: Fix info qtree for ide-drive.ver
  2010-05-28 13:38 [Qemu-devel] [PATCH 00/14] Block-related fixes and cleanups Markus Armbruster
                   ` (10 preceding siblings ...)
  2010-05-28 13:38 ` [Qemu-devel] [PATCH 11/14] ide: Turn drive serial into a qdev property ide-drive.serial Markus Armbruster
@ 2010-05-28 13:38 ` Markus Armbruster
  2010-05-28 13:38 ` [Qemu-devel] [PATCH 13/14] scsi: Turn drive serial into a qdev property scsi-disk.serial Markus Armbruster
                   ` (2 subsequent siblings)
  14 siblings, 0 replies; 22+ messages in thread
From: Markus Armbruster @ 2010-05-28 13:38 UTC (permalink / raw)
  To: qemu-devel; +Cc: kwolf, kraxel

Show the actual default value instead of <null> when the property has
not been set.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 hw/ide/qdev.c |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/hw/ide/qdev.c b/hw/ide/qdev.c
index 5f301bc..9b2aa21 100644
--- a/hw/ide/qdev.c
+++ b/hw/ide/qdev.c
@@ -110,6 +110,9 @@ static int ide_drive_initfn(IDEDevice *dev)
 
     ide_init_drive(s, dev->conf.dinfo, dev->version, serial);
 
+    if (!dev->version) {
+        dev->version = qemu_strdup(s->version);
+    }
     if (!dev->serial) {
         dev->serial = qemu_strdup(s->drive_serial_str);
     }
-- 
1.6.6.1

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [Qemu-devel] [PATCH 13/14] scsi: Turn drive serial into a qdev property scsi-disk.serial
  2010-05-28 13:38 [Qemu-devel] [PATCH 00/14] Block-related fixes and cleanups Markus Armbruster
                   ` (11 preceding siblings ...)
  2010-05-28 13:38 ` [Qemu-devel] [PATCH 12/14] ide: Fix info qtree for ide-drive.ver Markus Armbruster
@ 2010-05-28 13:38 ` Markus Armbruster
  2010-05-28 13:38 ` [Qemu-devel] [PATCH 14/14] scsi: Fix info qtree for scsi-disk.ver Markus Armbruster
  2010-05-31  9:19 ` [Qemu-devel] Re: [PATCH 00/14] Block-related fixes and cleanups Gerd Hoffmann
  14 siblings, 0 replies; 22+ messages in thread
From: Markus Armbruster @ 2010-05-28 13:38 UTC (permalink / raw)
  To: qemu-devel; +Cc: kwolf, kraxel

It needs to be a qdev property, because it belongs to the drive's
guest part.

Bonus: info qtree now shows the serial number.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 hw/scsi-disk.c |   17 +++++++++++++----
 1 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c
index 4d20919..e8c066a 100644
--- a/hw/scsi-disk.c
+++ b/hw/scsi-disk.c
@@ -66,6 +66,7 @@ struct SCSIDiskState
     uint64_t max_lba;
     QEMUBH *bh;
     char *version;
+    char *serial;
 };
 
 static SCSIDiskReq *scsi_new_request(SCSIDevice *d, uint32_t tag, uint32_t lun)
@@ -359,9 +360,7 @@ static int scsi_disk_emulate_inquiry(SCSIRequest *req, uint8_t *outbuf)
 
         case 0x80: /* Device serial number, optional */
         {
-            const char *serial = req->dev->conf.dinfo->serial ?
-                req->dev->conf.dinfo->serial : "0";
-            int l = strlen(serial);
+            int l = strlen(s->serial);
 
             if (l > req->cmd.xfer)
                 l = req->cmd.xfer;
@@ -371,7 +370,7 @@ static int scsi_disk_emulate_inquiry(SCSIRequest *req, uint8_t *outbuf)
             DPRINTF("Inquiry EVPD[Serial number] "
                     "buffer size %zd\n", req->cmd.xfer);
             outbuf[buflen++] = l;
-            memcpy(outbuf+buflen, serial, l);
+            memcpy(outbuf+buflen, s->serial, l);
             buflen += l;
             break;
         }
@@ -1058,6 +1057,15 @@ static int scsi_disk_initfn(SCSIDevice *dev)
     }
     s->bs = s->qdev.conf.dinfo->bdrv;
 
+    if (!s->serial) {
+        if (*dev->conf.dinfo->serial) {
+            /* try to fall back to value set with legacy -drive serial=... */
+            s->serial = qemu_strdup(dev->conf.dinfo->serial);
+        } else {
+            s->serial = qemu_strdup("0");
+        }
+    }
+
     if (bdrv_is_sg(s->bs)) {
         error_report("scsi-disk: unwanted /dev/sg*");
         return -1;
@@ -1090,6 +1098,7 @@ static SCSIDeviceInfo scsi_disk_info = {
     .qdev.props   = (Property[]) {
         DEFINE_BLOCK_PROPERTIES(SCSIDiskState, qdev.conf),
         DEFINE_PROP_STRING("ver",  SCSIDiskState, version),
+        DEFINE_PROP_STRING("serial",  SCSIDiskState, serial),
         DEFINE_PROP_END_OF_LIST(),
     },
 };
-- 
1.6.6.1

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [Qemu-devel] [PATCH 14/14] scsi: Fix info qtree for scsi-disk.ver
  2010-05-28 13:38 [Qemu-devel] [PATCH 00/14] Block-related fixes and cleanups Markus Armbruster
                   ` (12 preceding siblings ...)
  2010-05-28 13:38 ` [Qemu-devel] [PATCH 13/14] scsi: Turn drive serial into a qdev property scsi-disk.serial Markus Armbruster
@ 2010-05-28 13:38 ` Markus Armbruster
  2010-05-31  9:19 ` [Qemu-devel] Re: [PATCH 00/14] Block-related fixes and cleanups Gerd Hoffmann
  14 siblings, 0 replies; 22+ messages in thread
From: Markus Armbruster @ 2010-05-28 13:38 UTC (permalink / raw)
  To: qemu-devel; +Cc: kwolf, kraxel

Show the actual default value instead of <null> when the property has
not been set.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 hw/scsi-disk.c |    7 +++++--
 1 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c
index e8c066a..a3559d1 100644
--- a/hw/scsi-disk.c
+++ b/hw/scsi-disk.c
@@ -462,8 +462,7 @@ static int scsi_disk_emulate_inquiry(SCSIRequest *req, uint8_t *outbuf)
     }
     memcpy(&outbuf[8], "QEMU    ", 8);
     memset(&outbuf[32], 0, 4);
-    memcpy(&outbuf[32], s->version ? s->version : QEMU_VERSION,
-           MIN(4, strlen(s->version ? s->version : QEMU_VERSION)));
+    memcpy(&outbuf[32], s->version, MIN(4, strlen(s->version)));
     /*
      * We claim conformance to SPC-3, which is required for guests
      * to ask for modern features like READ CAPACITY(16) or the
@@ -1066,6 +1065,10 @@ static int scsi_disk_initfn(SCSIDevice *dev)
         }
     }
 
+    if (!s->version) {
+        s->version = qemu_strdup(QEMU_VERSION);
+    }
+
     if (bdrv_is_sg(s->bs)) {
         error_report("scsi-disk: unwanted /dev/sg*");
         return -1;
-- 
1.6.6.1

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [Qemu-devel] Re: [PATCH 00/14] Block-related fixes and cleanups
  2010-05-28 13:38 [Qemu-devel] [PATCH 00/14] Block-related fixes and cleanups Markus Armbruster
                   ` (13 preceding siblings ...)
  2010-05-28 13:38 ` [Qemu-devel] [PATCH 14/14] scsi: Fix info qtree for scsi-disk.ver Markus Armbruster
@ 2010-05-31  9:19 ` Gerd Hoffmann
  2010-06-01  6:33   ` Jes Sorensen
  14 siblings, 1 reply; 22+ messages in thread
From: Gerd Hoffmann @ 2010-05-31  9:19 UTC (permalink / raw)
  To: Markus Armbruster; +Cc: kwolf, qemu-devel

On 05/28/10 15:38, Markus Armbruster wrote:
> I'm working on cleanly separating block device host and guest parts.
> I'd like to route all this work through Kevin's block tree.  This is
> just preliminaries.
>
> Markus Armbruster (14):
>    blockdev: Belatedly remove MAX_DRIVES
>    blockdev: Belatedly remove driveopts
>    usb: Remove unused usb_device_add() parameter is_hotplug
>    ide: Remove useless IDEDeviceInfo members unit, drive
>    ide: Remove redundant IDEState member conf
>    ide: Split ide_init1() off ide_init2()
>    ide: Change ide_init_drive() to require valid dinfo argument
>    ide: Split non-qdev code off ide_init2()
>    qdev: New qdev_prop_set_string()
>    qdev: Don't leak string property value on hot unplug
>    ide: Turn drive serial into a qdev property ide-drive.serial
>    ide: Fix info qtree for ide-drive.ver
>    scsi: Turn drive serial into a qdev property scsi-disk.serial
>    scsi: Fix info qtree for scsi-disk.ver

Nice cleanups.

Acked-by: Gerd Hoffmann <kraxel@redhat.com>

cheers,
   Gerd

^ permalink raw reply	[flat|nested] 22+ messages in thread

* [Qemu-devel] Re: [PATCH 05/14] ide: Remove redundant IDEState member conf
  2010-05-28 13:38 ` [Qemu-devel] [PATCH 05/14] ide: Remove redundant IDEState member conf Markus Armbruster
@ 2010-05-31 14:56   ` Kevin Wolf
  2010-05-31 15:47     ` Markus Armbruster
  0 siblings, 1 reply; 22+ messages in thread
From: Kevin Wolf @ 2010-05-31 14:56 UTC (permalink / raw)
  To: Markus Armbruster; +Cc: qemu-devel, kraxel

Am 28.05.2010 15:38, schrieb Markus Armbruster:
> Commit 428c149b added IDEState member conf to let commit 0009baf1 find
> the BlockConf from there.  It exists only for qdev drives, created via
> ide_drive_initfn(), not for drives created via ide_init2().
> 
> But for a qdev drive, we can just as well reach its IDEDevice, which
> contains the BlockConf.  Do that, and revert the parts of commit
> 428c149b that add IDEState member conf.
> 
> Signed-off-by: Markus Armbruster <armbru@redhat.com>
> ---
>  hw/ide/core.c     |   16 +++++++---------
>  hw/ide/internal.h |    4 +---
>  hw/ide/qdev.c     |    3 +--
>  3 files changed, 9 insertions(+), 14 deletions(-)
> 
> diff --git a/hw/ide/core.c b/hw/ide/core.c
> index 066fecb..c3334b1 100644
> --- a/hw/ide/core.c
> +++ b/hw/ide/core.c
> @@ -98,6 +98,7 @@ static void ide_identify(IDEState *s)
>  {
>      uint16_t *p;
>      unsigned int oldsize;
> +    IDEDevice *dev;
>  
>      if (s->identify_set) {
>  	memcpy(s->io_buffer, s->identify_data, sizeof(s->identify_data));
> @@ -165,8 +166,9 @@ static void ide_identify(IDEState *s)
>      put_le16(p + 101, s->nb_sectors >> 16);
>      put_le16(p + 102, s->nb_sectors >> 32);
>      put_le16(p + 103, s->nb_sectors >> 48);
> -    if (s->conf && s->conf->physical_block_size)
> -        put_le16(p + 106, 0x6000 | get_physical_block_exp(s->conf));
> +    dev = s->unit ? s->bus->slave : s->bus->master;
> +    if (dev && dev->conf.physical_block_size)

If this is meant to be the same condition it would be dev->conf && ...

I can't really tell right now if it can happen that either dev or
dev->conf can be NULL here. In a quick attempt I couldn't get either one.

So, which version is correct, or should the first part be dropped
completely?

Kevin

^ permalink raw reply	[flat|nested] 22+ messages in thread

* [Qemu-devel] Re: [PATCH 05/14] ide: Remove redundant IDEState member conf
  2010-05-31 14:56   ` [Qemu-devel] " Kevin Wolf
@ 2010-05-31 15:47     ` Markus Armbruster
  0 siblings, 0 replies; 22+ messages in thread
From: Markus Armbruster @ 2010-05-31 15:47 UTC (permalink / raw)
  To: Kevin Wolf; +Cc: qemu-devel, kraxel

Kevin Wolf <kwolf@redhat.com> writes:

> Am 28.05.2010 15:38, schrieb Markus Armbruster:
>> Commit 428c149b added IDEState member conf to let commit 0009baf1 find
>> the BlockConf from there.  It exists only for qdev drives, created via
>> ide_drive_initfn(), not for drives created via ide_init2().
>> 
>> But for a qdev drive, we can just as well reach its IDEDevice, which
>> contains the BlockConf.  Do that, and revert the parts of commit
>> 428c149b that add IDEState member conf.
>> 
>> Signed-off-by: Markus Armbruster <armbru@redhat.com>
>> ---
>>  hw/ide/core.c     |   16 +++++++---------
>>  hw/ide/internal.h |    4 +---
>>  hw/ide/qdev.c     |    3 +--
>>  3 files changed, 9 insertions(+), 14 deletions(-)
>> 
>> diff --git a/hw/ide/core.c b/hw/ide/core.c
>> index 066fecb..c3334b1 100644
>> --- a/hw/ide/core.c
>> +++ b/hw/ide/core.c
>> @@ -98,6 +98,7 @@ static void ide_identify(IDEState *s)
>>  {
>>      uint16_t *p;
>>      unsigned int oldsize;
>> +    IDEDevice *dev;
>>  
>>      if (s->identify_set) {
>>  	memcpy(s->io_buffer, s->identify_data, sizeof(s->identify_data));
>> @@ -165,8 +166,9 @@ static void ide_identify(IDEState *s)
>>      put_le16(p + 101, s->nb_sectors >> 16);
>>      put_le16(p + 102, s->nb_sectors >> 32);
>>      put_le16(p + 103, s->nb_sectors >> 48);
>> -    if (s->conf && s->conf->physical_block_size)
>> -        put_le16(p + 106, 0x6000 | get_physical_block_exp(s->conf));
>> +    dev = s->unit ? s->bus->slave : s->bus->master;
>> +    if (dev && dev->conf.physical_block_size)
>
> If this is meant to be the same condition it would be dev->conf && ...
>
> I can't really tell right now if it can happen that either dev or
> dev->conf can be NULL here. In a quick attempt I couldn't get either one.
>
> So, which version is correct, or should the first part be dropped
> completely?

dev->conf can't ever be null:

struct IDEDevice {
    DeviceState qdev;
    uint32_t unit;
    BlockConf conf;
    char *version;
    char *serial;
};

If s->bus was set up by ide_qdev_init(), then dev cannot be null.  I
*think* it can be null for non-qdev IDE.  Three places still use that.
Maybe it's time to accidentally break them and wait for the screams ;)

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [Qemu-devel] Re: [PATCH 00/14] Block-related fixes and cleanups
  2010-05-31  9:19 ` [Qemu-devel] Re: [PATCH 00/14] Block-related fixes and cleanups Gerd Hoffmann
@ 2010-06-01  6:33   ` Jes Sorensen
  0 siblings, 0 replies; 22+ messages in thread
From: Jes Sorensen @ 2010-06-01  6:33 UTC (permalink / raw)
  To: Gerd Hoffmann; +Cc: kwolf, Markus Armbruster, qemu-devel

On 05/31/10 11:19, Gerd Hoffmann wrote:
> On 05/28/10 15:38, Markus Armbruster wrote:
>> I'm working on cleanly separating block device host and guest parts.
>> I'd like to route all this work through Kevin's block tree.  This is
>> just preliminaries.
>>
>> Markus Armbruster (14):
>>    blockdev: Belatedly remove MAX_DRIVES
>>    blockdev: Belatedly remove driveopts
>>    usb: Remove unused usb_device_add() parameter is_hotplug
>>    ide: Remove useless IDEDeviceInfo members unit, drive
>>    ide: Remove redundant IDEState member conf
>>    ide: Split ide_init1() off ide_init2()
>>    ide: Change ide_init_drive() to require valid dinfo argument
>>    ide: Split non-qdev code off ide_init2()
>>    qdev: New qdev_prop_set_string()
>>    qdev: Don't leak string property value on hot unplug
>>    ide: Turn drive serial into a qdev property ide-drive.serial
>>    ide: Fix info qtree for ide-drive.ver
>>    scsi: Turn drive serial into a qdev property scsi-disk.serial
>>    scsi: Fix info qtree for scsi-disk.ver
> 
> Nice cleanups.
> 
> Acked-by: Gerd Hoffmann <kraxel@redhat.com>

Was just about to post the same message :)

Cheers,
Jes

^ permalink raw reply	[flat|nested] 22+ messages in thread

* [Qemu-devel] Re: [PATCH 07/14] ide: Change ide_init_drive() to require valid dinfo argument
  2010-05-28 13:38 ` [Qemu-devel] [PATCH 07/14] ide: Change ide_init_drive() to require valid dinfo argument Markus Armbruster
@ 2010-06-01 14:57   ` Kevin Wolf
  2010-06-01 18:29     ` Markus Armbruster
  0 siblings, 1 reply; 22+ messages in thread
From: Kevin Wolf @ 2010-06-01 14:57 UTC (permalink / raw)
  To: Markus Armbruster; +Cc: qemu-devel, kraxel

Am 28.05.2010 15:38, schrieb Markus Armbruster:
> IDEState members drive_serial_str and version are now left empty until
> an actual drive is connected.  Before, they got a default value that
> was overwritten when a drive got connected.  Doesn't matter, because
> they're used only while a drive is connected.
> 
> Signed-off-by: Markus Armbruster <armbru@redhat.com>
> ---
>  hw/ide/core.c |   47 +++++++++++++++++++++++++----------------------
>  1 files changed, 25 insertions(+), 22 deletions(-)
> 
> diff --git a/hw/ide/core.c b/hw/ide/core.c
> index 443ff10..f72d37f 100644
> --- a/hw/ide/core.c
> +++ b/hw/ide/core.c
> @@ -2601,30 +2601,29 @@ void ide_init_drive(IDEState *s, DriveInfo *dinfo, const char *version)
>      int cylinders, heads, secs;
>      uint64_t nb_sectors;
>  
> -    if (dinfo && dinfo->bdrv) {
> -        s->bs = dinfo->bdrv;
> -        bdrv_get_geometry(s->bs, &nb_sectors);
> -        bdrv_guess_geometry(s->bs, &cylinders, &heads, &secs);
> -        s->cylinders = cylinders;
> -        s->heads = heads;
> -        s->sectors = secs;
> -        s->nb_sectors = nb_sectors;
> -        /* The SMART values should be preserved across power cycles
> -           but they aren't.  */
> -        s->smart_enabled = 1;
> -        s->smart_autosave = 1;
> -        s->smart_errors = 0;
> -        s->smart_selftest_count = 0;
> -        if (bdrv_get_type_hint(s->bs) == BDRV_TYPE_CDROM) {
> -            s->is_cdrom = 1;
> -            bdrv_set_change_cb(s->bs, cdrom_change_cb, s);
> -        }
> -        strncpy(s->drive_serial_str, drive_get_serial(s->bs),
> -                sizeof(s->drive_serial_str));
> +    s->bs = dinfo->bdrv;
> +    bdrv_get_geometry(s->bs, &nb_sectors);
> +    bdrv_guess_geometry(s->bs, &cylinders, &heads, &secs);
> +    s->cylinders = cylinders;
> +    s->heads = heads;
> +    s->sectors = secs;
> +    s->nb_sectors = nb_sectors;
> +    /* The SMART values should be preserved across power cycles
> +       but they aren't.  */
> +    s->smart_enabled = 1;
> +    s->smart_autosave = 1;
> +    s->smart_errors = 0;
> +    s->smart_selftest_count = 0;
> +    if (bdrv_get_type_hint(s->bs) == BDRV_TYPE_CDROM) {
> +        s->is_cdrom = 1;
> +        bdrv_set_change_cb(s->bs, cdrom_change_cb, s);
>      }
> -    if (strlen(s->drive_serial_str) == 0)
> +    strncpy(s->drive_serial_str, drive_get_serial(s->bs),
> +            sizeof(s->drive_serial_str));
> +    if (*s->drive_serial_str) {

This should be the other way round. It breaks the serial number in both
cases.

Kevin

^ permalink raw reply	[flat|nested] 22+ messages in thread

* [Qemu-devel] Re: [PATCH 07/14] ide: Change ide_init_drive() to require valid dinfo argument
  2010-06-01 14:57   ` [Qemu-devel] " Kevin Wolf
@ 2010-06-01 18:29     ` Markus Armbruster
  0 siblings, 0 replies; 22+ messages in thread
From: Markus Armbruster @ 2010-06-01 18:29 UTC (permalink / raw)
  To: Kevin Wolf; +Cc: qemu-devel, kraxel

Kevin Wolf <kwolf@redhat.com> writes:

> Am 28.05.2010 15:38, schrieb Markus Armbruster:
>> IDEState members drive_serial_str and version are now left empty until
>> an actual drive is connected.  Before, they got a default value that
>> was overwritten when a drive got connected.  Doesn't matter, because
>> they're used only while a drive is connected.
>> 
>> Signed-off-by: Markus Armbruster <armbru@redhat.com>
>> ---
>>  hw/ide/core.c |   47 +++++++++++++++++++++++++----------------------
>>  1 files changed, 25 insertions(+), 22 deletions(-)
>> 
>> diff --git a/hw/ide/core.c b/hw/ide/core.c
>> index 443ff10..f72d37f 100644
>> --- a/hw/ide/core.c
>> +++ b/hw/ide/core.c
>> @@ -2601,30 +2601,29 @@ void ide_init_drive(IDEState *s, DriveInfo *dinfo, const char *version)
>>      int cylinders, heads, secs;
>>      uint64_t nb_sectors;
>>  
>> -    if (dinfo && dinfo->bdrv) {
>> -        s->bs = dinfo->bdrv;
>> -        bdrv_get_geometry(s->bs, &nb_sectors);
>> -        bdrv_guess_geometry(s->bs, &cylinders, &heads, &secs);
>> -        s->cylinders = cylinders;
>> -        s->heads = heads;
>> -        s->sectors = secs;
>> -        s->nb_sectors = nb_sectors;
>> -        /* The SMART values should be preserved across power cycles
>> -           but they aren't.  */
>> -        s->smart_enabled = 1;
>> -        s->smart_autosave = 1;
>> -        s->smart_errors = 0;
>> -        s->smart_selftest_count = 0;
>> -        if (bdrv_get_type_hint(s->bs) == BDRV_TYPE_CDROM) {
>> -            s->is_cdrom = 1;
>> -            bdrv_set_change_cb(s->bs, cdrom_change_cb, s);
>> -        }
>> -        strncpy(s->drive_serial_str, drive_get_serial(s->bs),
>> -                sizeof(s->drive_serial_str));
>> +    s->bs = dinfo->bdrv;
>> +    bdrv_get_geometry(s->bs, &nb_sectors);
>> +    bdrv_guess_geometry(s->bs, &cylinders, &heads, &secs);
>> +    s->cylinders = cylinders;
>> +    s->heads = heads;
>> +    s->sectors = secs;
>> +    s->nb_sectors = nb_sectors;
>> +    /* The SMART values should be preserved across power cycles
>> +       but they aren't.  */
>> +    s->smart_enabled = 1;
>> +    s->smart_autosave = 1;
>> +    s->smart_errors = 0;
>> +    s->smart_selftest_count = 0;
>> +    if (bdrv_get_type_hint(s->bs) == BDRV_TYPE_CDROM) {
>> +        s->is_cdrom = 1;
>> +        bdrv_set_change_cb(s->bs, cdrom_change_cb, s);
>>      }
>> -    if (strlen(s->drive_serial_str) == 0)
>> +    strncpy(s->drive_serial_str, drive_get_serial(s->bs),
>> +            sizeof(s->drive_serial_str));
>> +    if (*s->drive_serial_str) {
>
> This should be the other way round. It breaks the serial number in both
> cases.

I have no idea how that could get past my testing.  I'll respin.
Thanks!

^ permalink raw reply	[flat|nested] 22+ messages in thread

* [Qemu-devel] Re: [PATCH 00/14] Block-related fixes and cleanups
  2010-06-01 18:32 [Qemu-devel] " Markus Armbruster
@ 2010-06-02 15:53 ` Kevin Wolf
  0 siblings, 0 replies; 22+ messages in thread
From: Kevin Wolf @ 2010-06-02 15:53 UTC (permalink / raw)
  To: Markus Armbruster; +Cc: qemu-devel, kraxel

Am 01.06.2010 20:32, schrieb Markus Armbruster:
> I'm working on cleanly separating block device host and guest parts.
> I'd like to route all this work through Kevin's block tree.  This is
> just preliminaries.
> 
> v2: Don't break IDE serial
> 
> Markus Armbruster (14):
>   blockdev: Belatedly remove MAX_DRIVES
>   blockdev: Belatedly remove driveopts
>   usb: Remove unused usb_device_add() parameter is_hotplug
>   ide: Remove useless IDEDeviceInfo members unit, drive
>   ide: Remove redundant IDEState member conf
>   ide: Split ide_init1() off ide_init2()
>   ide: Change ide_init_drive() to require valid dinfo argument
>   ide: Split non-qdev code off ide_init2()
>   qdev: New qdev_prop_set_string()
>   qdev: Don't leak string property value on hot unplug
>   ide: Turn drive serial into a qdev property ide-drive.serial
>   ide: Fix info qtree for ide-drive.ver
>   scsi: Turn drive serial into a qdev property scsi-disk.serial
>   scsi: Fix info qtree for scsi-disk.ver

Thanks, applied all to the block branch.

Kevin

^ permalink raw reply	[flat|nested] 22+ messages in thread

end of thread, other threads:[~2010-06-02 15:53 UTC | newest]

Thread overview: 22+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-05-28 13:38 [Qemu-devel] [PATCH 00/14] Block-related fixes and cleanups Markus Armbruster
2010-05-28 13:38 ` [Qemu-devel] [PATCH 01/14] blockdev: Belatedly remove MAX_DRIVES Markus Armbruster
2010-05-28 13:38 ` [Qemu-devel] [PATCH 02/14] blockdev: Belatedly remove driveopts Markus Armbruster
2010-05-28 13:38 ` [Qemu-devel] [PATCH 03/14] usb: Remove unused usb_device_add() parameter is_hotplug Markus Armbruster
2010-05-28 13:38 ` [Qemu-devel] [PATCH 04/14] ide: Remove useless IDEDeviceInfo members unit, drive Markus Armbruster
2010-05-28 13:38 ` [Qemu-devel] [PATCH 05/14] ide: Remove redundant IDEState member conf Markus Armbruster
2010-05-31 14:56   ` [Qemu-devel] " Kevin Wolf
2010-05-31 15:47     ` Markus Armbruster
2010-05-28 13:38 ` [Qemu-devel] [PATCH 06/14] ide: Split ide_init1() off ide_init2() Markus Armbruster
2010-05-28 13:38 ` [Qemu-devel] [PATCH 07/14] ide: Change ide_init_drive() to require valid dinfo argument Markus Armbruster
2010-06-01 14:57   ` [Qemu-devel] " Kevin Wolf
2010-06-01 18:29     ` Markus Armbruster
2010-05-28 13:38 ` [Qemu-devel] [PATCH 08/14] ide: Split non-qdev code off ide_init2() Markus Armbruster
2010-05-28 13:38 ` [Qemu-devel] [PATCH 09/14] qdev: New qdev_prop_set_string() Markus Armbruster
2010-05-28 13:38 ` [Qemu-devel] [PATCH 10/14] qdev: Don't leak string property value on hot unplug Markus Armbruster
2010-05-28 13:38 ` [Qemu-devel] [PATCH 11/14] ide: Turn drive serial into a qdev property ide-drive.serial Markus Armbruster
2010-05-28 13:38 ` [Qemu-devel] [PATCH 12/14] ide: Fix info qtree for ide-drive.ver Markus Armbruster
2010-05-28 13:38 ` [Qemu-devel] [PATCH 13/14] scsi: Turn drive serial into a qdev property scsi-disk.serial Markus Armbruster
2010-05-28 13:38 ` [Qemu-devel] [PATCH 14/14] scsi: Fix info qtree for scsi-disk.ver Markus Armbruster
2010-05-31  9:19 ` [Qemu-devel] Re: [PATCH 00/14] Block-related fixes and cleanups Gerd Hoffmann
2010-06-01  6:33   ` Jes Sorensen
2010-06-01 18:32 [Qemu-devel] " Markus Armbruster
2010-06-02 15:53 ` [Qemu-devel] " Kevin Wolf

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.