From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laurent Vivier Subject: [PATCH][RESEND] Split segments reload in vmx_load_host_state() Date: Thu, 23 Aug 2007 16:33:11 +0200 Message-ID: <46CD9AA7.9010101@bull.net> References: <46CD81D5.90707@bull.net> <46CD8316.2040208@qumranet.com> <46CD8562.5000402@bull.net> <46CD881B.6040202@qumranet.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1360944937==" Cc: kvm-devel To: Avi Kivity Return-path: In-Reply-To: <46CD881B.6040202-atKUWr5tajBWk0Htik3J/w@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: kvm-devel-bounces-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org Errors-To: kvm-devel-bounces-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org List-Id: kvm.vger.kernel.org This is an OpenPGP/MIME signed message (RFC 2440 and 3156) --===============1360944937== Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="------------enigBBA851B26275D5A21F93DBDD" This is an OpenPGP/MIME signed message (RFC 2440 and 3156) --------------enigBBA851B26275D5A21F93DBDD Content-Type: multipart/mixed; boundary="------------060506070405010308090902" This is a multi-part message in MIME format. --------------060506070405010308090902 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable =46rom KVM/TODO: vmx_load_host_state() bundles fs, gs, ldt, and tss reloading into one in the hope that it is infrequent. With smp guests, fs reloading is frequent and the separate reloads should be unbundled. Signed-off-by: Laurent Vivier --------------060506070405010308090902 Content-Type: text/plain; name="vmx_load_host_state-split" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline; filename="vmx_load_host_state-split" Index: kvm/drivers/kvm/vmx.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kvm.orig/drivers/kvm/vmx.c 2007-08-23 14:41:48.000000000 +0200 +++ kvm/drivers/kvm/vmx.c 2007-08-23 16:20:23.000000000 +0200 @@ -54,7 +54,8 @@ struct vcpu_vmx { struct { int loaded; u16 fs_sel, gs_sel, ldt_sel; - int fs_gs_ldt_reload_needed; + int gs_ldt_reload_needed; + int fs_reload_needed; }host_state; =20 }; @@ -353,20 +354,21 @@ static void vmx_save_host_state(struct v * allow segment selectors with cpl > 0 or ti =3D=3D 1. */ vmx->host_state.ldt_sel =3D read_ldt(); - vmx->host_state.fs_gs_ldt_reload_needed =3D vmx->host_state.ldt_sel; + vmx->host_state.gs_ldt_reload_needed =3D vmx->host_state.ldt_sel; vmx->host_state.fs_sel =3D read_fs(); - if (!(vmx->host_state.fs_sel & 7)) + if (!(vmx->host_state.fs_sel & 7)) { vmcs_write16(HOST_FS_SELECTOR, vmx->host_state.fs_sel); - else { + vmx->host_state.fs_reload_needed =3D 0; + } else { vmcs_write16(HOST_FS_SELECTOR, 0); - vmx->host_state.fs_gs_ldt_reload_needed =3D 1; + vmx->host_state.fs_reload_needed =3D 1; } vmx->host_state.gs_sel =3D read_gs(); if (!(vmx->host_state.gs_sel & 7)) vmcs_write16(HOST_GS_SELECTOR, vmx->host_state.gs_sel); else { vmcs_write16(HOST_GS_SELECTOR, 0); - vmx->host_state.fs_gs_ldt_reload_needed =3D 1; + vmx->host_state.gs_ldt_reload_needed =3D 1; } =20 #ifdef CONFIG_X86_64 @@ -396,9 +398,10 @@ static void vmx_load_host_state(struct v return; =20 vmx->host_state.loaded =3D 0; - if (vmx->host_state.fs_gs_ldt_reload_needed) { - load_ldt(vmx->host_state.ldt_sel); + if (vmx->host_state.fs_reload_needed) load_fs(vmx->host_state.fs_sel); + if (vmx->host_state.gs_ldt_reload_needed) { + load_ldt(vmx->host_state.ldt_sel); /* * If we have to reload gs, we must take care to * preserve our gs base. @@ -409,9 +412,8 @@ static void vmx_load_host_state(struct v wrmsrl(MSR_GS_BASE, vmcs_readl(HOST_GS_BASE)); #endif local_irq_restore(flags); - - reload_tss(); } + reload_tss(); save_msrs(vmx->guest_msrs, vmx->save_nmsrs); load_msrs(vmx->host_msrs, vmx->save_nmsrs); if (msr_efer_need_save_restore(vmx)) --------------060506070405010308090902-- --------------enigBBA851B26275D5A21F93DBDD Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.7 (GNU/Linux) iD8DBQFGzZqr9Kffa9pFVzwRAheyAJ9Lu6XXBB+UKfL9joKkGjEbsLCe4gCfQPay dIQVZzbKMRAvueeSxt30cuM= =KX5z -----END PGP SIGNATURE----- --------------enigBBA851B26275D5A21F93DBDD-- --===============1360944937== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ --===============1360944937== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ kvm-devel mailing list kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org https://lists.sourceforge.net/lists/listinfo/kvm-devel --===============1360944937==--