From: Jarkko Sakkinen <jarkko@kernel.org>
To: Jarkko Sakkinen <jarkko@kernel.org>,
Dave Hansen <dave.hansen@linux.intel.com>,
Thomas Gleixner <tglx@linutronix.de>,
Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
x86@kernel.org, "H. Peter Anvin" <hpa@zytor.com>,
Jethro Beekman <jethro@fortanix.com>,
Sean Christopherson <seanjc@google.com>
Cc: reinette.chatre@intel.com, tony.luck@intel.com,
nathaniel@profian.com, stable@vger.kernel.org,
Borislav Petkov <bp@suse.de>,
linux-sgx@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [PATCH] x86/sgx: Free backing memory after faulting the enclave page
Date: Thu, 4 Nov 2021 01:22:38 +0200 [thread overview]
Message-ID: <20211103232238.110557-1-jarkko@kernel.org> (raw)
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
next reply other threads:[~2021-11-03 23:22 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-11-03 23:22 Jarkko Sakkinen [this message]
2021-11-04 13:50 ` [PATCH] x86/sgx: Free backing memory after faulting the enclave page Dave Hansen
2021-11-04 15:04 ` Jarkko Sakkinen
2021-11-04 15:09 ` Jarkko Sakkinen
2021-11-04 15:13 ` Dave Hansen
2021-11-04 15:25 ` Jarkko Sakkinen
2021-11-04 15:29 ` Dave Hansen
2021-11-07 19:42 ` Jarkko Sakkinen
2021-11-07 19:51 ` Dave Hansen
2021-11-07 22:28 ` Jarkko Sakkinen
2021-11-08 6:34 ` Dave Hansen
2021-11-08 20:07 ` Jarkko Sakkinen
2021-11-04 22:38 ` Dave Hansen
2021-11-07 18:06 ` Jarkko Sakkinen
2021-11-07 19:06 ` Dave Hansen
2021-11-07 19:45 ` Jarkko Sakkinen
2021-11-07 19:58 ` Dave Hansen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20211103232238.110557-1-jarkko@kernel.org \
--to=jarkko@kernel.org \
--cc=bp@alien8.de \
--cc=bp@suse.de \
--cc=dave.hansen@linux.intel.com \
--cc=hpa@zytor.com \
--cc=jethro@fortanix.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-sgx@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=nathaniel@profian.com \
--cc=reinette.chatre@intel.com \
--cc=seanjc@google.com \
--cc=stable@vger.kernel.org \
--cc=tglx@linutronix.de \
--cc=tony.luck@intel.com \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox