[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 32/36] sgx-epc: Avoid bios reset during sgx epc initialization
From: |
Paolo Bonzini |
Subject: |
[PULL 32/36] sgx-epc: Avoid bios reset during sgx epc initialization |
Date: |
Mon, 6 Sep 2021 15:10:55 +0200 |
From: Yang Zhong <yang.zhong@intel.com>
Since bios do the reset when qemu boot up, and sgx epc will be
reset by the registered reset callback function. Like this, the
sgx epc will do two times initialization. This patch will check
protected mode from cr0 register, and will bypass reset operation
from bios. The reset callback will only accept reset operation
from guest.
Signed-off-by: Yang Zhong <yang.zhong@intel.com>
Message-Id: <20210719112136.57018-25-yang.zhong@intel.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
hw/i386/sgx-epc.c | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/hw/i386/sgx-epc.c b/hw/i386/sgx-epc.c
index 9880d832d5..70075db37c 100644
--- a/hw/i386/sgx-epc.c
+++ b/hw/i386/sgx-epc.c
@@ -19,6 +19,7 @@
#include "target/i386/cpu.h"
#include "exec/address-spaces.h"
#include "sysemu/reset.h"
+#include "sysemu/hw_accel.h"
uint32_t epc_num;
@@ -97,6 +98,21 @@ static void sgx_epc_initialization(DeviceState *dev)
sgx_epc->size += memory_device_get_region_size(md, &errp);
}
+static bool check_reset_from_guest(void)
+{
+ CPUState *cs = first_cpu;
+ X86CPU *cpu = X86_CPU(cs);
+ CPUX86State *env = &cpu->env;
+
+ cpu_synchronize_state(cs);
+
+ if (env->cr[0] & CR0_PE_MASK) {
+ return true;
+ }
+
+ return false;
+}
+
static void sgx_epc_reset(void *opaque)
{
DeviceState *dev = opaque;
@@ -104,6 +120,9 @@ static void sgx_epc_reset(void *opaque)
Error *errp = NULL;
int fd;
+ if (!check_reset_from_guest())
+ return;
+
if (!epc->hostmem) {
error_setg(&errp, "'" SGX_EPC_MEMDEV_PROP "' property is not set");
return;
--
2.31.1
- [PULL 18/36] i386: Add get/set/migrate support for SGX_LEPUBKEYHASH MSRs, (continued)
- [PULL 18/36] i386: Add get/set/migrate support for SGX_LEPUBKEYHASH MSRs, Paolo Bonzini, 2021/09/06
- [PULL 21/36] i386: kvm: Add support for exposing PROVISIONKEY to guest, Paolo Bonzini, 2021/09/06
- [PULL 23/36] Adjust min CPUID level to 0x12 when SGX is enabled, Paolo Bonzini, 2021/09/06
- [PULL 25/36] hw/i386/pc: Account for SGX EPC sections when calculating device memory, Paolo Bonzini, 2021/09/06
- [PULL 28/36] q35: Add support for SGX EPC, Paolo Bonzini, 2021/09/06
- [PULL 27/36] i386: acpi: Add SGX EPC entry to ACPI tables, Paolo Bonzini, 2021/09/06
- [PULL 26/36] i386/pc: Add e820 entry for SGX EPC section(s), Paolo Bonzini, 2021/09/06
- [PULL 29/36] i440fx: Add support for SGX EPC, Paolo Bonzini, 2021/09/06
- [PULL 31/36] sgx-epc: Add the reset interface for sgx-epc virt device, Paolo Bonzini, 2021/09/06
- [PULL 30/36] hostmem-epc: Add the reset interface for EPC backend reset, Paolo Bonzini, 2021/09/06
- [PULL 32/36] sgx-epc: Avoid bios reset during sgx epc initialization,
Paolo Bonzini <=
- [PULL 33/36] hostmem-epc: Make prealloc consistent with qemu cmdline during reset, Paolo Bonzini, 2021/09/06
- [PULL 35/36] sgx-epc: Add the fill_device_info() callback support, Paolo Bonzini, 2021/09/06
- [PULL 34/36] Kconfig: Add CONFIG_SGX support, Paolo Bonzini, 2021/09/06
- [PULL 36/36] doc: Add the SGX doc, Paolo Bonzini, 2021/09/06
- Re: [PULL 00/36] (Mostly) x86 changes for 2021-09-06, Peter Maydell, 2021/09/06