Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932772AbcDEN1W (ORCPT ); Tue, 5 Apr 2016 09:27:22 -0400 Received: from mail-bn1bon0053.outbound.protection.outlook.com ([157.56.111.53]:20560 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753149AbcDEN1T (ORCPT ); Tue, 5 Apr 2016 09:27:19 -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 07/12] svm: Add interrupt injection via AVIC To: Paolo Bonzini , , , , , References: <1458281388-14452-1-git-send-email-Suravee.Suthikulpanit@amd.com> <1458281388-14452-8-git-send-email-Suravee.Suthikulpanit@amd.com> <56EBD6FE.2050807@redhat.com> CC: , , , From: Suravee Suthikulpanit Message-ID: <5703BD1D.1070604@amd.com> Date: Tue, 5 Apr 2016 20:26:53 +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: <56EBD6FE.2050807@redhat.com> Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [58.10.104.205] X-ClientProxiedBy: SG2PR04CA0084.apcprd04.prod.outlook.com (10.169.49.180) To CY1PR12MB0443.namprd12.prod.outlook.com (10.163.91.21) X-MS-Office365-Filtering-Correlation-Id: 741942af-230a-4a5b-cf58-08d35d5600d5 X-Microsoft-Exchange-Diagnostics: 1;CY1PR12MB0443;2:J8g6RVs+AZSF1n7x1SWLe0QhbwTUZBh2MOF3u1/dSaVuUZViZeIHo0+4NNRxjQReSAD2OnfZYeA8M4bynxGXUYVPvd4TJE0fofyeKDfemeEEAuBbZR+F9O1HSgwGIneBd/2Vs9h3NaWkSVx3dBdqPmJ+OobR2vQL+i+KERVSdAv53Q2GJHXcX6aptYgFbs/w;3:pX59lBCBicSOksMbi2NvwAOGuK03Kiv54fPx6wRRrcypJ+IYXSVYMAuqxXeJt3eTW97jZP7En5cmskEFJFa2I1/KLrA67FM0QKzHE9z/dR2Pt6DisYuDCQD7jEhpOG06;25:rgOy5mo9rqf+AjkqsI/pG+a7tJwHpkzSqfndQOj04s6C9+Asfg4SOM6JdOVRAIZM5XvWUCy00ifJWqNGJsKgVSC9xO0MfO8VWnNnomABLpZzhzZxmG5f02wvqNXuk3phbQjiN2DIso5BXDSDa11+uNj08goSY93UMzu2394hBZb5ABLhy2ldvaMvrzlzwz/w3GT08peIbJLI3GjO1l14nETG29nMVz0dnFjB0FCZxfKSkyl524vZf6uifpIorUWelFzUnKDPO0qJSIJHSKyL6bA5gLBvt7UdPC010+bu5DLIZ47nLX+OessQpf6ikJMtF9V4Ln/kajIuRutFYS1UEbGFj9F6H/lLACkN6557Dyo= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CY1PR12MB0443; X-Microsoft-Exchange-Diagnostics: 1;CY1PR12MB0443;20:zlncn2dcLKyHEsJ9+DzMt31HdJxN86wpzjRhVSpTnT/xdcZM73C2QHKVqyknzpZUJvAoFqZw/x4824FVU7f8GQqDf2NzSwMmvtEp3WyCficfomoz/QqpHiIgoBGX1ufSVprQKKYeO5mYN48OL3YNxa9t6SVq2mvBWRc1EsFcx01UJlr5UihG2PXT2rnHirH3O3j78GWEg6d9Hin9evHNO19vljgxMEzcTCLXucBF9EIg4Y7A/6K4FODurXeLFPfDotvnQ9o8MNPQAbTrXdiyYDaTfiL9bwf+S1votcrHZzolWPIRwcW5RpzV4lJxYzp9SPCTpi9E+FS+uQfpCjxVAKZvbrpzaK5MgZbsocaz1rnrf/8w3PnsMzSX2Y0vND5TA4IIUteUwE0QVi9sPubdjDYIiZIIUxZDXS9j7S6vEHVoGAUOXY24sRv9jjckV7ygAbihnj+4lPB5K/IXxr8nN/PzdiCTNYTjB/wFF+K2RlwV4J1+gD8d/rK0i2dfx3hC;4:0xUtn03tn8vp8dDWshFywLumCNrEf4fkD0K8UCoF5vqehENEg0PhOV7CrmXduiYfFr+QOoI8Ii1RaHSa3E3dfqoDzY3lRiNSW8yAGlrLGfFf8Mx07dgY70yzz+KSAv8/Hw/d8JrYlV6rnTcXJEhSrZxB/HaLbkv17UztcCM4PeQqpiSDRW1R0sav14k1CPlBcJR/FBZzN2ON0AzwNVgo2mbktKR10mnGWxxkZGdjngXeILhq5Yf3E9XRcCz/cxUREMyC1GOnuvK4FLp4nyMxiqflryAdy8JZ1TqAs+WmZYYuxWGbBb1RK6T9EIrIDUHcuGrBXuFZ5KUslCUdKwBWOGddyRya6Bp0ozlKgh18bHta7copT6VOlqrCkCa2rpV4 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:CY1PR12MB0443;BCL:0;PCL:0;RULEID:;SRVR:CY1PR12MB0443; X-Forefront-PRVS: 0903DD1D85 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(24454002)(164054003)(19580395003)(80316001)(19580405001)(230700001)(5004730100002)(4326007)(36756003)(65816999)(76176999)(50986999)(54356999)(5008740100001)(2906002)(50466002)(42186005)(86362001)(586003)(2201001)(87266999)(6116002)(3846002)(1096002)(189998001)(5001770100001)(2950100001)(92566002)(47776003)(77096005)(81166005)(33656002)(64126003)(66066001)(65806001);DIR:OUT;SFP:1101;SCL:1;SRVR:CY1PR12MB0443;H:Suravees-MacBook-Pro.local;FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?Windows-1252?Q?1;CY1PR12MB0443;23:wL7IMCXV6IdEZ6M0KztXuF51Psed1ylC8QeMO?= =?Windows-1252?Q?LdW6DrFV8XHwRd6coCRsp8rhkBVcIAyF3rtLxWXdC1gjyJCzv2jNtdF4?= =?Windows-1252?Q?TmsTEcVwJjIgdTyWAWY4jZgHmregUxr9Z1KuWD1ZxsIddUTCOkOMIo59?= =?Windows-1252?Q?eRSeVCBFN45zMoCKsKRuz8Npc8ev9Vr16NdioYk9INISLTLJs19rT0Jd?= =?Windows-1252?Q?6ETB92vfkhA6rA2U2AcKSDWC9Vmf/ZRk8jeNM+zV8HOHeOndPs+cSzBq?= =?Windows-1252?Q?I1u3ZEZlMJaa+os/0Y1/bO/1FtD8h6G8Zm0T7p9yNT7uK1fC4j+7pwYK?= =?Windows-1252?Q?usH6ijBgyy9WF71v6vk/5i7dIrknhc1vtPbf094XRtI49TNVlwdyuCLy?= =?Windows-1252?Q?2yDONDQVR7pnaQe/bL4OiCTurAXxT91gsqUI+25Du0lkE/2a6tO0MsN/?= =?Windows-1252?Q?n0ebRx7PiMvQc1hwQbxatdpRNC6SDM1Vn7YQfDtr7G1jYo5RdtjhGSta?= =?Windows-1252?Q?2JGQYoPwjrKcR+h521ld21QTtX99QBUu4jD4bLD3PPFZa2W4U2crAYaU?= =?Windows-1252?Q?jCOog9OBnhJzKbF27QBw2pm+38gZDXerRxbvJ3me1JS0wz5cxQK7SgL3?= =?Windows-1252?Q?ZKOeoCWBOVw0y+VTI/3w1Iocs+Oafbg5eoiws2+SzddTEUiIM250hkWZ?= =?Windows-1252?Q?x46PQ9pt36RTGo5NYzEbBs6SkHNTynwAyPFLZ0/5SdwnlL1/SH7cxKwT?= =?Windows-1252?Q?KsKtIB7Bxliia2rI25h5Ca56m7GIdR4SC9HWiQD2SQ+C9AwwfmJ68Wv/?= =?Windows-1252?Q?u5MgMhjlJ7/A7dJ7qaDzgZRhPVepow3ccodO0mJqR6B3nA2KW+noWNHw?= =?Windows-1252?Q?Sh7Nc6p/JYMH5yr+nQqoNsRFcaAYVl2f9txH6WuZr9SKifhT1maXwkyE?= =?Windows-1252?Q?gsttpIiuCg7fK9hO5Ry9iG8DoTOOuaD3riSf3Mdp8SCKU/pqn/gG7QEF?= =?Windows-1252?Q?wIOPVBnYGcGNIsc/aUfFnAWP0l/p8H3dhpXSbr5X78tXdUU339T7gr6l?= =?Windows-1252?Q?mbYybBSj//p5C0=3D?= X-Microsoft-Exchange-Diagnostics: 1;CY1PR12MB0443;5:U3soYNXvB1cwjE/OGKPEnBWegKSUg2nvR+WDiwELMWwj3N7Z9TAfX2bQXsV9KzP68J9aeBt2qJmFJNgUBZNee0+9jHp+0zntyuaR3XEXtF4usc/gkMThCi1drTELk9wm8HsG1pOVNh2/Qyd2P/HF3A==;24:vpt10fEQJzaEEqjd0X53d6381W5IvmpBqxAnWfloT19SR2Qh/X3YlLPIcQ5CHh8eP+a/zdabT3UNaTyy29A3wnNh2nRTpXNL+egZvZyCm3Q=;20:mXQlzoSrXRI+6cxpEALg4WTsXD71kicwkLF7PUxyTAvlZ+A87tkPJoWRfm0AIKe8HsCAmELDCNOcR63yGB2CFvVqBWHK0N/0fOvNzFT04OwoOCUzTNVS4HefSlOSgf1KBNiJERxu2Z6F7pbuwmnL8eaB7NKBZiS1/Ty7wTWD7b9BRLb46uG3rOyYDAldiBMEysIUnmg+5jRbPb0/uGYMtujqQbFz/DEz+1BUtSIiyLPwc3wIg0A/QScW0VFDoP+R X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Apr 2016 13:27:12.3359 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR12MB0443 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1982 Lines: 57 Hi Paolo, On 3/18/16 17:22, Paolo Bonzini wrote: > > > On 18/03/2016 07:09, Suravee Suthikulpanit wrote: >> This patch introduces a new mechanism to inject interrupt using AVIC. >> Since VINTR is not supported when enable AVIC, we need to inject >> interrupt via APIC backing page instead. >> >> This patch also adds support for AVIC doorbell, which is used by >> KVM to signal a running vcpu to check IRR for injected interrupts. >> >> Signed-off-by: Suravee Suthikulpanit > > Looks good, but I think it breaks nested virtualization. See below. > >> [...] >> @@ -2877,8 +2895,10 @@ static int clgi_interception(struct vcpu_svm *svm) >> disable_gif(svm); >> >> /* After a CLGI no interrupts should come */ >> - svm_clear_vintr(svm); >> - svm->vmcb->control.int_ctl &= ~V_IRQ_MASK; >> + if (!svm_vcpu_avic_enabled(svm)) { >> + svm_clear_vintr(svm); >> + svm->vmcb->control.int_ctl &= ~V_IRQ_MASK; >> + } > > This is for nested virtualization. Unless you support nested AVIC, the > L2 guest should run without AVIC (i.e. IsRunning should be false) and > use the old VINTR mechanism. I see. I am not planning to supported nested AVIC at the L2 level for the moment. If it is alright, I would like to get the basic AVIC and IOMMU in first (unless you have a different opinion). In that case, I think I should also make sure to not expose AVIC CPUID to the guest VM. >> [...] >> @@ -3904,6 +3942,9 @@ static void enable_irq_window(struct kvm_vcpu *vcpu) >> * get that intercept, this function will be called again though and >> * we'll get the vintr intercept. >> */ >> + if (svm_vcpu_avic_enabled(svm)) >> + return; > > Same here. If I make change so that we do not expose the AVIC CPUID to the L1 guest, then the L1 KVM driver should not be setting up AVIC for the L2 vcpus. And, in this case, the svm_vcpu_avic_enabled(svm) should return false. I've not tested with nested VM. I will give that a try. Thanks, Suravee