All of lore.kernel.org
 help / color / mirror / Atom feed
From: Brijesh Singh <brijesh.singh@amd.com>
To: <simon.guinot@sequanux.org>, <linux-efi@vger.kernel.org>,
	<brijesh.singh@amd.com>, <kvm@vger.kernel.org>,
	<rkrcmar@redhat.com>, <matt@codeblueprint.co.uk>,
	<linux-pci@vger.kernel.org>, <linus.walleij@linaro.org>,
	<gary.hook@amd.com>, <linux-mm@kvack.org>,
	<paul.gortmaker@windriver.com>, <hpa@zytor.com>, <cl@linux.com>,
	<dan.j.williams@intel.com>, <aarcange@redhat.com>,
	<sfr@canb.auug.org.au>, <andriy.shevchenko@linux.intel.com>,
	<herbert@gondor.apana.org.au>, <bhe@redhat.com>,
	<xemul@parallels.com>, <joro@8bytes.org>, <x86@kernel.org>,
	<peterz@infradead.org>, <piotr.luc@intel.com>, <mingo@redhat.com>,
	<msalter@redhat.com>, <ross.zwisler@linux.intel.com>,
	<bp@suse.de>, <dyoung@redhat.com>, <thomas.lendacky@amd.com>,
	<jroedel@suse.de>, <keescook@chromium.org>, <arnd@arndb.de>,
	<toshi.kani@hpe.com>, <mathieu.desnoyers@efficios.com>,
	<luto@kernel.org>, <devel@linuxdriverproject.org>,
	<bhelgaas@google.com>, <tglx@linutronix.de>, <mchehab@kernel.org>,
	<iamjoonsoo.kim@lge.com>, <labbott@fedoraproject.org>,
	<tony.luck@intel.com>, <alexandre.bounine@idt.com>,
	<kuleshovmail@gmail.com>, <linux-kernel@vger.kernel.org>,
	<mcgrof@kernel.org>, <mst@redhat.com>,
	<linux-crypto@vger.kernel.org>, <tj@kernel.org>,
	<pbonzini@redhat.com>, <akpm@linux-foundation.org>,
	<davem@davemloft.net>
Subject: [RFC PATCH v2 16/32] x86: kvm: Provide support to create Guest and HV shared per-CPU variables
Date: Thu, 2 Mar 2017 10:15:36 -0500	[thread overview]
Message-ID: <148846773666.2349.9492983018843773590.stgit@brijesh-build-machine> (raw)
In-Reply-To: <148846752022.2349.13667498174822419498.stgit@brijesh-build-machine>

Some KVM specific MSR's (steal-time, asyncpf, avic_eio) allocates per-CPU
variable at compile time and share its physical address with hypervisor.
It presents a challege when SEV is active in guest OS. When SEV is active,
guest memory is encrypted with guest key and hypervisor will no longer able
to modify the guest memory. When SEV is active, we need to clear the
encryption attribute of shared physical addresses so that both guest and
hypervisor can access the data.

To solve this problem, I have tried these three options:

1) Convert the static per-CPU to dynamic per-CPU allocation. When SEV is
detected then clear the encryption attribute. But while doing so I found
that per-CPU dynamic allocator was not ready when kvm_guest_cpu_init was
called.

2) Since the encryption attributes works on PAGE_SIZE hence add some extra
padding to 'struct kvm-steal-time' to make it PAGE_SIZE and then at runtime
clear the encryption attribute of the full PAGE. The downside of this was
now we need to modify structure which may break the compatibility.

3) Define a new per-CPU section (.data..percpu.hv_shared) which will be
used to hold the compile time shared per-CPU variables. When SEV is
detected we map this section with encryption attribute cleared.

This patch implements #3. It introduces a new DEFINE_PER_CPU_HV_SHAHRED
macro to create a compile time per-CPU variable. When SEV is detected we
map the per-CPU variable as decrypted (i.e with encryption attribute cleared).

Signed-off-by: Brijesh Singh <brijesh.singh@amd.com>
---
 arch/x86/kernel/kvm.c             |   43 +++++++++++++++++++++++++++++++------
 include/asm-generic/vmlinux.lds.h |    3 +++
 include/linux/percpu-defs.h       |    9 ++++++++
 3 files changed, 48 insertions(+), 7 deletions(-)

diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c
index 099fcba..706a08e 100644
--- a/arch/x86/kernel/kvm.c
+++ b/arch/x86/kernel/kvm.c
@@ -75,8 +75,8 @@ static int parse_no_kvmclock_vsyscall(char *arg)
 
 early_param("no-kvmclock-vsyscall", parse_no_kvmclock_vsyscall);
 
-static DEFINE_PER_CPU(struct kvm_vcpu_pv_apf_data, apf_reason) __aligned(64);
-static DEFINE_PER_CPU(struct kvm_steal_time, steal_time) __aligned(64);
+static DEFINE_PER_CPU_HV_SHARED(struct kvm_vcpu_pv_apf_data, apf_reason) __aligned(64);
+static DEFINE_PER_CPU_HV_SHARED(struct kvm_steal_time, steal_time) __aligned(64);
 static int has_steal_clock = 0;
 
 /*
@@ -290,6 +290,22 @@ static void __init paravirt_ops_setup(void)
 #endif
 }
 
+static int kvm_map_percpu_hv_shared(void *addr, unsigned long size)
+{
+	/* When SEV is active, the percpu static variables initialized
+	 * in data section will contain the encrypted data so we first
+	 * need to decrypt it and then map it as decrypted.
+	 */
+	if (sev_active()) {
+		unsigned long pa = slow_virt_to_phys(addr);
+
+		sme_early_decrypt(pa, size);
+		return early_set_memory_decrypted(addr, size);
+	}
+
+	return 0;
+}
+
 static void kvm_register_steal_time(void)
 {
 	int cpu = smp_processor_id();
@@ -298,12 +314,17 @@ static void kvm_register_steal_time(void)
 	if (!has_steal_clock)
 		return;
 
+	if (kvm_map_percpu_hv_shared(st, sizeof(*st))) {
+		pr_err("kvm-stealtime: failed to map hv_shared percpu\n");
+		return;
+	}
+
 	wrmsrl(MSR_KVM_STEAL_TIME, (slow_virt_to_phys(st) | KVM_MSR_ENABLED));
 	pr_info("kvm-stealtime: cpu %d, msr %llx\n",
 		cpu, (unsigned long long) slow_virt_to_phys(st));
 }
 
-static DEFINE_PER_CPU(unsigned long, kvm_apic_eoi) = KVM_PV_EOI_DISABLED;
+static DEFINE_PER_CPU_HV_SHARED(unsigned long, kvm_apic_eoi) = KVM_PV_EOI_DISABLED;
 
 static notrace void kvm_guest_apic_eoi_write(u32 reg, u32 val)
 {
@@ -327,25 +348,33 @@ static void kvm_guest_cpu_init(void)
 	if (kvm_para_has_feature(KVM_FEATURE_ASYNC_PF) && kvmapf) {
 		u64 pa = slow_virt_to_phys(this_cpu_ptr(&apf_reason));
 
+		if (kvm_map_percpu_hv_shared(this_cpu_ptr(&apf_reason),
+					sizeof(struct kvm_vcpu_pv_apf_data)))
+			goto skip_asyncpf;
 #ifdef CONFIG_PREEMPT
 		pa |= KVM_ASYNC_PF_SEND_ALWAYS;
 #endif
 		wrmsrl(MSR_KVM_ASYNC_PF_EN, pa | KVM_ASYNC_PF_ENABLED);
 		__this_cpu_write(apf_reason.enabled, 1);
-		printk(KERN_INFO"KVM setup async PF for cpu %d\n",
-		       smp_processor_id());
+		printk(KERN_INFO"KVM setup async PF for cpu %d msr %llx\n",
+		       smp_processor_id(), pa);
 	}
-
+skip_asyncpf:
 	if (kvm_para_has_feature(KVM_FEATURE_PV_EOI)) {
 		unsigned long pa;
 		/* Size alignment is implied but just to make it explicit. */
 		BUILD_BUG_ON(__alignof__(kvm_apic_eoi) < 4);
+		if (kvm_map_percpu_hv_shared(this_cpu_ptr(&kvm_apic_eoi),
+					sizeof(unsigned long)))
+			goto skip_pv_eoi;
 		__this_cpu_write(kvm_apic_eoi, 0);
 		pa = slow_virt_to_phys(this_cpu_ptr(&kvm_apic_eoi))
 			| KVM_MSR_ENABLED;
 		wrmsrl(MSR_KVM_PV_EOI_EN, pa);
+		printk(KERN_INFO"KVM setup PV EOI for cpu %d msr %lx\n",
+		       smp_processor_id(), pa);
 	}
-
+skip_pv_eoi:
 	if (has_steal_clock)
 		kvm_register_steal_time();
 }
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
index 0968d13..8d29910 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -773,6 +773,9 @@
 	. = ALIGN(cacheline);						\
 	*(.data..percpu)						\
 	*(.data..percpu..shared_aligned)				\
