From: Paolo Bonzini <pbonzini@redhat.com>
To: Hikaru Nishida <hikalium@chromium.org>,
linux-kernel@vger.kernel.org, dme@dme.org, tglx@linutronix.de,
mlevitsk@redhat.com
Cc: suleiman@google.com, Borislav Petkov <bp@alien8.de>,
"H. Peter Anvin" <hpa@zytor.com>, Ingo Molnar <mingo@redhat.com>,
Jim Mattson <jmattson@google.com>, Joerg Roedel <joro@8bytes.org>,
John Stultz <john.stultz@linaro.org>,
Sean Christopherson <seanjc@google.com>,
Stephen Boyd <sboyd@kernel.org>,
Vitaly Kuznetsov <vkuznets@redhat.com>,
Wanpeng Li <wanpengli@tencent.com>,
kvm@vger.kernel.org, x86@kernel.org
Subject: Re: [v2 PATCH 3/4] x86/kvm: Add host side support for virtual suspend time injection
Date: Sat, 14 Aug 2021 09:22:18 +0200 [thread overview]
Message-ID: <2ec642dd-dde6-bee6-3de3-0fa78d288995@redhat.com> (raw)
In-Reply-To: <20210806190607.v2.3.Ib0cb8ecae99f0ccd0e2814b310adba00b9e81d94@changeid>
On 06/08/21 12:07, Hikaru Nishida wrote:
> +#if defined(CONFIG_KVM_VIRT_SUSPEND_TIMING) || \
> + defined(CONFIG_KVM_VIRT_SUSPEND_TIMING_GUEST)
> +#define VIRT_SUSPEND_TIMING_VECTOR 0xec
> +#endif
No need to use a new vector. You can rename the existing
MSR_KVM_ASYNC_PF_INT to MSR_KVM_HYPERVISOR_CALLBACK_INT or something
like that, and add the code to sysvec_kvm_asyncpf_interrupt.
> +static void kvm_make_suspend_time_interrupt(struct kvm_vcpu *vcpu)
> +{
> + kvm_queue_interrupt(vcpu, VIRT_SUSPEND_TIMING_VECTOR, false);
> + kvm_make_request(KVM_REQ_EVENT, vcpu);
> +}
Use kvm_apic_set_irq which will inject the interrupt as soon as
possible, so you do not even need to check
kvm_vcpu_ready_for_interrupt_injection.
> +#ifdef CONFIG_KVM_VIRT_SUSPEND_TIMING
> + if (kvm->suspend_injection_requested &&
> + kvm_vcpu_ready_for_interrupt_injection(vcpu)) {
> + kvm_write_suspend_time(kvm);
> + kvm_make_suspend_time_interrupt(vcpu);
> + kvm->suspend_injection_requested = false;
> + }
> +#endif
Do not read variables in vcpu_run; There is KVM_REQ_* if you need to do
work in the vCPU run loop.
> + mutex_lock(&kvm_lock);
> + list_for_each_entry(kvm, &vm_list, vm_list) {
> + if (!(kvm->arch.msr_suspend_time & KVM_MSR_ENABLED))
> + continue;
> +
> + kvm_for_each_vcpu(i, vcpu, kvm)
> + vcpu->arch.tsc_offset_adjustment -= adj;
> +
> + /*
> + * Move the offset of kvm_clock here as if it is stopped
> + * during the suspension.
> + */
> + kvm->arch.kvmclock_offset -= suspend_time_ns;
> +
> + /* suspend_time is accumulated per VM. */
> + kvm->suspend_time_ns += suspend_time_ns;
> + kvm->suspend_injection_requested = true;
> + /*
> + * This adjustment will be reflected to the struct provided
> + * from the guest via MSR_KVM_HOST_SUSPEND_TIME before
> + * the notification interrupt is injected.
> + */
> + }
> + mutex_unlock(&kvm_lock);
> +}
As pointed out by Thomas, this should be a work item.
Paolo
next prev parent reply other threads:[~2021-08-14 7:22 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-08-06 10:07 [v2 PATCH 0/4] x86/kvm: Virtual suspend time injection support Hikaru Nishida
2021-08-06 10:07 ` [v2 PATCH 1/4] x86/kvm: Reserve KVM_FEATURE_HOST_SUSPEND_TIME and MSR_KVM_HOST_SUSPEND_TIME Hikaru Nishida
2021-08-06 10:07 ` [v2 PATCH 2/4] x86/kvm: Add definitions for virtual suspend time injection Hikaru Nishida
2021-08-10 15:14 ` Thomas Gleixner
2021-08-13 18:36 ` Guenter Roeck
2021-08-06 10:07 ` [v2 PATCH 3/4] x86/kvm: Add host side support " Hikaru Nishida
2021-08-10 15:21 ` Thomas Gleixner
2021-08-10 15:24 ` Thomas Gleixner
2021-08-14 7:22 ` Paolo Bonzini [this message]
2021-08-18 9:32 ` Vitaly Kuznetsov
2021-08-18 20:49 ` Paolo Bonzini
2021-08-06 10:07 ` [v2 PATCH 4/4] x86/kvm: Add guest " Hikaru Nishida
2021-08-10 15:48 ` Thomas Gleixner
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=2ec642dd-dde6-bee6-3de3-0fa78d288995@redhat.com \
--to=pbonzini@redhat.com \
--cc=bp@alien8.de \
--cc=dme@dme.org \
--cc=hikalium@chromium.org \
--cc=hpa@zytor.com \
--cc=jmattson@google.com \
--cc=john.stultz@linaro.org \
--cc=joro@8bytes.org \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=mlevitsk@redhat.com \
--cc=sboyd@kernel.org \
--cc=seanjc@google.com \
--cc=suleiman@google.com \
--cc=tglx@linutronix.de \
--cc=vkuznets@redhat.com \
--cc=wanpengli@tencent.com \
--cc=x86@kernel.org \
/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.