qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] [Bug 1799766] Re: -device does not work as -drive do


From: Max Reitz
Subject: [Qemu-devel] [Bug 1799766] Re: -device does not work as -drive do
Date: Thu, 25 Oct 2018 15:46:23 -0000

Hi,

As you yourself say, -drive does work, so this is really not about
-drive, but about -blockdev.

-drive creates part of the device as well, so to speak, whereas
-blockdev only creates one (or more) nodes in the block layer.  You can
only eject something from devices, however, so you cannot eject a
blockdev.  So yes, there is a difference between -drive and -blockdev.

If you want to use eject, you either have to use -drive (which is
legacy), or you eject the ID given to -device (because you eject the
device).  However, you haven't even used -device, but you just used
-global (which doesn't allow giving an ID).

As you can see from "info block", there is still a QOM path that you
could in theory use, too.  So you probably could also "eject
/machine/unattached/device[12]" (in the last example).

In practice, you should probably do this:

$ qemu-system-i386 \
       -blockdev driver=file,node-name=fda-img,filename=fda.img \
       -blockdev driver=raw,node-name=fda,file=fda-img \
       -device floppy,id=floppy,drive=fda \
       -monitor stdio
(qemu) info block
[...]
fda: fda.img (raw)
    Attached to:      floppy
    Removable device: not locked, tray closed
    Cache mode:       writeback
(qemu) eject floppy
Device 'floppy' not found

Oops.

Well, it works with QMP:

{'execute':'eject','arguments':{'id':'floppy'}}
{"return": {}}

So there is indeed a bug, although it's not the one you're reporting.
The bug is that HMP's eject does not accept a -device ID (but only a
-drive ID).

Max

-- 
You received this bug notification because you are a member of qemu-
devel-ml, which is subscribed to QEMU.
https://bugs.launchpad.net/bugs/1799766

Title:
  -device does not work as -drive do

Status in QEMU:
  New

Bug description:
  Copy/paste of https://stackoverflow.com/questions/52929723/qemu-eject-
  complains-device-is-not-found-while-it-is-there , since I found this
  bug trying to find an answer to an own question on Stack Overflow.

  Below, what was my question the answer I wrote, all exposes the bug.

  ====================================================================

  
  I need to eject a floppy from QEmu 3.0 monitor, but the command surprisingly 
fails complaining the device is not found, while it is really there.

  Listing of devices:

      (qemu) info block
      fda: dos-6-22/Dos622-1.img (raw)
          Attached to:      /machine/unattached/device[11]
          Removable device: not locked, tray closed
          Cache mode:       writeback

      hda: hda.img (raw)
          Attached to:      /machine/peripheral-anon/device[1]
          Cache mode:       writeback

  Eject command result:

      (qemu) eject fda
      Device 'fda' not found

  This is so although this documentation says this is how I have to do:
  https://www.linux-kvm.org/page/Change_cdrom (just that I want to eject
  the floppy instead of the CD‑ROM).

  The `change` command complains the same:

      (qemu) change fda dos-6-22/Dos622-2.img raw
      Device 'fda' not found

  Is this a bug or me doing something wrong?

  I tried using different node names, with always the same result.

  ====================================================================

  I’m posting as an answer, but I’m not strictly sure. I can just say,
  if I understand correctly, this is a bug.

  The answer comes in two parts.

  First part, is a stripped down failing invocation:

      qemu-system-i386 \
         -monitor stdio \
         -machine type=isapc,vmport=off \
         -blockdev driver=file,node-name=fda-img,filename=fda.img \
         -blockdev driver=raw,node-name=fda,file=fda-img \
         -global isa-fdc.driveA=fda

      (qemu) info block
      ide1-cd0: [not inserted]
          Attached to:      /machine/unattached/device[19]
          Removable device: not locked, tray closed

      sd0: [not inserted]
          Removable device: not locked, tray closed

      fda: fda.img (raw)
          Attached to:      /machine/unattached/device[13]
          Removable device: not locked, tray closed
          Cache mode:       writeback
      (qemu) eject fda
      Device 'fda' not found

  Second part, is the same without the last argument `-global isa-
  fdc.driveA=fda`:

      qemu-system-i386 \
         -monitor stdio \
         -machine type=isapc,vmport=off \
         -blockdev driver=file,node-name=fda-img,filename=fda.img \
         -blockdev driver=raw,node-name=fda,file=fda-img

      (qemu) info block
      ide1-cd0: [not inserted]
          Attached to:      /machine/unattached/device[19]
          Removable device: not locked, tray closed

      floppy0: [not inserted]
          Attached to:      /machine/unattached/device[13]
          Removable device: not locked, tray closed

      sd0: [not inserted]
          Removable device: not locked, tray closed
      (qemu) eject floppy0

  There is more error when `-global isa-fdc.driveA=fda` is removed.
  However, the documentation says:

  > -global driver=driver,property=property,value=value
  > Set default value of driver’s property prop to value, e.g.:

  > qemu-system-i386 -global ide-hd.physical_block_size=4096 disk-image.img
  > In particular, you can **use this to set driver properties for devices 
which are created automatically by the machine model**. To create a device 
which is not created automatically and set properties on it, use -device.

  > -global driver.prop=value is shorthand for -global
  driver=driver,property=prop,value=value. The longhand syntax works
  even when driver contains a dot.

  What I put a stress on in the quote, suggest I’m not misusing
  `-global` and that’s most probably a bug.

  **Update for more details:**

  It seems using `-drive` instead of `-device` and `driveA` assignment,
  the result is not the same, although RedHat documentation recommands
  using `-device` instead of `-drive` and QEmu 3.0 documentation says
  `-drive` is essentially a shortcut for `-device` (“essentially”, not
  telling about the difference).

  Below, two cases, with an except of `info block` and an excerpt of
  `info qtree`.

  With this one, `eject floppy0` works:

      qemu-system-i386 \
         -monitor stdio \
         -machine type=isapc,vmport=off \
         -drive format=raw,if=floppy,media=disk,file=fda.img \
         -device isa-vga,vgamem_mb=1 \
         -serial msmouse

      […]

      floppy0 (#block156): fda.img (raw)
          Attached to:      /machine/unattached/device[12]
          Removable device: not locked, tray closed
          Cache mode:       writeback

      […]

        dev: isa-fdc, id ""
          iobase = 1008 (0x3f0)
          irq = 6 (0x6)
          dma = 2 (0x2)
          driveA = ""
          driveB = ""
          check_media_rate = true
          fdtypeA = "auto"
          fdtypeB = "auto"
          fallback = "288"
          isa irq 6
          bus: floppy-bus.0
            type floppy-bus
            dev: floppy, id ""
              unit = 0 (0x0)
              drive = "floppy0"
              logical_block_size = 512 (0x200)
              physical_block_size = 512 (0x200)
              min_io_size = 0 (0x0)
              opt_io_size = 0 (0x0)
              discard_granularity = 4294967295 (0xffffffff)
              write-cache = "auto"
              share-rw = false
              drive-type = "144"

  With this one, `eject fda` does not work:

      qemu-system-i386 \
         -monitor stdio \
         -machine type=isapc,vmport=off \
         -blockdev driver=file,node-name=fda-img,filename=fda.img \
         -blockdev driver=raw,node-name=fda,file=fda-img \
         -global isa-fdc.driveA=fda \
         -device isa-vga,vgamem_mb=1 \
         -serial msmouse

      […]

      fda: fda.img (raw)
          Attached to:      /machine/unattached/device[12]
          Removable device: not locked, tray closed
          Cache mode:       writeback

      […]

        dev: isa-fdc, id ""
          iobase = 1008 (0x3f0)
          irq = 6 (0x6)
          dma = 2 (0x2)
          driveA = ""
          driveB = ""
          check_media_rate = true
          fdtypeA = "auto"
          fdtypeB = "auto"
          fallback = "288"
          isa irq 6
          bus: floppy-bus.0
            type floppy-bus
            dev: floppy, id ""
              unit = 0 (0x0)
              drive = "fda"
              logical_block_size = 512 (0x200)
              physical_block_size = 512 (0x200)
              min_io_size = 0 (0x0)
              opt_io_size = 0 (0x0)
              discard_granularity = 4294967295 (0xffffffff)
              write-cache = "auto"
              share-rw = false
              drive-type = "144"

To manage notifications about this bug go to:
https://bugs.launchpad.net/qemu/+bug/1799766/+subscriptions



reply via email to

[Prev in Thread] Current Thread [Next in Thread]