+	. = ALIGN(PAGE_SIZE);						\
+	*(.data..percpu..hv_shared)					\
+	. = ALIGN(PAGE_SIZE);						\
 	VMLINUX_SYMBOL(__per_cpu_end) = .;
 
 /**
diff --git a/include/linux/percpu-defs.h b/include/linux/percpu-defs.h
index 8f16299..5af366e 100644
--- a/include/linux/percpu-defs.h
+++ b/include/linux/percpu-defs.h
@@ -172,6 +172,15 @@
 #define DEFINE_PER_CPU_READ_MOSTLY(type, name)				\
 	DEFINE_PER_CPU_SECTION(type, name, "..read_mostly")
 
+/* Declaration/definition used for per-CPU variables that must be shared
+ * between hypervisor and guest OS.
+ */
+#define DECLARE_PER_CPU_HV_SHARED(type, name)				\
+	DECLARE_PER_CPU_SECTION(type, name, "..hv_shared")
+
+#define DEFINE_PER_CPU_HV_SHARED(type, name)				\
+	DEFINE_PER_CPU_SECTION(type, name, "..hv_shared")
+
 /*
  * Intermodule exports for per-CPU variables.  sparse forgets about
  * address space across EXPORT_SYMBOL(), change EXPORT_SYMBOL() to

WARNING: multiple messages have this Message-ID (diff)
From: Brijesh Singh <brijesh.singh@amd.com>
To: simon.guinot@sequanux.org, linux-efi@vger.kernel.org,
	brijesh.singh@amd.com, kvm@vger.kernel.org, rkrcmar@redhat.com,
	matt@codeblueprint.co.uk, linux-pci@vger.kernel.org,
	linus.walleij@linaro.org, gary.hook@amd.com, linux-mm@kvack.org,
	paul.gortmaker@windriver.com, hpa@zytor.com, cl@linux.com,
	dan.j.williams@intel.com, aarcange@redhat.com,
	sfr@canb.auug.org.au, andriy.shevchenko@linux.intel.com,
	herbert@gondor.apana.org.au, bhe@redhat.com, xemul@parallels.com,
	joro@8bytes.org, x86@kernel.org, peterz@infradead.org,
	piotr.luc@intel.com, mingo@redhat.com, msalter@redhat.com,
	ross.zwisler@linux.intel.com, bp@suse.de, dyoung@redhat.com,
	thomas.lendacky@amd.com, jroedel@suse.de, keescook@chromium.org,
	arnd@arndb.de, toshi.kani@hpe.com,
	mathieu.desnoyers@efficios.com, luto@kernel.org,
	devel@linuxdriverproj
Subject: [RFC PATCH v2 16/32] x86: kvm: Provide support to create Guest and HV shared per-CPU variables
Date: Thu, 2 Mar 2017 10:15:36 -0500	[thread overview]
Message-ID: <148846773666.2349.9492983018843773590.stgit@brijesh-build-machine> (raw)
In-Reply-To: <148846752022.2349.13667498174822419498.stgit@brijesh-build-machine>

Some KVM specific MSR's (steal-time, asyncpf, avic_eio) allocates per-CPU
variable at compile time and share its physical address with hypervisor.
It presents a challege when SEV is active in guest OS. When SEV is active,
guest memory is encrypted with guest key and hypervisor will no longer able
to modify the guest memory. When SEV is active, we need to clear the
encryption attribute of shared physical addresses so that both guest and
hypervisor can access the data.

To solve this problem, I have tried these three options:

1) Convert the static per-CPU to dynamic per-CPU allocation. When SEV is
detected then clear the encryption attribute. But while doing so I found
that per-CPU dynamic allocator was not ready when kvm_guest_cpu_init was
called.

2) Since the encryption attributes works on PAGE_SIZE hence add some extra
padding to 'struct kvm-steal-time' to make it PAGE_SIZE and then at runtime
clear the encryption attribute of the full PAGE. The downside of this was
now we need to modify structure which may break the compatibility.

3) Define a new per-CPU section (.data..percpu.hv_shared) which will be
used to hold the compile time shared per-CPU variables. When SEV is
detected we map this section with encryption attribute cleared.

This patch implements #3. It introduces a new DEFINE_PER_CPU_HV_SHAHRED
macro to create a compile time per-CPU variable. When SEV is detected we
map the per-CPU variable as decrypted (i.e with encryption attribute cleared).

Signed-off-by: Brijesh Singh <brijesh.singh@amd.com>
---
 arch/x86/kernel/kvm.c             |   43 +++++++++++++++++++++++++++++++------
 include/asm-generic/vmlinux.lds.h |    3 +++
 include/linux/percpu-defs.h       |    9 ++++++++
 3 files changed, 48 insertions(+), 7 deletions(-)

diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c
index 099fcba..706a08e 100644
--- a/arch/x86/kernel/kvm.c
+++ b/arch/x86/kernel/kvm.c
@@ -75,8 +75,8 @@ static int parse_no_kvmclock_vsyscall(char *arg)
 
 early_param("no-kvmclock-vsyscall", parse_no_kvmclock_vsyscall);
 
-static DEFINE_PER_CPU(struct kvm_vcpu_pv_apf_data, apf_reason) __aligned(64);
-static DEFINE_PER_CPU(struct kvm_steal_time, steal_time) __aligned(64);
+static DEFINE_PER_CPU_HV_SHARED(struct kvm_vcpu_pv_apf_data, apf_reason) __aligned(64);
+static DEFINE_PER_CPU_HV_SHARED(struct kvm_steal_time, steal_time) __aligned(64);
 static int has_steal_clock = 0;
 
 /*
@@ -290,6 +290,22 @@ static void __init paravirt_ops_setup(void)
 #endif
 }
 
+static int kvm_map_percpu_hv_shared(void *addr, unsigned long size)
+{
+	/* When SEV is active, the percpu static variables initialized
+	 * in data section will contain the encrypted data so we first
+	 * need to decrypt it and then map it as decrypted.
+	 */
+	if (sev_active()) {
+		unsigned long pa = slow_virt_to_phys(addr);
+
+		sme_early_decrypt(pa, size);
+		return early_set_memory_decrypted(addr, size);
+	}
+
+	return 0;
+}
+
 static void kvm_register_steal_time(void)
 {
 	int cpu = smp_processor_id();
@@ -298,12 +314,17 @@ static void kvm_register_steal_time(void)
 	if (!has_steal_clock)
 		return;
 
+	if (kvm_map_percpu_hv_shared(st, sizeof(*st))) {
+		pr_err("kvm-stealtime: failed to map hv_shared percpu\n");
+		return;
+	}
+
 	wrmsrl(MSR_KVM_STEAL_TIME, (slow_virt_to_phys(st) | KVM_MSR_ENABLED));
 	pr_info("kvm-stealtime: cpu %d, msr %llx\n",
 		cpu, (unsigned long long) slow_virt_to_phys(st));
 }
 
