Stefan Hajnoczi <stefa...@redhat.com> writes: > On Tue, Apr 27, 2021 at 07:54:21PM +0200, Philippe Mathieu-Daudé wrote: >> On 4/27/21 7:16 PM, John Snow wrote: >> > On 4/27/21 9:54 AM, Stefan Hajnoczi wrote: >> >> I suggest fixing this at the qdev level. Make piix3-ide have a >> >> sub-device that inherits from ISA_DEVICE so it can only be instantiated >> >> when there's an ISA bus. >> >> >> >> Stefan >> > >> > My qdev knowledge is shaky. Does this imply that you agree with the >> > direction of Thomas's patch, or do you just mean to disagree with Phil >> > on his preferred course of action? >> >> My understanding is a disagreement to both, with a 3rd direction :) >> >> I agree with Stefan direction but I'm not sure (yet) that a sub-device >> is the best (long-term) solution. I guess there is a design issue with >> this device, and would like to understanding it first. >> >> IIUC Stefan says the piix3-ide is both a PCI and IDE device, but QOM >> only allow a single parent. Multiple QOM inheritance is resolved as >> interfaces, but PCI/IDE qdev aren't interfaces, rather abstract objects. >> So he suggests to embed an IDE device within the PCI piix3-ide device. >> >> My view is the PIIX is a chipset that share stuffs between components, >> and the IDE bus belongs to the chipset PCI root (or eventually the >> PCI-ISA bridge, function #0). The IDE function would use the IDE bus >> from its root parent as a linked property. >> My problem is currently this device is user-creatable as a Frankenstein >> single PCI function, out of its chipset. I'm not sure yet this is a >> dead end or I could work something out. > > Kevin and Paolo previously pointed out that piix3-ide is sometimes used > with the Q35 machine type. The user-creatable piix3-ide device needs to > be deprecated before it can be dropped. That's a long process that > cannot fix the current crash any time soon. > > I do support deprecating the user-creatable piix3-ide device in favor of > a proper Q35 Legacy IDE implementation. The main problem is this > involves a bunch of work and I'm not sure who would do it (the payoff is > not very high).
In my opinion, letting users plug device models for PCI *functions* as if they were *devices* was a mistake. Compounding the mistake of not modelling the difference between PCI function and PCI device. The more of them we can deprecate, the better.