From: Krish Sadhukhan <krish.sadhukhan@oracle.com>
To: Ashish Kalra <Ashish.Kalra@amd.com>, pbonzini@redhat.com
Cc: tglx@linutronix.de, mingo@redhat.com, hpa@zytor.com,
joro@8bytes.org, bp@suse.de, thomas.lendacky@amd.com,
x86@kernel.org, kvm@vger.kernel.org,
linux-kernel@vger.kernel.org, rientjes@google.com,
srutherford@google.com, luto@kernel.org, brijesh.singh@amd.com
Subject: Re: [PATCH v6 13/14] KVM: x86: Introduce new KVM_FEATURE_SEV_LIVE_MIGRATION feature & Custom MSR.
Date: Fri, 3 Apr 2020 16:46:30 -0700 [thread overview]
Message-ID: <f009abf6-0a19-6d82-393c-8a431ce541cb@oracle.com> (raw)
In-Reply-To: <21b2119906f4cce10b4133107ece3dab0957c07c.1585548051.git.ashish.kalra@amd.com>
On 3/29/20 11:23 PM, Ashish Kalra wrote:
> From: Ashish Kalra <ashish.kalra@amd.com>
>
> Add new KVM_FEATURE_SEV_LIVE_MIGRATION feature for guest to check
> for host-side support for SEV live migration. Also add a new custom
> MSR_KVM_SEV_LIVE_MIG_EN for guest to enable the SEV live migration
> feature.
>
> Also, ensure that _bss_decrypted section is marked as decrypted in the
> page encryption bitmap.
>
> Signed-off-by: Ashish Kalra <ashish.kalra@amd.com>
> ---
> Documentation/virt/kvm/cpuid.rst | 4 ++++
> Documentation/virt/kvm/msr.rst | 10 ++++++++++
> arch/x86/include/asm/kvm_host.h | 3 +++
> arch/x86/include/uapi/asm/kvm_para.h | 5 +++++
> arch/x86/kernel/kvm.c | 4 ++++
> arch/x86/kvm/cpuid.c | 3 ++-
> arch/x86/kvm/svm.c | 5 +++++
> arch/x86/kvm/x86.c | 7 +++++++
> arch/x86/mm/mem_encrypt.c | 14 +++++++++++++-
> 9 files changed, 53 insertions(+), 2 deletions(-)
>
> diff --git a/Documentation/virt/kvm/cpuid.rst b/Documentation/virt/kvm/cpuid.rst
> index 01b081f6e7ea..fcb191bb3016 100644
> --- a/Documentation/virt/kvm/cpuid.rst
> +++ b/Documentation/virt/kvm/cpuid.rst
> @@ -86,6 +86,10 @@ KVM_FEATURE_PV_SCHED_YIELD 13 guest checks this feature bit
> before using paravirtualized
> sched yield.
>
> +KVM_FEATURE_SEV_LIVE_MIGRATION 14 guest checks this feature bit
> + before enabling SEV live
> + migration feature.
> +
> KVM_FEATURE_CLOCSOURCE_STABLE_BIT 24 host will warn if no guest-side
> per-cpu warps are expeced in
> kvmclock
> diff --git a/Documentation/virt/kvm/msr.rst b/Documentation/virt/kvm/msr.rst
> index 33892036672d..7cd7786bbb03 100644
> --- a/Documentation/virt/kvm/msr.rst
> +++ b/Documentation/virt/kvm/msr.rst
> @@ -319,3 +319,13 @@ data:
>
> KVM guests can request the host not to poll on HLT, for example if
> they are performing polling themselves.
> +
> +MSR_KVM_SEV_LIVE_MIG_EN:
> + 0x4b564d06
> +
> + Control SEV Live Migration features.
> +
> +data:
> + Bit 0 enables (1) or disables (0) host-side SEV Live Migration feature.
> + Bit 1 enables (1) or disables (0) support for SEV Live Migration extensions.
> + All other bits are reserved.
> diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
> index a96ef6338cd2..ad5faaed43c0 100644
> --- a/arch/x86/include/asm/kvm_host.h
> +++ b/arch/x86/include/asm/kvm_host.h
> @@ -780,6 +780,9 @@ struct kvm_vcpu_arch {
>
> u64 msr_kvm_poll_control;
>
> + /* SEV Live Migration MSR (AMD only) */
> + u64 msr_kvm_sev_live_migration_flag;
> +
> /*
> * Indicates the guest is trying to write a gfn that contains one or
> * more of the PTEs used to translate the write itself, i.e. the access
> diff --git a/arch/x86/include/uapi/asm/kvm_para.h b/arch/x86/include/uapi/asm/kvm_para.h
> index 2a8e0b6b9805..d9d4953b42ad 100644
> --- a/arch/x86/include/uapi/asm/kvm_para.h
> +++ b/arch/x86/include/uapi/asm/kvm_para.h
> @@ -31,6 +31,7 @@
> #define KVM_FEATURE_PV_SEND_IPI 11
> #define KVM_FEATURE_POLL_CONTROL 12
> #define KVM_FEATURE_PV_SCHED_YIELD 13
> +#define KVM_FEATURE_SEV_LIVE_MIGRATION 14
>
> #define KVM_HINTS_REALTIME 0
>
> @@ -50,6 +51,7 @@
> #define MSR_KVM_STEAL_TIME 0x4b564d03
> #define MSR_KVM_PV_EOI_EN 0x4b564d04
> #define MSR_KVM_POLL_CONTROL 0x4b564d05
> +#define MSR_KVM_SEV_LIVE_MIG_EN 0x4b564d06
>
> struct kvm_steal_time {
> __u64 steal;
> @@ -122,4 +124,7 @@ struct kvm_vcpu_pv_apf_data {
> #define KVM_PV_EOI_ENABLED KVM_PV_EOI_MASK
> #define KVM_PV_EOI_DISABLED 0x0
>
> +#define KVM_SEV_LIVE_MIGRATION_ENABLED (1 << 0)
> +#define KVM_SEV_LIVE_MIGRATION_EXTENSIONS_SUPPORTED (1 << 1)
> +
> #endif /* _UAPI_ASM_X86_KVM_PARA_H */
> diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c
> index 6efe0410fb72..8fcee0b45231 100644
> --- a/arch/x86/kernel/kvm.c
> +++ b/arch/x86/kernel/kvm.c
> @@ -418,6 +418,10 @@ static void __init sev_map_percpu_data(void)
> if (!sev_active())
> return;
>
> + if (kvm_para_has_feature(KVM_FEATURE_SEV_LIVE_MIGRATION)) {
> + wrmsrl(MSR_KVM_SEV_LIVE_MIG_EN, KVM_SEV_LIVE_MIGRATION_ENABLED);
> + }
> +
> for_each_possible_cpu(cpu) {
> __set_percpu_decrypted(&per_cpu(apf_reason, cpu), sizeof(apf_reason));
> __set_percpu_decrypted(&per_cpu(steal_time, cpu), sizeof(steal_time));
> diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c
> index b1c469446b07..74c8b2a7270c 100644
> --- a/arch/x86/kvm/cpuid.c
> +++ b/arch/x86/kvm/cpuid.c
> @@ -716,7 +716,8 @@ static inline int __do_cpuid_func(struct kvm_cpuid_entry2 *entry, u32 function,
> (1 << KVM_FEATURE_ASYNC_PF_VMEXIT) |
> (1 << KVM_FEATURE_PV_SEND_IPI) |
> (1 << KVM_FEATURE_POLL_CONTROL) |
> - (1 << KVM_FEATURE_PV_SCHED_YIELD);
> + (1 << KVM_FEATURE_PV_SCHED_YIELD) |
> + (1 << KVM_FEATURE_SEV_LIVE_MIGRATION);
>
> if (sched_info_on())
> entry->eax |= (1 << KVM_FEATURE_STEAL_TIME);
> diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
> index c99b0207a443..60ddc242a133 100644
> --- a/arch/x86/kvm/svm.c
> +++ b/arch/x86/kvm/svm.c
> @@ -7632,6 +7632,7 @@ static int svm_page_enc_status_hc(struct kvm *kvm, unsigned long gpa,
> unsigned long npages, unsigned long enc)
> {
> struct kvm_sev_info *sev = &to_kvm_svm(kvm)->sev_info;
> + struct kvm_vcpu *vcpu = kvm->vcpus[0];
> kvm_pfn_t pfn_start, pfn_end;
> gfn_t gfn_start, gfn_end;
> int ret;
> @@ -7639,6 +7640,10 @@ static int svm_page_enc_status_hc(struct kvm *kvm, unsigned long gpa,
> if (!sev_guest(kvm))
> return -EINVAL;
>
> + if (!(vcpu->arch.msr_kvm_sev_live_migration_flag &
> + KVM_SEV_LIVE_MIGRATION_ENABLED))
> + return -ENOTTY;
> +
> if (!npages)
> return 0;
>
> diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
> index 2127ed937f53..82867b8798f8 100644
> --- a/arch/x86/kvm/x86.c
> +++ b/arch/x86/kvm/x86.c
> @@ -2880,6 +2880,10 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
> vcpu->arch.msr_kvm_poll_control = data;
> break;
>
> + case MSR_KVM_SEV_LIVE_MIG_EN:
> + vcpu->arch.msr_kvm_sev_live_migration_flag = data;
> + break;
> +
> case MSR_IA32_MCG_CTL:
> case MSR_IA32_MCG_STATUS:
> case MSR_IA32_MC0_CTL ... MSR_IA32_MCx_CTL(KVM_MAX_MCE_BANKS) - 1:
> @@ -3126,6 +3130,9 @@ int kvm_get_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
> case MSR_KVM_POLL_CONTROL:
> msr_info->data = vcpu->arch.msr_kvm_poll_control;
> break;
> + case MSR_KVM_SEV_LIVE_MIG_EN:
> + msr_info->data = vcpu->arch.msr_kvm_sev_live_migration_flag;
> + break;
> case MSR_IA32_P5_MC_ADDR:
> case MSR_IA32_P5_MC_TYPE:
> case MSR_IA32_MCG_CAP:
> diff --git a/arch/x86/mm/mem_encrypt.c b/arch/x86/mm/mem_encrypt.c
> index c9800fa811f6..f6a841494845 100644
> --- a/arch/x86/mm/mem_encrypt.c
> +++ b/arch/x86/mm/mem_encrypt.c
> @@ -502,8 +502,20 @@ void __init mem_encrypt_init(void)
> * With SEV, we need to make a hypercall when page encryption state is
> * changed.
> */
> - if (sev_active())
> + if (sev_active()) {
> + unsigned long nr_pages;
> +
> pv_ops.mmu.page_encryption_changed = set_memory_enc_dec_hypercall;
> +
> + /*
> + * Ensure that _bss_decrypted section is marked as decrypted in the
> + * page encryption bitmap.
> + */
> + nr_pages = DIV_ROUND_UP(__end_bss_decrypted - __start_bss_decrypted,
> + PAGE_SIZE);
> + set_memory_enc_dec_hypercall((unsigned long)__start_bss_decrypted,
> + nr_pages, 0);
> + }
> #endif
>
> pr_info("AMD %s active\n",
Reviewed-by: Krish Sadhukhan <krish.sadhukhan@oracle.com>
next prev parent reply other threads:[~2020-04-03 23:47 UTC|newest]
Thread overview: 107+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-30 6:19 [PATCH v6 00/14] Add AMD SEV guest live migration support Ashish Kalra
2020-03-30 6:19 ` [PATCH v6 01/14] KVM: SVM: Add KVM_SEV SEND_START command Ashish Kalra
2020-04-02 6:27 ` Venu Busireddy
2020-04-02 12:59 ` Brijesh Singh
2020-04-02 16:37 ` Venu Busireddy
2020-04-02 18:04 ` Brijesh Singh
2020-04-02 18:57 ` Venu Busireddy
2020-04-02 19:17 ` Brijesh Singh
2020-04-02 19:43 ` Venu Busireddy
2020-04-02 20:04 ` Brijesh Singh
2020-04-02 20:19 ` Venu Busireddy
2020-04-02 17:51 ` Krish Sadhukhan
2020-04-02 18:38 ` Brijesh Singh
2020-03-30 6:20 ` [PATCH v6 02/14] KVM: SVM: Add KVM_SEND_UPDATE_DATA command Ashish Kalra
2020-04-02 17:55 ` Venu Busireddy
2020-04-02 20:13 ` Krish Sadhukhan
2020-03-30 6:20 ` [PATCH v6 03/14] KVM: SVM: Add KVM_SEV_SEND_FINISH command Ashish Kalra
2020-04-02 18:17 ` Venu Busireddy
2020-04-02 20:15 ` Krish Sadhukhan
2020-03-30 6:21 ` [PATCH v6 04/14] KVM: SVM: Add support for KVM_SEV_RECEIVE_START command Ashish Kalra
2020-04-02 21:35 ` Venu Busireddy
2020-04-02 22:09 ` Krish Sadhukhan
2020-03-30 6:21 ` [PATCH v6 05/14] KVM: SVM: Add KVM_SEV_RECEIVE_UPDATE_DATA command Ashish Kalra
2020-04-02 22:25 ` Krish Sadhukhan
2020-04-02 22:29 ` Venu Busireddy
2020-04-07 0:49 ` Steve Rutherford
2020-03-30 6:21 ` [PATCH v6 06/14] KVM: SVM: Add KVM_SEV_RECEIVE_FINISH command Ashish Kalra
2020-04-02 22:24 ` Venu Busireddy
2020-04-02 22:27 ` Krish Sadhukhan
2020-04-07 0:57 ` Steve Rutherford
2020-03-30 6:21 ` [PATCH v6 07/14] KVM: x86: Add AMD SEV specific Hypercall3 Ashish Kalra
2020-04-02 22:36 ` Venu Busireddy
2020-04-02 23:54 ` Krish Sadhukhan
2020-04-07 1:22 ` Steve Rutherford
2020-03-30 6:22 ` [PATCH v6 08/14] KVM: X86: Introduce KVM_HC_PAGE_ENC_STATUS hypercall Ashish Kalra
2020-04-03 0:00 ` Venu Busireddy
2020-04-03 1:31 ` Krish Sadhukhan
2020-04-03 1:57 ` Ashish Kalra
2020-04-03 2:58 ` Ashish Kalra
2020-04-06 22:27 ` Krish Sadhukhan
2020-04-07 2:17 ` Steve Rutherford
2020-04-07 5:27 ` Ashish Kalra
2020-04-08 0:01 ` Steve Rutherford
2020-04-08 0:29 ` Brijesh Singh
2020-04-08 0:35 ` Steve Rutherford
2020-04-08 1:17 ` Ashish Kalra
2020-04-08 1:38 ` Steve Rutherford
2020-04-08 2:34 ` Brijesh Singh
2020-04-08 3:18 ` Ashish Kalra
2020-04-09 16:18 ` Ashish Kalra
2020-04-09 20:41 ` Steve Rutherford
2020-03-30 6:22 ` [PATCH v6 09/14] KVM: x86: Introduce KVM_GET_PAGE_ENC_BITMAP ioctl Ashish Kalra
2020-04-03 18:30 ` Venu Busireddy
2020-04-03 20:18 ` Krish Sadhukhan
2020-04-03 20:47 ` Ashish Kalra
2020-04-06 22:07 ` Krish Sadhukhan
2020-04-03 20:55 ` Venu Busireddy
2020-04-03 21:01 ` Ashish Kalra
2020-03-30 6:22 ` [PATCH v6 10/14] mm: x86: Invoke hypercall when page encryption status is changed Ashish Kalra
2020-04-03 21:07 ` Krish Sadhukhan
2020-04-03 21:30 ` Ashish Kalra
2020-04-03 21:36 ` Venu Busireddy
2020-03-30 6:22 ` [PATCH v6 11/14] KVM: x86: Introduce KVM_SET_PAGE_ENC_BITMAP ioctl Ashish Kalra
2020-04-03 21:10 ` Krish Sadhukhan
2020-04-03 21:46 ` Venu Busireddy
2020-04-08 0:26 ` Steve Rutherford
2020-04-08 1:48 ` Ashish Kalra
2020-04-10 0:06 ` Steve Rutherford
2020-04-10 1:23 ` Ashish Kalra
2020-04-10 18:08 ` Steve Rutherford
2020-03-30 6:23 ` [PATCH v6 12/14] KVM: x86: Introduce KVM_PAGE_ENC_BITMAP_RESET ioctl Ashish Kalra
2020-04-03 21:14 ` Krish Sadhukhan
2020-04-03 21:45 ` Ashish Kalra
2020-04-06 18:52 ` Krish Sadhukhan
2020-04-08 1:25 ` Steve Rutherford
2020-04-08 1:52 ` Ashish Kalra
2020-04-10 0:59 ` Steve Rutherford
2020-04-10 1:34 ` Ashish Kalra
2020-04-10 18:14 ` Steve Rutherford
2020-04-10 20:16 ` Steve Rutherford
2020-04-10 20:18 ` Steve Rutherford
2020-04-10 20:55 ` Kalra, Ashish
2020-04-10 21:42 ` Brijesh Singh
2020-04-10 21:46 ` Sean Christopherson
2020-04-10 21:58 ` Brijesh Singh
2020-04-10 22:02 ` Brijesh Singh
2020-04-11 0:35 ` Ashish Kalra
2020-04-03 22:01 ` Venu Busireddy
2020-03-30 6:23 ` [PATCH v6 13/14] KVM: x86: Introduce new KVM_FEATURE_SEV_LIVE_MIGRATION feature & Custom MSR Ashish Kalra
2020-03-30 15:52 ` Brijesh Singh
2020-03-30 16:42 ` Ashish Kalra
[not found] ` <20200330162730.GA21567@ashkalra_ubuntu_server>
[not found] ` <1de5e95f-4485-f2ff-aba8-aa8b15564796@amd.com>
[not found] ` <20200331171336.GA24050@ashkalra_ubuntu_server>
[not found] ` <20200401070931.GA8562@ashkalra_ubuntu_server>
2020-04-02 23:29 ` Ashish Kalra
2020-04-03 23:46 ` Krish Sadhukhan [this message]
2020-03-30 6:23 ` [PATCH v6 14/14] KVM: x86: Add kexec support for SEV Live Migration Ashish Kalra
2020-03-30 16:00 ` Brijesh Singh
2020-03-30 16:45 ` Ashish Kalra
2020-03-31 14:26 ` Brijesh Singh
2020-04-02 23:34 ` Ashish Kalra
2020-04-03 12:57 ` Dave Young
2020-04-04 0:55 ` Krish Sadhukhan
2020-04-04 21:57 ` Ashish Kalra
2020-04-06 18:37 ` Krish Sadhukhan
2020-03-30 17:24 ` [PATCH v6 00/14] Add AMD SEV guest live migration support Venu Busireddy
2020-03-30 18:28 ` Ashish Kalra
2020-03-30 19:13 ` Venu Busireddy
2020-03-30 21:52 ` Ashish Kalra
2020-03-31 14:42 ` Venu Busireddy
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=f009abf6-0a19-6d82-393c-8a431ce541cb@oracle.com \
--to=krish.sadhukhan@oracle.com \
--cc=Ashish.Kalra@amd.com \
--cc=bp@suse.de \
--cc=brijesh.singh@amd.com \
--cc=hpa@zytor.com \
--cc=joro@8bytes.org \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@kernel.org \
--cc=mingo@redhat.com \
--cc=pbonzini@redhat.com \
--cc=rientjes@google.com \
--cc=srutherford@google.com \
--cc=tglx@linutronix.de \
--cc=thomas.lendacky@amd.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).