On Wed, Mar 04, 2020 at 01:36:03AM +0200, Jarkko Sakkinen wrote: > +static void sgx_reclaimer_write(struct sgx_epc_page *epc_page, > + struct sgx_backing *backing) > +{ > + struct sgx_encl_page *encl_page = epc_page->owner; > + struct sgx_encl *encl = encl_page->encl; > + struct sgx_backing secs_backing; > + int ret; > + > + mutex_lock(&encl->lock); > + > + if (atomic_read(&encl->flags) & SGX_ENCL_DEAD) { > + ret = __eremove(sgx_epc_addr(epc_page)); > + WARN(ret, "EREMOVE returned %d\n", ret); This should use ENCLS_WARN(). > + } else { > + sgx_encl_ewb(epc_page, backing); > + } > + > + encl_page->epc_page = NULL; > + encl->secs_child_cnt--; > + > + if (!encl->secs_child_cnt) { > + if (atomic_read(&encl->flags) & SGX_ENCL_DEAD) { > + sgx_free_page(encl->secs.epc_page); > + encl->secs.epc_page = NULL; > + } else if (atomic_read(&encl->flags) & SGX_ENCL_INITIALIZED) { > + ret = sgx_encl_get_backing(encl, PFN_DOWN(encl->size), > + &secs_backing); > + if (ret) > + goto out; > + > + sgx_encl_ewb(encl->secs.epc_page, &secs_backing); > + > + sgx_free_page(encl->secs.epc_page); > + encl->secs.epc_page = NULL; > + > + sgx_encl_put_backing(&secs_backing, true); > + } > + } > + > +out: > + mutex_unlock(&encl->lock); > +}