Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752819AbcC3KAW (ORCPT ); Wed, 30 Mar 2016 06:00:22 -0400 Received: from mail-bl2on0071.outbound.protection.outlook.com ([65.55.169.71]:19296 "EHLO na01-bl2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751701AbcC3KAU (ORCPT ); Wed, 30 Mar 2016 06:00:20 -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> CC: , , , From: Suravee Suthikulpanit Message-ID: <56FBA3A3.1060907@amd.com> Date: Wed, 30 Mar 2016 17:00:03 +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: <56FA6B36.4030607@amd.com> Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [223.24.78.250] X-ClientProxiedBy: HKXPR03CA0017.apcprd03.prod.outlook.com (25.163.104.17) To BY1PR12MB0440.namprd12.prod.outlook.com (25.162.147.141) X-MS-Office365-Filtering-Correlation-Id: 9709aa87-f05b-4285-1f07-08d358821841 X-Microsoft-Exchange-Diagnostics: 1;BY1PR12MB0440;2:0ZCpp+gyfh8uXiswS+5qOno07F72K9gMnzlZ0DojFF5R+hYTExDfXbtlZxhSnvxkChD+D1+FAoyzRk0f+evol+16J2IubGiPhIZgjse4hC1i6MvjiHbO0OOoVwrm2NBhFJak6umyfeQSJdpx7KhIipArXvwzDW6/ZdRJIj8Bgo5p6067DFk59wGdrqzV8VHq;3:dmnWPtHVDi3DW1jkoRQgK+diMXYN2F4Z7A7Xgbz+okoQcGlJFRPa7SL3RkVcJdAFMRH5fIIEzGsJhaTwtzatLCKp3u5ltmagWVS7pMlzLtkbuNQbO2aKZmiHStUNKmL7;25:CvhDNcPBlZwRODYTGhBgNCQiX2T36ps0mpi63gy/hgiFDMmVnLVJVBTX590bw0NWwivCuLnnRwS5VEb04FERLUs0biMkltvz64429vbQfXY/ULqT0O4gfv9bakAH7+Ig0Iuh1LdQv+sC+PEnde2tZUSU/HpxNddEAkhMio1lmO1BEBmzgkokat7sHDzhTJ/cqTw9vht6NjsmN/zp2aJilO6CCOhhOLECyx51QswubgeTQx1/CUsEFjvSkDkbSp4OXN5GpoPKwzo7FU52JUlQTmFNT98GMjrBSmDr9I/GuzPem6uWQ00d3NAL/WwIpOi2Dfxd6Lw2S1jdyGpxRRQnWsO/Rm+rXi2yA2rjEZT6IsqIpOgLosONCXu8Ql0LiIMzmOa3tp8PxHTz0vG9odIKfgx+kp+m3pxRzX7S42GbJhX0irvVx4pAEj1ou6hmYuQcUN8nePt2xtn6k2Vyi0QvYdC5Q5eQlK1YTMB4M4bZ8CDzLSadkczOEh9Z15tKx33IkCZolYE7N8GaO0ueZalnGVwU572Ei48VIfj60wLVvfia0K3/3v/Q5Iyn7dnI5UvO X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BY1PR12MB0440; X-Microsoft-Exchange-Diagnostics: 1;BY1PR12MB0440;20:YaVoWN/9UbiXx4ZVQM4TqpVR2zcUOpseshm8RFNR2HBykQYdzvmHlbOSONIVUPmup+3TcCziQhOSmhPJDa5rpYBiHxfmWCN/2925P0ILHeiF6yMyUZIVpKKZaJ98nwTzkAEYnsxcsI9/gbJjXSd4o27o18IzLor5j779Ef2+FBGky+1QanatxFvhYPYIT1Lg5rTttzNFWtAhEYg8ZcgA1CEGAXzltCdFhDmfHmTAkDaB8ej1E0ASVQa4FbPZJ/huMjTXE7fBFoR1FXG51wVUts1cV2j2yK0+KIq10Vi57FuzC8ato/DZeplTodq635qv46V5uGKcs25Xv3tz/8Kx0ErmPSlYXUU1ABsOWTwpFN1RWgfCVk6SfUeO7wwptFR+pPHR2m9d2LZ6TRLrjm5zP1kciKZPC87ApkMGhfxLauwIEWmGikFS8uHFFh1ZN3Zs0Ykc8e3pQcqHF06DYfhND93Rs7v/wzSU8+OQFsMOTki1Y8yirkzAC0W1XmoF0aDM;4:9f58KuNxhTSfJ6HshzGfDTqvaUCaZMIfYKa8vIUFlJ+qdgaVYKE+lZFHtxoHSfY03mU1LNaj4BCVXoEvlyQJ6gLwlsfLIPQf/Q9KS5dk++ZMMKwI+eGtugsqMEeV0qC91UCAkR9sZcbriN+vXNpxg+7idJvPhfrwIJqNir86khVrAKIF8CNhHwkfLtY+CT/GBgLc1SDSjBS/uAIzUZcd28ilKlKeBuF9oPwQZzjIG+fB/SqJVl1/C3XBYJM/sCRCPASFSNip6whcZXWRWnBatUV0NJr1O+K2Bj6XL9Jdp4zY9naiirT0NOkaTM53anQyQYhKJGdv/p43uR5DItpRnOHkszJEqToL9L4q+B6IaXj8Y8Y932rq49y7PJWePgn3 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)(10201501046)(3002001);SRVR:BY1PR12MB0440;BCL:0;PCL:0;RULEID:;SRVR:BY1PR12MB0440; X-Forefront-PRVS: 08978A8F5C X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6049001)(6009001)(164054003)(24454002)(377454003)(1096002)(23746002)(77096005)(50466002)(86362001)(5001770100001)(33656002)(4326007)(81166005)(230700001)(586003)(42186005)(2906002)(4001350100001)(3846002)(6116002)(2201001)(64126003)(189998001)(117156001)(2950100001)(5004730100002)(87266999)(54356999)(47776003)(93886004)(80316001)(83506001)(65816999)(66066001)(76176999)(65956001)(92566002)(50986999)(36756003)(5008740100001);DIR:OUT;SFP:1101;SCL:1;SRVR:BY1PR12MB0440;H:[192.168.43.18];FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?Windows-1252?Q?1;BY1PR12MB0440;23:I6giCeCGr+Os6KC+f0zWNWruRFvmzer9B7kGY?= =?Windows-1252?Q?PLzMPrGYVCBOCo3zdMPwm2sAwYDrBUd+bmAkJHWZikaAceXF1oKE/CjO?= =?Windows-1252?Q?MOVasua30rsg0D6e9tFKrTySDR8vQfNdevQaWGAvNNKuBNZhczOwtj5s?= =?Windows-1252?Q?rb9FGfwCkjVxW9vX5CNa7xIf/bJaZHHoeMgKOxjFHsfzCaLHR14FDNrr?= =?Windows-1252?Q?ESIhxCrRwoKlnKiGP2NY0Xq5mwmMi+5ctByKWBv68IjI+FupFG/FDJHO?= =?Windows-1252?Q?sbmokXjWAxDt+dZ2BCIWYUJIf+V6ekSTc6fJDqZNeVyZg6WciKYx0uZw?= =?Windows-1252?Q?MaDh0Rc0IjNEuxzqta+opBBr9pNPM6hjlGaXQKVXf3ZQRJyG+qTG8068?= =?Windows-1252?Q?9BYGUt9dzSLzKxX1ZI7KosfHjPlsvcWQtNYiP82GBBnZttAjaOUIw4wH?= =?Windows-1252?Q?n5J8Cb//Ozi2/NTL4mJ/r95h96C2uvGQAzXxxzn62gugX0WmcxPr3sJ6?= =?Windows-1252?Q?YpXuEpluyFrNNLrWbeC/XNdsWhYOpquvXmLqAXVmHm60MoA4laCPPaWd?= =?Windows-1252?Q?TI/PP3RAsIQXr/nunbHmE4d4nZxZoXnLsXRbTleK5TbhUp5gSHVVY2BM?= =?Windows-1252?Q?SRFhfV9huIUGk9pKG8fHherYDAWoniccMGpN3m4xtGGd1a1JeswqBEgd?= =?Windows-1252?Q?qGXJ/PX1wo3qmaR+W1t7AyRuOwJ40JrzljYP67LNFtsveiXSZn2Kgai/?= =?Windows-1252?Q?YfNdIXWoNcxG5c8W2aZQ/V1sdb5OH8cl8W/jXXbg5zVUV8VCQqrpFStz?= =?Windows-1252?Q?TVwM4fWnxenlYcllZcJTTMSQoFAD/pd06P8P7WYOpCVdsNpRTsjam5q6?= =?Windows-1252?Q?nZvq/GQKUZvK7GbafWskSCQ6SsIIXrSuq/x0FT2thq0pg1OGcJjIxHn2?= =?Windows-1252?Q?hTq2lkHKcGwMPbR6Te0nd+ER5ssF2KZ3NSYlHLqpxt7/UAMBMPpLk927?= =?Windows-1252?Q?MuUSAdg+8mMNvYuiCiW5ShqFuum3ZvymhvADYHa+H7ziTg4FQ7Eb3wKG?= =?Windows-1252?Q?ejQo6luJc3E0kMm+DXkNDU0vnNsA9wcdo47RouSSErk1lwDkdsf3E5Up?= =?Windows-1252?Q?Q19x8ALVr38kr705Y/qMRq0eqcwN2jfa3wXKRX3aAKg0pAy+hb7MYYv+?= =?Windows-1252?Q?J+D4HcFNw=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;BY1PR12MB0440;5:b5AUDQSVGEhz+wYYd0XFb5dB8iP2irN/vHBZTkZNccpwnF1fkjuj1DogI9VYWX0ez+K+u66lqPnCnAEa/CI/QtXY5aUaQ7FYe8dB7g7TWPWLx2NMSzRnaehdVBBSPo+XupOXT5PhwJhcaYzcm/cJtw==;24:MKR5IdiFp+QboSff/Ik5iONpT0fhRk1rdn5siEfJ6N0+OgOm2MiGSs/F1Fyx7M1tHAiTvXmBf74N03zuab1qACjWW7hEIWMM1OrU5/DT7iI=;20:U5yAEBDqvTMv+N1aDtOzGzXAu85GiBCX6xNeSqD9b1uOQxg6EU3UCQu6g4O3JAZ62ou19fbyMJs2IsjPEcUqu90tNSTxe7JGIJdEaRy2B7kfRCXQMVxN1fZg2RJb8JJE82fGVXjGiDajEiheoX6F6O47U1CuXx5qSrBvMEEzUi2UEH0fGvrfdHWiTKzION/9bfp8bE067BFoC2faWk9jGIs9NPsX6eTj6nt6DAmxApN4vUiEm6nLgeHTRdzsam02 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Mar 2016 10:00:13.4191 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR12MB0440 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2134 Lines: 67 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? Thanks, Suravee