On 12/14/2015 07:14 PM, Paolo Bonzini wrote:
On 13/12/2015 09:08, Shmulik Ladkani wrote:
+ pvs_k->parent_dc_realize = dc->realize;
Marcel, Michael,
this creates a really nasty dependency on the contents of pci_qdev_realize.
Hi Paolo,
In this case is exactly want we want to do. We don't care what pci_qdev_realize
does.
We just want to made a change and then call it. We can think of it as
"pre-realize."
I think I already saw a "post-realize" or something.
The usage is also documented in include/qom/object.h, how to derive
"do_something" (see derived_do_something).
Can you instead change PCIDeviceClass's pc->is_express to a function
pointer, and provide a sample implementation pci_is_express_true for the
devices that set is_express to true?
I think I thougth about this too and I have nothing against it.
The only "down side" I can see is that "is_express" means actually
"can_be_express",
and some classes keep it true even if sometimes is not actually a PCIe device.
Now we change back the meaning to "is_really_express" :) , but we may encounter
some side effects.
(I understand that we keep it true so we don't have to maintain some
complicated code
on VMState related to the config space size.)
Thanks,
Marcel
Thanks,
Paolo