From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1423281AbcFHMyN (ORCPT ); Wed, 8 Jun 2016 08:54:13 -0400 Received: from mail-wm0-f68.google.com ([74.125.82.68]:33545 "EHLO mail-wm0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1161222AbcFHMyM (ORCPT ); Wed, 8 Jun 2016 08:54:12 -0400 Date: Wed, 8 Jun 2016 14:54:06 +0200 From: Ingo Molnar To: Paolo Bonzini Cc: Andy Lutomirski , Thomas Gleixner , "linux-kernel@vger.kernel.org" , Ingo Molnar , "H. Peter Anvin" , X86 ML , Rik van Riel , Peter Zijlstra Subject: Re: [PATCH 1/2] x86/entry: Avoid interrupt flag save and restore Message-ID: <20160608125406.GA11563@gmail.com> References: <1464611414-12379-1-git-send-email-pbonzini@redhat.com> <1464611414-12379-2-git-send-email-pbonzini@redhat.com> <0e02e304-a226-a35c-1109-25a35d4eae67@redhat.com> <20160608121655.GA11355@gmail.com> <2bce50fc-3cf0-eeec-1ea7-4d54550b774a@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <2bce50fc-3cf0-eeec-1ea7-4d54550b774a@redhat.com> User-Agent: Mutt/1.5.24 (2015-08-30) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org * Paolo Bonzini wrote: > > > On 08/06/2016 14:16, Ingo Molnar wrote: > > > The guest ones are not quite as consistent. I can fix that later, > > > there's no reason also to have guest context tracking split between > > > include/linux/context_tracking.h and include/linux/kvm_host.h. > > > > Could we please first do the cleanups before complicating the code and applying > > more substantial changes? > > The further cleanups wouldn't complicate the code. It's just that > guest_enter/guest_exit require IRQs off but don't have __. > > I'm thinking of something like this (untested): > > diff --git a/include/linux/context_tracking.h b/include/linux/context_tracking.h > index d259274238db..c2dc581ddb0e 100644 > --- a/include/linux/context_tracking.h > +++ b/include/linux/context_tracking.h > @@ -84,7 +84,7 @@ static inline void context_tracking_init(void) { } > > > #ifdef CONFIG_VIRT_CPU_ACCOUNTING_GEN > -static inline void guest_enter(void) > +static inline void __guest_enter(void) > { > if (vtime_accounting_cpu_enabled()) > vtime_guest_enter(current); > @@ -93,9 +93,19 @@ static inline void guest_enter(void) > > if (context_tracking_is_enabled()) > __context_tracking_enter(CONTEXT_GUEST); > + > + /* KVM does not hold any references to rcu protected data when it > + * switches CPU into a guest mode. In fact switching to a guest mode Nit, please use the customary (multi-line) comment style: /* * Comment ..... * ...... goes here. */ > + * is very similar to exiting to userspace from rcu point of view. In s/RCU > + * addition CPU may stay in a guest mode for quite a long time (up to > + * one time slice). Lets treat guest mode as quiescent state, just like > + * we do with user-mode execution. > + */ > + if (!context_tracking_cpu_is_enabled()) > + rcu_virt_note_context_switch(smp_processor_id()); > } > > -static inline void guest_exit(void) > +static inline void __guest_exit(void) > +static inline void guest_enter(void) > +{ > + unsigned long flags; > + > + local_irq_save(flags); > + __guest_enter(); > + local_irq_restore(flags); So I believe it would be cleaner to name the irqs-off code paths explicitly: __guest_enter_irqsoff(), and propagate that naming into other parts as well? > /* must be called with irqs disabled */ > static inline void __kvm_guest_exit(void) This way all these random comments about irqs-off requirements would become unnecessary - the code becomes self-documenting. Thanks, Ingo