Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752870AbcC3MSo (ORCPT ); Wed, 30 Mar 2016 08:18:44 -0400 Received: from mail-bn1bon0063.outbound.protection.outlook.com ([157.56.111.63]:39568 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751172AbcC3MSm (ORCPT ); Wed, 30 Mar 2016 08:18:42 -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 02/12] KVM: x86: Introducing kvm_x86_ops VM init/uninit hooks To: Paolo Bonzini , , , , , References: <1458281388-14452-1-git-send-email-Suravee.Suthikulpanit@amd.com> <1458281388-14452-3-git-send-email-Suravee.Suthikulpanit@amd.com> <56EBD438.5000702@redhat.com> <56FA1240.2000600@amd.com> <56FA5737.2090406@redhat.com> <56FA6B36.4030607@amd.com> <56FBA3A3.1060907@amd.com> <56FBC18D.1040505@redhat.com> CC: , , , From: Suravee Suthikulpanit Message-ID: <56FBC405.2000208@amd.com> Date: Wed, 30 Mar 2016 19:18:14 +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: <56FBC18D.1040505@redhat.com> Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [223.24.78.250] X-ClientProxiedBy: SG2PR04CA0046.apcprd04.prod.outlook.com (25.169.49.142) To BY1PR12MB0438.namprd12.prod.outlook.com (25.162.147.14) X-MS-Office365-Filtering-Correlation-Id: ba4dd05b-8a7d-4fc8-e82a-08d358956c6e X-Microsoft-Exchange-Diagnostics: 1;BY1PR12MB0438;2:bNsQX63Yhddza9fWltiRK1yoIA5W63TYieze+0b20Ss6Hs5Xs8P5CDVGaBakAirMgrrfqcIoEEwNfWrv0ezyINtQuFE1Z8FChjf/1OoSB6BAttJfvdcwdDZlfadwzaIs4m0LAeBIGXdycDDoHiBRvQDANJW0OWhVUNi9CvkFgHhBdZPU5vExwSP3A1FMX5x7;3:hdgCHX19hhIKCeWReasvAXHnTf+gJzRWOIy+UeJ3uskIY9UxcFd7j0OgLs2eej7NqphXH6qxH3HW8vrzy3HYulNzqjBgltHGTLNpKZSDpG4lzUYBh22Rt/lwP37PAtGp;25:OBmbXZLCPSwkG1ehvNKH/AzlmqNitVtGBXXutKhOnYw84+L46PIHwbjG+RP0IHfoTfkOneHdhXeh22382fc8Bb5tbYP9ajpVib9uYX3eOaMdkctqtoUxzhSUCz/S9BDrQdG/o+8wO77nBA5eut2VWumo6oXG4j/rqw7bW400Hrm5Hh+1FBsB75eN9o4Awcl5aAgeaV1q9NctY7+b4aLWMowSas9i1MTdEBCyixx6NksAKUbefUqdZ25wnPemIgqwexaNdWj80626TSjw87XW+Me5rTdBnMUMFFqUY/sFYCOoZLXUaRWqT1mdL5Y3z6XVbHB3TTmMoGqDmGyjIsXjwTitnsYB/HEL2Ukd1HNGymoEA7fPVyl5ZCT3cwsp+iYMwFQkJdAPTpd3mbSVwKP9LdNBL459X73MAHgDsN0gPSeSueBvFbdFG/LrngphJGRXbU18LroO1mpOXebW0rqZP1wSrGhK5xfs9KW27cDFlrG2m9lQQ+et5xTcHiN9uIW8PxkPnREba3qXcehXoWwxt631mkXV4Lhr9AHjWGIzZ16wKbRD+DOTOboAlp6oFdS2CgZRK7gpmbgLqTtfKHBshDQqCYgj3H5EPsYWlIB8kBM= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BY1PR12MB0438; X-Microsoft-Exchange-Diagnostics: 1;BY1PR12MB0438;20:84WHQ6EHQoDAoiTOF+BKuQCMObZVw4C8PFNMPzEoPwMrhWh5c5aYkp/h6lWEShR5o1FiWTIXx1W99+ouU3VPTmgtBc16RXdnBR93/bs4Gdj+pijtt7Y8n1K5IAAK5KfwaS7LGVvbVPvtilKmycpUGTI1kBGBFIVZmWULdyhkJd24hJwxtMEZeAZ4QAJYzfF4amzV531gKgudqmuTLIBQ/u5pFmbwefIL7tMdvQPn9ciusUCc99MCz9mH79tYBHbBtpgW9oL2lyXivFwAiUsQ1Njrtr0GEk4FafuLtbbsPiMxPWCbxNtj2chQK9rPnnF5zhVyLALZqspcDhocbBQic/p9EAT0lmnvaSMGbCnotg7uNTzEwm81HCC7k/pBDiSmCZ2zwbjc/2dEH0Ti9M74gY/50aww0cBQjYW/yH3LD1/LjnTqlN25KjZo9WR8NF68n/kQ317XR4suRPmumMxlff+KWHdQ6e3EwqOlSbmSOW4fYvYMJe+1ujoP8NXIYp+8;4:DqqZCbZbXMEC9zNsHkYotVO4L/hw74oySZKiuI1ZVjMyMeAwKnzbESivJxOYBDPfRi87rAz4ZLGARhI7KDPiniPqFeFECkr0jNkY9091R1Y3LbaeowBx4neHAH/oou+SEpbFJXReIM6KX4/k22sDUcMBDh/+luhWcepy99qUhosW2wVQsmvD5poeyROxge4jXVHtnM6fk5y7LCZuU1iFh5FRfIhplmPlp+ETljn4mnPmnGkEmgClr3vLm6PSphKSFQEIXHp1Eff7Vbf7TM8YBh0lTlmLi8SMEKavRr2xDsIWYrPxxFsJRc8WqN3WIBLuP4H8wPCruxQCWzy59QDLNxxcxiMHyPzoGZskFsEscHbE4XUm3cB0F/j7eOTpc6YP X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001);SRVR:BY1PR12MB0438;BCL:0;PCL:0;RULEID:;SRVR:BY1PR12MB0438; X-Forefront-PRVS: 08978A8F5C X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6049001)(6009001)(164054003)(377454003)(24454002)(65806001)(2906002)(66066001)(23746002)(117156001)(65816999)(50466002)(4326007)(54356999)(65956001)(50986999)(47776003)(5001770100001)(6116002)(2950100001)(76176999)(87266999)(4001350100001)(86362001)(77096005)(586003)(189998001)(3846002)(5004730100002)(92566002)(5008740100001)(230700001)(81166005)(64126003)(36756003)(42186005)(33656002)(1096002)(93886004)(2201001);DIR:OUT;SFP:1101;SCL:1;SRVR:BY1PR12MB0438;H:[192.168.43.18];FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?Windows-1252?Q?1;BY1PR12MB0438;23:8ZF9alqO51cEj0T5EEadGf8pQcpjVnzfeFNsJ?= =?Windows-1252?Q?t9O8bvcjRJWgRuyEJo3gjE6srYe5pWokeISqGweb4ajJx/brteZGA5wu?= =?Windows-1252?Q?qrxahfRGqwdK9j5QvgSwYkXLc9eNh69gmRP0ZJekqJLv0uLvX+qK8Ihq?= =?Windows-1252?Q?w91ib6SpPmvXr+a7Xp9Q+CpOzYldE24d05+36W4x/dPYFxYmkSbwzQmR?= =?Windows-1252?Q?rrmPE9BLaBuadpbdlvvfjPEDyb3jNz1XW1E9G4+KXahhhVyWJrsVF5bU?= =?Windows-1252?Q?f3f9eFytHUOK3VqolOng3jeytv9T0mAwv9JXoc9iwIxfy1gE7d20reAw?= =?Windows-1252?Q?Sb5+U1uUn1SO1O8pq07bn2aO0CZISwWRHsw53G8s9dzirNWi6ij6rKBO?= =?Windows-1252?Q?NvNKtZWqAWrDnUqEFYlXG7/ufK7ZUg5NiMzDkyOAuR5MAcvzxDn+8gIp?= =?Windows-1252?Q?WWBFz2QWhSHlRu9k4CqcfesqYv4MySjsmhEcLS4u9dWNXCq965fCz/va?= =?Windows-1252?Q?WR8euyFlU6CtOpFJiWG242QoqHOLaSpiLVpaugRo1KsYHeGutz/2r2Rj?= =?Windows-1252?Q?s8vX5j1fEU166+VnpWqTzXAWKAJNmNAf7KtWoA/cw65jHfbsc54rVTjR?= =?Windows-1252?Q?BcF1rk0wmTRjiufSAliP0Zg65tMYfv9mwgcP8HzxoSZeYCI4CEFvXS7w?= =?Windows-1252?Q?yTqqbISQa2OIxXkVEx2uV2zvOnSuySIIX5T8sLHCeW/No/g9EhyNQlgy?= =?Windows-1252?Q?C2A8247cN61jtPAlEDz6WcK5yttzWZ4ObTe72W0u95syRC0xqKamWQWp?= =?Windows-1252?Q?7yNdLxzoNIZERcGb1THwrfO8TFPJB+TOmMGR+w+3v7jPz3SgsjQN56kB?= =?Windows-1252?Q?j3Rl8bUb1RTDCfBgjEiLqV9FQW2Tt8fCHQSssCLxOZemTCa52NfJqvaN?= =?Windows-1252?Q?2WZsycpMIXDEKmc5KEr/s6fjQ9kdZoKK+pcVwSKTAF2NN/GaVx5bZLgw?= =?Windows-1252?Q?I4SOpvOXUvkh4rmF+vtZasm3Ha9HlFQ9TQZHw2Z82nJzxUNbWO8Zp5/G?= =?Windows-1252?Q?8Ba3l8YmGm3jGo7074KgbJSNu9CLK23DA18nkXxfxWZjLtONPrj2onVn?= =?Windows-1252?Q?t7n1mf9ZmTChGWksVveiLbheu2DsWULd9XzokRK2OCx?= X-Microsoft-Exchange-Diagnostics: 1;BY1PR12MB0438;5:7CoTWxj5EXQVSF+BFKenYzCKpXoe7MB/E41u/NXD7rnVit+Ob4mqg6nOrHrhlPi3Gvc4JZgaYjqq9y5uUOBoN4D1UxdYNc1QwSOcpHswNKSmo3DmUbz6fXZGPsdGalcAvsqPl7DI2P981NC/CZ4NRw==;24:4i9B0i6JsId8yASBnqzPhlXRsyMCC/0WpFdsQWAkW7dSwycnuvRObuXNDELwXxF55dMExtrAY06aCjD4SnVxCl3vwmAKbGbusB1O0KTPi0U=;20:RYqMyj9PFIlBbj6ocyTfb668cscr2lIyuy7ZRbBLFbWWE7RY6cPO6Mhn4vM5g5eZoDANrP1QdlLdCgRTZlS9eMxbdAMVmhUpRlbls0B5QpWHVfzYJjE7tGLMMyq2BWVlrziBWZ9pJmPLh4hXdepzAUjmsqLkf+L6gOFZA1DDuB+5lzFYtI3LhEoeczPe6j2D5WzbxUn0+kHRpL0GZFWLr4yaoWJxziw5qIGjHWYs38iCY+VEpKDkiecYBSIJl2/s X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Mar 2016 12:18:33.8825 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR12MB0438 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2756 Lines: 87 Hi Paolo, On 3/30/16 19:07, Paolo Bonzini wrote: > > > On 30/03/2016 12:00, Suravee Suthikulpanit wrote: >> Hi Paolo, >> >> On 3/29/16 18:47, Suravee Suthikulpanit wrote: >>> Hi, >>> >>> On 03/29/2016 05:21 PM, Paolo Bonzini wrote: >>>> >>>> >>>> On 29/03/2016 07:27, Suravee Suthikulpanit wrote: >>>>>> >>>>>>>> Adding function pointers in struct kvm_x86_ops for >>>>>>>> processor-specific >>>>>>>> layer to provide hooks for when KVM initialize and un-initialize VM. >>>>>> This is not the only thing your patch is doing, and the "other" change >>>>>> definitely needs a lot more explanation about why you did it and how >>>>>> you >>>>>> audited the code to ensure that it is safe. >>>>>> >>>>>> Paolo >>>>>> >>>>> >>>>> Sorry, for not mentioning this earlier. I am moving the >>>>> kvm_arch_init_vm() call mainly to go after mutex_init(&kvm->slots_lock) >>>>> since I am calling the x86_set_memory_region() (which uses slots_lock) >>>>> in the vm_init() hooks (for AVIC initialization). >>>>> >>>>> Lemme re-check if this would be safe for other code. >>>> >>>> No problem. In the meanwhile a patch got in ("KVM: fix spin_lock_init >>>> order on x86") that should help you. >>>> >>>> Thanks, >>>> >>>> Paolo >>>> >>> >>> Right.... that's just what I need :) I'll re-base to the latest tip then. >> >> Actually, in the file virt/kvm/kvm_main.c, I still need to move the >> kvm_arch_init_vm() to some place after the call to kvm_alloc_memslots() >> since I am calling x86_set_memory_region() in the vm_init hook. >> >> r = -ENOMEM; >> for (i = 0; i < KVM_ADDRESS_SPACE_NUM; i++) { >> kvm->memslots[i] = kvm_alloc_memslots(); >> if (!kvm->memslots[i]) >> goto out_err_no_srcu; >> } >> >> if (init_srcu_struct(&kvm->srcu)) >> goto out_err_no_srcu; >> if (init_srcu_struct(&kvm->irq_srcu)) >> goto out_err_no_irq_srcu; >> for (i = 0; i < KVM_NR_BUSES; i++) { >> kvm->buses[i] = kzalloc(sizeof(struct kvm_io_bus), >> GFP_KERNEL); >> if (!kvm->buses[i]) >> goto out_err; >> } >> //HERE >> r = kvm_arch_init_vm(kvm, type); >> if (r) >> goto out_err; >> >> Do you think that would be a problem? > > Can you delay that to after the creation of the first VCPU? Sure, I can. That's what I was doing originally before we introduce the vm_init hook. I just thought that this would make a nice place. > Allocating AVIC data structures is not required if userspace has not > called KVM_CREATE_IRQCHIP or enabled KVM_CAP_SPLIT_IRQCHIP. > > Paolo > Okay. Thanks, Suravee