[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH RFC 2/2] hw: Replace drive_get_next() by drive_get()
From: |
Philippe Mathieu-Daudé |
Subject: |
Re: [PATCH RFC 2/2] hw: Replace drive_get_next() by drive_get() |
Date: |
Mon, 15 Nov 2021 22:15:12 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.2.0 |
On 11/15/21 16:57, Markus Armbruster wrote:
> Philippe Mathieu-Daudé <f4bug@amsat.org> writes:
>> On 11/15/21 13:55, Markus Armbruster wrote:
>>> drive_get_next() is basically a bad idea. It returns the "next" block
>>> backend of a certain interface type. "Next" means bus=0,unit=N, where
>>> subsequent calls count N up from zero, per interface type.
>>>
>>> This lets you define unit numbers implicitly by execution order. If the
>>> order changes, or new calls appear "in the middle", unit numbers change.
>>> ABI break. Hard to spot in review.
>>>
>>> Explicit is better than implicit: use drive_get() directly.
>>>
>>> Signed-off-by: Markus Armbruster <armbru@redhat.com>
>>> ---
>>> @@ -435,11 +438,13 @@ static void aspeed_machine_init(MachineState *machine)
>>> }
>>>
>>> for (i = 0; i < bmc->soc.sdhci.num_slots; i++) {
>>> - sdhci_attach_drive(&bmc->soc.sdhci.slots[i],
>>> drive_get_next(IF_SD));
>>> + sdhci_attach_drive(&bmc->soc.sdhci.slots[i],
>>> + drive_get(IF_SD, 0, i));
>>
>> If we put SD on bus #0, ...
>>
>>> }
>>>
>>> if (bmc->soc.emmc.num_slots) {
>>> - sdhci_attach_drive(&bmc->soc.emmc.slots[0], drive_get_next(IF_SD));
>>> + sdhci_attach_drive(&bmc->soc.emmc.slots[0],
>>> + drive_get(IF_SD, 0, bmc->soc.sdhci.num_slots));
>>
>> ... we'd want to put eMMC on bus #1
>
> Using separate buses for different kinds of devices would be neater, but
> it also would be an incompatible change. This patch keeps existing
> bus/unit numbers working. drive_get_next() can only use bus 0.
>
>> but I see having eMMC cards on a
>> IF_SD bus as a bug, since these cards are soldered on the board.
>
> IF_SD is not a bus, it's an "block interface type", which is really just
> a user interface thing.
Why are we discriminating by "block interface type" then?
What is the difference between "block interfaces"? I see a block drive
as a generic unit, usable on multiple hardware devices.
I never really understood how this "block interface type" helps
developers and users. I thought BlockInterfaceType and DriveInfo
were legacy / deprecated APIs we want to get rid of; and we would
come up with a replacement API using BlockDeviceInfo or providing
a BlockFrontend state of the art object.
Anyway, I suppose the explanation is buried in the git history
before the last 8 years. I need to keep reading.
- [PATCH RFC 0/2] Eliminate drive_get_next(), Markus Armbruster, 2021/11/15
- [PATCH RFC 2/2] hw: Replace drive_get_next() by drive_get(), Markus Armbruster, 2021/11/15
- Re: [PATCH RFC 2/2] hw: Replace drive_get_next() by drive_get(), Peter Maydell, 2021/11/15
- Re: [PATCH RFC 2/2] hw: Replace drive_get_next() by drive_get(), Philippe Mathieu-Daudé, 2021/11/15
- Re: [PATCH RFC 2/2] hw: Replace drive_get_next() by drive_get(), Markus Armbruster, 2021/11/15
- Re: [PATCH RFC 2/2] hw: Replace drive_get_next() by drive_get(),
Philippe Mathieu-Daudé <=
- Re: [PATCH RFC 2/2] hw: Replace drive_get_next() by drive_get(), Markus Armbruster, 2021/11/16
- Re: [PATCH RFC 2/2] hw: Replace drive_get_next() by drive_get(), Cédric Le Goater, 2021/11/16
- Re: [PATCH RFC 2/2] hw: Replace drive_get_next() by drive_get(), Markus Armbruster, 2021/11/16
- Re: [PATCH RFC 2/2] hw: Replace drive_get_next() by drive_get(), Cédric Le Goater, 2021/11/16
- [PATCH RFC 1/2] hw/sd/ssi-sd: Do not create SD card within controller's realize, Markus Armbruster, 2021/11/15
- Re: [PATCH RFC 0/2] Eliminate drive_get_next(), Peter Maydell, 2021/11/15