qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] Commit 622b520f changed -drive if=scsi, index=N, intentiona


From: Markus Armbruster
Subject: [Qemu-devel] Commit 622b520f changed -drive if=scsi, index=N, intentional?
Date: Thu, 27 Jan 2011 13:10:50 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1 (gnu/linux)

Consider -drive if=scsi,index=12,...

Before the commit, index=12 meant bus=1,unit=5.  Example:

    $ qemu-system-x86_64 -nodefaults -vnc :0 -S -monitor stdio -drive 
if=scsi,index=12,media=cdrom
    QEMU 0.13.50 monitor - type 'help' for more information
    (qemu) info block
    scsi1-cd5: type=cdrom removable=1 locked=0 [not inserted]
    (qemu) info qtree
    [...]
        bus: pci.0
          type PCI
          dev: lsi53c895a, id ""
            bus-prop: addr = 03.0
            bus-prop: romfile = <null>
            bus-prop: rombar = 1
            bus-prop: multifunction = off
            class SCSI controller, addr 00:03.0, pci id 1000:0012 (sub 
1af4:1000)
            bar 0: i/o at 0xffffffffffffffff [0xfe]
            bar 1: mem at 0xffffffffffffffff [0x3fe]
            bar 2: mem at 0xffffffffffffffff [0x1ffe]
            bus: scsi.0
              type SCSI
              dev: scsi-disk, id ""
                dev-prop: drive = scsi1-cd5
                dev-prop: logical_block_size = 512
                dev-prop: physical_block_size = 512
                dev-prop: min_io_size = 0
                dev-prop: opt_io_size = 0
                dev-prop: ver = "0.13.50"
                dev-prop: serial = "0"
                bus-prop: scsi-id = 5
          dev: lsi53c895a, id ""
            bus-prop: addr = 02.0
            bus-prop: romfile = <null>
            bus-prop: rombar = 1
            bus-prop: multifunction = off
            class SCSI controller, addr 00:02.0, pci id 1000:0012 (sub 
1af4:1000)
            bar 0: i/o at 0xffffffffffffffff [0xfe]
            bar 1: mem at 0xffffffffffffffff [0x3fe]
            bar 2: mem at 0xffffffffffffffff [0x1ffe]
            bus: scsi.0
              type SCSI
    [...]

    Two scsi-buses, and scsi1-cd5 with scsi-id 5 is on the second one,
    i.e. bus=1, unit=5.

After the commit, it means bus=0,unit=12.  The drive is created, but not
the guest device.  That's because lsi53c895a supports only 7 units
(LSI_MAX_DEVS), and scsi_bus_legacy_handle_cmdline() ignores drives with
unit numbers exceeding that limit.  Example:

    $ ~/work/qemu/bld-x86/x86_64-softmmu/qemu-system-x86_64 -nodefaults -usb -m 
384 -vnc :0 -enable-kvm -S -readconfig ~/work/qemu/test.cfg -drive 
if=scsi,index=12,media=cdrom
    QEMU 0.13.50 monitor - type 'help' for more information
    (qemu) info block
    hda: type=hd removable=0 file=/home/armbru/work/images/test.img ro=0 
drv=raw encrypted=0
    scsi0-cd12: type=cdrom removable=1 locked=0 [not inserted]
    (qemu) info qtree
    [...]
        bus: pci.0
          type PCI
    [...]
          dev: lsi53c895a, id ""
            bus-prop: addr = 02.0
            bus-prop: romfile = <null>
            bus-prop: rombar = 1
            bus-prop: multifunction = off
            bus-prop: command_serr_enable = on
            class SCSI controller, addr 00:02.0, pci id 1000:0012 (sub 
1af4:1000)
            bar 0: i/o at 0xffffffffffffffff [0xfe]
            bar 1: mem at 0xffffffffffffffff [0x3fe]
            bar 2: mem at 0xffffffffffffffff [0x1ffe]
            bus: scsi.0
              type SCSI
    [...]

    One scsi-bus, and scsi1-cd5 nowhere to be found.

I'd call this a regression.

What now?



commit 622b520fb4ca50b5028485f1d225317ece0a42b9
Author: Hannes Reinecke <address@hidden>
Date:   Wed Nov 24 12:15:56 2010 +0100

    scsi: Increase the number of possible devices
    
    The SCSI parallel interface has a limit of 8 devices, but
    not the SCSI stack in general. So we should be removing the
    hard-coded limit and use MAX_SCSI_DEVS instead.
    And we only need to scan those devices which are allocated
    by the bus.
    
    Signed-off-by: Hannes Reinecke <address@hidden>
    Acked-by: Christoph Hellwig <address@hidden>
    Signed-off-by: Kevin Wolf <address@hidden>

diff --git a/blockdev.h b/blockdev.h
index 2a0559e..4cb8ca9 100644
--- a/blockdev.h
+++ b/blockdev.h
@@ -32,7 +32,7 @@ struct DriveInfo {
 };
 
 #define MAX_IDE_DEVS   2
-#define MAX_SCSI_DEVS  7
+#define MAX_SCSI_DEVS  255
 
 DriveInfo *drive_get(BlockInterfaceType type, int bus, int unit);
 int drive_get_max_bus(BlockInterfaceType type);
diff --git a/hw/scsi-bus.c b/hw/scsi-bus.c
index 5a3fd4b..74a08b7 100644
--- a/hw/scsi-bus.c
+++ b/hw/scsi-bus.c
@@ -108,7 +108,7 @@ int scsi_bus_legacy_handle_cmdline(SCSIBus *bus)
     int res = 0, unit;
 
     loc_push_none(&loc);
-    for (unit = 0; unit < MAX_SCSI_DEVS; unit++) {
+    for (unit = 0; unit < bus->ndev; unit++) {
         dinfo = drive_get(IF_SCSI, bus->busnr, unit);
         if (dinfo == NULL) {
             continue;
diff --git a/hw/scsi.h b/hw/scsi.h
index cb06d6d..9c798ae 100644
--- a/hw/scsi.h
+++ b/hw/scsi.h
@@ -3,6 +3,7 @@
 
 #include "qdev.h"
 #include "block.h"
+#include "blockdev.h"
 #include "block_int.h"
 
 #define SCSI_CMD_BUF_SIZE     16
@@ -86,7 +87,7 @@ struct SCSIBus {
     int tcq, ndev;
     scsi_completionfn complete;
 
-    SCSIDevice *devs[8];
+    SCSIDevice *devs[MAX_SCSI_DEVS];
 };
 
 void scsi_bus_new(SCSIBus *bus, DeviceState *host, int tcq, int ndev,



reply via email to

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