-static DEFINE_PER_CPU(unsigned long, kvm_apic_eoi) = KVM_PV_EOI_DISABLED;
+static DEFINE_PER_CPU_HV_SHARED(unsigned long, kvm_apic_eoi) = KVM_PV_EOI_DISABLED;
 
 static notrace void kvm_guest_apic_eoi_write(u32 reg, u32 val)
 {
@@ -327,25 +348,33 @@ static void kvm_guest_cpu_init(void)
 	if (kvm_para_has_feature(KVM_FEATURE_ASYNC_PF) && kvmapf) {
 		u64 pa = slow_virt_to_phys(this_cpu_ptr(&apf_reason));
 
+		if (kvm_map_percpu_hv_shared(this_cpu_ptr(&apf_reason),
+					sizeof(struct kvm_vcpu_pv_apf_data)))
+			goto skip_asyncpf;
 #ifdef CONFIG_PREEMPT
 		pa |= KVM_ASYNC_PF_SEND_ALWAYS;
 #endif
 		wrmsrl(MSR_KVM_ASYNC_PF_EN, pa | KVM_ASYNC_PF_ENABLED);
 		__this_cpu_write(apf_reason.enabled, 1);
-		printk(KERN_INFO"KVM setup async PF for cpu %d\n",
-		       smp_processor_id());
+		printk(KERN_INFO"KVM setup async PF for cpu %d msr %llx\n",
+		       smp_processor_id(), pa);
 	}
-
+skip_asyncpf:
 	if (kvm_para_has_feature(KVM_FEATURE_PV_EOI)) {
 		unsigned long pa;
 		/* Size alignment is implied but just to make it explicit. */
 		BUILD_BUG_ON(__alignof__(kvm_apic_eoi) < 4);
+		if (kvm_map_percpu_hv_shared(this_cpu_ptr(&kvm_apic_eoi),
+					sizeof(unsigned long)))
+			goto skip_pv_eoi;
 		__this_cpu_write(kvm_apic_eoi, 0);
 		pa = slow_virt_to_phys(this_cpu_ptr(&kvm_apic_eoi))
 			| KVM_MSR_ENABLED;
 		wrmsrl(MSR_KVM_PV_EOI_EN, pa);
+		printk(KERN_INFO"KVM setup PV EOI for cpu %d msr %lx\n",
+		       smp_processor_id(), pa);
 	}
-
+skip_pv_eoi:
 	if (has_steal_clock)
 		kvm_register_steal_time();
 }
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
index 0968d13..8d29910 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -773,6 +773,9 @@
 	. = ALIGN(cacheline);						\
 	*(.data..percpu)						\
 	*(.data..percpu..shared_aligned)				\
+	. = ALIGN(PAGE_SIZE);						\
+	*(.data..percpu..hv_shared)					\
+	. = ALIGN(PAGE_SIZE);						\
 	VMLINUX_SYMBOL(__per_cpu_end) = .;
 
 /**
diff --git a/include/linux/percpu-defs.h b/include/linux/percpu-defs.h
index 8f16299..5af366e 100644
--- a/include/linux/percpu-defs.h
+++ b/include/linux/percpu-defs.h
@@ -172,6 +172,15 @@
 #define DEFINE_PER_CPU_READ_MOSTLY(type, name)				\
 	DEFINE_PER_CPU_SECTION(type, name, "..read_mostly")
 
+/* Declaration/definition used for per-CPU variables that must be shared
+ * between hypervisor and guest OS.
+ */
+#define DECLARE_PER_CPU_HV_SHARED(type, name)				\
+	DECLARE_PER_CPU_SECTION(type, name, "..hv_shared")
+
+#define DEFINE_PER_CPU_HV_SHARED(type, name)				\
+	DEFINE_PER_CPU_SECTION(type, name, "..hv_shared")
+
 /*
  * Intermodule exports for per-CPU variables.  sparse forgets about
  * address space across EXPORT_SYMBOL(), change EXPORT_SYMBOL() to

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

WARNING: multiple messages have this Message-ID (diff)
From: Brijesh Singh <brijesh.singh@amd.com>
To: <simon.guinot@sequanux.org>, <linux-efi@vger.kernel.org>,
	<brijesh.singh@amd.com>, <kvm@vger.kernel.org>,
	<rkrcmar@redhat.com>, <matt@codeblueprint.co.uk>,
	<linux-pci@vger.kernel.org>, <linus.walleij@linaro.org>,
	<gary.hook@amd.com>, <linux-mm@kvack.org>,
	<paul.gortmaker@windriver.com>, <hpa@zytor.com>, <cl@linux.com>,
	<dan.j.williams@intel.com>, <aarcange@redhat.com>,
	<sfr@canb.auug.org.au>, <andriy.shevchenko@linux.intel.com>,
	<herbert@gondor.apana.org.au>, <bhe@redhat.com>,
	<xemul@parallels.com>, <joro@8bytes.org>, <x86@kernel.org>,
	<peterz@infradead.org>, <piotr.luc@intel.com>, <mingo@redhat.com>,
	<msalter@redhat.com>, <ross.zwisler@linux.intel.com>,
	<bp@suse.de>, <dyoung@redhat.com>, <thomas.lendacky@amd.com>,
	<jroedel@suse.de>, <keescook@chromium.org>, <arnd@arndb.de>,
	<toshi.kani@hpe.com>, <mathieu.desnoyers@efficios.com>,
	<luto@kernel.org>,
	<devel@linuxdriverproj
Subject: [RFC PATCH v2 16/32] x86: kvm: Provide support to create Guest and HV shared per-CPU variables
Date: Thu, 2 Mar 2017 10:15:36 -0500	[thread overview]
Message-ID: <148846773666.2349.9492983018843773590.stgit@brijesh-build-machine> (raw)
In-Reply-To: <148846752022.2349.13667498174822419498.stgit@brijesh-build-machine>

Some KVM specific MSR's (steal-time, asyncpf, avic_eio) allocates per-CPU
variable at compile time and share its physical address with hypervisor.
It presents a challege when SEV is active in guest OS. When SEV is active,
guest memory is encrypted with guest key and hypervisor will no longer able
to modify the guest memory. When SEV is active, we need to clear the
encryption attribute of shared physical addresses so that both guest and
hypervisor can access the data.

To solve this problem, I have tried these three options:

1) Convert the static per-CPU to dynamic per-CPU allocation. When SEV is
detected then clear the encryption attribute. But while doing so I found
that per-CPU dynamic allocator was not ready when kvm_guest_cpu_init was
called.

2) Since the encryption attributes works on PAGE_SIZE hence add some extra
padding to 'struct kvm-steal-time' to make it PAGE_SIZE and then at runtime
clear the encryption attribute of the full PAGE. The downside of this was
now we need to modify structure which may break the compatibility.

3) Define a new per-CPU section (.data..percpu.hv_shared) which will be
used to hold the compile time shared per-CPU variables. When SEV is
detected we map this section with encryption attribute cleared.

This patch implements #3. It introduces a new DEFINE_PER_CPU_HV_SHAHRED
macro to create a compile time per-CPU variable. When SEV is detected we
map the per-CPU variable as decrypted (i.e with encryption attribute cleared).

Signed-off-by: Brijesh Singh <brijesh.singh@amd.com>
---
 arch/x86/kernel/kvm.c             |   43 +++++++++++++++++++++++++++++++------
 include/asm-generic/vmlinux.lds.h |    3 +++
 include/linux/percpu-defs.h       |    9 ++++++++
 3 files changed, 48 insertions(+), 7 deletions(-)

diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c
index 099fcba..706a08e 100644
--- a/arch/x86/kernel/kvm.c
+++ b/arch/x86/kernel/kvm.c
@@ -75,8 +75,8 @@ static int parse_no_kvmclock_vsyscall(char *arg)
 
 early_param("no-kvmclock-vsyscall", parse_no_kvmclock_vsyscall);
 
-static DEFINE_PER_CPU(struct kvm_vcpu_pv_apf_data, apf_reason) __aligned(64);
-static DEFINE_PER_CPU(struct kvm_steal_time, steal_time) __aligned(64);
+static DEFINE_PER_CPU_HV_SHARED(struct kvm_vcpu_pv_apf_data, apf_reason) __aligned(64);
+static DEFINE_PER_CPU_HV_SHARED(struct kvm_steal_time, steal_time) __aligned(64);
 static int has_steal_clock = 0;
 
 /*
@@ -290,6 +290,22 @@ static void __init paravirt_ops_setup(void)
 #endif
 }
 
+static int kvm_map_percpu_hv_shared(void *addr, unsigned long size)
+{
+	/* When SEV is active, the percpu static variables initialized
+	 * in data section will contain the encrypted data so we first
+	 * need to decrypt it and then map it as decrypted.
+	 */
+	if (sev_active()) {
+		unsigned long pa = slow_virt_to_phys(addr);
+
+		sme_early_decrypt(pa, size);
+		return early_set_memory_decrypted(addr, size);
+	}
+
+	return 0;
+}
+
 static void kvm_register_steal_time(void)
 {
 	int cpu = smp_processor_id();
@@ -298,12 +314,17 @@ static void kvm_register_steal_time(void)
 	if (!has_steal_clock)
 		return;
 
+	if (kvm_map_percpu_hv_shared(st, sizeof(*st))) {
+		pr_err("kvm-stealtime: failed to map hv_shared percpu\n");
+		return;
+	}
+
 	wrmsrl(MSR_KVM_STEAL_TIME, (slow_virt_to_phys(st) | KVM_MSR_ENABLED));
 	pr_info("kvm-stealtime: cpu %d, msr %llx\n",
 		cpu, (unsigned long long) slow_virt_to_phys(st));
 }
 
