qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] fdc: fix drive property handling.
@ 2009-12-15 15:09 Gerd Hoffmann
  2009-12-16 10:03 ` Markus Armbruster
  0 siblings, 1 reply; 6+ messages in thread
From: Gerd Hoffmann @ 2009-12-15 15:09 UTC (permalink / raw)
  To: qemu-devel; +Cc: Gerd Hoffmann

Fix the floppy controller init wrappers to set the drive properties
only in case the DriveInfo pointers passed in are non NULL.  This allows
to set the properties using -global.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 hw/fdc.c |   15 ++++++++++-----
 1 files changed, 10 insertions(+), 5 deletions(-)

diff --git a/hw/fdc.c b/hw/fdc.c
index 11ea439..2e5c7a1 100644
--- a/hw/fdc.c
+++ b/hw/fdc.c
@@ -1885,8 +1885,10 @@ fdctrl_t *fdctrl_init_isa(DriveInfo **fds)
     ISADevice *dev;
 
     dev = isa_create("isa-fdc");
-    qdev_prop_set_drive(&dev->qdev, "driveA", fds[0]);
-    qdev_prop_set_drive(&dev->qdev, "driveB", fds[1]);
+    if (fds[0])
+        qdev_prop_set_drive(&dev->qdev, "driveA", fds[0]);
+    if (fds[1])
+        qdev_prop_set_drive(&dev->qdev, "driveB", fds[1]);
     if (qdev_init(&dev->qdev) < 0)
         return NULL;
     return &(DO_UPCAST(fdctrl_isabus_t, busdev, dev)->state);
@@ -1904,8 +1906,10 @@ fdctrl_t *fdctrl_init_sysbus(qemu_irq irq, int dma_chann,
     sys = DO_UPCAST(fdctrl_sysbus_t, busdev.qdev, dev);
     fdctrl = &sys->state;
     fdctrl->dma_chann = dma_chann; /* FIXME */
-    qdev_prop_set_drive(dev, "driveA", fds[0]);
-    qdev_prop_set_drive(dev, "driveB", fds[1]);
+    if (fds[0])
+        qdev_prop_set_drive(dev, "driveA", fds[0]);
+    if (fds[1])
+        qdev_prop_set_drive(dev, "driveB", fds[1]);
     qdev_init_nofail(dev);
     sysbus_connect_irq(&sys->busdev, 0, irq);
     sysbus_mmio_map(&sys->busdev, 0, mmio_base);
@@ -1921,7 +1925,8 @@ fdctrl_t *sun4m_fdctrl_init (qemu_irq irq, target_phys_addr_t io_base,
     fdctrl_t *fdctrl;
 
     dev = qdev_create(NULL, "SUNW,fdtwo");
-    qdev_prop_set_drive(dev, "drive", fds[0]);
+    if (fds[0])
+        qdev_prop_set_drive(dev, "drive", fds[0]);
     qdev_init_nofail(dev);
     sys = DO_UPCAST(fdctrl_sysbus_t, busdev.qdev, dev);
     fdctrl = &sys->state;
-- 
1.6.5.2

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

* Re: [Qemu-devel] [PATCH] fdc: fix drive property handling.
  2009-12-15 15:09 [Qemu-devel] [PATCH] fdc: fix drive property handling Gerd Hoffmann
@ 2009-12-16 10:03 ` Markus Armbruster
  2009-12-16 13:29   ` Gerd Hoffmann
  0 siblings, 1 reply; 6+ messages in thread
From: Markus Armbruster @ 2009-12-16 10:03 UTC (permalink / raw)
  To: Gerd Hoffmann; +Cc: qemu-devel

Gerd Hoffmann <kraxel@redhat.com> writes:

> Fix the floppy controller init wrappers to set the drive properties
> only in case the DriveInfo pointers passed in are non NULL.  This allows
> to set the properties using -global.
>
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>

This fixes "-global isa-fdc,driveB=DRIVE-ID" for me, but problems
remain:

* Default:

          dev: isa-fdc, id ""
            dev-prop: driveA = floppy0
            dev-prop: driveB = <null>
            isa irq 6

* -drive if=none,id=fd,file=fd.img -global isa-fdc.driveA=fd

          dev: isa-fdc, id ""
            dev-prop: driveA = floppy0
            dev-prop: driveB = <null>
            isa irq 6

  No effect.  It works with -nodefaults:

          dev: isa-fdc, id ""
            dev-prop: driveA = fd
            dev-prop: driveB = <null>
            isa irq 6

* -drive if=none,id=fd,file=fd.img -global isa-fdc.driveB=fd

          dev: isa-fdc, id ""
            dev-prop: driveA = floppy0
            dev-prop: driveB = fd
            isa irq 6

  Works.  -nodefaults works as well:

          dev: isa-fdc, id ""
            dev-prop: driveA = <null>
            dev-prop: driveB = fd
            isa irq 6

* -drive if=none,id=fd,file=fd.img -global isa-fdc.driveA=fd,driveB=fd

  Dies, relevant part of stack backtrace:

    #2  0x006a9092 in abort () from /lib/libc.so.6
    #3  0x08128e79 in qdev_prop_set_globals (dev=0x84a6e88)
        at /home/armbru/work/qemu/hw/qdev-properties.c:622
    #4  0x08126632 in qdev_create (bus=0x849a8d0, name=0x81d4354 "isa-fdc")
        at /home/armbru/work/qemu/hw/qdev.c:106
    #5  0x081bf3d9 in isa_create (name=0x81d4354 "isa-fdc")
        at /home/armbru/work/qemu/hw/isa-bus.c:120
    #6  0x08092d83 in fdctrl_init_isa (fds=0xbfffefa0)
        at /home/armbru/work/qemu/hw/fdc.c:1887

  Same with -nodefaults.

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

* Re: [Qemu-devel] [PATCH] fdc: fix drive property handling.
  2009-12-16 10:03 ` Markus Armbruster
