diff mbox series

[v4,3/5] x86/sgx: Optimize the free_cnt count in sgx_epc_section

Message ID 20210201132653.35690-4-tianjia.zhang@linux.alibaba.com (mailing list archive)
State New, archived
Headers show
Series Some optimizations related to sgx | expand

Commit Message

tianjia.zhang Feb. 1, 2021, 1:26 p.m. UTC
'section->free_cnt' represents the free page in sgx_epc_section,
which is assigned once after initialization. In fact, just after the
initialization is completed, the pages are in the init_laundry_list
list and cannot be allocated. This needs to be recovered by EREMOVE
of function sgx_sanitize_section() before it can be used as a page
that can be allocated. The sgx_sanitize_section() will be called in
the kernel thread ksgxd.

This patch moves the initialization of 'section->free_cnt' from the
initialization function sgx_setup_epc_section() to the function
sgx_sanitize_section(), and then accumulates the count after the
successful execution of EREMOVE. This seems to be more reasonable,
free_cnt will also truly reflect the allocatable free pages in EPC.

Sined-off-by: Tianjia Zhang <tianjia.zhang@linux.alibaba.com>
Reviewed-by: Sean Christopherson <seanjc@google.com>
---
 arch/x86/kernel/cpu/sgx/main.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Jarkko Sakkinen Feb. 2, 2021, 9:54 p.m. UTC | #1
On Mon, Feb 01, 2021 at 09:26:51PM +0800, Tianjia Zhang wrote:
> 'section->free_cnt' represents the free page in sgx_epc_section,
> which is assigned once after initialization. In fact, just after the
> initialization is completed, the pages are in the init_laundry_list
> list and cannot be allocated. This needs to be recovered by EREMOVE
> of function sgx_sanitize_section() before it can be used as a page
> that can be allocated. The sgx_sanitize_section() will be called in
> the kernel thread ksgxd.
> 
> This patch moves the initialization of 'section->free_cnt' from the
> initialization function sgx_setup_epc_section() to the function
> sgx_sanitize_section(), and then accumulates the count after the
> successful execution of EREMOVE. This seems to be more reasonable,
> free_cnt will also truly reflect the allocatable free pages in EPC.
> 
> Sined-off-by: Tianjia Zhang <tianjia.zhang@linux.alibaba.com>
> Reviewed-by: Sean Christopherson <seanjc@google.com>

I just copy-paste my earlier response to save time sice you  seem
to save time by ignoring it and spamming with the same obviously
illegit patch.

https://lore.kernel.org/linux-sgx/YBGlodsOaX4cWAtl@kernel.org/

/Jarkko
tianjia.zhang Feb. 11, 2021, 6:05 a.m. UTC | #2
On 2/3/21 5:54 AM, Jarkko Sakkinen wrote:
> On Mon, Feb 01, 2021 at 09:26:51PM +0800, Tianjia Zhang wrote:
>> 'section->free_cnt' represents the free page in sgx_epc_section,
>> which is assigned once after initialization. In fact, just after the
>> initialization is completed, the pages are in the init_laundry_list
>> list and cannot be allocated. This needs to be recovered by EREMOVE
>> of function sgx_sanitize_section() before it can be used as a page
>> that can be allocated. The sgx_sanitize_section() will be called in
>> the kernel thread ksgxd.
>>
>> This patch moves the initialization of 'section->free_cnt' from the
>> initialization function sgx_setup_epc_section() to the function
>> sgx_sanitize_section(), and then accumulates the count after the
>> successful execution of EREMOVE. This seems to be more reasonable,
>> free_cnt will also truly reflect the allocatable free pages in EPC.
>>
>> Sined-off-by: Tianjia Zhang <tianjia.zhang@linux.alibaba.com>
>> Reviewed-by: Sean Christopherson <seanjc@google.com>
> 
> I just copy-paste my earlier response to save time sice you  seem
> to save time by ignoring it and spamming with the same obviously
> illegit patch.
> 
> https://lore.kernel.org/linux-sgx/YBGlodsOaX4cWAtl@kernel.org/
> 
> /Jarkko
> 

Sorry for the late reply, I already responded in the original email.

Best regards,
Tianjia
diff mbox series

Patch

diff --git a/arch/x86/kernel/cpu/sgx/main.c b/arch/x86/kernel/cpu/sgx/main.c
index 4465912174fd..e455ec7b3449 100644
--- a/arch/x86/kernel/cpu/sgx/main.c
+++ b/arch/x86/kernel/cpu/sgx/main.c
@@ -48,6 +48,7 @@  static void sgx_sanitize_section(struct sgx_epc_section *section)
 		if (!ret) {
 			spin_lock(&section->lock);
 			list_move(&page->list, &section->page_list);
+			section->free_cnt++;
 			spin_unlock(&section->lock);
 		} else
 			list_move_tail(&page->list, &dirty);
@@ -643,7 +644,6 @@  static bool __init sgx_setup_epc_section(u64 phys_addr, u64 size,
 		list_add_tail(&section->pages[i].list, &section->init_laundry_list);
 	}
 
-	section->free_cnt = nr_pages;
 	return true;
 }