On Tue, 16 Mar 2021 14:46:05 +0200 Jarkko Sakkinen wrote: > On Mon, Mar 15, 2021 at 06:13:53PM -0700, Sean Christopherson wrote: > > On Tue, Mar 16, 2021, Jarkko Sakkinen wrote: > > > On Tue, Mar 16, 2021 at 01:05:05AM +0200, Jarkko Sakkinen wrote: > > > > The way I've understood it is that given that KVM can support SGX > > > > without FLC, vEPC should be available even if driver cannot be > > > > enabled. > > > > > > > > This is also exactly what the short summary states. > > > > > > > > "Initialize virtual EPC driver even when SGX driver is disabled" > > > > > > > > It *does not* state: > > > > > > > > "Initialize SGX driver even when vEPC driver is disabled" > > > > > > > > Also, this is how I interpret the inline comment. > > > > > > > > All this considered, the other direction is undocumented functionality. > > > > > > Also: > > > > > > 1. There is *zero* good practical reasons to support the "2nd direction". > > > > Uh, yes there is. CONFIG_KVM_INTEL=n and X86_FEATURE_VMX=n, either of which > > will cause vEPC initialization to fail. The former is obvious, the latter is > > possible via BIOS configuration. > > Hmm... So you make the checks as if ret != -ENODEV? That's the sane way to > deal with that situation IMHO. > > /Jarkko OK. I actually wrote the code to show your idea: - ret = sgx_drv_init(); - if (ret) + /* + * Only continue to initialize SGX driver when SGX virtualization + * initialization is successful, or is not supported (-ENODEV), since + * any other initialization failure means SGX driver is unlikely to be + * initialized successfully. + */ + ret = sgx_vepc_init(); + if (ret && ret != -ENODEV) goto err_kthread; + if (sgx_drv_init()) { + /* + * Cleanup when *both* SGX virtualization and SGX driver are + * not enabled, due to either not supported (-ENODEV), or + * somehow fail to initialize. + */ + if (ret && ret != -ENODEV) + goto err_kthread; + } + return 0; err_kthread: Is this the code you want?