@@ -803,15 +803,15 @@ static void vmx_save_host_state(struct kvm_vcpu *vcpu)
803803 */
804804 vmx -> host_state .ldt_sel = kvm_read_ldt ();
805805 vmx -> host_state .gs_ldt_reload_needed = vmx -> host_state .ldt_sel ;
806- vmx -> host_state .fs_sel = kvm_read_fs ( );
806+ savesegment ( fs , vmx -> host_state .fs_sel );
807807 if (!(vmx -> host_state .fs_sel & 7 )) {
808808 vmcs_write16 (HOST_FS_SELECTOR , vmx -> host_state .fs_sel );
809809 vmx -> host_state .fs_reload_needed = 0 ;
810810 } else {
811811 vmcs_write16 (HOST_FS_SELECTOR , 0 );
812812 vmx -> host_state .fs_reload_needed = 1 ;
813813 }
814- vmx -> host_state .gs_sel = kvm_read_gs ( );
814+ savesegment ( gs , vmx -> host_state .gs_sel );
815815 if (!(vmx -> host_state .gs_sel & 7 ))
816816 vmcs_write16 (HOST_GS_SELECTOR , vmx -> host_state .gs_sel );
817817 else {
@@ -841,27 +841,21 @@ static void vmx_save_host_state(struct kvm_vcpu *vcpu)
841841
842842static void __vmx_load_host_state (struct vcpu_vmx * vmx )
843843{
844- unsigned long flags ;
845-
846844 if (!vmx -> host_state .loaded )
847845 return ;
848846
849847 ++ vmx -> vcpu .stat .host_state_reload ;
850848 vmx -> host_state .loaded = 0 ;
851849 if (vmx -> host_state .fs_reload_needed )
852- kvm_load_fs ( vmx -> host_state .fs_sel );
850+ loadsegment ( fs , vmx -> host_state .fs_sel );
853851 if (vmx -> host_state .gs_ldt_reload_needed ) {
854852 kvm_load_ldt (vmx -> host_state .ldt_sel );
855- /*
856- * If we have to reload gs, we must take care to
857- * preserve our gs base.
858- */
859- local_irq_save (flags );
860- kvm_load_gs (vmx -> host_state .gs_sel );
861853#ifdef CONFIG_X86_64
862- wrmsrl (MSR_GS_BASE , vmcs_readl (HOST_GS_BASE ));
854+ load_gs_index (vmx -> host_state .gs_sel );
855+ wrmsrl (MSR_KERNEL_GS_BASE , current -> thread .gs );
856+ #else
857+ loadsegment (gs , vmx -> host_state .gs_sel );
863858#endif
864- local_irq_restore (flags );
865859 }
866860 reload_tss ();
867861#ifdef CONFIG_X86_64
@@ -2589,8 +2583,8 @@ static int vmx_vcpu_setup(struct vcpu_vmx *vmx)
25892583 vmcs_write16 (HOST_CS_SELECTOR , __KERNEL_CS ); /* 22.2.4 */
25902584 vmcs_write16 (HOST_DS_SELECTOR , __KERNEL_DS ); /* 22.2.4 */
25912585 vmcs_write16 (HOST_ES_SELECTOR , __KERNEL_DS ); /* 22.2.4 */
2592- vmcs_write16 (HOST_FS_SELECTOR , kvm_read_fs ()); /* 22.2.4 */
2593- vmcs_write16 (HOST_GS_SELECTOR , kvm_read_gs ()); /* 22.2.4 */
2586+ vmcs_write16 (HOST_FS_SELECTOR , 0 ); /* 22.2.4 */
2587+ vmcs_write16 (HOST_GS_SELECTOR , 0 ); /* 22.2.4 */
25942588 vmcs_write16 (HOST_SS_SELECTOR , __KERNEL_DS ); /* 22.2.4 */
25952589#ifdef CONFIG_X86_64
25962590 rdmsrl (MSR_FS_BASE , a );
0 commit comments