[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 03/18] xen/arm: Save GIC and virtual timer context when the domain suspends
On Wed, 14 Nov 2018, Julien Grall wrote: > On 14/11/2018 22:45, Stefano Stabellini wrote: > > On Wed, 14 Nov 2018, Julien Grall wrote: > >> Hi, > >> > >> On 13/11/2018 20:44, Stefano Stabellini wrote: > >>> On Mon, 12 Nov 2018, Julien Grall wrote: > >>>> (+ Andre) > >>>> > >>>> On 11/12/18 5:42 PM, Mirela Simonovic wrote: > >>>>> Hi Julien, > >>>>> > >>>>> On Mon, Nov 12, 2018 at 6:00 PM Julien Grall <julien.grall@xxxxxxx> > >>>>> wrote: > >>>>>> > >>>>>> > >>>>>> > >>>>>> On 11/12/18 4:52 PM, Mirela Simonovic wrote: > >>>>>>> Hi Julien, > >>>>>> > >>>>>> Hi, > >>>>>> > >>>>>>> Thanks for the feedback. > >>>>>>> > >>>>>>> On Mon, Nov 12, 2018 at 4:36 PM Julien Grall <julien.grall@xxxxxxx> > >>>>>>> wrote: > >>>>>>>> > >>>>>>>> Hi Mirela, > >>>>>>>> > >>>>>>>> On 11/12/18 11:30 AM, Mirela Simonovic wrote: > >>>>>>>>> GIC and virtual timer context must be saved when the domain > >>>>>>>>> suspends. > >>>>>>>> > >>>>>>>> Please provide the rationale for this. Is it required by the spec? > >>>>>>>> > >>>>>>> > >>>>>>> This is required for GIC because a guest leaves enabled interrupts > >>>>>>> in > >>>>>>> the GIC that could wake it up, and on resume it should be able to > >>>>>>> detect which interrupt woke it up. Without saving/restoring the > >>>>>>> state > >>>>>>> of GIC this would not be possible. > >>>>>> > >>>>>> I am confused. In patch #10, you save the GIC host because the GIC can > >>>>>> be powered-down. Linux is also saving the GIC state. So how the > >>>>>> interrupt can come up if the GIC is powered down? > >>>>>> > >>>>> > >>>>> After Xen (or Linux in the config without Xen) hands over the control > >>>>> to EL3 on suspend (calls system suspend PSCI to EL3), it leaves > >>>>> enabled interrupts that are its wake-up sources. Saving a GIC state > >>>>> only means that its current configuration will be remembered somewhere > >>>>> in data structures, but the configuration is not changed on suspend. > >>>>> Everything that happens with interrupt configuration from this point > >>>>> on is platform specific. Now there are 2 options: 1) EL3 will never > >>>>> allow CPU0 to be powered down and the wake-up interrupt will indeed > >>>>> propagate via GIC; > >>>>> or 2) CPU0 will be powered down and the GIC may be > >>>>> powered down as well, so an external help is needed to deal with > >>>>> wake-up and resume (e.g. in order to react to a wake-up interrupt > >>>>> while the GIC is down, and power up CPU0). This external help is > >>>>> provided by some low-power processor outside of the Cortex-A cluster. > >>>>> > >>>>> So the platform firmware is responsible for properly configuring a > >>>>> wake-up path if GIC goes down. This is commonly handled by EL3 > >>>>> communicating with low-power processor. When the GIC power comes up, > >>>>> the interrupt triggered by a peripheral is still active and the > >>>>> software on Cortex-A cluster should be able to observe it once the GIC > >>>>> state is restored, i.e. interrupts get enabled at GIC. > >>>> > >>>> Thank you for the explanation. Now the question is why can't we reset at > >>>> least the GIC CPU interface? > >>>> > >>>> AFAIU, the guest should restore them in any case. The only things we need > >>>> to > >>>> know is the interrupt was received for a given guest. We can then queue > >>>> it > >>>> and > >>>> wake-up the domain. > >>>> > >>>> This seems to fit with the description on top of gic_dist_save() in Linux > >>>> GICv2 driver. > >>> > >>> Can we rely on all PSCI compliant OSes to restore their own GIC again at > >>> resume? The PSCI spec is not very clear in that regard (at the the > >>> version I am looking at...) I am just asking so that we don't come up > >>> with a solution that only works with Linux. > >> See PSCI 1.1 (DEN0022D) section 6.8. Each level should save its own context > >> because the PSCI implementations is allowed to shutdown the GIC. > > > > Great, in that case we should be able to skip saving some of the GICD > > registers too. We do need to save GICD_ISACTIVER, and GICD_ICFGR, > > but we should be able to skip the others (GICD_ISENABLER, > > GICD_IPRIORITYR, GICD_ITARGETSR). If we do, we still need to > > re-initialize them as we do in gicv2_dist_init. > > You are assuming a domain will handle properly the suspend/resume. I > don't think we can promise that as we call freeze/thaw. Dho! That would break every single guest that has been forcefully suspended :-/ Right, we can't do that (FYI I tested today the series with an unaware domU and it all resumed correctly.) But given that we only suspend/resume GICC_CTLR, GICC_PMR, GICC_BPR of the GICC interface, it should be fine to re-initialize that. We do need to be careful because the current implementation of gicv2_cpu_init touches a bunch of GICD registers that we'll have to save separately for suspend/resume. > Furthermore, we still have to suspend/resume other drivers in Xen. I > think this is a bit painful to have to rely on every drivers to deal > with their interrupts. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |