From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755470AbcIEJTf (ORCPT ); Mon, 5 Sep 2016 05:19:35 -0400 Received: from mail-bn3nam01on0051.outbound.protection.outlook.com ([104.47.33.51]:44480 "EHLO NAM01-BN3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1755139AbcIEJTc (ORCPT ); Mon, 5 Sep 2016 05:19:32 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Yuri.Norov@caviumnetworks.com; Date: Mon, 5 Sep 2016 12:19:13 +0300 From: Yury Norov To: Jan Dakinevich CC: , , , Subject: Re: [PATCH] KVM: nVMX: expose INS/OUTS information support Message-ID: <20160905091913.GA22817@yury-N73SV> References: <1473013395-12214-1-git-send-email-jan.dakinevich@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline In-Reply-To: <1473013395-12214-1-git-send-email-jan.dakinevich@gmail.com> User-Agent: Mutt/1.5.24 (2015-08-30) X-Originating-IP: [95.143.213.121] X-ClientProxiedBy: HE1PR02CA0057.eurprd02.prod.outlook.com (10.163.170.25) To DM3PR07MB2249.namprd07.prod.outlook.com (10.164.33.147) X-MS-Office365-Filtering-Correlation-Id: aad2b939-f5d8-48c9-fccf-08d3d56dbac8 X-Microsoft-Exchange-Diagnostics: 1;DM3PR07MB2249;2:hQfmLNisj6cQci/rzadHWSSBREXnx2/Ie43WuNy0NGWRtN/NGfl0LU9erK59cDsSn7L8yerI+CmP7u9G4XJg8MLA1NvlXZoENcWKZI8IK6SdNQoQmIZxK90RXdPi3urqft2X4OVonURhPEN2h5pd0aNz0QLggLvVUrwZnQ8Rbk1ko6ofL8VQ71i4FkMukGd1;3:RFgsiHhN/ggF34f3wv3v7KB6Rp3oi0LoIn0I15YoeDMubn3x7P/wIdvlq+ECk4Pi4ouFpVT08ALzo1VrVjLAUvJe+Mo/9rfgFukC7uFicLJ7fUPsq8Cy5ozDWRoW+Jap;25:LDplgLOY8Mbi8P4zkai95iln12r54Aem20B3uwyZ72Wh7xDGEY9ZhYN8T5tUCnBJdHY8QJKbiavVPZLDDs/OwMKMIteLjFqC7Rdbr1GqhCjPuO6Ux6a9RegemzLiZN6WFzc/o6ioJf392cBoPsRCdDUCVOhZYVYqaADWmcUdSMPiy1g77mD7c1WWM7RAdp7XA+R6AHrs7jHEZNW/qWLlZKr7cMoK3MCu+kRS3WGv8SsKLcwSgBAq91TLZEmiaS0j824bY/IUrIeIbY0Lm1QUYc3oD02nLv+9tuiqQsE4xtI8VLIB1WmPNrYWXR3PxpwSkAdLzl0hQTn+9oe1h7dPIuUf/rNlhvG27vtW5/iXLVNsX0ONmuZsuU2PStVOxCulVuSOP9tM3YVCerT/NXdEO6P8UjHE/5bmdxu8+o0/8A4= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DM3PR07MB2249; X-Microsoft-Exchange-Diagnostics: 1;DM3PR07MB2249;31:sc6YtWsjV+YnnReLCCnuCxfu2AqQ7Ojvmh57Ngyc78/Xorl29IVaeVnv0KrM9UYnFySGTgH7EGUNv4Vv8TtD8qHQ+EW+tj+lxG2+9u0UigDx3n6sIlegzTVSteaGTCm2iZrXpu9R7Xi5F/STwfWb+sjIUIfpHN/MHwmnJ+UQlLVsTjfsPdllwG/7FQIiwV1IwZr4S8SOMMDXAgiFCeCUoiuMu6CMI/i8E0PZmHxpxYs=;20:XXYSQNuqEPSM9/DsBSe29VBAUUAjVvU/gH9DfJjOmuNJ75HsJx2RxTBzzAOBTp5RNz3K2Kjhj4E2AoFqgaKs3vlpzkQZ7+eULECmrkhAScJj/aCz3tCirEIB6SJ/+kDCQ3zwzW72bVknjdJ6E1L6Vhpu96HbNzc0uZbhNAP/Vzzdd13gVCsLbRdqMzqLid/syLd+7kQ2mslcqaD5XkNFzJbVxnNaXtmt1Z5EJV/oJ0bLxygIrYUG+dbW4aag1SKVqUDRofdvTZzz7+Ig2KjkxIFj2mFgEwlQ7AP+lJ8g/6+iNK7gZ4DDUu06xEBVoT3OL7xSpEBiibiNvKlQhL92NT4hsYDNR7uYa4oYMqWrWPJw432uSwSlkJ1l3VYCmqmW1OZpsfZGXvFYkzikTL2j6MA7M0qU4pacuTvQwHlMTND1ZCxy3lN4bhZSDVvL0nnWapQx0B2I5NpWelo986I6pGxyY/yDPtXb1mIAruopVbamq9Ljhxpv1WL8qs+xT7caoWGm7263XY3ZDV7OMF/fEPAN4I0i2t92rzr9h3R4JUzyKWsqg1sd14cyRDG6Wo5uKDXWRsfISmKC+o+p5AUUZu+sBcRt68MNfAmdhpnqF8M= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040176)(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046);SRVR:DM3PR07MB2249;BCL:0;PCL:0;RULEID:;SRVR:DM3PR07MB2249; X-Microsoft-Exchange-Diagnostics: 1;DM3PR07MB2249;4:XiIl021Q/AODCdETST2spmf86Oha3ssMmr41dc48X5hsCZrJtgH2PFVaayqgURxgi+iXZ/cHETFqKjmd6o7N6zubRQ0WNshDuGXjaGxydJaBNzTDe3cbFn4CAFTHSRNyi4fp4rzlRcyh1Bhjdfzd1rguTYTseb7efV70I7sQd1UuUqVp268u39m9ml9YWOtkuXnFf+61FgAE5TreHgt+DM/4bPxbx/2k6uGVpU2IKN9jtHNGuCY2e2TL88/XNEonHMAGYisF9e3tJngvlsCPYOVM96z1J4YWZoNJCVvEt+JA9J9UZuviN/zbxFL0bwjGN3VOdvIf8bkM10bb24P12lXszNZ7b40dpncAuqkOlt2xtD227UrJHEzUQNb0JqJ6toWwOe6m6i9JhT9w+sdnVg== X-Forefront-PRVS: 005671E15D X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(6069001)(7916002)(199003)(24454002)(189002)(76176999)(81166006)(8676002)(68736007)(189998001)(9686002)(2950100001)(4001350100001)(97736004)(23726003)(7736002)(5660300001)(50466002)(7846002)(110136002)(54356999)(4326007)(19580395003)(33716001)(19580405001)(77096005)(1076002)(92566002)(305945005)(81156014)(66066001)(33656002)(3846002)(42186005)(6116002)(586003)(105586002)(76506005)(101416001)(46406003)(50986999)(106356001)(97756001)(47776003)(2906002)(83506001)(18370500001);DIR:OUT;SFP:1101;SCL:1;SRVR:DM3PR07MB2249;H:localhost;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DM3PR07MB2249;23:W1cHM4+gmKB+DAD/TwhuVvOwki6MrcYRFVfylLG03?= =?us-ascii?Q?iNSTc6fYaIBiN03Z28rU6K/JkpyO7ke7CkmKYHdiiUMo6Sm3h1OJXYiwxrOL?= =?us-ascii?Q?4x/yCrgOqFey8kexcWDyk9JiyB1ZcMyMi38rcAlHMMP3pupnxsjDFYk9vzYT?= =?us-ascii?Q?8ANSpFVLmhIVO1p/r+UoMYLmvk7euPXzBcOw1t18ssv0+2BG3YqmZZS7yINE?= =?us-ascii?Q?OFw8cVe6gWAC0VNn0Oxw7arPqbiV5xaZ31IxHQlhmRP8uBNlOWucPv6zQ0rH?= =?us-ascii?Q?GEOwIqTeIMcZa0oEm78owEamk2aVGWPyt/SUcDFh1lEoif5dblEziwhWLg8I?= =?us-ascii?Q?l1z/q1MGViqlSXoeh/rRFZch3Kiv5OBgCIUiBgRVKpU3UHCV8m86cyXnqGCb?= =?us-ascii?Q?VrZ41uHG6nyNJzZz8YY1if2/RXC9SmjjK6bnlCXxEUoewOQkkaeioatOY+M8?= =?us-ascii?Q?exmkcV6uLDVr1Sh190hmmhixIpVlwY4EI2aecUOCVkyvDTw3lCT4XW9iSkIm?= =?us-ascii?Q?AOi+Hm7lTJphAYovE8YtNWHGHKlqT+JCKEoB/9X3gQ3WjBwESTUWhjp/lIjZ?= =?us-ascii?Q?WnjcIYYlpXJDlMSdBXPqmknZrqvhWWYbgSfKg3HOolZoiZky+7uxy7hkDWlx?= =?us-ascii?Q?lZ+/EyJ1aii/eM22J3L5ssVBMdXxHc2H9gCEy2pPn36O9SNnUFyabdRkYeED?= =?us-ascii?Q?4HGpS8IhEgHEsaK0JauJw2NkZNJpHwIQgYvwNodRygyYG1opg04WuO6cTzST?= =?us-ascii?Q?2+otk0OY2M2N7mCjq+APDeq6Y3P/RkSskW1ju9mRjp3KmljlmjwI0+R9aLr6?= =?us-ascii?Q?9qeHKDiuX7cknvytAe9Lj86HDTCLd9td1DWT8SMMudjw6Q/Fe+zzX9RNR5qm?= =?us-ascii?Q?bICzVG1C+grfZgpNi4oBwGOQ7EYAJL5vK+qRMyETDtArmPneBCAAdAYSkBsA?= =?us-ascii?Q?1m/20wJNzoef+O5gfFY3gaay8ewgdFB5wjo5wkaDZC0j7UM5vdO/9ucCpkCc?= =?us-ascii?Q?bSNvS1WjdpzkOKdgrwDgOhSbi+kWMIzHRVstqYM1t4lAhryimvpW+GBJX3mg?= =?us-ascii?Q?MQ+HkQNi0QhXDqi/oIOVC1/+N/rPUGqY+hzgZ2lRtKFlT+xv2RLMXb8gnJ10?= =?us-ascii?Q?SLe/r7cJE1dx7Y5Q2vlrkkWlt7xzcrGHOMONuA8F62MrRcVaUr4GN12T8qGD?= =?us-ascii?Q?xdM3zpFz6YYPKrEqf0DhKf0216+F8q8a0iqBU4Q683Ham10lNQkV5tFPQ=3D?= =?us-ascii?Q?=3D?= X-Microsoft-Exchange-Diagnostics: 1;DM3PR07MB2249;6:36iwiWkJKyUe9tXuQk9pn2mgONxkmPzXILDDImxg6lDzYB6/4MUKpGtdjbam11y9TqiJ8RlUBBmJnmx1xrkxo2F0GlGXRB0ixznVMOz9LXNlaEIdx0YJ1lcWj2ANMhAYb0MYjI6mALHi+YOxXyBk6hwDoxBXDk36TDm1Ae/V8UCMohz4d6OStxRHJNHQPVPxt93pmojbfq3yb6etYDgaVCtDVzkr80mh1YRZayVfkGpcJJai6mpGBAWpuXR6F2vng182k5eg/viGbCMh9K0VMWkCJvFaFaJLra7aU8Fnv/8=;5:NGsDHrsUe0M8AFa6COd+naznlD6iCcFq/dPjjCscWnETS1mO72zl9FQj/YclHBd+axLr8CGTvNbC3x+WPNiTnK/KETdxn04cbNspMcdO/6tP3+DrnCZ+IHrSYk0yXFsTV27IP7ZAEIZYfOtc2SIxfg==;24:0Hwuf2TYKGa9pT/Ruwploxux2aXL+lD/N4wmHtsrq2qg9QaSP8N8tx7B55qfOJjLf+jL2oHM1DD3FnzV9w+Ef5NzIP897ziNawahudKr2uA=;7:nq9KMO7winp2VLKSC4yp6ECu7MaXcug086BcufeFj3jmNqGVchzSPiZsDPtHeoo0u4e43qCvfkDVuO9Q49wdvtv9L8iuRLkN/bBGh/wXQJimC3cI6HStiV7p03w+aKKJxhX7Lia2q/q8Dj9cjv3MK8TdgCBE+peHa9vGS95uzdGHeG9/w6DxI+3uLFc0g1JoQHHcR+gz1mIJO9xe4wZ5wp1vEEU8vN81im9Va7tF10bQTZpKdffTx4w6g/4R7ZRW SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Sep 2016 09:19:24.6569 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM3PR07MB2249 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sun, Sep 04, 2016 at 09:23:15PM +0300, Jan Dakinevich wrote: > Expose the feature to L1 hypervisor if host CPU supports it, since > certain hypervisors requires it for own purposes. > > According to Intel SDM A.1, if CPU supports the feature, > VMX_INSTRUCTION_INFO field of VMCS will contain detailed information > about INS/OUTS instructions handling. This field is already copied to > VMCS12 for L1 hypervisor (see prepare_vmcs12 routine) independently > feature presence. > > Signed-off-by: Jan Dakinevich > --- > arch/x86/kvm/vmx.c | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c > index a4bb2bd..4fd22a6 100644 > --- a/arch/x86/kvm/vmx.c > +++ b/arch/x86/kvm/vmx.c > @@ -939,6 +939,7 @@ static DEFINE_SPINLOCK(vmx_vpid_lock); > static struct vmcs_config { > int size; > int order; > + u32 basic_cap; > u32 revision_id; > u32 pin_based_exec_ctrl; > u32 cpu_based_exec_ctrl; > @@ -1215,6 +1216,11 @@ static inline bool cpu_has_vmx_ple(void) > SECONDARY_EXEC_PAUSE_LOOP_EXITING; > } > > +static inline bool cpu_has_vmx_basic_inout(void) inline is useless. See Documentation/CodingStyle, Chapter 15 > +{ > + return (((u64)vmcs_config.basic_cap << 32) & VMX_BASIC_INOUT); You can shift VMX_BASIC_INOUT (at compile time) and avoid the shifting of vmcs_config.basic_cap at runtime. > +} > + > static inline bool cpu_need_virtualize_apic_accesses(struct kvm_vcpu *vcpu) > { > return flexpriority_enabled && lapic_in_kernel(vcpu); > @@ -2877,6 +2883,8 @@ static int vmx_get_vmx_msr(struct kvm_vcpu *vcpu, u32 msr_index, u64 *pdata) > *pdata = VMCS12_REVISION | VMX_BASIC_TRUE_CTLS | > ((u64)VMCS12_SIZE << VMX_BASIC_VMCS_SIZE_SHIFT) | > (VMX_BASIC_MEM_TYPE_WB << VMX_BASIC_MEM_TYPE_SHIFT); > + if (cpu_has_vmx_basic_inout()) > + *pdata |= VMX_BASIC_INOUT; > break; > case MSR_IA32_VMX_TRUE_PINBASED_CTLS: > case MSR_IA32_VMX_PINBASED_CTLS: > @@ -3458,6 +3466,7 @@ static __init int setup_vmcs_config(struct vmcs_config *vmcs_conf) > > vmcs_conf->size = vmx_msr_high & 0x1fff; > vmcs_conf->order = get_order(vmcs_config.size); > + vmcs_conf->basic_cap = vmx_msr_high; > vmcs_conf->revision_id = vmx_msr_low; > > vmcs_conf->pin_based_exec_ctrl = _pin_based_exec_control; > -- > 1.9.1