From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756380AbcIOEWm (ORCPT ); Thu, 15 Sep 2016 00:22:42 -0400 Received: from mail-db5eur01on0041.outbound.protection.outlook.com ([104.47.2.41]:63232 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752228AbcIOEWg (ORCPT ); Thu, 15 Sep 2016 00:22:36 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=mika.penttila@nextfour.com; Subject: Re: [PATCH] KVM: VMX: Enable MSR-BASED TPR shadow even if w/o APICv To: Wanpeng Li , , References: <1473839936-3393-1-git-send-email-wanpeng.li@hotmail.com> CC: Wanpeng Li , Paolo Bonzini , =?UTF-8?B?UmFkaW0gS3LEjW3DocWZ?= , Wincy Van , Yang Zhang From: =?UTF-8?Q?Mika_Penttil=c3=a4?= Message-ID: Date: Thu, 15 Sep 2016 07:08:04 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.2.0 MIME-Version: 1.0 In-Reply-To: <1473839936-3393-1-git-send-email-wanpeng.li@hotmail.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit X-Originating-IP: [194.157.170.61] X-ClientProxiedBy: HE1PR02CA0051.eurprd02.prod.outlook.com (10.163.170.19) To DB6PR0701MB2166.eurprd07.prod.outlook.com (10.168.58.21) X-MS-Office365-Filtering-Correlation-Id: 353998f7-67b2-40dc-79ee-08d3dd1de779 X-Microsoft-Exchange-Diagnostics: 1;DB6PR0701MB2166;2:NXmJBUmrgU4oCqKrpnRAgHbRPTWe6wOTmycwQzsyY755JGUVaHRUCcgO/0TwraEvwF8SuMzb/dl4n1gCFF1k5nx3mV/5P9Nu2KGa+CvC/jDEcPoUun6kjg76Rd+rbOW0qtgDpkqF3GMoVDXQLcAELjDpeyXG9zs4egftOGXzMQ4Lf7uLuGhsx8zfStb2hI6k;3:0gN5kjt8zXnWkSVzd1r+6UDgE2LgmHzp2H3WqbHyJ0RinEU1oPNcpisb+msjs1445eaLizqF2bHxduMwjh/vIZxITsl61BU46vft5SUZLPOb/+XdD5D/zA4u2Qvae+Ua;25:1rkccZwoCpYNRprTI9hNr43ykItEnFY8hlM+LaGvmpdxr1KKXEcjT11kyVZ4ANekl77yO/nf1e6csTatYcVzR3+2OMbVjAdMlUIjo0+dIq2wf+tvgJJi0eC3tnIYVUia6hj+Yo+QSG6FVTZYttX5VLy+AIz3BRlkyjGt5iwtNT4CBav9i/bvITcpk9ugWOwx+yAUZ8x28bu1hgDO/Rwe9NyvwdAn2qjeSIyXpA2lhV9BY2YZcYZ8aanA8ifZLZ5olcoA/LIcPk3hMvqUzpyFtL9K9PRrgces4XGqo9RX6LbtnLD+PYBJ0Ha/7aAZCM1PHUzprlyLDFvbGBiI5gLKqoE3Y9HxdK8h4Qt73PK/UeP7evwEgUAjaUXYoht30pAmBdixVbaQgVfql9ZJ2JwdMINPsExp15eelj8tVzXOZFg= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DB6PR0701MB2166; X-Microsoft-Exchange-Diagnostics: 1;DB6PR0701MB2166;31:K5V3QXVkvj7y/BviOvaKGsq/UZXh0EvVinEQXlXTmvsLcbpLxI3+TWEL6gwl07ouYYGSxMDeBOWR7HCAS3qzvT6FScI4BpNXTJHgeHRYpHDbCoerObbKeFujoktt4DskwiTJyuCdqQ453nkOYwY1ifzlbXFBiXPJLgOrg2wZsgl3mQNsZ/SZkeaUVFoPXHS5UZSHfFBUjuPw0q5I85WsxQ0lAhPRybcnN5+BPFnX0WA=;4:lUnllXHrejbw0CgP6SI3gIhlOO/Rus83KUxNv40lXUWJd6vQpD6YsmxTA1Y3QylVsIUSg+bOoTOHFsLOKej81O4pM5YjZ1h6poX+JgrwWV+n7K9FMpy1i+hVFK5HfJ7sx6ot1vqUqKmSbNwWTWJpSu7VNE82swcmSWf8pLa8AoVXQ2ve8Qg2fzTssjxkLCTwZN53idEnp1/Jrjqll3S8/pL3PKReTyai9+qujbNqThccY5AsYqbW65JD2ZHegVwEbgOlmGSdaJ5H6k4JsvhVMGxKoxAuNC3GxydKzM9soSwVdCX3V0CjyMohY7o4klltwoQYgVqyp/aZvU55/ule0PWO+wrH6njl2nmI1VWSneqxQQO+PlutnvI6Un2HPuAZlrNOo8Y+jLOD/In/mZEjDldTRL+pDJNHIMwcSj4pCe2/xn8w8xl1xGzS1ICCNHfv X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(194151415913766); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040176)(601004)(2401047)(8121501046)(5005006)(3002001)(10201501046);SRVR:DB6PR0701MB2166;BCL:0;PCL:0;RULEID:;SRVR:DB6PR0701MB2166; X-Forefront-PRVS: 0066D63CE6 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6049001)(6009001)(7916002)(377454003)(189002)(199003)(24454002)(6116002)(31686004)(2201001)(2870700001)(3846002)(2906002)(86362001)(77096005)(65826007)(586003)(105586002)(5660300001)(106356001)(23676002)(31696002)(64126003)(65806001)(97736004)(92566002)(4001350100001)(5001770100001)(33646002)(4326007)(42186005)(68736007)(101416001)(189998001)(47776003)(50466002)(54356999)(76176999)(50986999)(19580395003)(19580405001)(81156014)(7736002)(305945005)(8676002)(7846002)(81166006)(83506001)(36756003)(65956001)(2950100001)(66066001)(217873001);DIR:OUT;SFP:1101;SCL:1;SRVR:DB6PR0701MB2166;H:[10.10.10.110];FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtEQjZQUjA3MDFNQjIxNjY7MjM6UGV0QVdjWGhPN2lNWlFLVEpTL01ScnpK?= =?utf-8?B?RnoxWkd1L1NvalhKekgzQm9zU1AxTU5ENU9kY2drenhQK1hHeCtQbDVTVnR2?= =?utf-8?B?UExqVHdOSjBDK1pSSWxNTmNRUkMzYlhPWjBtMHp0cXEvNHl4eHJER1RBeFJD?= =?utf-8?B?Vlh5Ny9HZEhSRnBtRnNWdFdtZ3BUVFErcVd2WGpBdVV2SFJJVm5rTG0ySTdI?= =?utf-8?B?Ym9Ea0dQc1BnY3VQQ1JSaytldmJaRUVXdmdlR2R3YUpxZkNvQzFUajFQVU1J?= =?utf-8?B?aEhPRUdVNHlYRmlQeXpNR2VHVC9oRng3d2pKb0psbldUSVZrYWNieHFZMFhl?= =?utf-8?B?U3Eya0FSNXQ4TGFqVXRqdTZDb1ZVdHYzWGUrNFA3RExzN1ptYzhSZDNTUUFQ?= =?utf-8?B?aXkyMDdKd24yVnpxT2JDZmNzQTA3bnFoV05vdEUvL0pHclZWdnZoODVTcXpC?= =?utf-8?B?VUV6Y0ttUi9UU2RsTldvOUQ3dVFvOXE0aEhNZTRFdDNoa0Nnays4dzJZQWZ0?= =?utf-8?B?eGs4dHhVSGhNUkk0elhkYVg2dGlucDNNQUxzaFdVN1p1Uy94VEZ2V1Q3UFl0?= =?utf-8?B?Sk1iZUdvWGNRMnp3cXdSeGM2VTNTODhlVk0yUWlCa1VYYi80cnNWTzhiVkFB?= =?utf-8?B?d0hWNEtFcFN4L2hBRVlhWEhDcFZHYnZnb1d6cytJMVduQi9UbnowdVJodG00?= =?utf-8?B?VTZVeEtvejlOQ3pHRElrVnJFYnVlT0lrUndudHF5Q0hXRHkvdWh6NDdmRGsx?= =?utf-8?B?eGIzSnhja09aYkNVS2V4Mmh4VWRGT2xOdHdQUXlLaEQzZ3JaSVpTN0hZY2Yv?= =?utf-8?B?N216QnpwM25iNXlnUC9EOUdTM2lFckNoS0xxZHA5MjZ6VzhtNFJqeml3cUh2?= =?utf-8?B?NmhjaWRPeGo2R2xqRVExd2VMZHVLMmVnRW9SK2VOZm51WlJ1aUhILzQxdDgr?= =?utf-8?B?L3JZQUZTbVZsK0N4K3ZOTjFtUHpSbjNVRkVvMU83TEM0bTVBakpqUEh3NnZz?= =?utf-8?B?a3R5dWswbnhIWUJZQ1F3MU4vcnpRbFY1MDhBdmIrN3Z3OVpGY09CRXd4dHBr?= =?utf-8?B?UU9tMmtnVmFnVUdyUFN6TTkwU0JyV1M5dzB6U3BZaWFaRjhyMWkzc3VBbFdz?= =?utf-8?B?T0NteTFGemxLd0hpc1Zvd1dkMW9YcVkxUVhRa252RXQ1d2FLckV3TXE3Rnpr?= =?utf-8?B?Tm1NU0ttNVRaS2orRmtXMXMwcSs0QVM1MGFQU2h6R2dJMjllNTBQOHVNQ2tG?= =?utf-8?B?WmZqZDc4Y3VZV1owM2R3dFdOQ2ZvbjNzdUtOdU1JY0kxMDBOUThZNHhmUG5S?= =?utf-8?B?dFlac21kUjkvaS9CQjQ2MjM1SVBmN2JrcU5VdzB1Rk5jeWRnTVNnTTUrNGZH?= =?utf-8?B?RlFZSmtzTklPMjUwNUEwamF5ZVZMTDZIbzVYaExjcWRrVlQ5ZWUyelpNNkI5?= =?utf-8?B?ZWQ1enl1UHZ6cWRseFZHeWxVaE9PSS9ZSjNDa3dOYzc1NTFiMFRuRHExRmp2?= =?utf-8?B?TzY4NVJqbFBjQXh3eEhOTkZyY3o4c3ZsQi96Z3VaT05sdVU1RlZCVGQ0MTF1?= =?utf-8?B?QkFyRm1KanZuWXR3bWV3V2pscHRTd3NxQXEvbVYrdUl2UitLeWJwQXRlTEFz?= =?utf-8?B?TDk5dytTL29yYVJQT2tLK3hUdUk0SHhvc0RBMTF2Y2xocnlyRFNST1pyTVlz?= =?utf-8?B?emFCRVBDTnZVbVhQRG0wVUJaYWdvd2R3UVlvVXBhQVVkYjJWM09CN2JVTmpT?= =?utf-8?B?cVNTdEY2SWFiY1NXa3JtaFI2TFdDWTl5aW5HL3FyUFBrSHphNk1KMzFCeTZ5?= =?utf-8?B?Qk12dXVNOXhFTG1tTEhTamhuVE02cDdvZFBmU09QUFZNalpKUT09?= X-Microsoft-Exchange-Diagnostics: 1;DB6PR0701MB2166;6:nyZXFnPBA9qj+TsMedTj5ew8s0Q7lyrIclAz1ZCGq5Vd2q9D/YB8P24moSY+scTxn1EKGA2DhpiusFtkJNsFrFUSKxzlP7mJtPLy/HcNgC2vTEzipOrCeHt6h7v1TlVsb7myTEaOI/cuXidmy1AMkS2JQPXkA5CntmMyYIqeoVpI7eDUzzNZ4z/IKff3mY+k8sj7nhGzsLQ6qshzQ/vmSu9DiCIkLR4c40bkhToZYNdcBoMfhf5vTJw1J+XKjHLZ4VzDzqm30daVJ11tT8PRazOQRystXpDkWMUc/F+lNWY=;5:xJXAU9m7FPkE0Px/lC2nMA36yjCj5dKeeeeMfnCdVW3ekkK/W0XCLw2j/ns1C3xksRnPBYXzEzmTc3BbLz2vbhXfuqhSdvVaSrGMp+kxt1gF/VUwXNqrmF7OiK40h/fU6cpnuyB3sC5QnYprcbZ31Q==;24:oRsV2LGs7xNuNw/P7cxdc8Zkhnp6LqZzmVpgQhjHfGF+zmMoubYeZNo3RglmVF9fF2KM//k8zhmzwkKwhmPy64POn/+XH7wrq76lvmTMj80=;7:TRXSVTvf48o/zUf1ROKE42Buu4Ie8ibqI0G8MIJn5iVvKCihklJJ0EHU3FYFhHV+64VmpG4xyj+ld1C5s9jKAD3bMoZGFZqwJoqsYjxcH8EUV5YI/mzbzYd29mOGeaiHdUHNN0Gxp0xmfEWeFpsmWafVkmAwd+PF4rDBbwEu12ev3Bnwb3PZ6NGsMwPzqLgK0ru0RAHA75z4KUe/Ok38l8IzuY9G/Tq1SD58c3nPUw2si1U8i5oDEoPkCQ0+Efyv SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: nextfour.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Sep 2016 04:08:09.1075 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0701MB2166 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 09/14/2016 10:58 AM, Wanpeng Li wrote: > From: Wanpeng Li > > I observed that kvmvapic(to optimize flexpriority=N or AMD) is used > to boost TPR access when testing kvm-unit-test/eventinj.flat tpr case > on my haswell desktop (w/ flexpriority, w/o APICv). Commit (8d14695f9542 > x86, apicv: add virtual x2apic support) disable virtual x2apic mode > completely if w/o APICv, and the author also told me that windows guest > can't enter into x2apic mode when he developed the APICv feature several > years ago. However, it is not truth currently, Interrupt Remapping and > vIOMMU is added to qemu and the developers from Intel test windows 8 can > work in x2apic mode w/ Interrupt Remapping enabled recently. > > This patch enables TPR shadow for virtual x2apic mode to boost > windows guest in x2apic mode even if w/o APICv. > > Can pass the kvm-unit-test. > While at it, is the vmx flexpriotity stuff still valid code? AFAICS it gets enabled iff TPR shadow is on. flexpriority is on when : (flexpriority_enabled && lapic_in_kernel && cpu_has_vmx_tpr_shadow && cpu_has_vmx_virtualize_apic_accesses) But apic accesses to TPR mmio are not then trapped and TPR changes not reported because the “use TPR shadow” VM-execution control is 1. Thanks, Mika > Suggested-by: Wincy Van > Cc: Paolo Bonzini > Cc: Radim Krčmář > Cc: Wincy Van > Cc: Yang Zhang > Signed-off-by: Wanpeng Li > --- > arch/x86/kvm/vmx.c | 41 ++++++++++++++++++++++------------------- > 1 file changed, 22 insertions(+), 19 deletions(-) > > diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c > index 5cede40..e703129 100644 > --- a/arch/x86/kvm/vmx.c > +++ b/arch/x86/kvm/vmx.c > @@ -6336,7 +6336,7 @@ static void wakeup_handler(void) > > static __init int hardware_setup(void) > { > - int r = -ENOMEM, i, msr; > + int r = -ENOMEM, i; > > rdmsrl_safe(MSR_EFER, &host_efer); > > @@ -6464,18 +6464,6 @@ static __init int hardware_setup(void) > > set_bit(0, vmx_vpid_bitmap); /* 0 is reserved for host */ > > - for (msr = 0x800; msr <= 0x8ff; msr++) > - vmx_disable_intercept_msr_read_x2apic(msr); > - > - /* TMCCT */ > - vmx_enable_intercept_msr_read_x2apic(0x839); > - /* TPR */ > - vmx_disable_intercept_msr_write_x2apic(0x808); > - /* EOI */ > - vmx_disable_intercept_msr_write_x2apic(0x80b); > - /* SELF-IPI */ > - vmx_disable_intercept_msr_write_x2apic(0x83f); > - > if (enable_ept) { > kvm_mmu_set_mask_ptes(VMX_EPT_READABLE_MASK, > (enable_ept_ad_bits) ? VMX_EPT_ACCESS_BIT : 0ull, > @@ -8435,12 +8423,7 @@ static void vmx_set_virtual_x2apic_mode(struct kvm_vcpu *vcpu, bool set) > return; > } > > - /* > - * There is not point to enable virtualize x2apic without enable > - * apicv > - */ > - if (!cpu_has_vmx_virtualize_x2apic_mode() || > - !kvm_vcpu_apicv_active(vcpu)) > + if (!cpu_has_vmx_virtualize_x2apic_mode()) > return; > > if (!cpu_need_tpr_shadow(vcpu)) > @@ -8449,8 +8432,28 @@ static void vmx_set_virtual_x2apic_mode(struct kvm_vcpu *vcpu, bool set) > sec_exec_control = vmcs_read32(SECONDARY_VM_EXEC_CONTROL); > > if (set) { > + int msr; > + > sec_exec_control &= ~SECONDARY_EXEC_VIRTUALIZE_APIC_ACCESSES; > sec_exec_control |= SECONDARY_EXEC_VIRTUALIZE_X2APIC_MODE; > + > + if (kvm_vcpu_apicv_active(vcpu)) { > + for (msr = 0x800; msr <= 0x8ff; msr++) > + vmx_disable_intercept_msr_read_x2apic(msr); > + > + /* TMCCT */ > + vmx_enable_intercept_msr_read_x2apic(0x839); > + /* TPR */ > + vmx_disable_intercept_msr_write_x2apic(0x808); > + /* EOI */ > + vmx_disable_intercept_msr_write_x2apic(0x80b); > + /* SELF-IPI */ > + vmx_disable_intercept_msr_write_x2apic(0x83f); > + } else if (vmx_exec_control(to_vmx(vcpu)) & CPU_BASED_TPR_SHADOW) { > + /* TPR */ > + vmx_disable_intercept_msr_read_x2apic(0x808); > + vmx_disable_intercept_msr_write_x2apic(0x808); > + } > } else { > sec_exec_control &= ~SECONDARY_EXEC_VIRTUALIZE_X2APIC_MODE; > sec_exec_control |= SECONDARY_EXEC_VIRTUALIZE_APIC_ACCESSES; >