@@ -1589,16 +1589,17 @@ static void svm_clear_vintr(struct vcpu_svm *svm)
15891589static struct vmcb_seg * svm_seg (struct kvm_vcpu * vcpu , int seg )
15901590{
15911591 struct vmcb_save_area * save = & to_svm (vcpu )-> vmcb -> save ;
1592+ struct vmcb_save_area * save01 = & to_svm (vcpu )-> vmcb01 .ptr -> save ;
15921593
15931594 switch (seg ) {
15941595 case VCPU_SREG_CS : return & save -> cs ;
15951596 case VCPU_SREG_DS : return & save -> ds ;
15961597 case VCPU_SREG_ES : return & save -> es ;
1597- case VCPU_SREG_FS : return & save -> fs ;
1598- case VCPU_SREG_GS : return & save -> gs ;
1598+ case VCPU_SREG_FS : return & save01 -> fs ;
1599+ case VCPU_SREG_GS : return & save01 -> gs ;
15991600 case VCPU_SREG_SS : return & save -> ss ;
1600- case VCPU_SREG_TR : return & save -> tr ;
1601- case VCPU_SREG_LDTR : return & save -> ldtr ;
1601+ case VCPU_SREG_TR : return & save01 -> tr ;
1602+ case VCPU_SREG_LDTR : return & save01 -> ldtr ;
16021603 }
16031604 BUG ();
16041605 return NULL ;
@@ -2648,24 +2649,24 @@ static int svm_get_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
26482649
26492650 switch (msr_info -> index ) {
26502651 case MSR_STAR :
2651- msr_info -> data = svm -> vmcb -> save .star ;
2652+ msr_info -> data = svm -> vmcb01 . ptr -> save .star ;
26522653 break ;
26532654#ifdef CONFIG_X86_64
26542655 case MSR_LSTAR :
2655- msr_info -> data = svm -> vmcb -> save .lstar ;
2656+ msr_info -> data = svm -> vmcb01 . ptr -> save .lstar ;
26562657 break ;
26572658 case MSR_CSTAR :
2658- msr_info -> data = svm -> vmcb -> save .cstar ;
2659+ msr_info -> data = svm -> vmcb01 . ptr -> save .cstar ;
26592660 break ;
26602661 case MSR_KERNEL_GS_BASE :
2661- msr_info -> data = svm -> vmcb -> save .kernel_gs_base ;
2662+ msr_info -> data = svm -> vmcb01 . ptr -> save .kernel_gs_base ;
26622663 break ;
26632664 case MSR_SYSCALL_MASK :
2664- msr_info -> data = svm -> vmcb -> save .sfmask ;
2665+ msr_info -> data = svm -> vmcb01 . ptr -> save .sfmask ;
26652666 break ;
26662667#endif
26672668 case MSR_IA32_SYSENTER_CS :
2668- msr_info -> data = svm -> vmcb -> save .sysenter_cs ;
2669+ msr_info -> data = svm -> vmcb01 . ptr -> save .sysenter_cs ;
26692670 break ;
26702671 case MSR_IA32_SYSENTER_EIP :
26712672 msr_info -> data = svm -> sysenter_eip ;
@@ -2850,32 +2851,32 @@ static int svm_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr)
28502851 svm -> virt_spec_ctrl = data ;
28512852 break ;
28522853 case MSR_STAR :
2853- svm -> vmcb -> save .star = data ;
2854+ svm -> vmcb01 . ptr -> save .star = data ;
28542855 break ;
28552856#ifdef CONFIG_X86_64
28562857 case MSR_LSTAR :
2857- svm -> vmcb -> save .lstar = data ;
2858+ svm -> vmcb01 . ptr -> save .lstar = data ;
28582859 break ;
28592860 case MSR_CSTAR :
2860- svm -> vmcb -> save .cstar = data ;
2861+ svm -> vmcb01 . ptr -> save .cstar = data ;
28612862 break ;
28622863 case MSR_KERNEL_GS_BASE :
2863- svm -> vmcb -> save .kernel_gs_base = data ;
2864+ svm -> vmcb01 . ptr -> save .kernel_gs_base = data ;
28642865 break ;
28652866 case MSR_SYSCALL_MASK :
2866- svm -> vmcb -> save .sfmask = data ;
2867+ svm -> vmcb01 . ptr -> save .sfmask = data ;
28672868 break ;
28682869#endif
28692870 case MSR_IA32_SYSENTER_CS :
2870- svm -> vmcb -> save .sysenter_cs = data ;
2871+ svm -> vmcb01 . ptr -> save .sysenter_cs = data ;
28712872 break ;
28722873 case MSR_IA32_SYSENTER_EIP :
28732874 svm -> sysenter_eip = data ;
2874- svm -> vmcb -> save .sysenter_eip = data ;
2875+ svm -> vmcb01 . ptr -> save .sysenter_eip = data ;
28752876 break ;
28762877 case MSR_IA32_SYSENTER_ESP :
28772878 svm -> sysenter_esp = data ;
2878- svm -> vmcb -> save .sysenter_esp = data ;
2879+ svm -> vmcb01 . ptr -> save .sysenter_esp = data ;
28792880 break ;
28802881 case MSR_TSC_AUX :
28812882 if (!boot_cpu_has (X86_FEATURE_RDTSCP ))
@@ -3089,6 +3090,7 @@ static void dump_vmcb(struct kvm_vcpu *vcpu)
30893090 struct vcpu_svm * svm = to_svm (vcpu );
30903091 struct vmcb_control_area * control = & svm -> vmcb -> control ;
30913092 struct vmcb_save_area * save = & svm -> vmcb -> save ;
3093+ struct vmcb_save_area * save01 = & svm -> vmcb01 .ptr -> save ;
30923094
30933095 if (!dump_invalid_vmcb ) {
30943096 pr_warn_ratelimited ("set kvm_amd.dump_invalid_vmcb=1 to dump internal KVM state.\n" );
@@ -3151,28 +3153,28 @@ static void dump_vmcb(struct kvm_vcpu *vcpu)
31513153 save -> ds .limit , save -> ds .base );
31523154 pr_err ("%-5s s: %04x a: %04x l: %08x b: %016llx\n" ,
31533155 "fs:" ,
3154- save -> fs .selector , save -> fs .attrib ,
3155- save -> fs .limit , save -> fs .base );
3156+ save01 -> fs .selector , save01 -> fs .attrib ,
3157+ save01 -> fs .limit , save01 -> fs .base );
31563158 pr_err ("%-5s s: %04x a: %04x l: %08x b: %016llx\n" ,
31573159 "gs:" ,
3158- save -> gs .selector , save -> gs .attrib ,
3159- save -> gs .limit , save -> gs .base );
3160+ save01 -> gs .selector , save01 -> gs .attrib ,
3161+ save01 -> gs .limit , save01 -> gs .base );
31603162 pr_err ("%-5s s: %04x a: %04x l: %08x b: %016llx\n" ,
31613163 "gdtr:" ,
31623164 save -> gdtr .selector , save -> gdtr .attrib ,
31633165 save -> gdtr .limit , save -> gdtr .base );
31643166 pr_err ("%-5s s: %04x a: %04x l: %08x b: %016llx\n" ,
31653167 "ldtr:" ,
3166- save -> ldtr .selector , save -> ldtr .attrib ,
3167- save -> ldtr .limit , save -> ldtr .base );
3168+ save01 -> ldtr .selector , save01 -> ldtr .attrib ,
3169+ save01 -> ldtr .limit , save01 -> ldtr .base );
31683170 pr_err ("%-5s s: %04x a: %04x l: %08x b: %016llx\n" ,
31693171 "idtr:" ,
31703172 save -> idtr .selector , save -> idtr .attrib ,
31713173 save -> idtr .limit , save -> idtr .base );
31723174 pr_err ("%-5s s: %04x a: %04x l: %08x b: %016llx\n" ,
31733175 "tr:" ,
3174- save -> tr .selector , save -> tr .attrib ,
3175- save -> tr .limit , save -> tr .base );
3176+ save01 -> tr .selector , save01 -> tr .attrib ,
3177+ save01 -> tr .limit , save01 -> tr .base );
31763178 pr_err ("cpl: %d efer: %016llx\n" ,
31773179 save -> cpl , save -> efer );
31783180 pr_err ("%-15s %016llx %-13s %016llx\n" ,
@@ -3186,15 +3188,15 @@ static void dump_vmcb(struct kvm_vcpu *vcpu)
31863188 pr_err ("%-15s %016llx %-13s %016llx\n" ,
31873189 "rsp:" , save -> rsp , "rax:" , save -> rax );
31883190 pr_err ("%-15s %016llx %-13s %016llx\n" ,
3189- "star:" , save -> star , "lstar:" , save -> lstar );
3191+ "star:" , save01 -> star , "lstar:" , save01 -> lstar );
31903192 pr_err ("%-15s %016llx %-13s %016llx\n" ,
3191- "cstar:" , save -> cstar , "sfmask:" , save -> sfmask );
3193+ "cstar:" , save01 -> cstar , "sfmask:" , save01 -> sfmask );
31923194 pr_err ("%-15s %016llx %-13s %016llx\n" ,
3193- "kernel_gs_base:" , save -> kernel_gs_base ,
3194- "sysenter_cs:" , save -> sysenter_cs );
3195+ "kernel_gs_base:" , save01 -> kernel_gs_base ,
3196+ "sysenter_cs:" , save01 -> sysenter_cs );
31953197 pr_err ("%-15s %016llx %-13s %016llx\n" ,
3196- "sysenter_esp:" , save -> sysenter_esp ,
3197- "sysenter_eip:" , save -> sysenter_eip );
3198+ "sysenter_esp:" , save01 -> sysenter_esp ,
3199+ "sysenter_eip:" , save01 -> sysenter_eip );
31983200 pr_err ("%-15s %016llx %-13s %016llx\n" ,
31993201 "gpat:" , save -> g_pat , "dbgctl:" , save -> dbgctl );
32003202 pr_err ("%-15s %016llx %-13s %016llx\n" ,
@@ -3717,9 +3719,9 @@ static noinstr void svm_vcpu_enter_exit(struct kvm_vcpu *vcpu)
37173719 } else {
37183720 struct svm_cpu_data * sd = per_cpu (svm_data , vcpu -> cpu );
37193721
3720- vmload (svm -> vmcb_pa );
3722+ vmload (svm -> vmcb01 . pa );
37213723 __svm_vcpu_run (svm -> vmcb_pa , (unsigned long * )& vcpu -> arch .regs );
3722- vmsave (svm -> vmcb_pa );
3724+ vmsave (svm -> vmcb01 . pa );
37233725
37243726 vmload (__sme_page_pa (sd -> save_area ));
37253727 }
0 commit comments