mirror of
https://github.com/hardkernel/linux.git
synced 2026-03-26 20:40:24 +09:00
x86/sgx: Break up long non-preemptible delays in sgx_vepc_release()
commit3d7d72a34eupstream. On large enclaves we hit the softlockup warning with following call trace: xa_erase() sgx_vepc_release() __fput() task_work_run() do_exit() The latency issue is similar to the one fixed in:8795359e35("x86/sgx: Silence softlockup detection when releasing large enclaves") The test system has 64GB of enclave memory, and all is assigned to a single VM. Release of 'vepc' takes a longer time and causes long latencies, which triggers the softlockup warning. Add cond_resched() to give other tasks a chance to run and reduce latencies, which also avoids the softlockup detector. [ mingo: Rewrote the changelog. ] Fixes:540745ddbc("x86/sgx: Introduce virtual EPC for use by KVM guests") Reported-by: Yu Zhang <yu.zhang@ionos.com> Signed-off-by: Jack Wang <jinpu.wang@ionos.com> Signed-off-by: Ingo Molnar <mingo@kernel.org> Tested-by: Yu Zhang <yu.zhang@ionos.com> Reviewed-by: Jarkko Sakkinen <jarkko@kernel.org> Reviewed-by: Kai Huang <kai.huang@intel.com> Acked-by: Haitao Huang <haitao.huang@linux.intel.com> Cc: stable@vger.kernel.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
7e3ddbea87
commit
861cfdc51f
@@ -167,6 +167,7 @@ static int sgx_vepc_release(struct inode *inode, struct file *file)
|
||||
continue;
|
||||
|
||||
xa_erase(&vepc->page_array, index);
|
||||
cond_resched();
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -185,6 +186,7 @@ static int sgx_vepc_release(struct inode *inode, struct file *file)
|
||||
list_add_tail(&epc_page->list, &secs_pages);
|
||||
|
||||
xa_erase(&vepc->page_array, index);
|
||||
cond_resched();
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -206,6 +208,7 @@ static int sgx_vepc_release(struct inode *inode, struct file *file)
|
||||
|
||||
if (sgx_vepc_free_page(epc_page))
|
||||
list_add_tail(&epc_page->list, &secs_pages);
|
||||
cond_resched();
|
||||
}
|
||||
|
||||
if (!list_empty(&secs_pages))
|
||||
|
||||
Reference in New Issue
Block a user