On Wed, Sep 10, 2014 at 11:05:39AM +0200, Paolo Bonzini wrote: > Il 10/09/2014 10:51, Peter Maydell ha scritto: > > > What is not okay (and I think it should be a rule) is to touch other > > > devices from post_load, unless you know that they are deserialized > > > first. For example it's okay for a PCI device to talk to the parent > > > bridge in its post_load function. > > > > I don't think it's right to talk to another device even if you do > > know it's deserialized first. Talking to it might make it change > > its state, which would be wrong (since its correct state is > > the state it's just deserialized). I would suggest the rule should > > be "never do something that can change the state of another > > device in post-load". > > That's harder to do, but if it is possible to do it, it would be great > as well. > > It would not surprise me to find a case where the parent device actually > _expects_ the children's post_load to inform it about something, instead > of serializing that part of state on its own. > > Paolo
Absolutely, I don't think we can require that. For example, at the moment, for PCI bridges, we serialize the state of all interrupt lines, but that's just a function of all devices connected to each line. So we are transmitting redundant information, and I have plans to discard that and recompute parent state based on child state. > > (We have similar issues with reset, except worse in that we > > don't have a coherent rule to cause everything to come out > > of reset in the right state.)