Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752548AbcC3MPs (ORCPT ); Wed, 30 Mar 2016 08:15:48 -0400 Received: from mail-bn1bon0070.outbound.protection.outlook.com ([157.56.111.70]:13671 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752130AbcC3MPp (ORCPT ); Wed, 30 Mar 2016 08:15:45 -0400 Authentication-Results: amd.com; dkim=none (message not signed) header.d=none;amd.com; dmarc=none action=none header.from=amd.com; Subject: Re: [PART1 RFC v3 11/12] svm: Do not intercept CR8 when enable AVIC To: =?UTF-8?B?UmFkaW0gS3LEjW3DocWZ?= References: <1458281388-14452-1-git-send-email-Suravee.Suthikulpanit@amd.com> <1458281388-14452-12-git-send-email-Suravee.Suthikulpanit@amd.com> <20160318211048.GB26119@potion.brq.redhat.com> CC: , , , , , , , , From: Suravee Suthikulpanit Message-ID: <56FBC359.9060304@amd.com> Date: Wed, 30 Mar 2016 19:15:21 +0700 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:38.0) Gecko/20100101 Thunderbird/38.6.0 MIME-Version: 1.0 In-Reply-To: <20160318211048.GB26119@potion.brq.redhat.com> Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 8bit X-Originating-IP: [223.24.78.250] X-ClientProxiedBy: SG2PR04CA0074.apcprd04.prod.outlook.com (10.169.49.170) To SN1PR12MB0448.namprd12.prod.outlook.com (10.162.105.141) X-MS-Office365-Filtering-Correlation-Id: 03e05c09-74af-428e-678c-08d358950324 X-Microsoft-Exchange-Diagnostics: 1;SN1PR12MB0448;2:o8AGZ53wSZObTUzUhDaQX6t3wyMkUxJbRgVr60FIfaJwAXitc7D+mertz9vh0/ViG1TvPmGH5qaP4KbqJrMTB9Tdkmp5xFC5hwNJTOSdQx0PN1CodXKGZ77Bpb+CMkHfrpkgTHhloePy0Z5Hg8oGFAmCsupSjFKa67a4Jf9Jed/x1z8WuFwxTdlCAiP7i66s;3:48gqWvXQGFRTreVR6kAeoNAi9C3ZTR/aXUZR38C/RoflOW3oV0B/HTPB9+9qkH3AfuKWv6NyrfKQ0HN8zBOYf+WPK8cTjqTpvnm8K/9gQhGpGS6rNZxN/PdCIS4pTg2T;25:6zxwdUXALOZAknMYWoZjFbfC1hzAZlWKHBQmWKpuhvojLmNauP8hXiA+VcBbptqdkYSOxC/TMemQ3vJ5HMoASXE8giU10vemZsaA5hUFFM73NHYcp6okIKbNuPS1+A3o0Z1KepwMGfKPwntrhqAKM4T2cXvJLdYjetej7F3SL4o06+5QQwE+zWUEhC/obZdVw0mWPqR9OwZo6QwmR5JafMKYhjJbptvDsnDMRLjm6n2OQy1I9kr+B2fXK5H+DvM5ZI6yR7BBv2QO4wC/DMZdJfIiVeVOf27uxGebDlcu84aTsd2ojGasSva0XX7n3f/chN+FnsHrlnp2NGXIpY4xDfeNb7n92ZuimNz9i37JMQs= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:SN1PR12MB0448; X-Microsoft-Exchange-Diagnostics: 1;SN1PR12MB0448;20:+vWbr9xK7SejRRDiaztExg8OoPPtH/2CXsJLt+zaceotM+bmeVltXPcCOils0iAWpRLGlqrn3De+UefoTOY29PWR9TeT/jSiCdtwFNxD8Y/iFem87ukOVVzuuG3OQUzy93ABChwH4yqKf13MuB2y1IiyorVS8go9NmMerw9iw4w3XHnPZvms3y9OjS8lgus1wuzEzl6lrwrzfqndennGEmdpF7n/5fqBGDltXY5c2JZ9azaD7HjPqzhS8zWSaDrcoGsl1ebg1miAbtOZpR5FSwX+nmhSVVfHRw3NATjLt+ztP70QBRY7wxKsGy/uE+qTRvJ+PG2KbbEcCXfyaXzhebuK+b/MVxqEOtTdhVjDm9RmTAIUr29D23+QauLzeRum8UNGd4yl8zwXqQHY1qT7zXYenZV+qv6TpcJcy5IK832YGHXE2Pfi0Hy7f+IgXq4eFN9bWBmSc9HuwNERxQIWH3VmV/Fz2LYG7YitclZXCzOI5uu/JNGf/LyJ8Fh9ltcK;4:quyHHTY+jCGhNaL1hH5y1aKwkcOe/J7jkhX4vQgSLsburtti/DuejSFpxGvmDqfdDV0KAaRtRFQ2omgQPz86ln4HLT6QC7bBSbvIsjoeyL+zSXQFSKMUP2bmCrZjpEqysfIqZlCIN7ddoTL2/BqKi+TCHMZ3EVANXvHnGDMvnhV2PHwbnU+OAttCoBM9yfOTIWlYRdAsEZkgRfSRIL2Np6LrNMNOWaOk55XnuaeXD26fwQlAsPRbDVIPEdxcr7Q6IKDwXZtlJeGNz5/nGpCyNdx0yCKhxfaTVMVPYdPXF3C+OrVXKJjgSAR+oSqmNq+46CbmvVNj/CSSoEdq5NDQrPp3pRocclQiMa8CITKCIA96OGD+/N90DI+r7HB7bEUy X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046);SRVR:SN1PR12MB0448;BCL:0;PCL:0;RULEID:;SRVR:SN1PR12MB0448; X-Forefront-PRVS: 08978A8F5C X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6049001)(6009001)(164054003)(24454002)(377424004)(33656002)(110136002)(36756003)(77096005)(42186005)(5008740100001)(23676002)(189998001)(19580395003)(64126003)(4001350100001)(19580405001)(86362001)(2906002)(117156001)(4326007)(81166005)(65806001)(5004730100002)(65816999)(54356999)(76176999)(87266999)(66066001)(65956001)(47776003)(1096002)(50986999)(2950100001)(3846002)(6116002)(2870700001)(92566002)(50466002)(586003);DIR:OUT;SFP:1101;SCL:1;SRVR:SN1PR12MB0448;H:[192.168.43.18];FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtTTjFQUjEyTUIwNDQ4OzIzOlJmbHEyQllnSHFOWUJpZXQra3Fabkc3eHFs?= =?utf-8?B?anU0RGNXV1BHVnFJei9OcTdiTlBGYXo5enNZYjB0R0tnMEd3WVgxcXlkS0Zn?= =?utf-8?B?ckkzWGg3OVFKTDRyOHVxRTJxd2RyRWtyTXk4ZzhxYXpGMVljUVh1ak5Hc3Bk?= =?utf-8?B?N0FhNXNrQmJHOHd3N1JFNkx3YnVmSlk4Rm9RS3pqOHZVbmhYcTlrUFkzcVNV?= =?utf-8?B?N3lJb1FNOE5ONnBIaUNtYUdhWUVPNk1YbUxKcHhvbkhnMUJXdzdJM3lkSzRn?= =?utf-8?B?enpTWFRmUFFjemZ4MlNWSFQ4ZXdNTDB0UmVPY1l1MGx4UWIvazNtS3VqZUVz?= =?utf-8?B?OWZacmZrMVBKQWFubUl6ZG5BVW84dlZMS3FqM2wvM2dKd2thYTFoY3NrNFNv?= =?utf-8?B?Y1JYMEkxYlVwWTZQL0VHOHMxRnVqYmVqOVdzNGZnRWcrcHIzSHZyMjlvK3U3?= =?utf-8?B?aE05ZHlRYUNRUlVMZGgzbmQzb2lrTXZCc2psLzhqalhDQUtxbUFIUVY0N0U3?= =?utf-8?B?WEptVlJyekRTOVB5U2piSlRHNThGT0NXcEpFaEQrMUVMRjNDdEpzbzA1QmtB?= =?utf-8?B?UlZGTHpxMUdNZGVXN2JWQUhJOGQveDNXb2hva2gxRDQ2UnFqTHRqQzdCWHIv?= =?utf-8?B?L0R4M1I4SW1keFpTbGc0NE92N3kwbjlTeVZGV3ZqaWdEa1ZjQWt1Ky8wcWk1?= =?utf-8?B?MVp2SDRwV0JPS3FEaWY0NG9xM1VoZmZHQytKTnd5RFJTY0hyTzIyQjRJR2Jl?= =?utf-8?B?YUJua0pjeklFdnF4dUV4eTlCWDBlYjhDbTJPMTkwK3diVFFhQ0lSTXRaa0J4?= =?utf-8?B?Y1pUMFF2eDVPZEV3cEF0RVJKVmx1amk2VTU4QnpnWUswV1c0M1RXbXFjR0Rk?= =?utf-8?B?bXdVVGpSeUxqMHVTYit5R0JHdU1xbitsRVZEN1FkNnFNak9IWkNQMlI1bUpo?= =?utf-8?B?czg1bXhBTUcvb1RoUWorZWZ1SDV1MTVaU0doL3VsakM3Q2Y5WFpSWlFMNkwy?= =?utf-8?B?OVFCbUZJL0ZJQlBPRXFzajc4eXFoeU1yOCtSaER2T1dXTnJuYTVtQ1NPVlhG?= =?utf-8?B?c0xtNkRWWXREZ09nY2xDbkxySXBMNDUyV3JhdTJ6a3ovYzkvSEFDN3owQ2c5?= =?utf-8?B?MnMydGRZNW1jTWlrbHJtRDJjSUorbHZYcUFSMDdXZ3MyaGIrSjhKVW5UQ2pk?= =?utf-8?B?VzlwcU9TTDRzNE9jWUt5SFd1NDZtM3JqMzhHY0UydmxNc25qdE1uWitxRTZO?= =?utf-8?B?SDQ3MllxcnJJeGR1TUxGSUxkUVVTaUJjMWtOYmJoU2tpVzI4NnBmalFlSG8x?= =?utf-8?B?bVdJMy9OOVVjV2pCdmh1azJxZDJzbi9mUzNXZFNvQmh6RERRRXN5cElVakVI?= =?utf-8?B?aitpWHB1RmFhZW1tcERoOVhqOHpaY3FCSko5Szhvc3dGcnVsMld1VDVKekNs?= =?utf-8?B?cEtMZWxOdFJFQzRnMktBMWJHaW9PUGtyVUc1YTlwSzZLUndpY1p2MDFEM1Vq?= =?utf-8?B?Y1pTUT09?= X-Microsoft-Exchange-Diagnostics: 1;SN1PR12MB0448;5:W3m8wgy39749aMQFAkQv2nzepk27yW6trvnu6PNmX8QfTB9f2txF+3bW1/WICDUaTDz6QRFWmXXIscLiuK3n7SfUpnMfX7RaPt1N8KNNTTic+xtEJk2lYRNBmo2iDW0JGglbmWmpLYpSTu/OvntdzA==;24:WGCOE8Ptj7SRN7Hm2+DdOBdAlBA871k5j6rwrTcXtmrXINT0seDpzMYwmoAGL8hueiwMHQgAuVZn+rA3oTVBZLNp+vDNiVgxneaiJgLLIAw=;20:hEqfsQD44lGfOGYznuVp+ExEb+WkWmqpGpz+EMc+wJzcIMRd+oh0NFBPtUzOzgWnA8FFi6+tRx4juSmLkG3eCtG8tIw+NlEO1avbR8FCcP3IuYQvIe//BpgY//nk8qynoXW9X46SWOvS6dbOGF/0GK6MTUP+4mu084BYk7Av0ydKpl6C7VvGPLOVNIz1nH4SNoqZgg0UJhc9A7qzEYgnKDDD2U0zX4VyGYQrj2QXaCmXjSHUCKA/pUfw5U4YLjxR X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Mar 2016 12:15:37.9833 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN1PR12MB0448 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2126 Lines: 66 Hi Radim, On 3/19/16 04:10, Radim Krčmář wrote: > 2016-03-18 01:09-0500, Suravee Suthikulpanit: >> When enable AVIC: >> * Do not intercept CR8 since this should be handled by AVIC HW. >> * Also update TPR in APIC backing page when syncing CR8 before VMRUN >> >> Signed-off-by: Suravee Suthikulpanit >> --- >> arch/x86/kvm/svm.c | 15 +++++++++++---- >> 1 file changed, 11 insertions(+), 4 deletions(-) >> >> diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c >> index ba84d57..d5418c3 100644 >> --- a/arch/x86/kvm/svm.c >> +++ b/arch/x86/kvm/svm.c >> @@ -984,6 +984,8 @@ static __init int svm_hardware_setup(void) >> >> if (avic) { >> printk(KERN_INFO "kvm: AVIC enabled\n"); >> + >> + svm_x86_ops.update_cr8_intercept = NULL; > > This doesn't look right. Actually, I don't think this change isn't necessary since we don't even call kvm_x86_ops->update_cr8_intercept() if vcpu->arch.apicv_active (See arch/x86/kvm/x86.c: update_cr8_intercept()). > [....] >> @@ -4080,7 +4083,8 @@ static void update_cr8_intercept(struct kvm_vcpu *vcpu, int tpr, int irr) >> { >> struct vcpu_svm *svm = to_svm(vcpu); >> >> - if (is_guest_mode(vcpu) && (vcpu->arch.hflags & HF_VINTR_MASK)) >> + if ((is_guest_mode(vcpu) && (vcpu->arch.hflags & HF_VINTR_MASK)) || >> + svm_vcpu_avic_enabled(svm)) >> return; >> >> clr_cr_intercept(svm, INTERCEPT_CR8_WRITE); >> @@ -4271,9 +4275,12 @@ static inline void sync_lapic_to_cr8(struct kvm_vcpu *vcpu) >> if (is_guest_mode(vcpu) && (vcpu->arch.hflags & HF_VINTR_MASK)) >> return; > > I think we can exit early with svm_vcpu_avic_enabled(). Right. > >> >> - cr8 = kvm_get_cr8(vcpu); >> + cr8 = kvm_get_cr8(vcpu) & V_TPR_MASK; >> svm->vmcb->control.int_ctl &= ~V_TPR_MASK; >> - svm->vmcb->control.int_ctl |= cr8 & V_TPR_MASK; >> + svm->vmcb->control.int_ctl |= cr8; >> + >> + if (svm_vcpu_avic_enabled(svm)) >> + kvm_lapic_set_reg(svm->vcpu.arch.apic, APIC_TASKPRI, (u32)cr8 << 4); > > kvm_get_cr8() == kvm_lapic_get_reg(APIC_TASKPRI) >> 4. Good point. I'll clean up and simplify this function. Thanks, Suravee