* [PATCHv4] x86/sgx: Avoid softlockup from sgx_vepc_release
@ 2023-09-06 13:17 Jack Wang
2023-09-06 21:57 ` Ingo Molnar
0 siblings, 1 reply; 2+ messages in thread
From: Jack Wang @ 2023-09-06 13:17 UTC (permalink / raw)
To: x86; +Cc: Jarkko Sakkinen, Haitao Huang, stable, Yu Zhang, Kai Huang
We hit softlocup with following call trace:
? asm_sysvec_apic_timer_interrupt+0x16/0x20
xa_erase+0x21/0xb0
? sgx_free_epc_page+0x20/0x50
sgx_vepc_release+0x75/0x220
__fput+0x89/0x250
task_work_run+0x59/0x90
do_exit+0x337/0x9a0
Similar like commit 8795359e35bc ("x86/sgx: Silence softlockup detection
when releasing large enclaves"). The test system has 64GB of enclave memory,
and all assigned to a single VM. Release vepc take longer time and triggers
the softlockup warning.
Add cond_resched() to give other tasks a chance to run and placate
the softlockup detector.
Cc: Jarkko Sakkinen <jarkko@kernel.org>
Cc: Haitao Huang <haitao.huang@linux.intel.com>
Cc: stable@vger.kernel.org
Cc: x86@kernel.org
Fixes: 540745ddbc70 ("x86/sgx: Introduce virtual EPC for use by KVM guests")
Reported-by: Yu Zhang <yu.zhang@ionos.com>
Tested-by: Yu Zhang <yu.zhang@ionos.com>
Acked-by: Haitao Huang <haitao.huang@linux.intel.com>
Reviewed-by: Jarkko Sakkinen <jarkko@kernel.org>
Reviewed-by: Kai Huang <kai.huang@intel.com>
Signed-off-by: Jack Wang <jinpu.wang@ionos.com>
---
v4: add rob from Kai.
arch/x86/kernel/cpu/sgx/virt.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/arch/x86/kernel/cpu/sgx/virt.c b/arch/x86/kernel/cpu/sgx/virt.c
index c3e37eaec8ec..7aaa3652e31d 100644
--- a/arch/x86/kernel/cpu/sgx/virt.c
+++ b/arch/x86/kernel/cpu/sgx/virt.c
@@ -204,6 +204,7 @@ static int sgx_vepc_release(struct inode *inode, struct file *file)
continue;
xa_erase(&vepc->page_array, index);
+ cond_resched();
}
/*
@@ -222,6 +223,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();
}
/*
@@ -243,6 +245,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))
--
2.34.1
^ permalink raw reply related [flat|nested] 2+ messages in thread* Re: [PATCHv4] x86/sgx: Avoid softlockup from sgx_vepc_release
2023-09-06 13:17 [PATCHv4] x86/sgx: Avoid softlockup from sgx_vepc_release Jack Wang
@ 2023-09-06 21:57 ` Ingo Molnar
0 siblings, 0 replies; 2+ messages in thread
From: Ingo Molnar @ 2023-09-06 21:57 UTC (permalink / raw)
To: Jack Wang; +Cc: x86, Jarkko Sakkinen, Haitao Huang, stable, Yu Zhang, Kai Huang
* Jack Wang <jinpu.wang@ionos.com> wrote:
> We hit softlocup with following call trace:
>
> ? asm_sysvec_apic_timer_interrupt+0x16/0x20
> xa_erase+0x21/0xb0
> ? sgx_free_epc_page+0x20/0x50
> sgx_vepc_release+0x75/0x220
> __fput+0x89/0x250
> task_work_run+0x59/0x90
> do_exit+0x337/0x9a0
>
> Similar like commit 8795359e35bc ("x86/sgx: Silence softlockup detection
> when releasing large enclaves"). The test system has 64GB of enclave memory,
> and all assigned to a single VM. Release vepc take longer time and triggers
> the softlockup warning.
>
> Add cond_resched() to give other tasks a chance to run and placate
> the softlockup detector.
I've rewritten the changelog: it's not just a change to 'placate' the
softlockup detector, the SGX code was causing *real*, very long
non-preemptible delays in the kernel. That's a real kernel bug, not some
softlockup whingle that needs to be silenced ...
So what this patch does is to break up those delays & latencies, and that
softlockup doesn't warn anymore is a side effect fix.
I've changed the description accordingly, and applied it to tip:x86/urgent.
Thanks,
Ingo
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2023-09-06 21:57 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-09-06 13:17 [PATCHv4] x86/sgx: Avoid softlockup from sgx_vepc_release Jack Wang
2023-09-06 21:57 ` Ingo Molnar
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).