@ 2009-12-16 13:29   ` Gerd Hoffmann
  2009-12-16 14:45     ` Markus Armbruster
  0 siblings, 1 reply; 6+ messages in thread
From: Gerd Hoffmann @ 2009-12-16 13:29 UTC (permalink / raw)
  To: Markus Armbruster; +Cc: qemu-devel

On 12/16/09 11:03, Markus Armbruster wrote:
> This fixes "-global isa-fdc,driveB=DRIVE-ID" for me, but problems
> remain:
>
> * -drive if=none,id=fd,file=fd.img -global isa-fdc.driveA=fd
>
>            dev: isa-fdc, id ""
>              dev-prop: driveA = floppy0
>              dev-prop: driveB =<null>
>              isa irq 6

Patch is on the list.

> * -drive if=none,id=fd,file=fd.img -global isa-fdc.driveA=fd,driveB=fd

Oh, -global works like -set, i.e. you can't set multiple properties in 
one go.  Should be '-global isa-fdc.driveA=fd -global isa-fdc.driveB=fd'.

The error reporting is *ahem*, well, not perfect.  Patch is on the list.

cheers,
   Gerd

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

* Re: [Qemu-devel] [PATCH] fdc: fix drive property handling.
  2009-12-16 13:29   ` Gerd Hoffmann
@ 2009-12-16 14:45     ` Markus Armbruster
  0 siblings, 0 replies; 6+ messages in thread
From: Markus Armbruster @ 2009-12-16 14:45 UTC (permalink / raw)
  To: Gerd Hoffmann; +Cc: qemu-devel

Gerd Hoffmann <kraxel@redhat.com> writes:

> On 12/16/09 11:03, Markus Armbruster wrote:
>> This fixes "-global isa-fdc,driveB=DRIVE-ID" for me, but problems
>> remain:
>>
>> * -drive if=none,id=fd,file=fd.img -global isa-fdc.driveA=fd
>>
>>            dev: isa-fdc, id ""
>>              dev-prop: driveA = floppy0
>>              dev-prop: driveB =<null>
>>              isa irq 6
>
> Patch is on the list.

