As suggested by Andy, remove the work queue in favor of handling the entire EADD flow in the context of the ioctl(). After the worker is gone, pass the source page/address directly to EADD instead of first copying the data into kernel memory. v2: - Rebase to master, commit 36e0186296a7. - Incorporate patch to require EADD be aligned, and add a selftest update to obey the new alignment requirement. Sean Christopherson (8): selftests/x86/sgx: Align enclave binary on 4k boundary x86/sgx: Require EADD source to be page aligned x86/sgx: Validate generic SECINFO immediately after copying from user x86/sgx: Set SGX_ENCL_PAGE_TCS when allocating encl_page x86/sgx: Move encl_page insertion into tree out of alloc flow x86/sgx: Allocate encl_page prior to taking encl->lock x86/sgx: Remove the EADD page worker x86/sgx: Pass userspace source address directly to EADD arch/x86/kernel/cpu/sgx/driver/ioctl.c | 405 +++++-------------- arch/x86/kernel/cpu/sgx/driver/main.c | 4 - arch/x86/kernel/cpu/sgx/encl.h | 2 - tools/testing/selftests/x86/sgx/encl_piggy.S | 1 + 4 files changed, 106 insertions(+), 306 deletions(-) -- 2.22.0