On Thu, 13 Jan 2022 11:01:30 +0000, Mark Rutland <mark.rutland@xxxxxxx> wrote: > > On Tue, Jan 11, 2022 at 05:54:59PM +0000, Marc Zyngier wrote: > > Hi Mark, > > > > On Tue, 11 Jan 2022 15:35:35 +0000, > > Mark Rutland <mark.rutland@xxxxxxx> wrote: [...] > > > +/* > > > + * Enter guest context and enter an RCU extended quiescent state. > > > + * > > > + * This should be the last thing called before entering the guest, and must be > > > + * called after any potential use of RCU (including any potentially > > > + * instrumented code). > > > > nit: "the last thing called" is terribly ambiguous. Any architecture > > obviously calls a ****load of stuff after this point. Should this be > > 'the last thing involving RCU' instead? > > I agree this is unclear and I struggled to fing good wording for this. Is the > following any better? > > /* > * Enter guest context and enter an RCU extended quiescent state. > * > * Between guest_context_enter_irqoff() and guest_context_exit_irqoff() it is > * unsafe to use any code which may directly or indirectly use RCU, tracing > * (including IRQ flag tracing), or lockdep. All code in this period must be > * non-instrumentable. > */ > > If that's good I can add similar to guest_context_exit_irqoff(). Yes, that's much clearer, thanks. > > [...] > > > > +/** > > > + * exit_to_guest_mode - Fixup state when exiting to guest mode > > > + * > > > + * This is analagous to exit_to_user_mode(), and ensures we perform the > > > + * following in order: > > > + * > > > + * 1) Trace interrupts on state > > > + * 2) Invoke context tracking if enabled to adjust RCU state > > > + * 3) Tell lockdep that interrupts are enabled > > > > nit: or rather, are about to be enabled? Certainly on arm64, the > > enable happens much later, right at the point where we enter the guest > > for real. > > True; I'd cribbed the wording from the comment block above exit_to_user_mode(), > but I stripped the context that made that clear. I'll make that: > > /** > * exit_to_guest_mode - Fixup state when exiting to guest mode > * > * Entry to a guest will enable interrupts, but the kernel state is > * interrupts disabled when this is invoked. Also tell RCU about it. > * > * 1) Trace interrupts on state > * 2) Invoke context tracking if enabled to adjust RCU state > * 3) Tell lockdep that interrupts are enabled > * > * Invoked from architecture specific code before entering a guest. > * Must be called with interrupts disabled and the caller must be > * non-instrumentable. > * The caller has to invoke guest_timing_enter_irqoff() before this. > * > * Note: this is analagous to exit_to_user_mode(). nit: analogous > */ > > ... with likewise for enter_from_guest_mode(), if that's clear enough? Yes, that's great. Thanks again, M. -- Without deviation from the norm, progress is not possible.