Subject: [Qemu-devel] [FOR 0.12 PATCH 1/2] defaults: split default_drive
Subject: [Qemu-devel] [FOR 0.12 PATCH 2/2] defaults: update device_list[]

Works fine for me, just one oddity: setting any of the fdc's two drives
kills the default, i.e. setting driveB makes driveA empty.

>> * -drive if=none,id=fd,file=fd.img -global isa-fdc.driveA=fd,driveB=fd
>
> Oh, -global works like -set, i.e. you can't set multiple properties in
> one go.  Should be '-global isa-fdc.driveA=fd -global
> isa-fdc.driveB=fd'.
>
> The error reporting is *ahem*, well, not perfect.  Patch is on the list.

Subject: [Qemu-devel] [FOR 0.12 PATCH] qdev: improve property error reporting.

Works fine now.

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

* [Qemu-devel] [PATCH] fdc: fix drive property handling.
@ 2010-03-10 16:30 Gerd Hoffmann
  2010-03-13 11:16 ` Aurelien Jarno
  0 siblings, 1 reply; 6+ messages in thread
From: Gerd Hoffmann @ 2010-03-10 16:30 UTC (permalink / raw)
  To: qemu-devel; +Cc: Gerd Hoffmann

Fix the floppy controller init wrappers to set the drive properties
only in case the DriveInfo pointers passed in are non NULL.  This allows
to set the properties using -global.

[ v2: fix code style issues pointed out by Aurelien Jarno ]

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 hw/fdc.c |   20 +++++++++++++++-----
 1 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/hw/fdc.c b/hw/fdc.c
index eb39e30..42b6d7d 100644
--- a/hw/fdc.c
+++ b/hw/fdc.c
@@ -1860,8 +1860,12 @@ FDCtrl *fdctrl_init_isa(DriveInfo **fds)
     ISADevice *dev;
 
     dev = isa_create("isa-fdc");
-    qdev_prop_set_drive(&dev->qdev, "driveA", fds[0]);
-    qdev_prop_set_drive(&dev->qdev, "driveB", fds[1]);
+    if (fds[0]) {
+        qdev_prop_set_drive(&dev->qdev, "driveA", fds[0]);
+    }
+    if (fds[1]) {
+        qdev_prop_set_drive(&dev->qdev, "driveB", fds[1]);
+    }
     if (qdev_init(&dev->qdev) < 0)
         return NULL;
     return &(DO_UPCAST(FDCtrlISABus, busdev, dev)->state);
@@ -1878,8 +1882,12 @@ FDCtrl *fdctrl_init_sysbus(qemu_irq irq, int dma_chann,
     sys = DO_UPCAST(FDCtrlSysBus, busdev.qdev, dev);
     fdctrl = &sys->state;
     fdctrl->dma_chann = dma_chann; /* FIXME */
-    qdev_prop_set_drive(dev, "driveA", fds[0]);
-    qdev_prop_set_drive(dev, "driveB", fds[1]);
+    if (fds[0]) {
+        qdev_prop_set_drive(dev, "driveA", fds[0]);
+    }
+    if (fds[1]) {
+        qdev_prop_set_drive(dev, "driveB", fds[1]);
+    }
     qdev_init_nofail(dev);
     sysbus_connect_irq(&sys->busdev, 0, irq);
     sysbus_mmio_map(&sys->busdev, 0, mmio_base);
@@ -1895,7 +1903,9 @@ FDCtrl *sun4m_fdctrl_init(qemu_irq irq, target_phys_addr_t io_base,
     FDCtrl *fdctrl;
 
     dev = qdev_create(NULL, "SUNW,fdtwo");
-    qdev_prop_set_drive(dev, "drive", fds[0]);
+    if (fds[0]) {
+        qdev_prop_set_drive(dev, "drive", fds[0]);
+    }
     qdev_init_nofail(dev);
     sys = DO_UPCAST(FDCtrlSysBus, busdev.qdev, dev);
     fdctrl = &sys->state;
-- 
1.6.6.1

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

* Re: [Qemu-devel] [PATCH] fdc: fix drive property handling.
  2010-03-10 16:30 Gerd Hoffmann
@ 2010-03-13 11:16 ` Aurelien Jarno
  0 siblings, 0 replies; 6+ messages in thread
From: Aurelien Jarno @ 2010-03-13 11:16 UTC (permalink / raw)
  To: Gerd Hoffmann; +Cc: qemu-devel

On Wed, Mar 10, 2010 at 05:30:29PM +0100, Gerd Hoffmann wrote:
> Fix the floppy controller init wrappers to set the drive properties
> only in case the DriveInfo pointers passed in are non NULL.  This allows
> to set the properties using -global.
> 
> [ v2: fix code style issues pointed out by Aurelien Jarno ]
> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>

Thanks, applied.

> ---
>  hw/fdc.c |   20 +++++++++++++++-----
>  1 files changed, 15 insertions(+), 5 deletions(-)
> 
> diff --git a/hw/fdc.c b/hw/fdc.c
> index eb39e30..42b6d7d 100644
> --- a/hw/fdc.c
> +++ b/hw/fdc.c
> @@ -1860,8 +1860,12 @@ FDCtrl *fdctrl_init_isa(DriveInfo **fds)
>      ISADevice *dev;
>  
>      dev = isa_create("isa-fdc");
> -    qdev_prop_set_drive(&dev->qdev, "driveA", fds[0]);
> -    qdev_prop_set_drive(&dev->qdev, "driveB", fds[1]);
> +    if (fds[0]) {
> +        qdev_prop_set_drive(&dev->qdev, "driveA", fds[0]);
> +    }
> +    if (fds[1]) {
> +        qdev_prop_set_drive(&dev->qdev, "driveB", fds[1]);
> +    }
>      if (qdev_init(&dev->qdev) < 0)
>          return NULL;
>      return &(DO_UPCAST(FDCtrlISABus, busdev, dev)->state);
> @@ -1878,8 +1882,12 @@ FDCtrl *fdctrl_init_sysbus(qemu_irq irq, int dma_chann,
>      sys = DO_UPCAST(FDCtrlSysBus, busdev.qdev, dev);
>      fdctrl = &sys->state;
>      fdctrl->dma_chann = dma_chann; /* FIXME */
> -    qdev_prop_set_drive(dev, "driveA", fds[0]);
> -    qdev_prop_set_drive(dev, "driveB", fds[1]);
> +    if (fds[0]) {
> +        qdev_prop_set_drive(dev, "driveA", fds[0]);
> +    }
> +    if (fds[1]) {
> +        qdev_prop_set_drive(dev, "driveB", fds[1]);
> +    }
>      qdev_init_nofail(dev);
>      sysbus_connect_irq(&sys->busdev, 0, irq);
>      sysbus_mmio_map(&sys->busdev, 0, mmio_base);
> @@ -1895,7 +1903,9 @@ FDCtrl *sun4m_fdctrl_init(qemu_irq irq, target_phys_addr_t io_base,
>      FDCtrl *fdctrl;
>  
>      dev = qdev_create(NULL, "SUNW,fdtwo");
> -    qdev_prop_set_drive(dev, "drive", fds[0]);
> +    if (fds[0]) {
> +        qdev_prop_set_drive(dev, "drive", fds[0]);
> +    }
>      qdev_init_nofail(dev);
>      sys = DO_UPCAST(FDCtrlSysBus, busdev.qdev, dev);
>      fdctrl = &sys->state;
> -- 
> 1.6.6.1
> 
> 
> 
> 

-- 
Aurelien Jarno                          GPG: 1024D/F1BCDB73
aurelien@aurel32.net                 http://www.aurel32.net

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

end of thread, other threads:[~2010-03-13 11:16 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-12-15 15:09 [Qemu-devel] [PATCH] fdc: fix drive property handling Gerd Hoffmann
2009-12-16 10:03 ` Markus Armbruster
2009-12-16 13:29   ` Gerd Hoffmann
2009-12-16 14:45     ` Markus Armbruster
  -- strict thread matches above, loose matches on Subject: below --
2010-03-10 16:30 Gerd Hoffmann
2010-03-13 11:16 ` Aurelien Jarno

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).