On 2018-11-02 16:11, Jarkko Sakkinen wrote:
diff --git a/arch/x86/kernel/cpu/intel_sgx.c b/arch/x86/kernel/cpu/intel_sgx.c
new file mode 100644
index 000000000000..b86aa4111592
--- /dev/null
+++ b/arch/x86/kernel/cpu/intel_sgx.c

...

+static __init int sgx_page_cache_init(void)
+{
+       u32 eax, ebx, ecx, edx, type;
+       u64 pa, size;
+       int ret;
+       int i;
+
+       BUILD_BUG_ON(SGX_MAX_EPC_SECTIONS > (SGX_EPC_SECTION_MASK + 1));
+
+       for (i = 0; i < SGX_MAX_EPC_SECTIONS; i++) {

Perhaps print a warning if there are more than SGX_MAX_EPC_SECTIONS sections reported by CPUID.

+               cpuid_count(SGX_CPUID, i + SGX_CPUID_FIRST_VARIABLE_SUB_LEAF,
+                           &eax, &ebx, &ecx, &edx);
+
+               type = eax & SGX_CPUID_SUB_LEAF_TYPE_MASK;
+               if (type == SGX_CPUID_SUB_LEAF_INVALID)
+                       break;
+               if (type != SGX_CPUID_SUB_LEAF_EPC_SECTION) {
+                       pr_err_once("sgx: Unknown sub-leaf type: %u\n", type);
+                       continue;
+               }
+
+               pa = sgx_calc_section_metric(eax, ebx);
+               size = sgx_calc_section_metric(ecx, edx);
+               pr_info("sgx: EPC section 0x%llx-0x%llx\n", pa, pa + size - 1);
+
+               ret = sgx_init_epc_section(pa, size, i, &sgx_epc_sections[i]);
+               if (ret) {
+                       sgx_page_cache_teardown();
+                       return ret;
+               }
+
+               sgx_nr_epc_sections++;
+       }
+
+       if (!sgx_nr_epc_sections) {
+               pr_err("sgx: There are zero EPC sections.\n");
+               return -ENODEV;
+       }
+
+       return 0;
+}

--
Jethro Beekman | Fortanix

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

Reply via email to