Messages in this thread Patch in this message | | | From | Kuppuswamy Sathyanarayanan <> | Subject | [PATCH v8 3/5] x86/mm: Make tdx_enc_status_changed() vmalloc address compatible | Date | Wed, 8 Jun 2022 19:52:18 -0700 |
| |
set_memory_*crypted() APIs are used to change encryption or decryption page attributes for the given address. It also by default support the conversion for the vmalloc'ed memory address.
In TDX Guest, tdx_enc_status_changed() function is triggered by set_memory_*crypted() APIs when converting memory from/to shared or private. Internally this function uses __pa() for physical address conversion, which breaks the vmalloc address compatibility of the set_memory_*crypted() APIs.
So add support to fix the vmalloc'ed address compatibility issue.
Acked-by: Wander Lairson Costa <wander@redhat.com> Signed-off-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com> --- arch/x86/coco/tdx/tdx.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/arch/x86/coco/tdx/tdx.c b/arch/x86/coco/tdx/tdx.c index 94542876f26a..445f58547776 100644 --- a/arch/x86/coco/tdx/tdx.c +++ b/arch/x86/coco/tdx/tdx.c @@ -15,6 +15,7 @@ #include <asm/idtentry.h> #include <asm/irq_regs.h> #include <asm/desc.h> +#include <asm/io.h> /* TDX module Call Leaf IDs */ #define TDX_GET_INFO 1 @@ -678,8 +679,14 @@ static bool try_accept_one(phys_addr_t *start, unsigned long len, */ static bool tdx_enc_status_changed(unsigned long vaddr, int numpages, bool enc) { - phys_addr_t start = __pa(vaddr); - phys_addr_t end = __pa(vaddr + numpages * PAGE_SIZE); + phys_addr_t start, end; + + if (is_vmalloc_addr((void *)vaddr)) + start = vmalloc_to_pfn((void *) vaddr) << PAGE_SHIFT; + else + start = __pa(vaddr); + + end = start + numpages * PAGE_SIZE; if (!enc) { /* Set the shared (decrypted) bits: */ -- 2.25.1
| |