On Sun, Nov 15, 2020 at 12:40:44PM +0800, Hillf Danton wrote: > On Fri, 13 Nov 2020 00:01:23 +0200 Jarkko Sakkinen wrote: > > > > +long sgx_ioctl(struct file *filep, unsigned int cmd, unsigned long arg) > > +{ > > + struct sgx_encl *encl = filep->private_data; > > + int ret; > > + > > + if (test_and_set_bit(SGX_ENCL_IOCTL, &encl->flags)) > > + return -EBUSY; > > Looks like encl->ioctl_mutex is needed to exlusively serialize > concurrent ioctl threads and make encl->flags free of the duty. > Plus it can cut the confusing EBUSY in userspace as it is not > a critical path in any form. The reason it is there was lock juggling with sgx_encl_grow() [*]. Andd since you never should use these ioctl's in parallel so why not explicitly signal it to the user space? [*] https://lore.kernel.org/linux-sgx/20190827001128.25066-4-sean.j.christopherson@xxxxxxxxx/ /Jarkko