-static DEFINE_PER_CPU(unsigned long, kvm_apic_eoi) = KVM_PV_EOI_DISABLED;
+static DEFINE_PER_CPU_HV_SHARED(unsigned long, kvm_apic_eoi) = KVM_PV_EOI_DISABLED;
 
 static notrace void kvm_guest_apic_eoi_write(u32 reg, u32 val)
 {
@@ -327,25 +348,33 @@ static void kvm_guest_cpu_init(void)
 	if (kvm_para_has_feature(KVM_FEATURE_ASYNC_PF) && kvmapf) {
 		u64 pa = slow_virt_to_phys(this_cpu_ptr(&apf_reason));
 
+		if (kvm_map_percpu_hv_shared(this_cpu_ptr(&apf_reason),
+					sizeof(struct kvm_vcpu_pv_apf_data)))
+			goto skip_asyncpf;
 #ifdef CONFIG_PREEMPT
 		pa |= KVM_ASYNC_PF_SEND_ALWAYS;
 #endif
 		wrmsrl(MSR_KVM_ASYNC_PF_EN, pa | KVM_ASYNC_PF_ENABLED);
 		__this_cpu_write(apf_reason.enabled, 1);
-		printk(KERN_INFO"KVM setup async PF for cpu %d\n",
-		       smp_processor_id());
+		printk(KERN_INFO"KVM setup async PF for cpu %d msr %llx\n",
+		       smp_processor_id(), pa);
 	}
-
+skip_asyncpf:
 	if (kvm_para_has_feature(KVM_FEATURE_PV_EOI)) {
 		unsigned long pa;
 		/* Size alignment is implied but just to make it explicit. */
 		BUILD_BUG_ON(__alignof__(kvm_apic_eoi) < 4);
+		if (kvm_map_percpu_hv_shared(this_cpu_ptr(&kvm_apic_eoi),
+					sizeof(unsigned long)))
+			goto skip_pv_eoi;
 		__this_cpu_write(kvm_apic_eoi, 0);
 		pa = slow_virt_to_phys(this_cpu_ptr(&kvm_apic_eoi))
 			| KVM_MSR_ENABLED;
 		wrmsrl(MSR_KVM_PV_EOI_EN, pa);
+		printk(KERN_INFO"KVM setup PV EOI for cpu %d msr %lx\n",
+		       smp_processor_id(), pa);
 	}
-
+skip_pv_eoi:
 	if (has_steal_clock)
 		kvm_register_steal_time();
 }
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
index 0968d13..8d29910 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -773,6 +773,9 @@
 	. = ALIGN(cacheline);						\
 	*(.data..percpu)						\
 	*(.data..percpu..shared_aligned)				\
+	. = ALIGN(PAGE_SIZE);						\
+	*(.data..percpu..hv_shared)					\
+	. = ALIGN(PAGE_SIZE);						\
 	VMLINUX_SYMBOL(__per_cpu_end) = .;
 
 /**
diff --git a/include/linux/percpu-defs.h b/include/linux/percpu-defs.h
index 8f16299..5af366e 100644
--- a/include/linux/percpu-defs.h
+++ b/include/linux/percpu-defs.h
@@ -172,6 +172,15 @@
 #define DEFINE_PER_CPU_READ_MOSTLY(type, name)				\
 	DEFINE_PER_CPU_SECTION(type, name, "..read_mostly")
 
+/* Declaration/definition used for per-CPU variables that must be shared
+ * between hypervisor and guest OS.
+ */
+#define DECLARE_PER_CPU_HV_SHARED(type, name)				\
+	DECLARE_PER_CPU_SECTION(type, name, "..hv_shared")
+
+#define DEFINE_PER_CPU_HV_SHARED(type, name)				\
+	DEFINE_PER_CPU_SECTION(type, name, "..hv_shared")
+
 /*
  * Intermodule exports for per-CPU variables.  sparse forgets about
  * address space across EXPORT_SYMBOL(), change EXPORT_SYMBOL() to

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

WARNING: multiple messages have this Message-ID (diff)
From: Brijesh Singh <brijesh.singh@amd.com>
To: simon.guinot@sequanux.org, linux-efi@vger.kernel.org,
	brijesh.singh@amd.com, kvm@vger.kernel.org, rkrcmar@redhat.com,
	matt@codeblueprint.co.uk, linux-pci@vger.kernel.org,
	linus.walleij@linaro.org, gary.hook@amd.com, linux-mm@kvack.org,
	paul.gortmaker@windriver.com, hpa@zytor.com, cl@linux.com,
	dan.j.williams@intel.com, aarcange@redhat.com,
	sfr@canb.auug.org.au, andriy.shevchenko@linux.intel.com,
	herbert@gondor.apana.org.au, bhe@redhat.com, xemul@parallels.com,
	joro@8bytes.org, x86@kernel.org, peterz@infradead.org,
	piotr.luc@intel.com, mingo@redhat.com, msalter@redhat.com,
	ross.zwisler@linux.intel.com, bp@suse.de, dyoung@redhat.com,
	thomas.lendacky@amd.com, jroedel@suse.de, keescook@chromium.org,
	arnd@arndb.de, toshi.kani@hpe.com,
	mathieu.desnoyers@efficios.com, luto@kernel.org,
	devel@linuxdriverproject.org, bhelgaas@google.com,
	tglx@linutronix.de, mchehab@kernel.org, iamjoonsoo.kim@lge.com,
	labbott@fedoraproject.org, tony.luck@intel.com,
	alexandre.bounine@idt.com, kuleshovmail@gmail.com,
	linux-kernel@vger.kernel.org, mcgrof@kernel.org, mst@redhat.com,
	linux-crypto@vger.kernel.org, tj@kernel.org, pbonzini@redhat.com,
	akpm@linux-foundation.org, davem@davemloft.net
Subject: [RFC PATCH v2 16/32] x86: kvm: Provide support to create Guest and HV shared per-CPU variables
Date: Thu, 2 Mar 2017 10:15:36 -0500	[thread overview]
Message-ID: <148846773666.2349.9492983018843773590.stgit@brijesh-build-machine> (raw)
In-Reply-To: <148846752022.2349.13667498174822419498.stgit@brijesh-build-machine>

Some KVM specific MSR's (steal-time, asyncpf, avic_eio) allocates per-CPU
variable at compile time and share its physical address with hypervisor.
It presents a challege when SEV is active in guest OS. When SEV is active,
guest memory is encrypted with guest key and hypervisor will no longer able
to modify the guest memory. When SEV is active, we need to clear the
encryption attribute of shared physical addresses so that both guest and
hypervisor can access the data.

To solve this problem, I have tried these three options:

1) Convert the static per-CPU to dynamic per-CPU allocation. When SEV is
detected then clear the encryption attribute. But while doing so I found
that per-CPU dynamic allocator was not ready when kvm_guest_cpu_init was
called.

2) Since the encryption attributes works on PAGE_SIZE hence add some extra
padding to 'struct kvm-steal-time' to make it PAGE_SIZE and then at runtime
clear the encryption attribute of the full PAGE. The downside of this was
now we need to modify structure which may break the compatibility.

3) Define a new per-CPU section (.data..percpu.hv_shared) which will be
used to hold the compile time shared per-CPU variables. When SEV is
detected we map this section with encryption attribute cleared.

This patch implements #3. It introduces a new DEFINE_PER_CPU_HV_SHAHRED
macro to create a compile time per-CPU variable. When SEV is detected we
map the per-CPU variable as decrypted (i.e with encryption attribute cleared).

Signed-off-by: Brijesh Singh <brijesh.singh@amd.com>
---
 arch/x86/kernel/kvm.c             |   43 +++++++++++++++++++++++++++++++------
 include/asm-generic/vmlinux.lds.h |    3 +++
 include/linux/percpu-defs.h       |    9 ++++++++
 3 files changed, 48 insertions(+), 7 deletions(-)

diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c
index 099fcba..706a08e 100644
--- a/arch/x86/kernel/kvm.c
+++ b/arch/x86/kernel/kvm.c
@@ -75,8 +75,8 @@ static int parse_no_kvmclock_vsyscall(char *arg)
 
 early_param("no-kvmclock-vsyscall", parse_no_kvmclock_vsyscall);
 
-static DEFINE_PER_CPU(struct kvm_vcpu_pv_apf_data, apf_reason) __aligned(64);
-static DEFINE_PER_CPU(struct kvm_steal_time, steal_time) __aligned(64);
+static DEFINE_PER_CPU_HV_SHARED(struct kvm_vcpu_pv_apf_data, apf_reason) __aligned(64);
+static DEFINE_PER_CPU_HV_SHARED(struct kvm_steal_time, steal_time) __aligned(64);
 static int has_steal_clock = 0;
 
 /*
@@ -290,6 +290,22 @@ static void __init paravirt_ops_setup(void)
 #endif
 }
 
+static int kvm_map_percpu_hv_shared(void *addr, unsigned long size)
+{
+	/* When SEV is active, the percpu static variables initialized
+	 * in data section will contain the encrypted data so we first
+	 * need to decrypt it and then map it as decrypted.
+	 */
+	if (sev_active()) {
+		unsigned long pa = slow_virt_to_phys(addr);
+
+		sme_early_decrypt(pa, size);
+		return early_set_memory_decrypted(addr, size);
+	}
+
+	return 0;
+}
+
 static void kvm_register_steal_time(void)
 {
 	int cpu = smp_processor_id();
@@ -298,12 +314,17 @@ static void kvm_register_steal_time(void)
 	if (!has_steal_clock)
 		return;
 
+	if (kvm_map_percpu_hv_shared(st, sizeof(*st))) {
+		pr_err("kvm-stealtime: failed to map hv_shared percpu\n");
+		return;
+	}
+
 	wrmsrl(MSR_KVM_STEAL_TIME, (slow_virt_to_phys(st) | KVM_MSR_ENABLED));
 	pr_info("kvm-stealtime: cpu %d, msr %llx\n",
 		cpu, (unsigned long long) slow_virt_to_phys(st));
 }
 
