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