John Snow <js...@redhat.com> writes: > This patch adds the 'units_per_default_bus' property which > allows individual boards to declare their desired > index => (bus,unit) mapping for their default HBA, so that > boards such as Q35 can specify that its default if_ide HBA, > AHCI, only accepts one unit per bus. > > This property only overrides the mapping for drives matching > the block_default_type interface. > > This patch also adds this property to *all* past and present > Q35 machine types. This retroactive addition is justified > because the previous erroneous index=>(bus,unit) mappings > caused by lack of such a property were not utilized due to > lack of initialization code in the Q35 init routine. > > Further, semantically, the Q35 board type has always had the > property that its default HBA, AHCI, only accepts one unit per > bus. The new code added to add devices to drives relies upon > the accuracy of this mapping. Thus, the property is applied > retroactively to reduce complexity of allowing IDE HBAs with > different units per bus. > > Examples: > > Prior to this patch, all IDE HBAs were assumed to use 2 units > per bus (Master, Slave). When using Q35 and AHCI, however, we > only allow one unit per bus. > > -hdb foo.qcow2 would become index=1, or bus=0,unit=1. > -hdd foo.qcow2 would become index=3, or bus=1,unit=1. > -drive file=foo.qcow2,index=5 becomes bus=2,unit=1. > > These are invalid for AHCI. They now become, under Q35 only: > > -hdb foo.qcow2 --> index=1, bus=1, unit=0. > -hdd foo.qcow2 --> index=3, bus=3, unit=0. > -drive file=foo.qcow2,index=5 --> bus=5,unit=0. > > The mapping is adjusted based on the fact that the default IF > for the Q35 machine type is IF_IDE, and units-per-default-bus > overrides the IDE mapping from its default of 2 units per bus > to just 1 unit per bus. > > Signed-off-by: John Snow <js...@redhat.com>
Nice examples, thank you!