-static DEFINE_PER_CPU(unsigned long, kvm_apic_eoi) = KVM_PV_EOI_DISABLED;
+static DEFINE_PER_CPU_HV_SHARED(unsigned long, kvm_apic_eoi) = KVM_PV_EOI_DISABLED;
 
 static notrace void kvm_guest_apic_eoi_write(u32 reg, u32 val)
 {
@@ -327,25 +348,33 @@ static void kvm_guest_cpu_init(void)
 	if (kvm_para_has_feature(KVM_FEATURE_ASYNC_PF) && kvmapf) {
 		u64 pa = slow_virt_to_phys(this_cpu_ptr(&apf_reason));
 
+		if (kvm_map_percpu_hv_shared(this_cpu_ptr(&apf_reason),
+					sizeof(struct kvm_vcpu_pv_apf_data)))
+			goto skip_asyncpf;
 #ifdef CONFIG_PREEMPT
 		pa |= KVM_ASYNC_PF_SEND_ALWAYS;
 #endif
 		wrmsrl(MSR_KVM_ASYNC_PF_EN, pa | KVM_ASYNC_PF_ENABLED);
 		__this_cpu_write(apf_reason.enabled, 1);
-		printk(KERN_INFO"KVM setup async PF for cpu %d\n",
-		       smp_processor_id());
+		printk(KERN_INFO"KVM setup async PF for cpu %d msr %llx\n",
+		       smp_processor_id(), pa);
 	}
-
+skip_asyncpf:
 	if (kvm_para_has_feature(KVM_FEATURE_PV_EOI)) {
 		unsigned long pa;
 		/* Size alignment is implied but just to make it explicit. */
 		BUILD_BUG_ON(__alignof__(kvm_apic_eoi) < 4);
+		if (kvm_map_percpu_hv_shared(this_cpu_ptr(&kvm_apic_eoi),
+					sizeof(unsigned long)))
+			goto skip_pv_eoi;
 		__this_cpu_write(kvm_apic_eoi, 0);
 		pa = slow_virt_to_phys(this_cpu_ptr(&kvm_apic_eoi))
 			| KVM_MSR_ENABLED;
 		wrmsrl(MSR_KVM_PV_EOI_EN, pa);
+		printk(KERN_INFO"KVM setup PV EOI for cpu %d msr %lx\n",
+		       smp_processor_id(), pa);
 	}
-
+skip_pv_eoi:
 	if (has_steal_clock)
 		kvm_register_steal_time();
 }
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
index 0968d13..8d29910 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -773,6 +773,9 @@
 	. = ALIGN(cacheline);						\
 	*(.data..percpu)						\
 	*(.data..percpu..shared_aligned)				\
