[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] Re: Commit 622b520f changed -drive if=scsi, index=N, intent
From: |
Markus Armbruster |
Subject: |
[Qemu-devel] Re: Commit 622b520f changed -drive if=scsi, index=N, intentional? |
Date: |
Thu, 27 Jan 2011 16:11:38 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/23.1 (gnu/linux) |
Kevin Wolf <address@hidden> writes:
> 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.
The real number is 7, because it's always been 7 :)
Okay, back to serious. drive_init() with IF_SCSI is tied to
scsi_bus_legacy_handle_cmdline() and its callers. The callers are SCSI
controller device initialization functions. The controller has a per
bus unit limit. And that's the real number for that bus.
But drive_init() doesn't know which device is going to provide a given
bus number! It shouldn't know. Perhaps it even can't know.
We have two callers now: lsi_scsi_init(), limit 7 (LSI_MAX_DEVS), and
esp_init1(), limit 7 (ESP_MAX_DEVS).
Let's worry about it when we add a caller with a different limit.
- [Qemu-devel] Commit 622b520f changed -drive if=scsi, index=N, intentional?, Markus Armbruster, 2011/01/27
- [Qemu-devel] Re: Commit 622b520f changed -drive if=scsi, index=N, intentional?, Kevin Wolf, 2011/01/27
- Re: [Qemu-devel] Commit 622b520f changed -drive if=scsi, index=N, intentional?, Daniel P. Berrange, 2011/01/27
- [Qemu-devel] Re: Commit 622b520f changed -drive if=scsi, index=N, intentional?, Paolo Bonzini, 2011/01/27