lkml.org 
[lkml]   [2021]   [Nov]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH] x86/sgx: Free backing memory after faulting the enclave page
    Date
    The backing memory was not freed, after loading it back to the SGX
    reserved memory. This problem was not prevalent with the systems that
    were available at the time when SGX was first upstreamed, as the swapped
    memory could grow only up to 128 MB. However, Icelake Server can have
    gigabytes of SGX memory, and thus this has become a real bottleneck.

    Free the swap space for other use by calling shmem_truncate_range(),
    when a page is faulted back.

    Cc: stable@vger.kernel.org
    Fixes: 1728ab54b4be ("x86/sgx: Add a page reclaimer")
    Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org>
    ---
    arch/x86/kernel/cpu/sgx/encl.c | 4 ++++
    1 file changed, 4 insertions(+)

    diff --git a/arch/x86/kernel/cpu/sgx/encl.c b/arch/x86/kernel/cpu/sgx/encl.c
    index 001808e3901c..f2d3f2e5028f 100644
    --- a/arch/x86/kernel/cpu/sgx/encl.c
    +++ b/arch/x86/kernel/cpu/sgx/encl.c
    @@ -22,6 +22,7 @@ static int __sgx_encl_eldu(struct sgx_encl_page *encl_page,
    {
    unsigned long va_offset = encl_page->desc & SGX_ENCL_PAGE_VA_OFFSET_MASK;
    struct sgx_encl *encl = encl_page->encl;
    + struct inode *inode = file_inode(encl->backing);
    struct sgx_pageinfo pginfo;
    struct sgx_backing b;
    pgoff_t page_index;
    @@ -60,6 +61,9 @@ static int __sgx_encl_eldu(struct sgx_encl_page *encl_page,

    sgx_encl_put_backing(&b, false);

    + /* Free the backing memory. */
    + shmem_truncate_range(inode, PFN_PHYS(page_index), PFN_PHYS(page_index) + PAGE_SIZE - 1);
    +
    return ret;
    }

    --
    2.32.0
    \
     
     \ /
      Last update: 2021-11-04 00:23    [W:2.522 / U:0.500 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site