Thread (7 messages) flat view 7 messages, 3 authors, 2017-01-30

[RFC v2 02/10] KVM: arm/arm64: Move cntvoff to each timer context

From: Jintack Lim <hidden>
Date: 2017-01-30 17:40:56
Also in: kvm, kvmarm, lkml

On Mon, Jan 30, 2017 at 9:51 AM, Marc Zyngier [off-list ref] wrote:
On 30/01/17 14:45, Christoffer Dall wrote:
quoted
On Sun, Jan 29, 2017 at 11:54:05AM +0000, Marc Zyngier wrote:
quoted
On Fri, Jan 27 2017 at 01:04:52 AM, Jintack Lim [off-list ref] wrote:
quoted
Make cntvoff per each timer context. This is helpful to abstract kvm
timer functions to work with timer context without considering timer
types (e.g. physical timer or virtual timer).

This also would pave the way for ever doing adjustments of the cntvoff
on a per-CPU basis if that should ever make sense.

Signed-off-by: Jintack Lim <redacted>
---
 arch/arm/include/asm/kvm_host.h   |  6 +++---
 arch/arm64/include/asm/kvm_host.h |  4 ++--
 include/kvm/arm_arch_timer.h      |  8 +++-----
 virt/kvm/arm/arch_timer.c         | 26 ++++++++++++++++++++------
 virt/kvm/arm/hyp/timer-sr.c       |  3 +--
 5 files changed, 29 insertions(+), 18 deletions(-)
diff --git a/arch/arm/include/asm/kvm_host.h b/arch/arm/include/asm/kvm_host.h
index d5423ab..f5456a9 100644
--- a/arch/arm/include/asm/kvm_host.h
+++ b/arch/arm/include/asm/kvm_host.h
@@ -60,9 +60,6 @@ struct kvm_arch {
    /* The last vcpu id that ran on each physical CPU */
    int __percpu *last_vcpu_ran;

-   /* Timer */
-   struct arch_timer_kvm   timer;
-
    /*
     * Anything that is not used directly from assembly code goes
     * here.
@@ -75,6 +72,9 @@ struct kvm_arch {
    /* Stage-2 page table */
    pgd_t *pgd;

+   /* A lock to synchronize cntvoff among all vtimer context of vcpus */
+   spinlock_t cntvoff_lock;
Is there any condition where we need this to be a spinlock? I would have
thought that a mutex should have been enough, as this should only be
updated on migration or initialization. Not that it matters much in this
case, but I wondered if there is something I'm missing.
I would think the critical section is small enough that a spinlock makes
sense, but what I don't think we need is to add the additional lock.

I think just taking the kvm->lock should be sufficient, which happens to
be a mutex, and while that may be a bit slower to take than the
spinlock, it's not in the critical path so let's just keep things
simple.

Perhaps this what Marc also meant.
That would be the logical conclusion, assuming that we can sleep on this
path.
All right. I'll take kvm->lock there.

Thanks,
Jintack
Thanks,

        M.
--
Jazz is not dead. It just smells funny...
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help