lkml.org 
[lkml]   [2021]   [Dec]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v8 19/40] KVM: SVM: Update the SEV-ES save area mapping
    Date
    From: Tom Lendacky <thomas.lendacky@amd.com>

    This is the final step in defining the multiple save areas to keep them
    separate and ensuring proper operation amongst the different types of
    guests. Update the SEV-ES/SEV-SNP save area to match the APM. This save
    area will be used for the upcoming SEV-SNP AP Creation NAE event support.

    Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com>
    Signed-off-by: Brijesh Singh <brijesh.singh@amd.com>
    ---
    arch/x86/include/asm/svm.h | 66 +++++++++++++++++++++++++++++---------
    1 file changed, 50 insertions(+), 16 deletions(-)

    diff --git a/arch/x86/include/asm/svm.h b/arch/x86/include/asm/svm.h
    index 5ff1fa364a31..7d90321e7775 100644
    --- a/arch/x86/include/asm/svm.h
    +++ b/arch/x86/include/asm/svm.h
    @@ -290,7 +290,13 @@ struct sev_es_save_area {
    struct vmcb_seg ldtr;
    struct vmcb_seg idtr;
    struct vmcb_seg tr;
    - u8 reserved_1[43];
    + u64 vmpl0_ssp;
    + u64 vmpl1_ssp;
    + u64 vmpl2_ssp;
    + u64 vmpl3_ssp;
    + u64 u_cet;
    + u8 reserved_1[2];
    + u8 vmpl;
    u8 cpl;
    u8 reserved_2[4];
    u64 efer;
    @@ -303,9 +309,19 @@ struct sev_es_save_area {
    u64 dr6;
    u64 rflags;
    u64 rip;
    - u8 reserved_4[88];
    + u64 dr0;
    + u64 dr1;
    + u64 dr2;
    + u64 dr3;
    + u64 dr0_addr_mask;
    + u64 dr1_addr_mask;
    + u64 dr2_addr_mask;
    + u64 dr3_addr_mask;
    + u8 reserved_4[24];
    u64 rsp;
    - u8 reserved_5[24];
    + u64 s_cet;
    + u64 ssp;
    + u64 isst_addr;
    u64 rax;
    u64 star;
    u64 lstar;
    @@ -316,7 +332,7 @@ struct sev_es_save_area {
    u64 sysenter_esp;
    u64 sysenter_eip;
    u64 cr2;
    - u8 reserved_6[32];
    + u8 reserved_5[32];
    u64 g_pat;
    u64 dbgctl;
    u64 br_from;
    @@ -325,12 +341,12 @@ struct sev_es_save_area {
    u64 last_excp_to;
    u8 reserved_7[80];
    u32 pkru;
    - u8 reserved_9[20];
    - u64 reserved_10; /* rax already available at 0x01f8 */
    + u8 reserved_8[20];
    + u64 reserved_9; /* rax already available at 0x01f8 */
    u64 rcx;
    u64 rdx;
    u64 rbx;
    - u64 reserved_11; /* rsp already available at 0x01d8 */
    + u64 reserved_10; /* rsp already available at 0x01d8 */
    u64 rbp;
    u64 rsi;
    u64 rdi;
    @@ -342,16 +358,34 @@ struct sev_es_save_area {
    u64 r13;
    u64 r14;
    u64 r15;
    - u8 reserved_12[16];
    - u64 sw_exit_code;
    - u64 sw_exit_info_1;
    - u64 sw_exit_info_2;
    - u64 sw_scratch;
    + u8 reserved_11[16];
    + u64 guest_exit_info_1;
    + u64 guest_exit_info_2;
    + u64 guest_exit_int_info;
    + u64 guest_nrip;
    u64 sev_features;
    - u8 reserved_13[48];
    + u64 vintr_ctrl;
    + u64 guest_exit_code;
    + u64 virtual_tom;
    + u64 tlb_id;
    + u64 pcpu_id;
    + u64 event_inj;
    u64 xcr0;
    - u8 valid_bitmap[16];
    - u64 x87_state_gpa;
    + u8 reserved_12[16];
    +
    + /* Floating point area */
    + u64 x87_dp;
    + u32 mxcsr;
    + u16 x87_ftw;
    + u16 x87_fsw;
    + u16 x87_fcw;
    + u16 x87_fop;
    + u16 x87_ds;
    + u16 x87_cs;
    + u64 x87_rip;
    + u8 fpreg_x87[80];
    + u8 fpreg_xmm[256];
    + u8 fpreg_ymm[256];
    } __packed;

    struct ghcb_save_area {
    @@ -410,7 +444,7 @@ struct ghcb {

    #define EXPECTED_VMCB_SAVE_AREA_SIZE 740
    #define EXPECTED_GHCB_SAVE_AREA_SIZE 1032
    -#define EXPECTED_SEV_ES_SAVE_AREA_SIZE 1032
    +#define EXPECTED_SEV_ES_SAVE_AREA_SIZE 1648
    #define EXPECTED_VMCB_CONTROL_AREA_SIZE 1024
    #define EXPECTED_GHCB_SIZE PAGE_SIZE

    --
    2.25.1
    \
     
     \ /
      Last update: 2021-12-10 16:46    [W:4.052 / U:0.376 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site