diff options
author | Ingo Molnar <mingo@kernel.org> | 2018-09-25 11:19:44 +0200 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2018-09-25 11:19:44 +0200 |
commit | fb437bc8fe36c964d9bf2f4b568e6c77c235c5e3 (patch) | |
tree | 7d3a08a88aad2e7541231f0241d97e64df4a4208 /arch/x86/mm/mem_encrypt.c | |
parent | 49e73246cbe6fe0df9cae2db87f31cdc3a0b2b61 (diff) | |
parent | 6bf4ca7fbc85d80446ac01c0d1d77db4d91a6d84 (diff) | |
download | talos-op-linux-fb437bc8fe36c964d9bf2f4b568e6c77c235c5e3.tar.gz talos-op-linux-fb437bc8fe36c964d9bf2f4b568e6c77c235c5e3.zip |
Merge tag 'v4.19-rc5' into perf/core, to pick up fixes
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'arch/x86/mm/mem_encrypt.c')
-rw-r--r-- | arch/x86/mm/mem_encrypt.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/arch/x86/mm/mem_encrypt.c b/arch/x86/mm/mem_encrypt.c index b2de398d1fd3..006f373f54ab 100644 --- a/arch/x86/mm/mem_encrypt.c +++ b/arch/x86/mm/mem_encrypt.c @@ -348,6 +348,30 @@ bool sev_active(void) EXPORT_SYMBOL(sev_active); /* Architecture __weak replacement functions */ +void __init mem_encrypt_free_decrypted_mem(void) +{ + unsigned long vaddr, vaddr_end, npages; + int r; + + vaddr = (unsigned long)__start_bss_decrypted_unused; + vaddr_end = (unsigned long)__end_bss_decrypted; + npages = (vaddr_end - vaddr) >> PAGE_SHIFT; + + /* + * The unused memory range was mapped decrypted, change the encryption + * attribute from decrypted to encrypted before freeing it. + */ + if (mem_encrypt_active()) { + r = set_memory_encrypted(vaddr, npages); + if (r) { + pr_warn("failed to free unused decrypted pages\n"); + return; + } + } + + free_init_pages("unused decrypted", vaddr, vaddr_end); +} + void __init mem_encrypt_init(void) { if (!sme_me_mask) |