deleted file mode 100644
@@ -1,7 +0,0 @@
-/* SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause) */
-#ifndef _X86_ASM_SGX_H
-#define _X86_ASM_SGX_H
-
-void sgx_init(void);
-
-#endif /* _X86_ASM_SGX_H */
@@ -31,10 +31,6 @@
#include <asm/apic.h>
#endif
-#ifdef CONFIG_INTEL_SGX
-#include <asm/sgx.h>
-#endif
-
/*
* Just in case our CPU detection goes bad, or you have a weird system,
* allow a way to override the automatic disabling of MPX.
@@ -653,7 +649,6 @@ static void __maybe_unused detect_sgx(struct cpuinfo_x86 *c)
goto err_msrs_rdonly;
}
- sgx_init();
return;
err_unsupported:
@@ -158,7 +158,7 @@ void sgx_free_page(struct sgx_epc_page *page)
WARN(ret > 0, "sgx: EREMOVE returned %d (0x%x)", ret, ret);
}
-static void sgx_free_epc_section(struct sgx_epc_section *section)
+static void __init sgx_free_epc_section(struct sgx_epc_section *section)
{
struct sgx_epc_page *page;
@@ -179,8 +179,9 @@ static void sgx_free_epc_section(struct sgx_epc_section *section)
memunmap(section->va);
}
-static bool sgx_alloc_epc_section(u64 addr, u64 size, unsigned long index,
- struct sgx_epc_section *section)
+static bool __init sgx_alloc_epc_section(u64 addr, u64 size,
+ unsigned long index,
+ struct sgx_epc_section *section)
{
unsigned long nr_pages = size >> PAGE_SHIFT;
struct sgx_epc_page *page;
@@ -212,7 +213,7 @@ static bool sgx_alloc_epc_section(u64 addr, u64 size, unsigned long index,
return false;
}
-static void sgx_page_cache_teardown(void)
+static void __init sgx_page_cache_teardown(void)
{
int i;
@@ -225,13 +226,13 @@ static void sgx_page_cache_teardown(void)
* bits 12-31 of the metric and @high bits 0-19 define the bits 32-51 of the
* metric.
*/
-static inline u64 sgx_calc_section_metric(u64 low, u64 high)
+static inline u64 __init sgx_calc_section_metric(u64 low, u64 high)
{
return (low & GENMASK_ULL(31, 12)) +
((high & GENMASK_ULL(19, 0)) << 32);
}
-static bool sgx_page_cache_init(void)
+static bool __init sgx_page_cache_init(void)
{
u32 eax, ebx, ecx, edx, type;
u64 pa, size;
@@ -278,7 +279,7 @@ static bool sgx_page_cache_init(void)
return true;
}
-void sgx_init(void)
+static void __init sgx_init(void)
{
int ret;
@@ -303,3 +304,4 @@ void sgx_init(void)
err_page_cache:
sgx_page_cache_teardown();
}
+arch_initcall(sgx_init);
@@ -97,7 +97,7 @@ static int ksgxswapd(void *p)
return 0;
}
-bool sgx_page_reclaimer_init(void)
+bool __init sgx_page_reclaimer_init(void)
{
struct task_struct *tsk;
@@ -76,7 +76,7 @@ extern struct wait_queue_head(ksgxswapd_waitq);
extern struct list_head sgx_active_page_list;
extern spinlock_t sgx_active_page_list_lock;
-bool sgx_page_reclaimer_init(void);
+bool __init sgx_page_reclaimer_init(void);
void sgx_mark_page_reclaimable(struct sgx_epc_page *page);
void sgx_reclaim_pages(void);
Calling sgx_init() from sgx_detect() causes panic during early boot because sgx_init() is intended to be run only on the boot CPU, whereas init_intel() and thus sgx_detect() is run on every CPU, including hotplugged CPUs. Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com> --- arch/x86/include/asm/sgx.h | 7 ------- arch/x86/kernel/cpu/intel.c | 5 ----- arch/x86/kernel/cpu/sgx/main.c | 16 +++++++++------- arch/x86/kernel/cpu/sgx/reclaim.c | 2 +- arch/x86/kernel/cpu/sgx/sgx.h | 2 +- 5 files changed, 11 insertions(+), 21 deletions(-) delete mode 100644 arch/x86/include/asm/sgx.h