[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL v4 33/43] sgx-epc: Avoid bios reset during sgx epc initialization
From: |
Paolo Bonzini |
Subject: |
[PULL v4 33/43] sgx-epc: Avoid bios reset during sgx epc initialization |
Date: |
Wed, 8 Sep 2021 12:04:16 +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 v4 36/43] sgx-epc: Add the fill_device_info() callback support, (continued)
- [PULL v4 36/43] sgx-epc: Add the fill_device_info() callback support, Paolo Bonzini, 2021/09/08
- [PULL v4 40/43] docs/system: move x86 CPU configuration to a separate document, Paolo Bonzini, 2021/09/08
- [PULL v4 39/43] docs/system: standardize man page sections to --- with overline, Paolo Bonzini, 2021/09/08
- [PULL v4 23/43] i386: Propagate SGX CPUID sub-leafs to KVM, Paolo Bonzini, 2021/09/08
- [PULL v4 25/43] hw/i386/fw_cfg: Set SGX bits in feature control fw_cfg accordingly, Paolo Bonzini, 2021/09/08
- [PULL v4 28/43] i386: acpi: Add SGX EPC entry to ACPI tables, Paolo Bonzini, 2021/09/08
- [PULL v4 26/43] hw/i386/pc: Account for SGX EPC sections when calculating device memory, Paolo Bonzini, 2021/09/08
- [PULL v4 29/43] q35: Add support for SGX EPC, Paolo Bonzini, 2021/09/08
- [PULL v4 31/43] hostmem-epc: Add the reset interface for EPC backend reset, Paolo Bonzini, 2021/09/08
- [PULL v4 33/43] sgx-epc: Avoid bios reset during sgx epc initialization,
Paolo Bonzini <=
- [PULL v4 37/43] docs: standardize book titles to === with overline, Paolo Bonzini, 2021/09/08
- [PULL v4 34/43] hostmem-epc: Make prealloc consistent with qemu cmdline during reset, Paolo Bonzini, 2021/09/08
- [PULL v4 35/43] Kconfig: Add CONFIG_SGX support, Paolo Bonzini, 2021/09/08
- [PULL v4 38/43] docs: standardize directory index to --- with overline, Paolo Bonzini, 2021/09/08
- [PULL v4 41/43] docs/system: Add SGX documentation to the system manual, Paolo Bonzini, 2021/09/08
- [PULL v4 16/43] i386: Add SGX CPUID leaf FEAT_SGX_12_0_EBX, Paolo Bonzini, 2021/09/08
- [PULL v4 30/43] i440fx: Add support for SGX EPC, Paolo Bonzini, 2021/09/08
- [PULL v4 20/43] i386: Add feature control MSR dependency when SGX is enabled, Paolo Bonzini, 2021/09/08