From: Tom Lendacky <thomas.lenda...@amd.com>

Update the GHCB accessor functions to add functions for retrieve GHCB
fields by name. Update existing code to use the new accessor functions.

Signed-off-by: Tom Lendacky <thomas.lenda...@amd.com>
---
 arch/x86/include/asm/svm.h   | 10 ++++++++++
 arch/x86/kernel/cpu/vmware.c | 12 ++++++------
 2 files changed, 16 insertions(+), 6 deletions(-)

diff --git a/arch/x86/include/asm/svm.h b/arch/x86/include/asm/svm.h
index 71d630bb5e08..1edf24f51b53 100644
--- a/arch/x86/include/asm/svm.h
+++ b/arch/x86/include/asm/svm.h
@@ -379,6 +379,16 @@ struct vmcb {
                                (unsigned long *)&ghcb->save.valid_bitmap);     
\
        }                                                                       
\
                                                                                
\
+       static inline u64 ghcb_get_##field(struct ghcb *ghcb)                   
\
+       {                                                                       
\
+               return ghcb->save.field;                                        
\
+       }                                                                       
\
+                                                                               
\
+       static inline u64 ghcb_get_##field##_if_valid(struct ghcb *ghcb)        
\
+       {                                                                       
\
+               return ghcb_##field##_is_valid(ghcb) ? ghcb->save.field : 0;    
\
+       }                                                                       
\
+                                                                               
\
        static inline void ghcb_set_##field(struct ghcb *ghcb, u64 value)       
\
        {                                                                       
\
                __set_bit(GHCB_BITMAP_IDX(field),                               
\
diff --git a/arch/x86/kernel/cpu/vmware.c b/arch/x86/kernel/cpu/vmware.c
index 924571fe5864..c6ede3b3d302 100644
--- a/arch/x86/kernel/cpu/vmware.c
+++ b/arch/x86/kernel/cpu/vmware.c
@@ -501,12 +501,12 @@ static bool vmware_sev_es_hcall_finish(struct ghcb *ghcb, 
struct pt_regs *regs)
              ghcb_rbp_is_valid(ghcb)))
                return false;
 
-       regs->bx = ghcb->save.rbx;
-       regs->cx = ghcb->save.rcx;
-       regs->dx = ghcb->save.rdx;
-       regs->si = ghcb->save.rsi;
-       regs->di = ghcb->save.rdi;
-       regs->bp = ghcb->save.rbp;
+       regs->bx = ghcb_get_rbx(ghcb);
+       regs->cx = ghcb_get_rcx(ghcb);
+       regs->dx = ghcb_get_rdx(ghcb);
+       regs->si = ghcb_get_rsi(ghcb);
+       regs->di = ghcb_get_rdi(ghcb);
+       regs->bp = ghcb_get_rbp(ghcb);
 
        return true;
 }
-- 
2.28.0

Reply via email to