Am 27.01.2011 13:10, schrieb Markus Armbruster:
> Consider -drive if=scsi,index=12,...
>
> Before the commit, index=12 meant bus=1,unit=5. Example:
>
> [...]
>
> 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:
>
> [...]
>
> One scsi-bus, and scsi1-cd5 nowhere to be found.
>
> I'd call this a regression.
>
> What now?
That's a really good question. We could do something like this:
--- a/blockdev.c
+++ b/blockdev.c
@@ -192,7 +192,7 @@ DriveInfo *drive_init(QemuOpts *opts, int
default_to_scsi)
max_devs = MAX_IDE_DEVS;
} else if (!strcmp(buf, "scsi")) {
type = IF_SCSI;
- max_devs = MAX_SCSI_DEVS;
+ max_devs = 7;
} else if (!strcmp(buf, "floppy")) {
type = IF_FLOPPY;
max_devs = 0;
That's very obviously not much more than a hack, but I don't think
blockdev.c can get the real number easily (please prove me wrong). With
this hack, we would get the old behaviour for -drive (which doesn't use
any other controller anyway) and you can still use -device to attach
more devices to a non-lsi bus.
Kevin