From: Sean Christopherson <seanjc@google.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: Sean Christopherson <seanjc@google.com>,
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>,
Christian Borntraeger <borntraeger@de.ibm.com>,
Frederic Weisbecker <frederic@kernel.org>
Subject: [PATCH v4 5/8] sched/vtime: Move guest enter/exit vtime accounting to vtime.h
Date: Tue, 4 May 2021 17:27:32 -0700 [thread overview]
Message-ID: <20210505002735.1684165-6-seanjc@google.com> (raw)
In-Reply-To: <20210505002735.1684165-1-seanjc@google.com>
Provide separate helpers for guest enter vtime accounting (in addition to
the existing guest exit helpers), and move all vtime accounting helpers
to vtime.h where the existing #ifdef infrastructure can be leveraged to
better delineate the different types of accounting. This will also allow
future cleanups via deduplication of context tracking code.
Opportunstically delete the vtime_account_kernel() stub now that all
callers are wrapped with CONFIG_VIRT_CPU_ACCOUNTING_NATIVE=y.
No functional change intended.
Signed-off-by: Sean Christopherson <seanjc@google.com>
---
include/linux/context_tracking.h | 17 +-----------
include/linux/vtime.h | 46 +++++++++++++++++++++++++++-----
2 files changed, 41 insertions(+), 22 deletions(-)
diff --git a/include/linux/context_tracking.h b/include/linux/context_tracking.h
index 4f4556232dcf..56c648bdbde8 100644
--- a/include/linux/context_tracking.h
+++ b/include/linux/context_tracking.h
@@ -137,14 +137,6 @@ static __always_inline void context_tracking_guest_exit(void)
__context_tracking_exit(CONTEXT_GUEST);
}
-static __always_inline void vtime_account_guest_exit(void)
-{
- if (vtime_accounting_enabled_this_cpu())
- vtime_guest_exit(current);
- else
- current->flags &= ~PF_VCPU;
-}
-
static __always_inline void guest_exit_irqoff(void)
{
context_tracking_guest_exit();
@@ -163,20 +155,13 @@ static __always_inline void guest_enter_irqoff(void)
* to flush.
*/
instrumentation_begin();
- vtime_account_kernel(current);
- current->flags |= PF_VCPU;
+ vtime_account_guest_enter();
rcu_virt_note_context_switch(smp_processor_id());
instrumentation_end();
}
static __always_inline void context_tracking_guest_exit(void) { }
-static __always_inline void vtime_account_guest_exit(void)
-{
- vtime_account_kernel(current);
- current->flags &= ~PF_VCPU;
-}
-
static __always_inline void guest_exit_irqoff(void)
{
instrumentation_begin();
diff --git a/include/linux/vtime.h b/include/linux/vtime.h
index 6a4317560539..3684487d01e1 100644
--- a/include/linux/vtime.h
+++ b/include/linux/vtime.h
@@ -3,21 +3,18 @@
#define _LINUX_KERNEL_VTIME_H
#include <linux/context_tracking_state.h>
+#include <linux/sched.h>
+
#ifdef CONFIG_VIRT_CPU_ACCOUNTING_NATIVE
#include <asm/vtime.h>
#endif
-
-struct task_struct;
-
/*
* Common vtime APIs
*/
#ifdef CONFIG_VIRT_CPU_ACCOUNTING
extern void vtime_account_kernel(struct task_struct *tsk);
extern void vtime_account_idle(struct task_struct *tsk);
-#else /* !CONFIG_VIRT_CPU_ACCOUNTING */
-static inline void vtime_account_kernel(struct task_struct *tsk) { }
#endif /* !CONFIG_VIRT_CPU_ACCOUNTING */
#ifdef CONFIG_VIRT_CPU_ACCOUNTING_GEN
@@ -55,6 +52,18 @@ static inline void vtime_flush(struct task_struct *tsk) { }
static inline bool vtime_accounting_enabled_this_cpu(void) { return true; }
extern void vtime_task_switch(struct task_struct *prev);
+static __always_inline void vtime_account_guest_enter(void)
+{
+ vtime_account_kernel(current);
+ current->flags |= PF_VCPU;
+}
+
+static __always_inline void vtime_account_guest_exit(void)
+{
+ vtime_account_kernel(current);
+ current->flags &= ~PF_VCPU;
+}
+
#elif defined(CONFIG_VIRT_CPU_ACCOUNTING_GEN)
/*
@@ -86,12 +95,37 @@ static inline void vtime_task_switch(struct task_struct *prev)
vtime_task_switch_generic(prev);
}
+static __always_inline void vtime_account_guest_enter(void)
+{
+ if (vtime_accounting_enabled_this_cpu())
+ vtime_guest_enter(current);
+ else
+ current->flags |= PF_VCPU;
+}
+
+static __always_inline void vtime_account_guest_exit(void)
+{
+ if (vtime_accounting_enabled_this_cpu())
+ vtime_guest_exit(current);
+ else
+ current->flags &= ~PF_VCPU;
+}
+
#else /* !CONFIG_VIRT_CPU_ACCOUNTING */
-static inline bool vtime_accounting_enabled_cpu(int cpu) {return false; }
static inline bool vtime_accounting_enabled_this_cpu(void) { return false; }
static inline void vtime_task_switch(struct task_struct *prev) { }
+static __always_inline void vtime_account_guest_enter(void)
+{
+ current->flags |= PF_VCPU;
+}
+
+static __always_inline void vtime_account_guest_exit(void)
+{
+ current->flags &= ~PF_VCPU;
+}
+
#endif
--
2.31.1.527.g47e6f16901-goog
next prev parent reply other threads:[~2021-05-05 0:28 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-05-05 0:27 [PATCH v4 0/8] KVM: Fix tick-based accounting for x86 guests Sean Christopherson
2021-05-05 0:27 ` [PATCH v4 1/8] context_tracking: Move guest exit context tracking to separate helpers Sean Christopherson
2021-05-06 12:14 ` [tip: x86/urgent] " tip-bot2 for Wanpeng Li
2021-05-05 0:27 ` [PATCH v4 2/8] context_tracking: Move guest exit vtime accounting " Sean Christopherson
2021-05-06 12:14 ` [tip: x86/urgent] " tip-bot2 for Wanpeng Li
2021-05-05 0:27 ` [PATCH v4 3/8] KVM: x86: Defer vtime accounting 'til after IRQ handling Sean Christopherson
2021-05-05 20:14 ` Thomas Gleixner
2021-05-06 12:14 ` [tip: x86/urgent] " tip-bot2 for Wanpeng Li
2021-05-05 0:27 ` [PATCH v4 4/8] sched/vtime: Move vtime accounting external declarations above inlines Sean Christopherson
2021-05-06 12:14 ` [tip: x86/urgent] " tip-bot2 for Sean Christopherson
2021-05-05 0:27 ` Sean Christopherson [this message]
2021-05-06 12:14 ` [tip: x86/urgent] sched/vtime: Move guest enter/exit vtime accounting to vtime.h tip-bot2 for Sean Christopherson
2021-05-05 0:27 ` [PATCH v4 6/8] context_tracking: Consolidate guest enter/exit wrappers Sean Christopherson
2021-05-06 12:14 ` [tip: x86/urgent] " tip-bot2 for Sean Christopherson
2021-05-05 0:27 ` [PATCH v4 7/8] context_tracking: KVM: Move guest enter/exit wrappers to KVM's domain Sean Christopherson
2021-05-06 12:14 ` [tip: x86/urgent] " tip-bot2 for Sean Christopherson
2021-05-05 0:27 ` [PATCH v4 8/8] KVM: x86: Consolidate guest enter/exit logic to common helpers Sean Christopherson
2021-05-06 12:14 ` [tip: x86/urgent] " tip-bot2 for Sean Christopherson
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=20210505002735.1684165-6-seanjc@google.com \
--to=seanjc@google.com \
--cc=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=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.