+	. = ALIGN(PAGE_SIZE);						\
+	*(.data..percpu..hv_shared)					\
+	. = ALIGN(PAGE_SIZE);						\
 	VMLINUX_SYMBOL(__per_cpu_end) = .;
 
 /**
diff --git a/include/linux/percpu-defs.h b/include/linux/percpu-defs.h
index 8f16299..5af366e 100644
--- a/include/linux/percpu-defs.h
+++ b/include/linux/percpu-defs.h
@@ -172,6 +172,15 @@
 #define DEFINE_PER_CPU_READ_MOSTLY(type, name)				\
 	DEFINE_PER_CPU_SECTION(type, name, "..read_mostly")
 
+/* Declaration/definition used for per-CPU variables that must be shared
+ * between hypervisor and guest OS.
+ */
+#define DECLARE_PER_CPU_HV_SHARED(type, name)				\
+	DECLARE_PER_CPU_SECTION(type, name, "..hv_shared")
+
+#define DEFINE_PER_CPU_HV_SHARED(type, name)				\
+	DEFINE_PER_CPU_SECTION(type, name, "..hv_shared")
+
 /*
  * Intermodule exports for per-CPU variables.  sparse forgets about
  * address space across EXPORT_SYMBOL(), change EXPORT_SYMBOL() to

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

  parent reply	other threads:[~2017-03-02 21:03 UTC|newest]

Thread overview: 423+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-03-02 15:12 [RFC PATCH v2 00/32] x86: Secure Encrypted Virtualization (AMD) Brijesh Singh
2017-03-02 15:12 ` Brijesh Singh
2017-03-02 15:12 ` Brijesh Singh
2017-03-02 15:12 ` Brijesh Singh
2017-03-02 15:12 ` [RFC PATCH v2 01/32] x86: Add the Secure Encrypted Virtualization CPU feature Brijesh Singh
2017-03-02 15:12   ` Brijesh Singh
2017-03-02 15:12   ` Brijesh Singh
2017-03-02 15:12   ` Brijesh Singh
2017-03-03 16:59   ` Borislav Petkov
2017-03-03 16:59     ` Borislav Petkov
2017-03-03 16:59     ` Borislav Petkov
2017-03-03 21:01     ` Brijesh Singh
2017-03-03 21:01       ` Brijesh Singh
2017-03-03 21:01       ` Brijesh Singh
2017-03-03 21:01       ` Brijesh Singh
2017-03-04 10:11       ` Borislav Petkov
2017-03-04 10:11         ` Borislav Petkov
2017-03-04 10:11         ` Borislav Petkov
2017-03-06 18:11         ` Brijesh Singh
2017-03-06 18:11           ` Brijesh Singh
2017-03-06 18:11           ` Brijesh Singh
2017-03-06 18:11           ` Brijesh Singh
2017-03-06 20:54           ` Borislav Petkov
2017-03-06 20:54             ` Borislav Petkov
2017-03-06 20:54             ` Borislav Petkov
2017-03-02 15:12 ` Brijesh Singh
2017-03-02 15:12 ` [RFC PATCH v2 02/32] x86: Secure Encrypted Virtualization (SEV) support Brijesh Singh
2017-03-02 15:12   ` Brijesh Singh
2017-03-02 15:12   ` Brijesh Singh
2017-03-02 15:12   ` Brijesh Singh
2017-03-07 11:19   ` Borislav Petkov
2017-03-07 11:19     ` Borislav Petkov
2017-03-07 11:19     ` Borislav Petkov
2017-03-08 15:06   ` Borislav Petkov
2017-03-08 15:06     ` Borislav Petkov
2017-03-08 15:06     ` Borislav Petkov
2017-03-02 15:12 ` Brijesh Singh
2017-03-02 15:12 ` [RFC PATCH v2 03/32] KVM: SVM: prepare for new bit definition in nested_ctl Brijesh Singh
2017-03-02 15:12 ` Brijesh Singh
2017-03-02 15:12   ` Brijesh Singh
2017-03-02 15:12   ` Brijesh Singh
2017-03-02 15:12   ` Brijesh Singh
2017-03-02 15:12 ` [RFC PATCH v2 04/32] KVM: SVM: Add SEV feature definitions to KVM Brijesh Singh
2017-03-02 15:12   ` Brijesh Singh
2017-03-02 15:12   ` Brijesh Singh
2017-03-02 15:12   ` Brijesh Singh
2017-03-07  0:50   ` Borislav Petkov
2017-03-07  0:50     ` Borislav Petkov
2017-03-07  0:50     ` Borislav Petkov
2017-03-02 15:12 ` Brijesh Singh
2017-03-02 15:12 ` [RFC PATCH v2 05/32] x86: Use encrypted access of BOOT related data with SEV Brijesh Singh
2017-03-02 15:12   ` Brijesh Singh
2017-03-02 15:12   ` Brijesh Singh
2017-03-02 15:12   ` Brijesh Singh
2017-03-07 11:09   ` Borislav Petkov
2017-03-07 11:09     ` Borislav Petkov
2017-03-07 11:09     ` Borislav Petkov
2017-03-16 19:03     ` Tom Lendacky
2017-03-16 19:03       ` Tom Lendacky
2017-03-16 19:03       ` Tom Lendacky
2017-03-16 19:03       ` Tom Lendacky
2017-03-02 15:12 ` Brijesh Singh
2017-03-02 15:13 ` [RFC PATCH v2 06/32] x86/pci: Use memremap when walking setup data Brijesh Singh
2017-03-02 15:13 ` Brijesh Singh
2017-03-02 15:13   ` Brijesh Singh
2017-03-02 15:13   ` Brijesh Singh
2017-03-02 15:13   ` Brijesh Singh
2017-03-03 20:42   ` Bjorn Helgaas
2017-03-03 20:42     ` Bjorn Helgaas
2017-03-03 20:42     ` Bjorn Helgaas
2017-03-03 21:15     ` Tom Lendacky
2017-03-03 21:15       ` Tom Lendacky
2017-03-03 21:15       ` Tom Lendacky
2017-03-03 21:15       ` Tom Lendacky
2017-03-07  0:03       ` Bjorn Helgaas
2017-03-07  0:03         ` Bjorn Helgaas
2017-03-07  0:03         ` Bjorn Helgaas
2017-03-13 20:08         ` Tom Lendacky
2017-03-13 20:08           ` Tom Lendacky
2017-03-13 20:08           ` Tom Lendacky
2017-03-13 20:08           ` Tom Lendacky
2017-03-02 15:13 ` [RFC PATCH v2 07/32] x86/efi: Access EFI data as encrypted when SEV is active Brijesh Singh
2017-03-02 15:13   ` Brijesh Singh
2017-03-02 15:13   ` Brijesh Singh
2017-03-02 15:13   ` Brijesh Singh
2017-03-07 11:57   ` Borislav Petkov
2017-03-07 11:57     ` Borislav Petkov
2017-03-07 11:57     ` Borislav Petkov
2017-03-07 11:57     ` Borislav Petkov
2017-03-02 15:13 ` Brijesh Singh
2017-03-02 15:13 ` [RFC PATCH v2 08/32] x86: Use PAGE_KERNEL protection for ioremap of memory page Brijesh Singh
2017-03-02 15:13 ` Brijesh Singh
2017-03-02 15:13   ` Brijesh Singh
2017-03-02 15:13   ` Brijesh Singh
2017-03-02 15:13   ` Brijesh Singh
2017-03-07 14:59   ` Borislav Petkov
2017-03-07 14:59     ` Borislav Petkov
2017-03-07 14:59     ` Borislav Petkov
2017-03-16 20:04     ` Tom Lendacky
2017-03-16 20:04       ` Tom Lendacky
2017-03-16 20:04       ` Tom Lendacky
2017-03-16 20:04       ` Tom Lendacky
2017-03-17 14:32       ` Tom Lendacky
2017-03-17 14:32         ` Tom Lendacky
2017-03-17 14:32         ` Tom Lendacky
2017-03-17 14:32         ` Tom Lendacky
2017-03-17 14:55         ` Tom Lendacky
2017-03-17 14:55           ` Tom Lendacky
2017-03-17 14:55           ` Tom Lendacky
2017-03-02 15:13 ` [RFC PATCH v2 09/32] x86: Change early_ioremap to early_memremap for BOOT data Brijesh Singh
2017-03-02 15:13 ` Brijesh Singh
2017-03-02 15:13   ` Brijesh Singh
2017-03-02 15:13   ` Brijesh Singh
2017-03-02 15:13   ` Brijesh Singh
2017-03-08  8:46   ` Borislav Petkov
2017-03-08  8:46     ` Borislav Petkov
2017-03-08  8:46     ` Borislav Petkov
2017-03-02 15:14 ` [RFC PATCH v2 10/32] x86: DMA support for SEV memory encryption Brijesh Singh
2017-03-02 15:14   ` Brijesh Singh
2017-03-02 15:14   ` Brijesh Singh
2017-03-02 15:14   ` Brijesh Singh
2017-03-08 10:56   ` Borislav Petkov
2017-03-08 10:56     ` Borislav Petkov
2017-03-08 10:56     ` Borislav Petkov
2017-03-02 15:14 ` Brijesh Singh
2017-03-02 15:14 ` [RFC PATCH v2 11/32] x86: Unroll string I/O when SEV is active Brijesh Singh
2017-03-02 15:14   ` Brijesh Singh
2017-03-02 15:14   ` Brijesh Singh
2017-03-02 15:14   ` Brijesh Singh
2017-03-02 15:14 ` Brijesh Singh
2017-03-02 15:14 ` [RFC PATCH v2 12/32] x86: Add early boot support when running with SEV active Brijesh Singh
2017-03-02 15:14   ` Brijesh Singh
2017-03-02 15:14   ` Brijesh Singh
2017-03-02 15:14   ` Brijesh Singh
2017-03-09 14:07   ` Borislav Petkov
2017-03-09 14:07     ` Borislav Petkov
2017-03-09 14:07     ` Borislav Petkov
2017-03-09 16:13     ` Paolo Bonzini
2017-03-09 16:13       ` Paolo Bonzini
2017-03-09 16:13       ` Paolo Bonzini
2017-03-09 16:29       ` Borislav Petkov
2017-03-09 16:29         ` Borislav Petkov
2017-03-09 16:29         ` Borislav Petkov
2017-03-10 16:35         ` Brijesh Singh
2017-03-10 16:35           ` Brijesh Singh
2017-03-10 16:35           ` Brijesh Singh
2017-03-10 16:35           ` Brijesh Singh
2017-03-16 10:16           ` Borislav Petkov
2017-03-16 10:16             ` Borislav Petkov
2017-03-16 10:16             ` Borislav Petkov
2017-03-16 10:16             ` Borislav Petkov
2017-03-16 14:28             ` Tom Lendacky
2017-03-16 14:28               ` Tom Lendacky
2017-03-16 14:28               ` Tom Lendacky
2017-03-16 14:28               ` Tom Lendacky
2017-03-16 15:09               ` Borislav Petkov
2017-03-16 15:09                 ` Borislav Petkov
2017-03-16 15:09                 ` Borislav Petkov
2017-03-16 16:11                 ` Tom Lendacky
2017-03-16 16:11                   ` Tom Lendacky
2017-03-16 16:11                   ` Tom Lendacky
2017-03-16 16:11                   ` Tom Lendacky
2017-03-16 16:29                   ` Borislav Petkov
2017-03-16 16:29                     ` Borislav Petkov
2017-03-16 16:29                     ` Borislav Petkov
2017-03-02 15:14 ` Brijesh Singh
2017-03-02 15:15 ` [RFC PATCH v2 13/32] KVM: SVM: Enable SEV by setting the SEV_ENABLE CPU feature Brijesh Singh
2017-03-02 15:15   ` Brijesh Singh
2017-03-02 15:15   ` Brijesh Singh
2017-03-02 15:15   ` Brijesh Singh
2017-03-09 19:29   ` Borislav Petkov
2017-03-09 19:29     ` Borislav Petkov
2017-03-09 19:29     ` Borislav Petkov
2017-03-02 15:15 ` Brijesh Singh
2017-03-02 15:15 ` [RFC PATCH v2 14/32] x86: mm: Provide support to use memblock when spliting large pages Brijesh Singh
2017-03-02 15:15 ` Brijesh Singh
2017-03-02 15:15   ` Brijesh Singh
2017-03-02 15:15   ` Brijesh Singh
2017-03-02 15:15   ` Brijesh Singh
2017-03-10 11:06   ` Borislav Petkov
2017-03-10 11:06     ` Borislav Petkov
2017-03-10 11:06     ` Borislav Petkov
2017-03-10 22:41     ` Brijesh Singh
2017-03-10 22:41       ` Brijesh Singh
2017-03-10 22:41       ` Brijesh Singh
2017-03-10 22:41       ` Brijesh Singh
2017-03-16 13:15       ` Paolo Bonzini
2017-03-16 13:15         ` Paolo Bonzini
2017-03-16 18:28       ` Borislav Petkov
2017-03-16 18:28         ` Borislav Petkov
2017-03-16 18:28         ` Borislav Petkov
2017-03-16 22:25         ` Paolo Bonzini
2017-03-16 22:25           ` Paolo Bonzini
2017-03-16 22:25           ` Paolo Bonzini
2017-03-17 10:17           ` Borislav Petkov
2017-03-17 10:17             ` Borislav Petkov
2017-03-17 10:17             ` Borislav Petkov
2017-03-17 10:47             ` Paolo Bonzini
2017-03-17 10:47               ` Paolo Bonzini
2017-03-17 10:56               ` Borislav Petkov
2017-03-17 10:56                 ` Borislav Petkov
2017-03-17 10:56                 ` Borislav Petkov
2017-03-17 11:03                 ` Paolo Bonzini
2017-03-17 11:03                   ` Paolo Bonzini
2017-03-17 11:03                   ` Paolo Bonzini
2017-03-17 11:33                   ` Borislav Petkov
2017-03-17 11:33                     ` Borislav Petkov
2017-03-17 11:33                     ` Borislav Petkov
2017-03-17 14:45                     ` Paolo Bonzini
2017-03-17 14:45                       ` Paolo Bonzini
2017-03-17 14:45                       ` Paolo Bonzini
     [not found]                       ` <b516a873-029a-b20a-3c43-d8bf4a200cb7-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2017-03-18 16:37                         ` Borislav Petkov
2017-03-18 16:37                           ` Borislav Petkov
2017-03-18 16:37                           ` Borislav Petkov
2017-03-18 16:37                           ` Borislav Petkov
2017-04-06 14:05             ` Brijesh Singh
2017-04-06 14:05               ` Brijesh Singh
2017-04-06 14:05               ` Brijesh Singh
2017-04-06 14:05               ` Brijesh Singh
2017-04-06 17:25               ` Borislav Petkov
2017-04-06 17:25                 ` Borislav Petkov
2017-04-06 17:25                 ` Borislav Petkov
2017-04-06 17:25                 ` Borislav Petkov
2017-04-06 18:37                 ` Brijesh Singh
2017-04-06 18:37                   ` Brijesh Singh
2017-04-06 18:37                   ` Brijesh Singh
2017-04-06 18:37                   ` Brijesh Singh
2017-04-07 11:33                   ` Borislav Petkov
2017-04-07 11:33                     ` Borislav Petkov
2017-04-07 11:33                     ` Borislav Petkov
2017-04-07 11:33                     ` Borislav Petkov
2017-04-07 14:50                     ` Brijesh Singh
2017-04-07 14:50                       ` Brijesh Singh
2017-04-07 14:50                       ` Brijesh Singh
2017-04-07 14:50                       ` Brijesh Singh
2017-03-16 12:28   ` Paolo Bonzini
2017-03-16 12:28   ` Paolo Bonzini
2017-03-16 12:28     ` Paolo Bonzini
2017-03-16 12:28     ` Paolo Bonzini
2017-03-02 15:15 ` [RFC PATCH v2 15/32] x86: Add support for changing memory encryption attribute in early boot Brijesh Singh
2017-03-02 15:15 ` Brijesh Singh
2017-03-02 15:15   ` Brijesh Singh
2017-03-02 15:15   ` Brijesh Singh
2017-03-02 15:15   ` Brijesh Singh
2017-03-24 17:12   ` Borislav Petkov
2017-03-24 17:12     ` Borislav Petkov
2017-03-24 17:12     ` Borislav Petkov
2017-03-27 15:07     ` Brijesh Singh
2017-03-27 15:07       ` Brijesh Singh
2017-03-27 15:07       ` Brijesh Singh
2017-03-27 15:07       ` Brijesh Singh
2017-03-02 15:15 ` Brijesh Singh [this message]
2017-03-02 15:15   ` [RFC PATCH v2 16/32] x86: kvm: Provide support to create Guest and HV shared per-CPU variables Brijesh Singh
2017-03-02 15:15   ` Brijesh Singh
2017-03-02 15:15   ` Brijesh Singh
2017-03-16 11:06   ` Paolo Bonzini
2017-03-16 11:06     ` Paolo Bonzini
2017-03-16 11:06     ` Paolo Bonzini
2017-03-28 18:39   ` Borislav Petkov
2017-03-28 18:39     ` Borislav Petkov
2017-03-28 18:39     ` Borislav Petkov
2017-03-29 15:21     ` Paolo Bonzini
2017-03-29 15:21       ` Paolo Bonzini
2017-03-29 15:21       ` Paolo Bonzini
2017-03-29 15:32       ` Borislav Petkov
2017-03-29 15:32         ` Borislav Petkov
2017-03-29 15:32         ` Borislav Petkov
2017-03-02 15:15 ` Brijesh Singh
2017-03-02 15:15 ` [RFC PATCH v2 17/32] x86: kvmclock: Clear encryption attribute when SEV is active Brijesh Singh
2017-03-02 15:15   ` Brijesh Singh
2017-03-02 15:15   ` Brijesh Singh
2017-03-02 15:15   ` Brijesh Singh
2017-03-02 15:15 ` Brijesh Singh
2017-03-02 15:16 ` [RFC PATCH v2 18/32] kvm: svm: Use the hardware provided GPA instead of page walk Brijesh Singh
2017-03-02 15:16 ` Brijesh Singh
2017-03-02 15:16   ` Brijesh Singh
2017-03-02 15:16   ` Brijesh Singh
2017-03-02 15:16   ` Brijesh Singh
2017-03-29 15:14   ` Borislav Petkov
2017-03-29 15:14     ` Borislav Petkov
2017-03-29 15:14     ` Borislav Petkov
2017-03-29 17:08     ` Brijesh Singh
2017-03-29 17:08       ` Brijesh Singh
2017-03-29 17:08       ` Brijesh Singh
2017-03-29 17:08       ` Brijesh Singh
2017-03-02 15:16 ` [RFC PATCH v2 19/32] crypto: ccp: Introduce the AMD Secure Processor device Brijesh Singh
2017-03-02 15:16 ` Brijesh Singh
2017-03-02 15:16   ` Brijesh Singh
2017-03-02 15:16   ` Brijesh Singh
2017-03-02 15:16   ` Brijesh Singh
2017-03-02 17:39   ` Mark Rutland
2017-03-02 17:39     ` Mark Rutland
2017-03-02 19:11     ` Brijesh Singh
2017-03-02 19:11       ` Brijesh Singh
2017-03-02 19:11       ` Brijesh Singh
2017-03-03 13:55       ` Andy Shevchenko
2017-03-03 13:55         ` Andy Shevchenko
2017-03-03 13:55         ` Andy Shevchenko
2017-03-03 13:55         ` Andy Shevchenko
2017-03-02 15:16 ` [RFC PATCH v2 20/32] crypto: ccp: Add Platform Security Processor (PSP) interface support Brijesh Singh
2017-03-02 15:16   ` Brijesh Singh
2017-03-02 15:16   ` Brijesh Singh
2017-03-02 15:16   ` Brijesh Singh
2017-03-02 15:16 ` Brijesh Singh
2017-03-02 15:16 ` [RFC PATCH v2 21/32] crypto: ccp: Add Secure Encrypted Virtualization (SEV) " Brijesh Singh
2017-03-02 15:16 ` Brijesh Singh
2017-03-02 15:16   ` Brijesh Singh
2017-03-02 15:16   ` Brijesh Singh
2017-03-02 15:16   ` Brijesh Singh
2017-03-02 15:16 ` [RFC PATCH v2 22/32] kvm: svm: prepare to reserve asid for SEV guest Brijesh Singh
2017-03-02 15:16 ` Brijesh Singh
2017-03-02 15:16   ` Brijesh Singh
2017-03-02 15:16   ` Brijesh Singh
2017-03-02 15:16   ` Brijesh Singh
2017-03-02 15:17 ` [RFC PATCH v2 23/32] kvm: introduce KVM_MEMORY_ENCRYPT_OP ioctl Brijesh Singh
2017-03-02 15:17 ` Brijesh Singh
2017-03-02 15:17   ` Brijesh Singh
2017-03-02 15:17   ` Brijesh Singh
2017-03-02 15:17   ` Brijesh Singh
2017-03-16 10:25   ` Paolo Bonzini
2017-03-16 10:25     ` Paolo Bonzini
2017-03-16 10:25     ` Paolo Bonzini
2017-03-16 10:25   ` Paolo Bonzini
2017-03-02 15:17 ` [RFC PATCH v2 24/32] kvm: x86: prepare for SEV guest management API support Brijesh Singh
2017-03-02 15:17   ` Brijesh Singh
2017-03-02 15:17   ` Brijesh Singh
2017-03-02 15:17   ` Brijesh Singh
2017-03-16 10:33   ` Paolo Bonzini
2017-03-16 10:33     ` Paolo Bonzini
2017-03-16 10:33     ` Paolo Bonzini
2017-03-02 15:17 ` Brijesh Singh
2017-03-02 15:17 ` [RFC PATCH v2 25/32] kvm: svm: Add support for SEV LAUNCH_START command Brijesh Singh
2017-03-02 15:17 ` Brijesh Singh
2017-03-02 15:17   ` Brijesh Singh
2017-03-02 15:17   ` Brijesh Singh
2017-03-02 15:17   ` Brijesh Singh
2017-03-02 15:17 ` [RFC PATCH v2 26/32] kvm: svm: Add support for SEV LAUNCH_UPDATE_DATA command Brijesh Singh
2017-03-02 15:17 ` Brijesh Singh
2017-03-02 15:17   ` Brijesh Singh
2017-03-02 15:17   ` Brijesh Singh
2017-03-02 15:17   ` Brijesh Singh
2017-03-16 10:48   ` Paolo Bonzini
2017-03-16 10:48   ` Paolo Bonzini
2017-03-16 10:48     ` Paolo Bonzini
2017-03-16 10:48     ` Paolo Bonzini
2017-03-16 18:20     ` Brijesh Singh
2017-03-16 18:20       ` Brijesh Singh
2017-03-16 18:20       ` Brijesh Singh
2017-03-16 18:20       ` Brijesh Singh
2017-03-16 18:20     ` Brijesh Singh
2017-03-02 15:17 ` [RFC PATCH v2 27/32] kvm: svm: Add support for SEV LAUNCH_FINISH command Brijesh Singh
2017-03-02 15:17 ` Brijesh Singh
2017-03-02 15:17   ` Brijesh Singh
2017-03-02 15:17   ` Brijesh Singh
2017-03-02 15:17   ` Brijesh Singh
2017-03-02 15:18 ` [RFC PATCH v2 28/32] kvm: svm: Add support for SEV GUEST_STATUS command Brijesh Singh
2017-03-02 15:18   ` Brijesh Singh
2017-03-02 15:18   ` Brijesh Singh
2017-03-02 15:18   ` Brijesh Singh
2017-03-02 15:18 ` Brijesh Singh
2017-03-02 15:18 ` [RFC PATCH v2 29/32] kvm: svm: Add support for SEV DEBUG_DECRYPT command Brijesh Singh
2017-03-02 15:18   ` Brijesh Singh
2017-03-02 15:18   ` Brijesh Singh
2017-03-02 15:18   ` Brijesh Singh
2017-03-16 10:54   ` Paolo Bonzini
2017-03-16 10:54     ` Paolo Bonzini
2017-03-16 10:54     ` Paolo Bonzini
2017-03-16 18:41     ` Brijesh Singh
2017-03-16 18:41     ` Brijesh Singh
2017-03-16 18:41       ` Brijesh Singh
2017-03-16 18:41       ` Brijesh Singh
2017-03-16 18:41       ` Brijesh Singh
2017-03-17 11:09       ` Paolo Bonzini
2017-03-17 11:09       ` Paolo Bonzini
2017-03-17 11:09         ` Paolo Bonzini
2017-03-17 11:09         ` Paolo Bonzini
2017-03-16 10:54   ` Paolo Bonzini
2017-03-02 15:18 ` Brijesh Singh
2017-03-02 15:18 ` [RFC PATCH v2 30/32] kvm: svm: Add support for SEV DEBUG_ENCRYPT command Brijesh Singh
2017-03-02 15:18   ` Brijesh Singh
2017-03-02 15:18   ` Brijesh Singh
2017-03-02 15:18   ` Brijesh Singh
2017-03-16 11:03   ` Paolo Bonzini
2017-03-16 11:03     ` Paolo Bonzini
2017-03-16 11:03     ` Paolo Bonzini
2017-03-16 18:34     ` Brijesh Singh
2017-03-16 18:34     ` Brijesh Singh
2017-03-16 18:34       ` Brijesh Singh
2017-03-16 18:34       ` Brijesh Singh
2017-03-16 18:34       ` Brijesh Singh
2017-03-16 11:03   ` Paolo Bonzini
2017-03-02 15:18 ` Brijesh Singh
2017-03-02 15:18 ` [RFC PATCH v2 31/32] kvm: svm: Add support for SEV LAUNCH_MEASURE command Brijesh Singh
2017-03-02 15:18   ` Brijesh Singh
2017-03-02 15:18   ` Brijesh Singh
2017-03-02 15:18   ` Brijesh Singh
2017-03-02 15:18 ` Brijesh Singh
2017-03-02 15:18 ` [RFC PATCH v2 32/32] x86: kvm: Pin the guest memory when SEV is active Brijesh Singh
2017-03-02 15:18 ` Brijesh Singh
2017-03-02 15:18   ` Brijesh Singh
2017-03-02 15:18   ` Brijesh Singh
2017-03-02 15:18   ` Brijesh Singh
2017-03-16 10:38   ` Paolo Bonzini
2017-03-16 10:38     ` Paolo Bonzini
2017-03-16 10:38     ` Paolo Bonzini
2017-03-16 18:17     ` Brijesh Singh
2017-03-16 18:17     ` Brijesh Singh
2017-03-16 18:17       ` Brijesh Singh
2017-03-16 18:17       ` Brijesh Singh
2017-03-16 18:17       ` Brijesh Singh
2017-03-16 10:38   ` Paolo Bonzini
2017-03-03 20:33 ` [RFC PATCH v2 00/32] x86: Secure Encrypted Virtualization (AMD) Bjorn Helgaas
2017-03-03 20:33   ` Bjorn Helgaas
2017-03-03 20:33   ` Bjorn Helgaas
2017-03-03 20:33   ` Bjorn Helgaas
2017-03-03 20:51   ` Borislav Petkov
2017-03-03 20:51     ` Borislav Petkov
2017-03-03 20:51     ` Borislav Petkov
2017-03-03 20:51     ` Borislav Petkov
2017-03-03 21:15   ` Brijesh Singh
2017-03-03 21:15     ` Brijesh Singh
2017-03-03 21:15     ` Brijesh Singh
2017-03-03 21:15     ` Brijesh Singh

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=148846773666.2349.9492983018843773590.stgit@brijesh-build-machine \
    --to=brijesh.singh@amd.com \
    --cc=aarcange@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=alexandre.bounine@idt.com \
    --cc=andriy.shevchenko@linux.intel.com \
    --cc=arnd@arndb.de \
    --cc=bhe@redhat.com \
    --cc=bhelgaas@google.com \
    --cc=bp@suse.de \
    --cc=cl@linux.com \
    --cc=dan.j.williams@intel.com \
    --cc=davem@davemloft.net \
    --cc=devel@linuxdriverproject.org \
    --cc=dyoung@redhat.com \
    --cc=gary.hook@amd.com \
    --cc=herbert@gondor.apana.org.au \
    --cc=hpa@zytor.com \
    --cc=iamjoonsoo.kim@lge.com \
    --cc=joro@8bytes.org \
    --cc=jroedel@suse.de \
    --cc=keescook@chromium.org \
    --cc=kuleshovmail@gmail.com \
    --cc=kvm@vger.kernel.org \
    --cc=labbott@fedoraproject.org \
    --cc=linus.walleij@linaro.org \
    --cc=linux-crypto@vger.kernel.org \
    --cc=linux-efi@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=luto@kernel.org \
    --cc=mathieu.desnoyers@efficios.com \
    --cc=matt@codeblueprint.co.uk \
    --cc=mcgrof@kernel.org \
    --cc=mchehab@kernel.org \
    --cc=mingo@redhat.com \
    --cc=msalter@redhat.com \
    --cc=mst@redhat.com \
    --cc=paul.gortmaker@windriver.com \
    --cc=pbonzini@redhat.com \
    --cc=peterz@infradead.org \
    --cc=piotr.luc@intel.com \
    --cc=rkrcmar@redhat.com \
    --cc=ross.zwisler@linux.intel.com \
    --cc=sfr@canb.auug.org.au \
    --cc=simon.guinot@sequanux.org \
    --cc=tglx@linutronix.de \
    --cc=thomas.lendacky@amd.com \
    --cc=tj@kernel.org \
    --cc=tony.luck@intel.com \
    --cc=toshi.kani@hpe.com \
    --cc=x86@kernel.org \
    --cc=xemul@parallels.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.