Re: [PATCH 1/4] x86/sgx: Track phase and type of SGX EPC pages
From: Reinette Chatre
Date: Wed Jul 14 2021 - 16:42:20 EST
Hi Tony,
On 7/8/2021 11:14 AM, Tony Luck wrote:
Add a type field to struct epc_page for how an in-use page has been
allocated. Re-use "enum sgx_page_type" for this type, with a couple
of additions for s/w types.
Tracking the enclave page type is a useful addition that will also help
the SGX2 support where some instructions (ENCLS[EMODPR]) are only
allowed on pages with particular type.
Could this tracking be done at the enclave page (struct sgx_encl_page)
instead? The enclave page's EPC page information is not available when
the page is in swap and it would be useful to know the page type without
loading the page from swap. The information would continue to be
accessible from struct epc_page via the owner pointer that may make some
of the changes easier since it would not be needed to pass the page type
around so much and thus possibly address the SECS page issue that Sean
pointed out in
https://lore.kernel.org/lkml/YO3FuBupQTKYaKBf@xxxxxxxxxx/
diff --git a/arch/x86/kernel/cpu/sgx/sgx.h b/arch/x86/kernel/cpu/sgx/sgx.h
index 4628acec0009..e43d3c27eb96 100644
--- a/arch/x86/kernel/cpu/sgx/sgx.h
+++ b/arch/x86/kernel/cpu/sgx/sgx.h
@@ -26,9 +26,19 @@
/* Pages, which are being tracked by the page reclaimer. */
#define SGX_EPC_PAGE_RECLAIMER_TRACKED BIT(0)
+/* Pages, on the "sgx_dirty_page_list" */
+#define SGX_EPC_PAGE_DIRTY BIT(1)
+
+/* Pages, on one of the node free lists */
+#define SGX_EPC_PAGE_FREE BIT(2)
+
+/* Pages, with h/w poison errors */
+#define SGX_EPC_PAGE_POISON BIT(3)
+
struct sgx_epc_page {
unsigned int section;
- unsigned int flags;
+ u16 flags;
+ u16 type;
Could this be "enum sgx_page_type type" ?
Reinette