[RFC PATCH v2 07/26] x86/sgx: Initialize virtual EPC driver even when SGX driver is disabled

Kai Huang
2021-01-18T03:28:36Z

Modify sgx_init() to always try to initialize the virtual EPC driver,
even if the bare-metal SGX driver is disabled. The bare-metal driver
might be disabled if SGX Launch Control is in locked mode, or not
supported in the hardware at all. This allows (non-Linux) guests that
support non-LC configurations to use SGX.

Signed-off-by: Kai Huang <kai.huang@intel.com>
---
arch/x86/kernel/cpu/sgx/main.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/arch/x86/kernel/cpu/sgx/main.c b/arch/x86/kernel/cpu/sgx/main.c
index 5e20b42f2639..bdda631c975b 100644
--- a/arch/x86/kernel/cpu/sgx/main.c
+++ b/arch/x86/kernel/cpu/sgx/main.c
@@ -12,6 +12,7 @@
#include "driver.h"
#include "encl.h"
#include "encls.h"
+#include "virt.h"

struct sgx_epc_section sgx_epc_sections[SGX_MAX_EPC_SECTIONS];
static int sgx_nr_epc_sections;
@@ -710,7 +711,8 @@ static void __init sgx_init(void)
if (!sgx_page_reclaimer_init())
goto err_page_cache;

- ret = sgx_drv_init();
+ /* Success if the native *or* virtual EPC driver initialized cleanly. */
+ ret = !!sgx_drv_init() & !!sgx_virt_epc_init();
if (ret)
goto err_kthread;

--
2.29.2