On Tue, 2023-10-03 at 00:15 -0500, Haitao Huang wrote: > On Thu, 28 Sep 2023 04:41:33 -0500, Huang, Kai <kai.huang@xxxxxxxxx> wrote: > > > > > > --- a/arch/x86/kernel/cpu/sgx/encl.c > > > +++ b/arch/x86/kernel/cpu/sgx/encl.c > > > @@ -746,6 +746,7 @@ void sgx_encl_release(struct kref *ref) > > > xa_destroy(&encl->page_array); > > > > > > if (!encl->secs_child_cnt && encl->secs.epc_page) { > > > + sgx_drop_epc_page(encl->secs.epc_page); > > > sgx_encl_free_epc_page(encl->secs.epc_page); > > > encl->secs.epc_page = NULL; > > > } > > > > The "record" of SECS/VA pages should be done together with this. I see > > no > > reason why the "record" and "drop" are separated into different patches. > > "record" of SECS/VA pages are done in this patch. Before nothing done in > "record" for them because no tracking LRU lists for them. Now they are > tracked. > > I was talking about calling sgx_record_epc_page() for SECS/VA: @@ -113,6 +113,9 @@ static int sgx_encl_create(struct sgx_encl *encl, struct sgx_secs *secs) encl->attributes = secs->attributes; encl->attributes_mask = SGX_ATTR_UNPRIV_MASK; + sgx_record_epc_page(encl->secs.epc_page, + SGX_EPC_PAGE_UNRECLAIMABLE); This piece of code *literally* does the record.