On Wed, Oct 09, 2019 at 11:19:26AM +0200, Cédric Le Goater wrote: > On 09/10/2019 08:08, David Gibson wrote: > > spapr now has the mechanism of constructing both XICS and XIVE instances of > > the SpaprInterruptController interface. However, only one of the interrupt > > controllers will actually be active at any given time, depending on feature > > negotiation with the guest. This is handled in the current code via > > spapr_irq_current() which checks the OV5 vector from feature negotiation to > > determine the current backend. > > > > Determining the active controller at the point we need it like this > > can be pretty confusing, because it makes it very non obvious at what > > points the active controller can change. This can make it difficult > > to reason about the code and where a change of active controller could > > appear in sequence with other events. > > > > Make this mechanism more explicit by adding an 'active_intc' pointer > > and an explicit spapr_irq_update_active_intc() function to update it > > from the CAS state. We also add hooks on the intc backend which will > > get called when it is activated or deactivated. > > > > For now we just introduce the switch and hooks, later patches will > > actually start using them. > > > > Signed-off-by: David Gibson > > Reviewed-by: Greg Kurz > Btw, we will need an extra xive2 pointer for the Power10 interrupt > controller. Yeah, I figured. I think it should be easier to add more irq backends with the new structure. -- David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson