All of lore.kernel.org
 help / color / mirror / Atom feed
From: Christian Borntraeger <borntraeger@de.ibm.com>
To: Sean Christopherson <seanjc@google.com>,
	Paolo Bonzini <pbonzini@redhat.com>
Cc: Vitaly Kuznetsov <vkuznets@redhat.com>,
	Wanpeng Li <wanpengli@tencent.com>,
	Jim Mattson <jmattson@google.com>, Joerg Roedel <joro@8bytes.org>,
	kvm@vger.kernel.org, linux-kernel@vger.kernel.org,
	Thomas Gleixner <tglx@linutronix.de>,
	Michael Tokarev <mjt@tls.msk.ru>,
	Frederic Weisbecker <frederic@kernel.org>
Subject: Re: [PATCH v3 7/9] context_tracking: KVM: Move guest enter/exit wrappers to KVM's domain
Date: Wed, 21 Apr 2021 09:10:22 +0200	[thread overview]
Message-ID: <b89a1ed1-bbdc-db92-769e-4179e2e06b7a@de.ibm.com> (raw)
In-Reply-To: <20210415222106.1643837-8-seanjc@google.com>



On 16.04.21 00:21, Sean Christopherson wrote:
> Move the guest enter/exit wrappers to kvm_host.h so that KVM can manage
> its context tracking vs. vtime accounting without bleeding too many KVM
> details into the context tracking code.
> 
> No functional change intended.

Funny story. This used to be in kvm code and it was moved to context_tracking by
commit 521921bad1192fb1b8f9b6a5aa673635848b8b5f
     kvm: Move guest entry/exit APIs to context_tracking

I think with all your cleanup it can now move back as it no longer deals with
context tracking.


> 
> Signed-off-by: Sean Christopherson <seanjc@google.com>
> ---
>   include/linux/context_tracking.h | 45 --------------------------------
>   include/linux/kvm_host.h         | 45 ++++++++++++++++++++++++++++++++
>   2 files changed, 45 insertions(+), 45 deletions(-)
> 
> diff --git a/include/linux/context_tracking.h b/include/linux/context_tracking.h
> index e172a547b2d0..d4dc9c4d79aa 100644
> --- a/include/linux/context_tracking.h
> +++ b/include/linux/context_tracking.h
> @@ -118,49 +118,4 @@ extern void context_tracking_init(void);
>   static inline void context_tracking_init(void) { }
>   #endif /* CONFIG_CONTEXT_TRACKING_FORCE */
>   
> -/* must be called with irqs disabled */
> -static __always_inline void guest_enter_irqoff(void)
> -{
> -	/*
> -	 * This is running in ioctl context so its safe to assume that it's the
> -	 * stime pending cputime to flush.
> -	 */
> -	instrumentation_begin();
> -	vtime_account_guest_enter();
> -	instrumentation_end();
> -
> -	/*
> -	 * 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
> -	 * is very similar to exiting to userspace from rcu point of view. In
> -	 * 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_guest_enter_irqoff()) {
> -		instrumentation_begin();
> -		rcu_virt_note_context_switch(smp_processor_id());
> -		instrumentation_end();
> -	}
> -}
> -
> -static __always_inline void guest_exit_irqoff(void)
> -{
> -	context_tracking_guest_exit_irqoff();
> -
> -	instrumentation_begin();
> -	/* Flush the guest cputime we spent on the guest */
> -	vtime_account_guest_exit();
> -	instrumentation_end();
> -}
> -
> -static inline void guest_exit(void)
> -{
> -	unsigned long flags;
> -
> -	local_irq_save(flags);
> -	guest_exit_irqoff();
> -	local_irq_restore(flags);
> -}
> -
>   #endif
> diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
> index 3b06d12ec37e..444d5f0225cb 100644
> --- a/include/linux/kvm_host.h
> +++ b/include/linux/kvm_host.h
> @@ -332,6 +332,51 @@ struct kvm_vcpu {
>   	struct kvm_dirty_ring dirty_ring;
>   };
>   
> +/* must be called with irqs disabled */
> +static __always_inline void guest_enter_irqoff(void)
> +{
> +	/*
> +	 * This is running in ioctl context so its safe to assume that it's the
> +	 * stime pending cputime to flush.
> +	 */
> +	instrumentation_begin();
> +	vtime_account_guest_enter();
> +	instrumentation_end();
> +
> +	/*
> +	 * 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
> +	 * is very similar to exiting to userspace from rcu point of view. In
> +	 * 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_guest_enter_irqoff()) {
> +		instrumentation_begin();
> +		rcu_virt_note_context_switch(smp_processor_id());
> +		instrumentation_end();
> +	}
> +}
> +
> +static __always_inline void guest_exit_irqoff(void)
> +{
> +	context_tracking_guest_exit_irqoff();
> +
> +	instrumentation_begin();
> +	/* Flush the guest cputime we spent on the guest */
> +	vtime_account_guest_exit();
> +	instrumentation_end();
> +}
> +
> +static inline void guest_exit(void)
> +{
> +	unsigned long flags;
> +
> +	local_irq_save(flags);
> +	guest_exit_irqoff();
> +	local_irq_restore(flags);
> +}
> +
>   static inline int kvm_vcpu_exiting_guest_mode(struct kvm_vcpu *vcpu)
>   {
>   	/*
> 

  reply	other threads:[~2021-04-21  7:11 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-15 22:20 [PATCH v3 0/9] KVM: Fix tick-based accounting for x86 guests Sean Christopherson
2021-04-15 22:20 ` [PATCH v3 1/9] context_tracking: Move guest exit context tracking to separate helpers Sean Christopherson
2021-04-20 18:48   ` Christian Borntraeger
2021-04-21 10:57   ` Frederic Weisbecker
2021-04-15 22:20 ` [PATCH v3 2/9] context_tracking: Move guest exit vtime accounting " Sean Christopherson
2021-04-20 18:48   ` Christian Borntraeger
2021-04-15 22:21 ` [PATCH v3 3/9] KVM: x86: Defer tick-based accounting 'til after IRQ handling Sean Christopherson
2021-04-20 23:14   ` Frederic Weisbecker
2021-04-20 23:26     ` Sean Christopherson
2021-04-21 10:11       ` Frederic Weisbecker
2021-04-21 12:19       ` Frederic Weisbecker
2021-04-28 22:38         ` Sean Christopherson
2021-04-21 10:07   ` Frederic Weisbecker
2021-04-15 22:21 ` [PATCH v3 4/9] sched/vtime: Move vtime accounting external declarations above inlines Sean Christopherson
2021-04-21  7:02   ` Christian Borntraeger
2021-04-15 22:21 ` [PATCH v3 5/9] sched/vtime: Move guest enter/exit vtime accounting to vtime.h Sean Christopherson
2021-04-15 22:21 ` [PATCH v3 6/9] context_tracking: Consolidate guest enter/exit wrappers Sean Christopherson
2021-04-15 22:21 ` [PATCH v3 7/9] context_tracking: KVM: Move guest enter/exit wrappers to KVM's domain Sean Christopherson
2021-04-21  7:10   ` Christian Borntraeger [this message]
2021-04-15 22:21 ` [PATCH v3 8/9] KVM: x86: Consolidate guest enter/exit logic to common helpers Sean Christopherson
2021-04-15 22:21 ` [PATCH v3 9/9] KVM: Move instrumentation-safe annotations for enter/exit to x86 code Sean Christopherson
2021-04-21  8:09   ` Christian Borntraeger
2021-04-22 14:38     ` Sven Schnelle
2021-04-23  9:32       ` Vasily Gorbik
2021-04-20 23:33 ` [PATCH v3 0/9] KVM: Fix tick-based accounting for x86 guests Frederic Weisbecker

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=b89a1ed1-bbdc-db92-769e-4179e2e06b7a@de.ibm.com \
    --to=borntraeger@de.ibm.com \
    --cc=frederic@kernel.org \
    --cc=jmattson@google.com \
    --cc=joro@8bytes.org \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mjt@tls.msk.ru \
    --cc=pbonzini@redhat.com \
    --cc=seanjc@google.com \
    --cc=tglx@linutronix.de \
    --cc=vkuznets@redhat.com \
    --cc=wanpengli@tencent.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.