From patchwork Tue Feb 25 11:37:00 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 13989869 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 5BD1AC021B2 for ; Tue, 25 Feb 2025 11:37:13 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.895656.1304317 (Exim 4.92) (envelope-from ) id 1tmtFJ-0002Z7-Ad; Tue, 25 Feb 2025 11:37:05 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 895656.1304317; Tue, 25 Feb 2025 11:37:05 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1tmtFJ-0002Z0-7z; Tue, 25 Feb 2025 11:37:05 +0000 Received: by outflank-mailman (input) for mailman id 895656; Tue, 25 Feb 2025 11:37:04 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1tmtFI-0002Ya-SL for xen-devel@lists.xenproject.org; Tue, 25 Feb 2025 11:37:04 +0000 Received: from mail-wr1-x429.google.com (mail-wr1-x429.google.com [2a00:1450:4864:20::429]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id d44e4f6c-f36c-11ef-9897-31a8f345e629; Tue, 25 Feb 2025 12:37:02 +0100 (CET) Received: by mail-wr1-x429.google.com with SMTP id ffacd0b85a97d-38f26a82d1dso2804208f8f.2 for ; Tue, 25 Feb 2025 03:37:01 -0800 (PST) Received: from [10.156.60.236] (ip-037-024-206-209.um08.pools.vodafone-ip.de. [37.24.206.209]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-390cd8667d5sm1976991f8f.20.2025.02.25.03.37.00 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 25 Feb 2025 03:37:00 -0800 (PST) X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: d44e4f6c-f36c-11ef-9897-31a8f345e629 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1740483421; x=1741088221; darn=lists.xenproject.org; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=npvN6N6QR/GbSP8B/CqHnDaWQzL1F8XjmXoQUnwBasM=; b=SeNKGeRxfrF62T/Cunt4VPpYBfmq5bepIgdgw2z7+n57wTCPZFQBFMSz93TXuodI20 BfZg0iqjUZZ2Cm6YY1TCUXd24OSgdGMGoFJrfaWajRffJFxbWi0noProYVF9tRnvrm+F 3+xLKkw/lPeCVxUtQpoNvewXav4PZYX/ZcARxgWQyvv7xk54aC71cKecQ06qd0DWoi/k 96tjXZTYcwdFDyZHEpKrxhqnpm5I+DgrDDOtgr/F6OV6WXFcQvckDMGZ9Y2nsVfkf4QC 7SknIq4x5Ed3gCE3VPW5JNywGRv4+4ycj5TIAGnTVH0GClb4eFy4ZohELk8HleVFQmZm qccg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740483421; x=1741088221; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=npvN6N6QR/GbSP8B/CqHnDaWQzL1F8XjmXoQUnwBasM=; b=PecpiJSvJ3QAJFJ7iI16W1MfoWK4CarV1Txe2oPgyt3aCxBq14mSM/kiXj6iwzmNjA Teq1XahcXlGllWJm0kO+uSAIRz/l3wRSelPAQ9+ZnGcneaP2R5xGzlneQUwIMIQClW7g tzYH+WAAdO+0DAtD1XQEZIiy+V51f70QHYR4gmwI7pFpRRm51PAU233s8lSB1b+2VZA3 oDPg59wvO7sdF2CTEe+7MApWDxOKCfazG5ShVKbimHDv6g2b+X3bXpWfWo10/KlqU9LA pY96Z5a6mH9JzzuM8xbc/9EEGGctzppy2e85+45jgGDkubRnx/gX8+Gusj4GI3MJl0C0 HtWA== X-Gm-Message-State: AOJu0Yx64iS8et+PL2ral0SiKueBLSqa0XDG9CZUVzzx6PU0WS+7ry7i hy7yDoXpw5Ucvddc8UDK4dpOpBUqYOXs18gHaawLwMUb7zciMVVwb7knEq2SEegTdJFBzfNW4eQ = X-Gm-Gg: ASbGncvKHXAiYjCYiVijaCjSMU+s6p4PIcV0Y/oocNZL8OukDkq/QTUgXFukuI43AtU pKh8wQGBDAmZ3cAM/TJourgVMMdOBgUqEFKIieea5/w/SGTVZ0S7faGnuAjzxDG1L9Xwbe58w3a elI9Eek6EHxbhf9tKYMb6XKvLq2pSzmgJ4BBiuDoAKmm3gKTiKPWWO9ui0c2N6GMo6qdnnVaakm 6lR4Yzu2W8yV72fQwjjjB0B4Ude6/pK3GLN6qJL60PLUVv/uC5nIa+jYny04KmlwksCPFd1mGd2 6Gd5l2XqNe2htntkPOkalHtP2v0+RR+pagiSXoIKDPl8MMGtgG8yCWq5L0R+fLHNfYV8fujF4zO Uw71ZmR+e46Y= X-Google-Smtp-Source: AGHT+IHhXoPIfjnOKmUr6o033L5/tW3+80usZo9PEqe/p1FnVU89l17Z6erd8/Fx5eFO6hdy2f6KMw== X-Received: by 2002:adf:e78a:0:b0:386:3328:6106 with SMTP id ffacd0b85a97d-390cc630c5dmr2496669f8f.35.1740483421035; Tue, 25 Feb 2025 03:37:01 -0800 (PST) Message-ID: <29cc2974-a1d8-4123-83b0-b44a3151f900@suse.com> Date: Tue, 25 Feb 2025 12:37:00 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH v4 01/11] x86/HVM: improve CET-IBT pruning of ENDBR From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , =?utf-8?q?Roger_Pau_Monn?= =?utf-8?q?=C3=A9?= References: <748548e8-79e5-4957-be16-c5ea4d202d21@suse.com> Content-Language: en-US Autocrypt: addr=jbeulich@suse.com; keydata= xsDiBFk3nEQRBADAEaSw6zC/EJkiwGPXbWtPxl2xCdSoeepS07jW8UgcHNurfHvUzogEq5xk hu507c3BarVjyWCJOylMNR98Yd8VqD9UfmX0Hb8/BrA+Hl6/DB/eqGptrf4BSRwcZQM32aZK 7Pj2XbGWIUrZrd70x1eAP9QE3P79Y2oLrsCgbZJfEwCgvz9JjGmQqQkRiTVzlZVCJYcyGGsD /0tbFCzD2h20ahe8rC1gbb3K3qk+LpBtvjBu1RY9drYk0NymiGbJWZgab6t1jM7sk2vuf0Py O9Hf9XBmK0uE9IgMaiCpc32XV9oASz6UJebwkX+zF2jG5I1BfnO9g7KlotcA/v5ClMjgo6Gl MDY4HxoSRu3i1cqqSDtVlt+AOVBJBACrZcnHAUSuCXBPy0jOlBhxPqRWv6ND4c9PH1xjQ3NP nxJuMBS8rnNg22uyfAgmBKNLpLgAGVRMZGaGoJObGf72s6TeIqKJo/LtggAS9qAUiuKVnygo 3wjfkS9A3DRO+SpU7JqWdsveeIQyeyEJ/8PTowmSQLakF+3fote9ybzd880fSmFuIEJldWxp Y2ggPGpiZXVsaWNoQHN1c2UuY29tPsJgBBMRAgAgBQJZN5xEAhsDBgsJCAcDAgQVAggDBBYC AwECHgECF4AACgkQoDSui/t3IH4J+wCfQ5jHdEjCRHj23O/5ttg9r9OIruwAn3103WUITZee e7Sbg12UgcQ5lv7SzsFNBFk3nEQQCACCuTjCjFOUdi5Nm244F+78kLghRcin/awv+IrTcIWF hUpSs1Y91iQQ7KItirz5uwCPlwejSJDQJLIS+QtJHaXDXeV6NI0Uef1hP20+y8qydDiVkv6l IreXjTb7DvksRgJNvCkWtYnlS3mYvQ9NzS9PhyALWbXnH6sIJd2O9lKS1Mrfq+y0IXCP10eS FFGg+Av3IQeFatkJAyju0PPthyTqxSI4lZYuJVPknzgaeuJv/2NccrPvmeDg6Coe7ZIeQ8Yj t0ARxu2xytAkkLCel1Lz1WLmwLstV30g80nkgZf/wr+/BXJW/oIvRlonUkxv+IbBM3dX2OV8 AmRv1ySWPTP7AAMFB/9PQK/VtlNUJvg8GXj9ootzrteGfVZVVT4XBJkfwBcpC/XcPzldjv+3 HYudvpdNK3lLujXeA5fLOH+Z/G9WBc5pFVSMocI71I8bT8lIAzreg0WvkWg5V2WZsUMlnDL9 mpwIGFhlbM3gfDMs7MPMu8YQRFVdUvtSpaAs8OFfGQ0ia3LGZcjA6Ik2+xcqscEJzNH+qh8V m5jjp28yZgaqTaRbg3M/+MTbMpicpZuqF4rnB0AQD12/3BNWDR6bmh+EkYSMcEIpQmBM51qM EKYTQGybRCjpnKHGOxG0rfFY1085mBDZCH5Kx0cl0HVJuQKC+dV2ZY5AqjcKwAxpE75MLFkr wkkEGBECAAkFAlk3nEQCGwwACgkQoDSui/t3IH7nnwCfcJWUDUFKdCsBH/E5d+0ZnMQi+G0A nAuWpQkjM1ASeQwSHEeAWPgskBQL In-Reply-To: <748548e8-79e5-4957-be16-c5ea4d202d21@suse.com> __init{const,data}_cf_clobber can have an effect only for pointers actually populated in the respective tables. While not the case for SVM right now, VMX installs a number of pointers only under certain conditions. Hence the respective functions would have their ENDBR purged only when those conditions are met. Invoke "pruning" functions after having copied the respective tables, for them to install any "missing" pointers. Signed-off-by: Jan Beulich --- This is largely cosmetic for present hardware, which when supporting CET-IBT likely also supports all of the advanced VMX features for which hook pointers are installed conditionally. The only case this would make a difference there is when use of respective features was suppressed via command line option (where available). For future hooks it may end up relevant even by default, and it also would be if AMD started supporting CET-IBT; right now it matters only for .pi_update_irte, as iommu_intpost continues to default to off. Originally I had meant to put the SVM and VMX functions in presmp- initcalls, but hvm/{svm,vmx}/built_in.o are linked into hvm/built_in.o before hvm/hvm.o. And I don't think I want to fiddle with link order here. --- v4: Rename functions. Re-base. v3: Re-base. v2: Use cpu_has_xen_ibt in {svm,vmx}_fill_funcs(). --- a/xen/arch/x86/hvm/hvm.c +++ b/xen/arch/x86/hvm/hvm.c @@ -160,10 +160,17 @@ static int __init cf_check hvm_enable(vo else if ( using_svm() ) fns = start_svm(); + if ( fns ) + hvm_funcs = *fns; + + if ( IS_ENABLED(CONFIG_INTEL_VMX) ) + vmx_fill_funcs(); + if ( IS_ENABLED(CONFIG_AMD_SVM) ) + svm_fill_funcs(); + if ( fns == NULL ) return 0; - hvm_funcs = *fns; hvm_enabled = 1; printk("HVM: %s enabled\n", fns->name); --- a/xen/arch/x86/hvm/svm/svm.c +++ b/xen/arch/x86/hvm/svm/svm.c @@ -2530,6 +2530,19 @@ const struct hvm_function_table * __init return &svm_function_table; } +void __init svm_fill_funcs(void) +{ + /* + * Now that svm_function_table was copied, populate all function pointers + * which may have been left at NULL, for __initdata_cf_clobber to have as + * much of an effect as possible. + */ + if ( !cpu_has_xen_ibt ) + return; + + /* Nothing at present. */ +} + void asmlinkage svm_vmexit_handler(void) { struct cpu_user_regs *regs = guest_cpu_user_regs(); --- a/xen/arch/x86/hvm/vmx/vmx.c +++ b/xen/arch/x86/hvm/vmx/vmx.c @@ -3064,6 +3064,30 @@ const struct hvm_function_table * __init return &vmx_function_table; } +void __init vmx_fill_funcs(void) +{ + /* + * Now that vmx_function_table was copied, populate all function pointers + * which may have been left at NULL, for __initdata_cf_clobber to have as + * much of an effect as possible. + */ + if ( !cpu_has_xen_ibt ) + return; + + vmx_function_table.set_descriptor_access_exiting = + vmx_set_descriptor_access_exiting; + + vmx_function_table.update_eoi_exit_bitmap = vmx_update_eoi_exit_bitmap; + vmx_function_table.process_isr = vmx_process_isr; + vmx_function_table.handle_eoi = vmx_handle_eoi; + + vmx_function_table.pi_update_irte = vmx_pi_update_irte; + + vmx_function_table.deliver_posted_intr = vmx_deliver_posted_intr; + vmx_function_table.sync_pir_to_irr = vmx_sync_pir_to_irr; + vmx_function_table.test_pir = vmx_test_pir; +} + /* * Not all cases receive valid value in the VM-exit instruction length field. * Callers must know what they're doing! --- a/xen/arch/x86/include/asm/hvm/hvm.h +++ b/xen/arch/x86/include/asm/hvm/hvm.h @@ -260,6 +260,9 @@ extern int8_t hvm_port80_allowed; extern const struct hvm_function_table *start_svm(void); extern const struct hvm_function_table *start_vmx(void); +void svm_fill_funcs(void); +void vmx_fill_funcs(void); + int hvm_domain_initialise(struct domain *d, const struct xen_domctl_createdomain *config); void hvm_domain_relinquish_resources(struct domain *d); From patchwork Tue Feb 25 11:37:37 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 13989870 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id A70B4C021B2 for ; Tue, 25 Feb 2025 11:37:47 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.895668.1304328 (Exim 4.92) (envelope-from ) id 1tmtFt-0003AY-O9; Tue, 25 Feb 2025 11:37:41 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 895668.1304328; Tue, 25 Feb 2025 11:37:41 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1tmtFt-0003AR-JM; Tue, 25 Feb 2025 11:37:41 +0000 Received: by outflank-mailman (input) for mailman id 895668; Tue, 25 Feb 2025 11:37:40 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1tmtFs-0002Ya-Ff for xen-devel@lists.xenproject.org; Tue, 25 Feb 2025 11:37:40 +0000 Received: from mail-wr1-x42f.google.com (mail-wr1-x42f.google.com [2a00:1450:4864:20::42f]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id ea789a32-f36c-11ef-9897-31a8f345e629; Tue, 25 Feb 2025 12:37:38 +0100 (CET) Received: by mail-wr1-x42f.google.com with SMTP id ffacd0b85a97d-388cae9eb9fso2879638f8f.3 for ; Tue, 25 Feb 2025 03:37:38 -0800 (PST) Received: from [10.156.60.236] (ip-037-024-206-209.um08.pools.vodafone-ip.de. [37.24.206.209]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-390cd8e7121sm1991465f8f.61.2025.02.25.03.37.37 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 25 Feb 2025 03:37:38 -0800 (PST) X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: ea789a32-f36c-11ef-9897-31a8f345e629 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1740483458; x=1741088258; darn=lists.xenproject.org; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=6uSgxkwpDZFbL0VmO//I6SlIcZxFmgRGqtOVriVjNJU=; b=PpyCAe8fViuGvakCYJA/O2M7TdmF7/VtVexIIuJpk8lsCw+J9WDavPjamKPJ+RBfTD f+OyvIVL21tGexFltVtUWt7n7OXtZ/py6rBR+1Yh6YQOv0n5E+/ot3FWqOT1zovEmDRv RViCTEvwX/zx2SIPUiQDVzjFoZOY6fGuZHlZsZVIP68Tn61bpt20FdzTHUnA/GRec53f pOza/GFeJ9jx6Nlalbx1C0tHZSDF9AbluqpMylfraL4bF1k7jL2RHi/IWWYrh99bhmv4 aqaozS1F28unkjjeQ3S8Bvafbz4JUEsoo6Luzjh9zz1Eq/7tF8v8mMQGt2HjEuNrdn3/ +HbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740483458; x=1741088258; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=6uSgxkwpDZFbL0VmO//I6SlIcZxFmgRGqtOVriVjNJU=; b=nD0CzCky50Zp4jmOgdDs8ocn2qRUxF3A/M48PoLS/uRBbR+HMT+MZgpd5ilW9CK76o jPNVQ58JHLBXO8g5u2S0mv82GVar9oeRQ/aG6pvLzCC7q1JgE+u59Z7sxMbswsl0yqBe C/XGSIPhSKqqvFN/+gVH1IBbT0aHA6MoSyP/w6yZ87NfMcb/IdfHOUxEmmz9QH4q8HWA 6txcL5A/7Fotqi/Xxk5cc84iHQSa+YMnQTg0B546i33SOY6c9+CO7Ppl4PfGo72rd7Qg NJ6+E3v+7AmDwio+ElB45f/ZdHgvNxOFbYTrrRNm32QJfb1BHxPgd6TMEkB+raSF6OW6 3Zxw== X-Gm-Message-State: AOJu0YxaVuCas9uNcgW8Z/pO5eafKId/2L/F5QFbU39FgYNBPm2HgbjM ROT+unsDHMiDOBudp2aod2QcvUQ0PdreLZX89Y1EvOZmDwDbwz2CUiw+9selcwxr5xr09redZGg = X-Gm-Gg: ASbGnctLNIPOAJo8FQ0kQfMu3F4x5GHW/CTaTw17++K9am7hqdNrue301HvuIH9Thp9 LGkT0WYXCEJFr4pm6XEIktU62VrCuXK06INfQJ7llSXoFDBBXGW68Q+WMxY83ZhaHff0mPtvERQ Ir88ybm6IofitnywcUacFEYllivOjOynijO+1CTNXPQrGrdCnyvDwEeiwwEFl/wetHo4lAyRi16 aEtbrmFPRxQeos38FtrB5HckDgGLMPMFr/zE2Yo381oXbcY1egPIctqmT07VgJor97nmsVDRyl3 bRY67eiG0y6wBRHxZi7UB1acEC1NyNtWSQE0NtQcMorcl8Iwmr/+xytf6WXi9wKBG5Z9NqAqiRG Td9IUcYz6e3U= X-Google-Smtp-Source: AGHT+IHFA9EOyHdTNGWqdgJuv5Erlj+E1X56smhCgRn4T8/vZ24k2pb5+kAuz7+uVq5f7Lvj72uMJw== X-Received: by 2002:a5d:6d07:0:b0:38f:2766:7594 with SMTP id ffacd0b85a97d-390cc6048c8mr1954114f8f.12.1740483458295; Tue, 25 Feb 2025 03:37:38 -0800 (PST) Message-ID: <2b5f1dd8-7f4c-45dd-abea-a1876adaec8d@suse.com> Date: Tue, 25 Feb 2025 12:37:37 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH v4 02/11] VMX: drop vmcs_revision_id From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , =?utf-8?q?Roger_Pau_Monn?= =?utf-8?q?=C3=A9?= References: <748548e8-79e5-4957-be16-c5ea4d202d21@suse.com> Content-Language: en-US Autocrypt: addr=jbeulich@suse.com; keydata= xsDiBFk3nEQRBADAEaSw6zC/EJkiwGPXbWtPxl2xCdSoeepS07jW8UgcHNurfHvUzogEq5xk hu507c3BarVjyWCJOylMNR98Yd8VqD9UfmX0Hb8/BrA+Hl6/DB/eqGptrf4BSRwcZQM32aZK 7Pj2XbGWIUrZrd70x1eAP9QE3P79Y2oLrsCgbZJfEwCgvz9JjGmQqQkRiTVzlZVCJYcyGGsD /0tbFCzD2h20ahe8rC1gbb3K3qk+LpBtvjBu1RY9drYk0NymiGbJWZgab6t1jM7sk2vuf0Py O9Hf9XBmK0uE9IgMaiCpc32XV9oASz6UJebwkX+zF2jG5I1BfnO9g7KlotcA/v5ClMjgo6Gl MDY4HxoSRu3i1cqqSDtVlt+AOVBJBACrZcnHAUSuCXBPy0jOlBhxPqRWv6ND4c9PH1xjQ3NP nxJuMBS8rnNg22uyfAgmBKNLpLgAGVRMZGaGoJObGf72s6TeIqKJo/LtggAS9qAUiuKVnygo 3wjfkS9A3DRO+SpU7JqWdsveeIQyeyEJ/8PTowmSQLakF+3fote9ybzd880fSmFuIEJldWxp Y2ggPGpiZXVsaWNoQHN1c2UuY29tPsJgBBMRAgAgBQJZN5xEAhsDBgsJCAcDAgQVAggDBBYC AwECHgECF4AACgkQoDSui/t3IH4J+wCfQ5jHdEjCRHj23O/5ttg9r9OIruwAn3103WUITZee e7Sbg12UgcQ5lv7SzsFNBFk3nEQQCACCuTjCjFOUdi5Nm244F+78kLghRcin/awv+IrTcIWF hUpSs1Y91iQQ7KItirz5uwCPlwejSJDQJLIS+QtJHaXDXeV6NI0Uef1hP20+y8qydDiVkv6l IreXjTb7DvksRgJNvCkWtYnlS3mYvQ9NzS9PhyALWbXnH6sIJd2O9lKS1Mrfq+y0IXCP10eS FFGg+Av3IQeFatkJAyju0PPthyTqxSI4lZYuJVPknzgaeuJv/2NccrPvmeDg6Coe7ZIeQ8Yj t0ARxu2xytAkkLCel1Lz1WLmwLstV30g80nkgZf/wr+/BXJW/oIvRlonUkxv+IbBM3dX2OV8 AmRv1ySWPTP7AAMFB/9PQK/VtlNUJvg8GXj9ootzrteGfVZVVT4XBJkfwBcpC/XcPzldjv+3 HYudvpdNK3lLujXeA5fLOH+Z/G9WBc5pFVSMocI71I8bT8lIAzreg0WvkWg5V2WZsUMlnDL9 mpwIGFhlbM3gfDMs7MPMu8YQRFVdUvtSpaAs8OFfGQ0ia3LGZcjA6Ik2+xcqscEJzNH+qh8V m5jjp28yZgaqTaRbg3M/+MTbMpicpZuqF4rnB0AQD12/3BNWDR6bmh+EkYSMcEIpQmBM51qM EKYTQGybRCjpnKHGOxG0rfFY1085mBDZCH5Kx0cl0HVJuQKC+dV2ZY5AqjcKwAxpE75MLFkr wkkEGBECAAkFAlk3nEQCGwwACgkQoDSui/t3IH7nnwCfcJWUDUFKdCsBH/E5d+0ZnMQi+G0A nAuWpQkjM1ASeQwSHEeAWPgskBQL In-Reply-To: <748548e8-79e5-4957-be16-c5ea4d202d21@suse.com> It's effectively redundant with vmx_basic_msr. For the #define replacement to work, struct vmcs_struct's respective field name also needs to change: Drop the not really meaningful "vmcs_" prefix from it. Signed-off-by: Jan Beulich Acked-by: Roger Pau Monné --- v2: New. --- a/xen/arch/x86/hvm/vmx/vmcs.c +++ b/xen/arch/x86/hvm/vmx/vmcs.c @@ -175,7 +175,7 @@ static DEFINE_PER_CPU(paddr_t, current_v static DEFINE_PER_CPU(struct list_head, active_vmcs_list); DEFINE_PER_CPU(bool, vmxon); -static u32 vmcs_revision_id __read_mostly; +#define vmcs_revision_id (vmx_basic_msr & VMX_BASIC_REVISION_MASK) u64 __read_mostly vmx_basic_msr; static void __init vmx_display_features(void) @@ -501,7 +501,6 @@ static int vmx_init_vmcs_config(bool bsp if ( !vmx_pin_based_exec_control ) { /* First time through. */ - vmcs_revision_id = vmx_basic_msr_low & VMX_BASIC_REVISION_MASK; vmx_pin_based_exec_control = _vmx_pin_based_exec_control; vmx_cpu_based_exec_control = _vmx_cpu_based_exec_control; vmx_secondary_exec_control = _vmx_secondary_exec_control; @@ -613,7 +612,7 @@ static paddr_t vmx_alloc_vmcs(void) vmcs = __map_domain_page(pg); clear_page(vmcs); - vmcs->vmcs_revision_id = vmcs_revision_id; + vmcs->revision_id = vmcs_revision_id; unmap_domain_page(vmcs); return page_to_maddr(pg); --- a/xen/arch/x86/hvm/vmx/vvmx.c +++ b/xen/arch/x86/hvm/vmx/vvmx.c @@ -1166,7 +1166,7 @@ static void nvmx_set_vmcs_pointer(struct paddr_t vvmcs_maddr = v->arch.hvm.vmx.vmcs_shadow_maddr; __vmpclear(vvmcs_maddr); - vvmcs->vmcs_revision_id |= VMCS_RID_TYPE_MASK; + vvmcs->revision_id |= VMCS_RID_TYPE_MASK; v->arch.hvm.vmx.secondary_exec_control |= SECONDARY_EXEC_ENABLE_VMCS_SHADOWING; __vmwrite(SECONDARY_VM_EXEC_CONTROL, @@ -1181,7 +1181,7 @@ static void nvmx_clear_vmcs_pointer(stru paddr_t vvmcs_maddr = v->arch.hvm.vmx.vmcs_shadow_maddr; __vmpclear(vvmcs_maddr); - vvmcs->vmcs_revision_id &= ~VMCS_RID_TYPE_MASK; + vvmcs->revision_id &= ~VMCS_RID_TYPE_MASK; v->arch.hvm.vmx.secondary_exec_control &= ~SECONDARY_EXEC_ENABLE_VMCS_SHADOWING; __vmwrite(SECONDARY_VM_EXEC_CONTROL, @@ -1799,10 +1799,10 @@ static int nvmx_handle_vmptrld(struct cp { struct vmcs_struct *vvmcs = vvmcx; - if ( ((vvmcs->vmcs_revision_id ^ vmx_basic_msr) & - VMX_BASIC_REVISION_MASK) || + if ( ((vvmcs->revision_id ^ vmx_basic_msr) & + VMX_BASIC_REVISION_MASK) || (!cpu_has_vmx_vmcs_shadowing && - (vvmcs->vmcs_revision_id & ~VMX_BASIC_REVISION_MASK)) ) + (vvmcs->revision_id & ~VMX_BASIC_REVISION_MASK)) ) { hvm_unmap_guest_frame(vvmcx, 1); vmfail(regs, VMX_INSN_VMPTRLD_INCORRECT_VMCS_ID); @@ -2215,7 +2215,7 @@ int nvmx_msr_read_intercept(unsigned int map_domain_page(_mfn(PFN_DOWN(v->arch.hvm.vmx.vmcs_pa))); data = (host_data & (~0ul << 32)) | - (vmcs->vmcs_revision_id & 0x7fffffff); + (vmcs->revision_id & 0x7fffffff); unmap_domain_page(vmcs); if ( !cpu_has_vmx_vmcs_shadowing ) --- a/xen/arch/x86/include/asm/hvm/vmx/vmcs.h +++ b/xen/arch/x86/include/asm/hvm/vmx/vmcs.h @@ -17,7 +17,7 @@ int cf_check vmx_cpu_up(void); void cf_check vmx_cpu_down(void); struct vmcs_struct { - u32 vmcs_revision_id; + uint32_t revision_id; unsigned char data [0]; /* vmcs size is read from MSR */ }; From patchwork Tue Feb 25 11:38:00 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 13989871 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 379F4C021B6 for ; Tue, 25 Feb 2025 11:38:12 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.895676.1304338 (Exim 4.92) (envelope-from ) id 1tmtGH-0003ge-VX; Tue, 25 Feb 2025 11:38:05 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 895676.1304338; Tue, 25 Feb 2025 11:38:05 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1tmtGH-0003gX-Qv; Tue, 25 Feb 2025 11:38:05 +0000 Received: by outflank-mailman (input) for mailman id 895676; Tue, 25 Feb 2025 11:38:04 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1tmtGG-0002Ya-6H for xen-devel@lists.xenproject.org; Tue, 25 Feb 2025 11:38:04 +0000 Received: from mail-wr1-x430.google.com (mail-wr1-x430.google.com [2a00:1450:4864:20::430]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id f894fc5d-f36c-11ef-9897-31a8f345e629; Tue, 25 Feb 2025 12:38:02 +0100 (CET) Received: by mail-wr1-x430.google.com with SMTP id ffacd0b85a97d-38f1e8efe84so1981452f8f.1 for ; Tue, 25 Feb 2025 03:38:02 -0800 (PST) Received: from [10.156.60.236] (ip-037-024-206-209.um08.pools.vodafone-ip.de. [37.24.206.209]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43ab153a7bcsm22704945e9.13.2025.02.25.03.38.01 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 25 Feb 2025 03:38:01 -0800 (PST) X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: f894fc5d-f36c-11ef-9897-31a8f345e629 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1740483482; x=1741088282; darn=lists.xenproject.org; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=iUxyt5/5cykRkoN9EO7EYK+xTR64sHX+xHHUuTpi9b4=; b=DClVWKZRCtX+YF67a8rDkxb+e7JjYm5CFA8fAs7UfnHF3e2qNKeUQ8Nqz3OLLZPux2 HG4V05fOIzzD0FEzt5/Hv3C3hUY3vnh7t0n5w1JAaopSLgT0ZKxUqF93K0mVBdLJXaLq ZQbXL52rNJn7F3eo/JP9J5075VCF7BaEPtmM5cGIK8We+VOKB4Z6M4dNXZyIhD+5ALn7 7K7D8ljBUYqkO3p6laIx7cCAnbSc5AkZ0XF2CH+YkXTPqGNI8MJ+qWm4+Wh7J6SJQs6H Wxj2VYEsYNNK0gwD0Q+8mwvENZVSkfeG7NhG/EKn7TV2JHPPOJ6DihJAXh1cht/P6UZl BULg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740483482; x=1741088282; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=iUxyt5/5cykRkoN9EO7EYK+xTR64sHX+xHHUuTpi9b4=; b=V0gNGDRnLJpzLfbNZGD9AJJGo07ciC9ca4e7L2MSvg+nNZwunZ9RYLaGXLyeZgd2Zq UDauxE+z/hM02QnC3oeDl4LfFrhih2OG2TUXbOVgNTSQW8YRQHfmjkFqxixHr6V7IrV0 /wOoqdvBaiWzlNercreVcljJhGz3bolKMwMBVolNTN2At/b0Wtj4lyS7QYjTXkI+a827 jP9yZnmZlpIf1cgvReWwgdHFRJl7UZeTi4IyylVg1JQObWYomd07mmDI3DQL519dxkBF DX2MZYjiHDEa6/rP879HJgp82iexIeWwFeXy2jRpwXN7CCPmhSJKMd0QoY5erTO7FHWE XV+g== X-Gm-Message-State: AOJu0Yxs7Sb9i4U4lIfQJbBYjo2U4m5HBPIz/JESpFbP+MbcnwVMRSW3 57nWpxUArVAFaLxxcAx2xVd/VdOrZofcJ3iimUHVDG4FRbmhpltLoGGpMNi0n4PR7PqOGuuV/Co = X-Gm-Gg: ASbGncsUV8JHgNfcVzngtK0R5ZGypeIJCTY6Xn9GBKgi6DhABnoPULoegSU/CIgAfXm ytv4ldKup/PvPOhPV+v6kF7cmrL8e0u17RT5/D1H1CAQJCTafCCfKULtFJTEmVidKronOjqycam Gz02Vo+wXmb8cwPv5GGW4NEtGsTBSDU8R7xB4hUaMOnhseKgG4U37h1RtqUBRgfzq2V99M6eMJW HB6UjWH5KJXuvPsMRaHdRcZNXo9RLnQaOXPLwF6Ey20CGbZMQwzmG0VByX1YYdbftl17hBRHa4+ iqcqPlpjXLxeUD7JGt5Ycd3qsAmyGdDxnl8CLeMYowNohRJKePaSrbZwID51QuNP0/2CYOTRZyX pnNp0scbbS0g= X-Google-Smtp-Source: AGHT+IEsxX1fDXfAGaFhwRnk5/L7rTjXfueuflTpSl/3otAUrpbLZYcSFGpSZSOeYMt80XQKsJj9yw== X-Received: by 2002:a05:6000:1fae:b0:38d:cbc2:29f6 with SMTP id ffacd0b85a97d-38f6e947434mr12850815f8f.17.1740483481932; Tue, 25 Feb 2025 03:38:01 -0800 (PST) Message-ID: Date: Tue, 25 Feb 2025 12:38:00 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH v4 03/11] VMX: convert vmx_basic_msr From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , =?utf-8?q?Roger_Pau_Monn?= =?utf-8?q?=C3=A9?= References: <748548e8-79e5-4957-be16-c5ea4d202d21@suse.com> Content-Language: en-US Autocrypt: addr=jbeulich@suse.com; keydata= xsDiBFk3nEQRBADAEaSw6zC/EJkiwGPXbWtPxl2xCdSoeepS07jW8UgcHNurfHvUzogEq5xk hu507c3BarVjyWCJOylMNR98Yd8VqD9UfmX0Hb8/BrA+Hl6/DB/eqGptrf4BSRwcZQM32aZK 7Pj2XbGWIUrZrd70x1eAP9QE3P79Y2oLrsCgbZJfEwCgvz9JjGmQqQkRiTVzlZVCJYcyGGsD /0tbFCzD2h20ahe8rC1gbb3K3qk+LpBtvjBu1RY9drYk0NymiGbJWZgab6t1jM7sk2vuf0Py O9Hf9XBmK0uE9IgMaiCpc32XV9oASz6UJebwkX+zF2jG5I1BfnO9g7KlotcA/v5ClMjgo6Gl MDY4HxoSRu3i1cqqSDtVlt+AOVBJBACrZcnHAUSuCXBPy0jOlBhxPqRWv6ND4c9PH1xjQ3NP nxJuMBS8rnNg22uyfAgmBKNLpLgAGVRMZGaGoJObGf72s6TeIqKJo/LtggAS9qAUiuKVnygo 3wjfkS9A3DRO+SpU7JqWdsveeIQyeyEJ/8PTowmSQLakF+3fote9ybzd880fSmFuIEJldWxp Y2ggPGpiZXVsaWNoQHN1c2UuY29tPsJgBBMRAgAgBQJZN5xEAhsDBgsJCAcDAgQVAggDBBYC AwECHgECF4AACgkQoDSui/t3IH4J+wCfQ5jHdEjCRHj23O/5ttg9r9OIruwAn3103WUITZee e7Sbg12UgcQ5lv7SzsFNBFk3nEQQCACCuTjCjFOUdi5Nm244F+78kLghRcin/awv+IrTcIWF hUpSs1Y91iQQ7KItirz5uwCPlwejSJDQJLIS+QtJHaXDXeV6NI0Uef1hP20+y8qydDiVkv6l IreXjTb7DvksRgJNvCkWtYnlS3mYvQ9NzS9PhyALWbXnH6sIJd2O9lKS1Mrfq+y0IXCP10eS FFGg+Av3IQeFatkJAyju0PPthyTqxSI4lZYuJVPknzgaeuJv/2NccrPvmeDg6Coe7ZIeQ8Yj t0ARxu2xytAkkLCel1Lz1WLmwLstV30g80nkgZf/wr+/BXJW/oIvRlonUkxv+IbBM3dX2OV8 AmRv1ySWPTP7AAMFB/9PQK/VtlNUJvg8GXj9ootzrteGfVZVVT4XBJkfwBcpC/XcPzldjv+3 HYudvpdNK3lLujXeA5fLOH+Z/G9WBc5pFVSMocI71I8bT8lIAzreg0WvkWg5V2WZsUMlnDL9 mpwIGFhlbM3gfDMs7MPMu8YQRFVdUvtSpaAs8OFfGQ0ia3LGZcjA6Ik2+xcqscEJzNH+qh8V m5jjp28yZgaqTaRbg3M/+MTbMpicpZuqF4rnB0AQD12/3BNWDR6bmh+EkYSMcEIpQmBM51qM EKYTQGybRCjpnKHGOxG0rfFY1085mBDZCH5Kx0cl0HVJuQKC+dV2ZY5AqjcKwAxpE75MLFkr wkkEGBECAAkFAlk3nEQCGwwACgkQoDSui/t3IH7nnwCfcJWUDUFKdCsBH/E5d+0ZnMQi+G0A nAuWpQkjM1ASeQwSHEeAWPgskBQL In-Reply-To: <748548e8-79e5-4957-be16-c5ea4d202d21@suse.com> ... to a struct field, which is then going to be accompanied by other capability/control data presently living in individual variables. As this structure isn't supposed to be altered post-boot, put it in .data.ro_after_init right away. Suggested-by: Roger Pau Monné Signed-off-by: Jan Beulich Acked-by: Roger Pau Monné --- v4: Re-base. v2: New. --- a/xen/arch/x86/hvm/vmx/vmcs.c +++ b/xen/arch/x86/hvm/vmx/vmcs.c @@ -161,6 +161,7 @@ static int cf_check parse_ept_param_runt #endif /* Dynamic (run-time adjusted) execution control flags. */ +struct vmx_caps __ro_after_init vmx_caps; u32 vmx_pin_based_exec_control __read_mostly; u32 vmx_cpu_based_exec_control __read_mostly; u32 vmx_secondary_exec_control __read_mostly; @@ -175,8 +176,7 @@ static DEFINE_PER_CPU(paddr_t, current_v static DEFINE_PER_CPU(struct list_head, active_vmcs_list); DEFINE_PER_CPU(bool, vmxon); -#define vmcs_revision_id (vmx_basic_msr & VMX_BASIC_REVISION_MASK) -u64 __read_mostly vmx_basic_msr; +#define vmcs_revision_id (vmx_caps.basic_msr & VMX_BASIC_REVISION_MASK) static void __init vmx_display_features(void) { @@ -508,8 +508,8 @@ static int vmx_init_vmcs_config(bool bsp vmx_ept_vpid_cap = _vmx_ept_vpid_cap; vmx_vmexit_control = _vmx_vmexit_control; vmx_vmentry_control = _vmx_vmentry_control; - vmx_basic_msr = ((u64)vmx_basic_msr_high << 32) | - vmx_basic_msr_low; + vmx_caps.basic_msr = ((uint64_t)vmx_basic_msr_high << 32) | + vmx_basic_msr_low; vmx_vmfunc = _vmx_vmfunc; vmx_display_features(); @@ -563,7 +563,7 @@ static int vmx_init_vmcs_config(bool bsp mismatch = 1; } if ( (vmx_basic_msr_high & (VMX_BASIC_VMCS_SIZE_MASK >> 32)) != - ((vmx_basic_msr & VMX_BASIC_VMCS_SIZE_MASK) >> 32) ) + ((vmx_caps.basic_msr & VMX_BASIC_VMCS_SIZE_MASK) >> 32) ) { printk("VMX: CPU%d unexpected VMCS size %Lu\n", smp_processor_id(), @@ -2228,7 +2228,7 @@ int __init vmx_vmcs_init(void) * _vmx_vcpu_up() may have made it past feature identification. * Make sure all dependent features are off as well. */ - vmx_basic_msr = 0; + memset(&vmx_caps, 0, sizeof(vmx_caps)); vmx_pin_based_exec_control = 0; vmx_cpu_based_exec_control = 0; vmx_secondary_exec_control = 0; --- a/xen/arch/x86/include/asm/hvm/vmx/vmcs.h +++ b/xen/arch/x86/include/asm/hvm/vmx/vmcs.h @@ -300,6 +300,12 @@ extern u64 vmx_ept_vpid_cap; #define VMX_TSC_MULTIPLIER_MAX 0xffffffffffffffffULL +/* Capabilities and dynamic (run-time adjusted) execution control flags. */ +struct vmx_caps { + uint64_t basic_msr; +}; +extern struct vmx_caps vmx_caps; + #define cpu_has_wbinvd_exiting \ (IS_ENABLED(CONFIG_INTEL_VMX) && \ vmx_secondary_exec_control & SECONDARY_EXEC_WBINVD_EXITING) @@ -415,9 +421,8 @@ extern u64 vmx_ept_vpid_cap; */ #define VMX_BASIC_DEFAULT1_ZERO (1ULL << 55) -extern u64 vmx_basic_msr; #define cpu_has_vmx_ins_outs_instr_info \ - (!!(vmx_basic_msr & VMX_BASIC_INS_OUT_INFO)) + (!!(vmx_caps.basic_msr & VMX_BASIC_INS_OUT_INFO)) /* Guest interrupt status */ #define VMX_GUEST_INTR_STATUS_SUBFIELD_BITMASK 0x0FF --- a/xen/arch/x86/hvm/vmx/vvmx.c +++ b/xen/arch/x86/hvm/vmx/vvmx.c @@ -1561,7 +1561,7 @@ static int nvmx_handle_vmxon(struct cpu_ rc = hvm_copy_from_guest_phys(&nvmcs_revid, gpa, sizeof(nvmcs_revid)); if ( rc != HVMTRANS_okay || (nvmcs_revid & ~VMX_BASIC_REVISION_MASK) || - ((nvmcs_revid ^ vmx_basic_msr) & VMX_BASIC_REVISION_MASK) ) + ((nvmcs_revid ^ vmx_caps.basic_msr) & VMX_BASIC_REVISION_MASK) ) { vmfail_invalid(regs); return X86EMUL_OKAY; @@ -1799,7 +1799,7 @@ static int nvmx_handle_vmptrld(struct cp { struct vmcs_struct *vvmcs = vvmcx; - if ( ((vvmcs->revision_id ^ vmx_basic_msr) & + if ( ((vvmcs->revision_id ^ vmx_caps.basic_msr) & VMX_BASIC_REVISION_MASK) || (!cpu_has_vmx_vmcs_shadowing && (vvmcs->revision_id & ~VMX_BASIC_REVISION_MASK)) ) @@ -2193,7 +2193,7 @@ int nvmx_msr_read_intercept(unsigned int case MSR_IA32_VMX_TRUE_PROCBASED_CTLS: case MSR_IA32_VMX_TRUE_EXIT_CTLS: case MSR_IA32_VMX_TRUE_ENTRY_CTLS: - if ( !(vmx_basic_msr & VMX_BASIC_DEFAULT1_ZERO) ) + if ( !(vmx_caps.basic_msr & VMX_BASIC_DEFAULT1_ZERO) ) return 0; break; From patchwork Tue Feb 25 11:38:23 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 13989872 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id AAB53C021B2 for ; Tue, 25 Feb 2025 11:38:35 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.895683.1304347 (Exim 4.92) (envelope-from ) id 1tmtGd-0004AA-66; Tue, 25 Feb 2025 11:38:27 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 895683.1304347; Tue, 25 Feb 2025 11:38:27 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1tmtGd-0004A3-2v; Tue, 25 Feb 2025 11:38:27 +0000 Received: by outflank-mailman (input) for mailman id 895683; Tue, 25 Feb 2025 11:38:25 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1tmtGb-0002yH-AF for xen-devel@lists.xenproject.org; Tue, 25 Feb 2025 11:38:25 +0000 Received: from mail-wr1-x433.google.com (mail-wr1-x433.google.com [2a00:1450:4864:20::433]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 05b08b1e-f36d-11ef-9aae-95dc52dad729; Tue, 25 Feb 2025 12:38:24 +0100 (CET) Received: by mail-wr1-x433.google.com with SMTP id ffacd0b85a97d-38f3ac22948so2775907f8f.0 for ; Tue, 25 Feb 2025 03:38:24 -0800 (PST) Received: from [10.156.60.236] (ip-037-024-206-209.um08.pools.vodafone-ip.de. [37.24.206.209]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-390cd882dacsm2011394f8f.55.2025.02.25.03.38.23 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 25 Feb 2025 03:38:23 -0800 (PST) X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 05b08b1e-f36d-11ef-9aae-95dc52dad729 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1740483504; x=1741088304; darn=lists.xenproject.org; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=A+f6cERMr2V6QYmDlZeR9EgHe8xVGJETSHpn3wIcu1U=; b=KByuSYqOhC+S37gQqqRNeks+rIt6609H/13sWprNgUfctqlO0WBN1K+jzGQNj7wwM4 Cz3WfjHaCT1UNEFB8eI4XauTxMr+mlns6hHx/F//4NEawEi9xOSqdhrcXAtJrvH+u0mq +kkZyTjeCLtYfNN+FRMMCoqI6TLEXVtPQSN0iEsiJ/Ecmqd3WIH8ZMCqEkSlEX2Hwqzo NN5UQGD9Y+VBopj9MoW4pt7uI2WWRDtIR+9s9eg3DKT4VyzbzNN4nrdkZpVXrZFyhiwq wAX/6QyneHJLQ6XTv7++JFsHBpAkH9oa6m3xkUhZovfeksMhIZGYXLi/Fv3+79a86sM7 v9Lw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740483504; x=1741088304; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=A+f6cERMr2V6QYmDlZeR9EgHe8xVGJETSHpn3wIcu1U=; b=cXLG+u3FXxF7mZVTiw8uvDsLsGQ7+XCDqKaN7P2Ph//DOCaka4fPl5DhrX2NL4Ql1g 3uJh93Ax0LL8w0zrwG64YeIBbIeyIx5/ZIT8aBVoypQW8b/qmzcK2CfWGAT4JomtuuMk AVmnMDN+sYnHqgGi8tluaId98ZGPQTRg/9Wgn8IsdljIW5mmUHs16BK3IKk6J/NEpBaP i2dS7moNosrT88g8zx5EjaHGzj5XGRV4ix9RjJLkq0tETC7PeLsBFXVpKocdiNfmj7lf QfDv1NgEnYd9N7wHXRCAHfHhFbGkzF6ZMJTi6mPiAlsACj5uqL3jG0pluT/pHSxeS/K/ NTDw== X-Gm-Message-State: AOJu0Yz7N2Li2dOJaek/mZ5hjEadG6lVsE7xZ/zzgAW1EmeMmHCD4U9p A14+qsKa95QGHNEpqoySSkQzKOti0cL/2dJuWxUbNLxLGoivxLpSPYNJy5XZV4q/IIvKDmihQZc = X-Gm-Gg: ASbGncto+Y8cOCzOT3FR90c8uwYmvZ/fAWPPMH6mwnnPwwW00TihvO/gOxB52XeanV4 nFiyM5JzYxJJv1Etp0DdXCBEBFmgSAISSR4r3ZTvsgP/TaaYj4a+1XxLloP31Z3wnS1hKGJIKFd r/GTmbifghh/mMj+iQv3jD3+cbdafPDdDsZsqEFgVrq5p9EFgHaPxGdmA07v5eQtz0vv5ONg6r+ oMIGI9WglVkApcdm98P93wzssZg3ezwe+xacCXz5DpwtcHS0GW33dgzW3HtgRqul/Ey/xqzLumY AyxjJpjbNzjsjtsnNyNTOJQYFhMPH6rXWmW1UTa/dVRoR8W4qOrkqzPFyuIhK1ewh6zA59vwerW o9H6RwE1DLAc= X-Google-Smtp-Source: AGHT+IEW92YODdoW9X9CHm6IKG7EL5QPZ0TbtF6H4hDYk9C4SF+cyHj1ePLvx3jgE+T4l2CHcGaN+g== X-Received: by 2002:a5d:4882:0:b0:38d:e378:20f7 with SMTP id ffacd0b85a97d-390cc6304abmr1885722f8f.41.1740483503937; Tue, 25 Feb 2025 03:38:23 -0800 (PST) Message-ID: <10001295-6482-4bac-92fa-f89aad16bf40@suse.com> Date: Tue, 25 Feb 2025 12:38:23 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH v4 04/11] VMX: convert vmx_pin_based_exec_control From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , =?utf-8?q?Roger_Pau_Monn?= =?utf-8?q?=C3=A9?= References: <748548e8-79e5-4957-be16-c5ea4d202d21@suse.com> Content-Language: en-US Autocrypt: addr=jbeulich@suse.com; keydata= xsDiBFk3nEQRBADAEaSw6zC/EJkiwGPXbWtPxl2xCdSoeepS07jW8UgcHNurfHvUzogEq5xk hu507c3BarVjyWCJOylMNR98Yd8VqD9UfmX0Hb8/BrA+Hl6/DB/eqGptrf4BSRwcZQM32aZK 7Pj2XbGWIUrZrd70x1eAP9QE3P79Y2oLrsCgbZJfEwCgvz9JjGmQqQkRiTVzlZVCJYcyGGsD /0tbFCzD2h20ahe8rC1gbb3K3qk+LpBtvjBu1RY9drYk0NymiGbJWZgab6t1jM7sk2vuf0Py O9Hf9XBmK0uE9IgMaiCpc32XV9oASz6UJebwkX+zF2jG5I1BfnO9g7KlotcA/v5ClMjgo6Gl MDY4HxoSRu3i1cqqSDtVlt+AOVBJBACrZcnHAUSuCXBPy0jOlBhxPqRWv6ND4c9PH1xjQ3NP nxJuMBS8rnNg22uyfAgmBKNLpLgAGVRMZGaGoJObGf72s6TeIqKJo/LtggAS9qAUiuKVnygo 3wjfkS9A3DRO+SpU7JqWdsveeIQyeyEJ/8PTowmSQLakF+3fote9ybzd880fSmFuIEJldWxp Y2ggPGpiZXVsaWNoQHN1c2UuY29tPsJgBBMRAgAgBQJZN5xEAhsDBgsJCAcDAgQVAggDBBYC AwECHgECF4AACgkQoDSui/t3IH4J+wCfQ5jHdEjCRHj23O/5ttg9r9OIruwAn3103WUITZee e7Sbg12UgcQ5lv7SzsFNBFk3nEQQCACCuTjCjFOUdi5Nm244F+78kLghRcin/awv+IrTcIWF hUpSs1Y91iQQ7KItirz5uwCPlwejSJDQJLIS+QtJHaXDXeV6NI0Uef1hP20+y8qydDiVkv6l IreXjTb7DvksRgJNvCkWtYnlS3mYvQ9NzS9PhyALWbXnH6sIJd2O9lKS1Mrfq+y0IXCP10eS FFGg+Av3IQeFatkJAyju0PPthyTqxSI4lZYuJVPknzgaeuJv/2NccrPvmeDg6Coe7ZIeQ8Yj t0ARxu2xytAkkLCel1Lz1WLmwLstV30g80nkgZf/wr+/BXJW/oIvRlonUkxv+IbBM3dX2OV8 AmRv1ySWPTP7AAMFB/9PQK/VtlNUJvg8GXj9ootzrteGfVZVVT4XBJkfwBcpC/XcPzldjv+3 HYudvpdNK3lLujXeA5fLOH+Z/G9WBc5pFVSMocI71I8bT8lIAzreg0WvkWg5V2WZsUMlnDL9 mpwIGFhlbM3gfDMs7MPMu8YQRFVdUvtSpaAs8OFfGQ0ia3LGZcjA6Ik2+xcqscEJzNH+qh8V m5jjp28yZgaqTaRbg3M/+MTbMpicpZuqF4rnB0AQD12/3BNWDR6bmh+EkYSMcEIpQmBM51qM EKYTQGybRCjpnKHGOxG0rfFY1085mBDZCH5Kx0cl0HVJuQKC+dV2ZY5AqjcKwAxpE75MLFkr wkkEGBECAAkFAlk3nEQCGwwACgkQoDSui/t3IH7nnwCfcJWUDUFKdCsBH/E5d+0ZnMQi+G0A nAuWpQkjM1ASeQwSHEeAWPgskBQL In-Reply-To: <748548e8-79e5-4957-be16-c5ea4d202d21@suse.com> ... to a field in the capability/controls struct. Use an instance of that struct also in vmx_init_vmcs_config(). Signed-off-by: Jan Beulich Acked-by: Roger Pau Monné --- v4: Re-base. v3: Add initializer to vmx_init_vmcs_config() new local var. v2: New. --- a/xen/arch/x86/hvm/vmx/vmcs.c +++ b/xen/arch/x86/hvm/vmx/vmcs.c @@ -162,7 +162,6 @@ static int cf_check parse_ept_param_runt /* Dynamic (run-time adjusted) execution control flags. */ struct vmx_caps __ro_after_init vmx_caps; -u32 vmx_pin_based_exec_control __read_mostly; u32 vmx_cpu_based_exec_control __read_mostly; u32 vmx_secondary_exec_control __read_mostly; uint64_t vmx_tertiary_exec_control __read_mostly; @@ -263,7 +262,7 @@ static bool cap_check( static int vmx_init_vmcs_config(bool bsp) { u32 vmx_basic_msr_low, vmx_basic_msr_high, min, opt; - u32 _vmx_pin_based_exec_control; + struct vmx_caps caps = {}; u32 _vmx_cpu_based_exec_control; u32 _vmx_secondary_exec_control = 0; uint64_t _vmx_tertiary_exec_control = 0; @@ -280,7 +279,7 @@ static int vmx_init_vmcs_config(bool bsp PIN_BASED_NMI_EXITING); opt = (PIN_BASED_VIRTUAL_NMIS | PIN_BASED_POSTED_INTERRUPT); - _vmx_pin_based_exec_control = adjust_vmx_controls( + caps.pin_based_exec_control = adjust_vmx_controls( "Pin-Based Exec Control", min, opt, MSR_IA32_VMX_PINBASED_CTLS, &mismatch); @@ -443,7 +442,7 @@ static int vmx_init_vmcs_config(bool bsp if ( (_vmx_secondary_exec_control & SECONDARY_EXEC_PAUSE_LOOP_EXITING) && ple_gap == 0 ) { - if ( !vmx_pin_based_exec_control ) + if ( !vmx_caps.pin_based_exec_control ) printk(XENLOG_INFO "Disable Pause-Loop Exiting.\n"); _vmx_secondary_exec_control &= ~ SECONDARY_EXEC_PAUSE_LOOP_EXITING; } @@ -461,10 +460,10 @@ static int vmx_init_vmcs_config(bool bsp * is a minimal requirement, only check the former, which is optional. */ if ( !(_vmx_secondary_exec_control & SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY) ) - _vmx_pin_based_exec_control &= ~PIN_BASED_POSTED_INTERRUPT; + caps.pin_based_exec_control &= ~PIN_BASED_POSTED_INTERRUPT; if ( iommu_intpost && - !(_vmx_pin_based_exec_control & PIN_BASED_POSTED_INTERRUPT) ) + !(caps.pin_based_exec_control & PIN_BASED_POSTED_INTERRUPT) ) { printk("Intel VT-d Posted Interrupt is disabled for CPU-side Posted " "Interrupt is not enabled\n"); @@ -498,10 +497,10 @@ static int vmx_init_vmcs_config(bool bsp if ( mismatch ) return -EINVAL; - if ( !vmx_pin_based_exec_control ) + if ( !vmx_caps.pin_based_exec_control ) { /* First time through. */ - vmx_pin_based_exec_control = _vmx_pin_based_exec_control; + vmx_caps = caps; vmx_cpu_based_exec_control = _vmx_cpu_based_exec_control; vmx_secondary_exec_control = _vmx_secondary_exec_control; vmx_tertiary_exec_control = _vmx_tertiary_exec_control; @@ -532,7 +531,7 @@ static int vmx_init_vmcs_config(bool bsp vmcs_revision_id, vmx_basic_msr_low & VMX_BASIC_REVISION_MASK); mismatch |= cap_check( "Pin-Based Exec Control", - vmx_pin_based_exec_control, _vmx_pin_based_exec_control); + vmx_caps.pin_based_exec_control, caps.pin_based_exec_control); mismatch |= cap_check( "CPU-Based Exec Control", vmx_cpu_based_exec_control, _vmx_cpu_based_exec_control); @@ -1113,7 +1112,7 @@ static int construct_vmcs(struct vcpu *v vmx_vmcs_enter(v); /* VMCS controls. */ - __vmwrite(PIN_BASED_VM_EXEC_CONTROL, vmx_pin_based_exec_control); + __vmwrite(PIN_BASED_VM_EXEC_CONTROL, vmx_caps.pin_based_exec_control); v->arch.hvm.vmx.exec_control = vmx_cpu_based_exec_control; if ( d->arch.vtsc && !cpu_has_vmx_tsc_scaling ) @@ -2150,7 +2149,7 @@ void vmcs_dump_vcpu(struct vcpu *v) printk("TSC Offset = 0x%016lx TSC Multiplier = 0x%016lx\n", vmr(TSC_OFFSET), vmr(TSC_MULTIPLIER)); if ( (v->arch.hvm.vmx.exec_control & CPU_BASED_TPR_SHADOW) || - (vmx_pin_based_exec_control & PIN_BASED_POSTED_INTERRUPT) ) + (vmx_caps.pin_based_exec_control & PIN_BASED_POSTED_INTERRUPT) ) printk("TPR Threshold = 0x%02x PostedIntrVec = 0x%02x\n", vmr32(TPR_THRESHOLD), vmr16(POSTED_INTR_NOTIFICATION_VECTOR)); if ( (v->arch.hvm.vmx.secondary_exec_control & @@ -2229,7 +2228,6 @@ int __init vmx_vmcs_init(void) * Make sure all dependent features are off as well. */ memset(&vmx_caps, 0, sizeof(vmx_caps)); - vmx_pin_based_exec_control = 0; vmx_cpu_based_exec_control = 0; vmx_secondary_exec_control = 0; vmx_tertiary_exec_control = 0; --- a/xen/arch/x86/hvm/vmx/vvmx.c +++ b/xen/arch/x86/hvm/vmx/vvmx.c @@ -1057,7 +1057,7 @@ static void load_shadow_control(struct v * and EXCEPTION * Enforce the removed features */ - nvmx_update_pin_control(v, vmx_pin_based_exec_control); + nvmx_update_pin_control(v, vmx_caps.pin_based_exec_control); vmx_update_cpu_exec_control(v); vmx_update_secondary_exec_control(v); nvmx_update_exit_control(v, vmx_vmexit_control); --- a/xen/arch/x86/include/asm/hvm/vmx/vmcs.h +++ b/xen/arch/x86/include/asm/hvm/vmx/vmcs.h @@ -217,7 +217,6 @@ extern u32 vmx_cpu_based_exec_control; #define PIN_BASED_VIRTUAL_NMIS 0x00000020 #define PIN_BASED_PREEMPT_TIMER 0x00000040 #define PIN_BASED_POSTED_INTERRUPT 0x00000080 -extern u32 vmx_pin_based_exec_control; #define VM_EXIT_SAVE_DEBUG_CNTRLS 0x00000004 #define VM_EXIT_IA32E_MODE 0x00000200 @@ -303,6 +302,7 @@ extern u64 vmx_ept_vpid_cap; /* Capabilities and dynamic (run-time adjusted) execution control flags. */ struct vmx_caps { uint64_t basic_msr; + uint32_t pin_based_exec_control; }; extern struct vmx_caps vmx_caps; @@ -317,7 +317,7 @@ extern struct vmx_caps vmx_caps; vmx_cpu_based_exec_control & CPU_BASED_TPR_SHADOW) #define cpu_has_vmx_vnmi \ (IS_ENABLED(CONFIG_INTEL_VMX) && \ - vmx_pin_based_exec_control & PIN_BASED_VIRTUAL_NMIS) + (vmx_caps.pin_based_exec_control & PIN_BASED_VIRTUAL_NMIS)) #define cpu_has_vmx_msr_bitmap \ (IS_ENABLED(CONFIG_INTEL_VMX) && \ vmx_cpu_based_exec_control & CPU_BASED_ACTIVATE_MSR_BITMAP) @@ -371,7 +371,7 @@ extern struct vmx_caps vmx_caps; vmx_secondary_exec_control & SECONDARY_EXEC_VIRTUALIZE_X2APIC_MODE) #define cpu_has_vmx_posted_intr_processing \ (IS_ENABLED(CONFIG_INTEL_VMX) && \ - vmx_pin_based_exec_control & PIN_BASED_POSTED_INTERRUPT) + (vmx_caps.pin_based_exec_control & PIN_BASED_POSTED_INTERRUPT)) #define cpu_has_vmx_vmcs_shadowing \ (IS_ENABLED(CONFIG_INTEL_VMX) && \ vmx_secondary_exec_control & SECONDARY_EXEC_ENABLE_VMCS_SHADOWING) From patchwork Tue Feb 25 11:38:53 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 13989877 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 72C88C021B2 for ; Tue, 25 Feb 2025 11:40:54 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.895705.1304377 (Exim 4.92) (envelope-from ) id 1tmtIr-00074r-7I; Tue, 25 Feb 2025 11:40:45 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 895705.1304377; Tue, 25 Feb 2025 11:40:45 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1tmtIr-00074k-45; Tue, 25 Feb 2025 11:40:45 +0000 Received: by outflank-mailman (input) for mailman id 895705; Tue, 25 Feb 2025 11:40:43 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1tmtH5-0002yH-CZ for xen-devel@lists.xenproject.org; Tue, 25 Feb 2025 11:38:55 +0000 Received: from mail-wm1-x32e.google.com (mail-wm1-x32e.google.com [2a00:1450:4864:20::32e]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 17ac0329-f36d-11ef-9aae-95dc52dad729; Tue, 25 Feb 2025 12:38:54 +0100 (CET) Received: by mail-wm1-x32e.google.com with SMTP id 5b1f17b1804b1-43948f77f1aso33479655e9.0 for ; Tue, 25 Feb 2025 03:38:54 -0800 (PST) Received: from [10.156.60.236] (ip-037-024-206-209.um08.pools.vodafone-ip.de. [37.24.206.209]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439b02ce60asm139318455e9.7.2025.02.25.03.38.53 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 25 Feb 2025 03:38:53 -0800 (PST) X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 17ac0329-f36d-11ef-9aae-95dc52dad729 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1740483534; x=1741088334; darn=lists.xenproject.org; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=DTusM0fDm59kqKhW8l+iBfpZZq5WHW5Z3JNxVLio7rE=; b=DRs/SfDR7+GG5G2HNuVNYaWB5+xCSR8A8hUWqScvTQ0T1BMAbyvMbfRnqIpk/uXPux rvESQf8gFbSFZJjgdiSgPKN8edpZXvvBnWY978xXwaUHjY2do/+LA2hQ+LqfS9S9iOcx Y9+FlUHyQ+5PRc3q5U52nk0ddlz4SwHMSBjxlcNK1PHmGCOBWqiJUpD+C62EdwIodjYp 0Gv6lGIlY0hUU9LEgKKQjxczF6pTbkh6J8lRIG/EPw7WjIorr79O5N/rZ/vJchTsV4PQ 1G4ddHvIN6X9YFCaLtQWKjGsakzEsLUpW0NGYLXKKlnN1h5yvPWw95exmm3+/3DKgT6b rj6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740483534; x=1741088334; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=DTusM0fDm59kqKhW8l+iBfpZZq5WHW5Z3JNxVLio7rE=; b=V5P54pgZKq1AXGu5zMBF24UBBaF1s4t54zzgHGn3NAAOIk3kQwak6tE/8GnWzn5CHw 2rt52QgCgUbwgvnRd+ZiqUBCS2yvW02/ihYOo/IiRs3V0ZTvbXCDa1n3clvD7wA98mgq 9Q4Xx9W8PPb6lBfCdY6aZhbG7LztF/Hej0svEdMn9N+76+6gWHkW7l7Tarsc6bTm9qy/ 6BFOZzOzTJatgGdmYFtwTJiVgMTNbdeYiRhyEjKL3LAx/NxTfpLsPFSJZpI+J8t8sC1D 0wk4SYXUqJ6g/C5UmWQhVbqGz1JQyMotfkcFQx77EKFk2mojQ2iYHeLVMFS7G/S6hADh NQnw== X-Gm-Message-State: AOJu0YzOiSj1DkF7MdPK2zFmZIA1TzxLfMWX2GjauevP06bgYIB05LT+ RY17/RzlvHVWNgizyOAVbFdc7kk5GsG0evq1PmtkOZZiE/OvBApDGMm+tXQDOvKphACyL1G5V8Q = X-Gm-Gg: ASbGnctaawt77ha2StDhB3S7zKssP/3MkrZWCHmY3t1DukRomd5sPDlqanYRAiFVz+M OAAsp/A3sQYfRa4KMHxfsZ+SLddwJyEhs82tMpFXAzZWZs2PveZb5WDntQiYweeiggI3thZrtN2 WlTnBv3bUtbGQTPscsBTHQcbtukBuAOgrQ7Di6qjOCUxcyXIuNnmnaKhrSDY1LI7Mk0vKJSx8v+ TZ1g7H2fydQ9lBMXHtkf5tpIwIuQqG9HRonj66HLiYHCI7842BVHZc8l8fUFsph7cqUOh6ZRUfH PHr3Qv3Suo2yUAQQaQz2P75SrzBqn73jtQAZmGjAJytY8crxMkIFJRlEaLD6zIHA/glcReEj6/i 6wxl3BP/rQTU= X-Google-Smtp-Source: AGHT+IEJO7wsKesf+/5MzpG4RLDp9qDPXkBIhvcjcV/fC66yW5AIg2E8Z+xYaNC+JgAEhj/8YxAH/A== X-Received: by 2002:a05:600c:3b1e:b0:439:9f12:1809 with SMTP id 5b1f17b1804b1-43ab0f6de11mr23580275e9.20.1740483534169; Tue, 25 Feb 2025 03:38:54 -0800 (PST) Message-ID: <5b7e9a1d-475e-4023-921a-aca9a3cafc0c@suse.com> Date: Tue, 25 Feb 2025 12:38:53 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH v4 05/11] VMX: convert vmx_cpu_based_exec_control From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , =?utf-8?q?Roger_Pau_Monn?= =?utf-8?q?=C3=A9?= References: <748548e8-79e5-4957-be16-c5ea4d202d21@suse.com> Content-Language: en-US Autocrypt: addr=jbeulich@suse.com; keydata= xsDiBFk3nEQRBADAEaSw6zC/EJkiwGPXbWtPxl2xCdSoeepS07jW8UgcHNurfHvUzogEq5xk hu507c3BarVjyWCJOylMNR98Yd8VqD9UfmX0Hb8/BrA+Hl6/DB/eqGptrf4BSRwcZQM32aZK 7Pj2XbGWIUrZrd70x1eAP9QE3P79Y2oLrsCgbZJfEwCgvz9JjGmQqQkRiTVzlZVCJYcyGGsD /0tbFCzD2h20ahe8rC1gbb3K3qk+LpBtvjBu1RY9drYk0NymiGbJWZgab6t1jM7sk2vuf0Py O9Hf9XBmK0uE9IgMaiCpc32XV9oASz6UJebwkX+zF2jG5I1BfnO9g7KlotcA/v5ClMjgo6Gl MDY4HxoSRu3i1cqqSDtVlt+AOVBJBACrZcnHAUSuCXBPy0jOlBhxPqRWv6ND4c9PH1xjQ3NP nxJuMBS8rnNg22uyfAgmBKNLpLgAGVRMZGaGoJObGf72s6TeIqKJo/LtggAS9qAUiuKVnygo 3wjfkS9A3DRO+SpU7JqWdsveeIQyeyEJ/8PTowmSQLakF+3fote9ybzd880fSmFuIEJldWxp Y2ggPGpiZXVsaWNoQHN1c2UuY29tPsJgBBMRAgAgBQJZN5xEAhsDBgsJCAcDAgQVAggDBBYC AwECHgECF4AACgkQoDSui/t3IH4J+wCfQ5jHdEjCRHj23O/5ttg9r9OIruwAn3103WUITZee e7Sbg12UgcQ5lv7SzsFNBFk3nEQQCACCuTjCjFOUdi5Nm244F+78kLghRcin/awv+IrTcIWF hUpSs1Y91iQQ7KItirz5uwCPlwejSJDQJLIS+QtJHaXDXeV6NI0Uef1hP20+y8qydDiVkv6l IreXjTb7DvksRgJNvCkWtYnlS3mYvQ9NzS9PhyALWbXnH6sIJd2O9lKS1Mrfq+y0IXCP10eS FFGg+Av3IQeFatkJAyju0PPthyTqxSI4lZYuJVPknzgaeuJv/2NccrPvmeDg6Coe7ZIeQ8Yj t0ARxu2xytAkkLCel1Lz1WLmwLstV30g80nkgZf/wr+/BXJW/oIvRlonUkxv+IbBM3dX2OV8 AmRv1ySWPTP7AAMFB/9PQK/VtlNUJvg8GXj9ootzrteGfVZVVT4XBJkfwBcpC/XcPzldjv+3 HYudvpdNK3lLujXeA5fLOH+Z/G9WBc5pFVSMocI71I8bT8lIAzreg0WvkWg5V2WZsUMlnDL9 mpwIGFhlbM3gfDMs7MPMu8YQRFVdUvtSpaAs8OFfGQ0ia3LGZcjA6Ik2+xcqscEJzNH+qh8V m5jjp28yZgaqTaRbg3M/+MTbMpicpZuqF4rnB0AQD12/3BNWDR6bmh+EkYSMcEIpQmBM51qM EKYTQGybRCjpnKHGOxG0rfFY1085mBDZCH5Kx0cl0HVJuQKC+dV2ZY5AqjcKwAxpE75MLFkr wkkEGBECAAkFAlk3nEQCGwwACgkQoDSui/t3IH7nnwCfcJWUDUFKdCsBH/E5d+0ZnMQi+G0A nAuWpQkjM1ASeQwSHEeAWPgskBQL In-Reply-To: <748548e8-79e5-4957-be16-c5ea4d202d21@suse.com> ... to a field in the capability/controls struct. Signed-off-by: Jan Beulich Acked-by: Roger Pau Monné --- v4: Re-base. v2: New. --- a/xen/arch/x86/hvm/vmx/vmcs.c +++ b/xen/arch/x86/hvm/vmx/vmcs.c @@ -162,7 +162,6 @@ static int cf_check parse_ept_param_runt /* Dynamic (run-time adjusted) execution control flags. */ struct vmx_caps __ro_after_init vmx_caps; -u32 vmx_cpu_based_exec_control __read_mostly; u32 vmx_secondary_exec_control __read_mostly; uint64_t vmx_tertiary_exec_control __read_mostly; u32 vmx_vmexit_control __read_mostly; @@ -263,7 +262,6 @@ static int vmx_init_vmcs_config(bool bsp { u32 vmx_basic_msr_low, vmx_basic_msr_high, min, opt; struct vmx_caps caps = {}; - u32 _vmx_cpu_based_exec_control; u32 _vmx_secondary_exec_control = 0; uint64_t _vmx_tertiary_exec_control = 0; u64 _vmx_ept_vpid_cap = 0; @@ -301,12 +299,12 @@ static int vmx_init_vmcs_config(bool bsp CPU_BASED_MONITOR_TRAP_FLAG | CPU_BASED_ACTIVATE_SECONDARY_CONTROLS | CPU_BASED_ACTIVATE_TERTIARY_CONTROLS); - _vmx_cpu_based_exec_control = adjust_vmx_controls( + caps.cpu_based_exec_control = adjust_vmx_controls( "CPU-Based Exec Control", min, opt, MSR_IA32_VMX_PROCBASED_CTLS, &mismatch); - _vmx_cpu_based_exec_control &= ~CPU_BASED_RDTSC_EXITING; - if ( _vmx_cpu_based_exec_control & CPU_BASED_TPR_SHADOW ) - _vmx_cpu_based_exec_control &= + caps.cpu_based_exec_control &= ~CPU_BASED_RDTSC_EXITING; + if ( caps.cpu_based_exec_control & CPU_BASED_TPR_SHADOW ) + caps.cpu_based_exec_control &= ~(CPU_BASED_CR8_LOAD_EXITING | CPU_BASED_CR8_STORE_EXITING); rdmsrl(MSR_IA32_VMX_MISC, _vmx_misc_cap); @@ -323,7 +321,7 @@ static int vmx_init_vmcs_config(bool bsp return -EINVAL; } - if ( _vmx_cpu_based_exec_control & CPU_BASED_ACTIVATE_SECONDARY_CONTROLS ) + if ( caps.cpu_based_exec_control & CPU_BASED_ACTIVATE_SECONDARY_CONTROLS ) { min = 0; opt = (SECONDARY_EXEC_VIRTUALIZE_APIC_ACCESSES | @@ -353,7 +351,7 @@ static int vmx_init_vmcs_config(bool bsp * "APIC Register Virtualization" and "Virtual Interrupt Delivery" * can be set only when "use TPR shadow" is set */ - if ( (_vmx_cpu_based_exec_control & CPU_BASED_TPR_SHADOW) && + if ( (caps.cpu_based_exec_control & CPU_BASED_TPR_SHADOW) && opt_apicv_enabled ) opt |= SECONDARY_EXEC_APIC_REGISTER_VIRT | SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY | @@ -364,7 +362,7 @@ static int vmx_init_vmcs_config(bool bsp MSR_IA32_VMX_PROCBASED_CTLS2, &mismatch); } - if ( _vmx_cpu_based_exec_control & CPU_BASED_ACTIVATE_TERTIARY_CONTROLS ) + if ( caps.cpu_based_exec_control & CPU_BASED_ACTIVATE_TERTIARY_CONTROLS ) { uint64_t opt = (TERTIARY_EXEC_VIRT_SPEC_CTRL | TERTIARY_EXEC_EPT_PAGING_WRITE); @@ -501,7 +499,6 @@ static int vmx_init_vmcs_config(bool bsp { /* First time through. */ vmx_caps = caps; - vmx_cpu_based_exec_control = _vmx_cpu_based_exec_control; vmx_secondary_exec_control = _vmx_secondary_exec_control; vmx_tertiary_exec_control = _vmx_tertiary_exec_control; vmx_ept_vpid_cap = _vmx_ept_vpid_cap; @@ -534,7 +531,7 @@ static int vmx_init_vmcs_config(bool bsp vmx_caps.pin_based_exec_control, caps.pin_based_exec_control); mismatch |= cap_check( "CPU-Based Exec Control", - vmx_cpu_based_exec_control, _vmx_cpu_based_exec_control); + vmx_caps.cpu_based_exec_control, caps.cpu_based_exec_control); mismatch |= cap_check( "Secondary Exec Control", vmx_secondary_exec_control, _vmx_secondary_exec_control); @@ -1114,7 +1111,7 @@ static int construct_vmcs(struct vcpu *v /* VMCS controls. */ __vmwrite(PIN_BASED_VM_EXEC_CONTROL, vmx_caps.pin_based_exec_control); - v->arch.hvm.vmx.exec_control = vmx_cpu_based_exec_control; + v->arch.hvm.vmx.exec_control = vmx_caps.cpu_based_exec_control; if ( d->arch.vtsc && !cpu_has_vmx_tsc_scaling ) v->arch.hvm.vmx.exec_control |= CPU_BASED_RDTSC_EXITING; @@ -2228,7 +2225,6 @@ int __init vmx_vmcs_init(void) * Make sure all dependent features are off as well. */ memset(&vmx_caps, 0, sizeof(vmx_caps)); - vmx_cpu_based_exec_control = 0; vmx_secondary_exec_control = 0; vmx_tertiary_exec_control = 0; vmx_vmexit_control = 0; --- a/xen/arch/x86/include/asm/hvm/vmx/vmcs.h +++ b/xen/arch/x86/include/asm/hvm/vmx/vmcs.h @@ -210,7 +210,6 @@ void vmx_vmcs_reload(struct vcpu *v); #define CPU_BASED_MONITOR_EXITING 0x20000000U #define CPU_BASED_PAUSE_EXITING 0x40000000U #define CPU_BASED_ACTIVATE_SECONDARY_CONTROLS 0x80000000U -extern u32 vmx_cpu_based_exec_control; #define PIN_BASED_EXT_INTR_MASK 0x00000001 #define PIN_BASED_NMI_EXITING 0x00000008 @@ -303,6 +302,7 @@ extern u64 vmx_ept_vpid_cap; struct vmx_caps { uint64_t basic_msr; uint32_t pin_based_exec_control; + uint32_t cpu_based_exec_control; }; extern struct vmx_caps vmx_caps; @@ -314,19 +314,19 @@ extern struct vmx_caps vmx_caps; vmx_secondary_exec_control & SECONDARY_EXEC_VIRTUALIZE_APIC_ACCESSES) #define cpu_has_vmx_tpr_shadow \ (IS_ENABLED(CONFIG_INTEL_VMX) && \ - vmx_cpu_based_exec_control & CPU_BASED_TPR_SHADOW) + (vmx_caps.cpu_based_exec_control & CPU_BASED_TPR_SHADOW)) #define cpu_has_vmx_vnmi \ (IS_ENABLED(CONFIG_INTEL_VMX) && \ (vmx_caps.pin_based_exec_control & PIN_BASED_VIRTUAL_NMIS)) #define cpu_has_vmx_msr_bitmap \ (IS_ENABLED(CONFIG_INTEL_VMX) && \ - vmx_cpu_based_exec_control & CPU_BASED_ACTIVATE_MSR_BITMAP) + (vmx_caps.cpu_based_exec_control & CPU_BASED_ACTIVATE_MSR_BITMAP)) #define cpu_has_vmx_secondary_exec_control \ (IS_ENABLED(CONFIG_INTEL_VMX) && \ - vmx_cpu_based_exec_control & CPU_BASED_ACTIVATE_SECONDARY_CONTROLS) + (vmx_caps.cpu_based_exec_control & CPU_BASED_ACTIVATE_SECONDARY_CONTROLS)) #define cpu_has_vmx_tertiary_exec_control \ (IS_ENABLED(CONFIG_INTEL_VMX) && \ - vmx_cpu_based_exec_control & CPU_BASED_ACTIVATE_TERTIARY_CONTROLS) + (vmx_caps.cpu_based_exec_control & CPU_BASED_ACTIVATE_TERTIARY_CONTROLS)) #define cpu_has_vmx_ept \ (IS_ENABLED(CONFIG_INTEL_VMX) && \ vmx_secondary_exec_control & SECONDARY_EXEC_ENABLE_EPT) @@ -341,7 +341,7 @@ extern struct vmx_caps vmx_caps; vmx_secondary_exec_control & SECONDARY_EXEC_ENABLE_VPID) #define cpu_has_monitor_trap_flag \ (IS_ENABLED(CONFIG_INTEL_VMX) && \ - vmx_cpu_based_exec_control & CPU_BASED_MONITOR_TRAP_FLAG) + (vmx_caps.cpu_based_exec_control & CPU_BASED_MONITOR_TRAP_FLAG)) #define cpu_has_vmx_pat \ (IS_ENABLED(CONFIG_INTEL_VMX) && \ vmx_vmentry_control & VM_ENTRY_LOAD_GUEST_PAT) From patchwork Tue Feb 25 11:39:23 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 13989874 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 478E6C021B2 for ; Tue, 25 Feb 2025 11:40:44 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.895699.1304368 (Exim 4.92) (envelope-from ) id 1tmtIi-0006cE-Tw; Tue, 25 Feb 2025 11:40:36 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 895699.1304368; Tue, 25 Feb 2025 11:40:36 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1tmtIi-0006c7-PR; Tue, 25 Feb 2025 11:40:36 +0000 Received: by outflank-mailman (input) for mailman id 895699; Tue, 25 Feb 2025 11:40:35 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1tmtHa-0002yH-57 for xen-devel@lists.xenproject.org; Tue, 25 Feb 2025 11:39:26 +0000 Received: from mail-wr1-x42c.google.com (mail-wr1-x42c.google.com [2a00:1450:4864:20::42c]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 29b9dde5-f36d-11ef-9aae-95dc52dad729; Tue, 25 Feb 2025 12:39:25 +0100 (CET) Received: by mail-wr1-x42c.google.com with SMTP id ffacd0b85a97d-38f488f3161so2980564f8f.3 for ; Tue, 25 Feb 2025 03:39:25 -0800 (PST) Received: from [10.156.60.236] (ip-037-024-206-209.um08.pools.vodafone-ip.de. [37.24.206.209]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-390cd86cca1sm1988689f8f.24.2025.02.25.03.39.23 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 25 Feb 2025 03:39:24 -0800 (PST) X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 29b9dde5-f36d-11ef-9aae-95dc52dad729 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1740483564; x=1741088364; darn=lists.xenproject.org; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=kvNtan6HIHBpRNJGMzv9mjkqb85FcLGIsPKTiKpkSvY=; b=S3hmDTUvqJaWTfUeLoRRV4KKm/cOkDMoeQRd4ZfRUp8gnp30bU0kr+jP4b6wOPpKwV jVLxcwAJhGMHRUM0K79HE/rrSeJrpT7/oju1fMESSUI5Y8hFBKUQN4L7ltMvng3TAxjt fKFPR9y/CSKII7s3V+pRjKLIHYopB82QgLZMPxOk7nr3kueVaRYxdUGoK4d2GQ13EV6a 7XA4wIFV75FuYIY3tTfXja+WpOaV/HRX/kZ+sclmmHx1hLxmjeorWvXXtTzcFqZOb+yj bUeV7Kt43bzcyc/1IIliJTH5jDcH7DcYWpBycR28J0Apt7opBt9Q0IFh/S4KZdJ4X5MM DGUA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740483564; x=1741088364; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=kvNtan6HIHBpRNJGMzv9mjkqb85FcLGIsPKTiKpkSvY=; b=R7V3Vap2P574rjdPCq76kNHUV0ExKVWwQ9gvXjoTfRoLPPWrszcyxrTd/ekKojOzk4 X4HX32WbtGVjHJqZNgPiIrs28/k9lUMw06y8No7fbOXesX+dSbseV/2cPFGBePYo5q/r +WLhUFclNGQOo/fRBF4pqmQYXr8W3/yU4Yl+NcMyrU3ekyNmJt65zhQ2mKi7Gz8XqOJL D18WBL5HT10i9RbsOgEYH5WVJGdW0oZu+3TGPQl+Y2xaLNiXB0cJ4UByQDzBN864K46p DYFPSz64Sr036uVHpMtDrgPMU2UnM8HUYZMN8tzVqL6puIaXIq2S/Ohfev++zXWJ40TC IBeQ== X-Gm-Message-State: AOJu0YzERPPNMsf1T68BFZrxzGjTETFXheJE0sZJBt6XlD3C2s+T4E8J Gb6/8bHKf2+N9pEyCgPUEirgCIQARBKaf9nE5Vk/Uml9soOz1SXjqEGgW6gC/X25OUi5OB2XCkc = X-Gm-Gg: ASbGncuZPyjYYYMBLX5fevZQ5gx7GSndmGU7dWAh/HHKGXVQzxLso083mRCRzgLvLXv AWQVEzsdQRenVvrkYi/onu6vunaOzUYB4Ti/q52s7Ol22fRskZkh7H025Vtf4fWwExncGda9H/M e8gQ/NyTfWt99yQKFYpQ/a83HBaUXDlt37Ifir0uTOQ8262A/fYEz1fvyjn6Fqj/CGUS54gwJLp d6U4CVDzmmbc01Q76Ibr7SiHemUSEP/xPc1jw8nS+2bD7TBRJ63gF1e2GVtWrCWhSqJLOB3q4cM Iy+8j+6seNbo9v3gBUk6MDz5RSSFIuYcCd59xUBj0lLqcUjX2gjXRYwd57f+bA33w72g2/kcWYx PiXwpMpw6ouA= X-Google-Smtp-Source: AGHT+IEFMNPKc3Sav1tQkGhOzBM8I0/QgxLhgHxzE7hmEWHmkb6djRe7GH0tPjefLSyCPrr8HQgtaA== X-Received: by 2002:a05:6000:1541:b0:38d:d767:364 with SMTP id ffacd0b85a97d-38f70789915mr12699292f8f.13.1740483564393; Tue, 25 Feb 2025 03:39:24 -0800 (PST) Message-ID: Date: Tue, 25 Feb 2025 12:39:23 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH v4 06/11] VMX: convert vmx_secondary_exec_control From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , =?utf-8?q?Roger_Pau_Monn?= =?utf-8?q?=C3=A9?= References: <748548e8-79e5-4957-be16-c5ea4d202d21@suse.com> Content-Language: en-US Autocrypt: addr=jbeulich@suse.com; keydata= xsDiBFk3nEQRBADAEaSw6zC/EJkiwGPXbWtPxl2xCdSoeepS07jW8UgcHNurfHvUzogEq5xk hu507c3BarVjyWCJOylMNR98Yd8VqD9UfmX0Hb8/BrA+Hl6/DB/eqGptrf4BSRwcZQM32aZK 7Pj2XbGWIUrZrd70x1eAP9QE3P79Y2oLrsCgbZJfEwCgvz9JjGmQqQkRiTVzlZVCJYcyGGsD /0tbFCzD2h20ahe8rC1gbb3K3qk+LpBtvjBu1RY9drYk0NymiGbJWZgab6t1jM7sk2vuf0Py O9Hf9XBmK0uE9IgMaiCpc32XV9oASz6UJebwkX+zF2jG5I1BfnO9g7KlotcA/v5ClMjgo6Gl MDY4HxoSRu3i1cqqSDtVlt+AOVBJBACrZcnHAUSuCXBPy0jOlBhxPqRWv6ND4c9PH1xjQ3NP nxJuMBS8rnNg22uyfAgmBKNLpLgAGVRMZGaGoJObGf72s6TeIqKJo/LtggAS9qAUiuKVnygo 3wjfkS9A3DRO+SpU7JqWdsveeIQyeyEJ/8PTowmSQLakF+3fote9ybzd880fSmFuIEJldWxp Y2ggPGpiZXVsaWNoQHN1c2UuY29tPsJgBBMRAgAgBQJZN5xEAhsDBgsJCAcDAgQVAggDBBYC AwECHgECF4AACgkQoDSui/t3IH4J+wCfQ5jHdEjCRHj23O/5ttg9r9OIruwAn3103WUITZee e7Sbg12UgcQ5lv7SzsFNBFk3nEQQCACCuTjCjFOUdi5Nm244F+78kLghRcin/awv+IrTcIWF hUpSs1Y91iQQ7KItirz5uwCPlwejSJDQJLIS+QtJHaXDXeV6NI0Uef1hP20+y8qydDiVkv6l IreXjTb7DvksRgJNvCkWtYnlS3mYvQ9NzS9PhyALWbXnH6sIJd2O9lKS1Mrfq+y0IXCP10eS FFGg+Av3IQeFatkJAyju0PPthyTqxSI4lZYuJVPknzgaeuJv/2NccrPvmeDg6Coe7ZIeQ8Yj t0ARxu2xytAkkLCel1Lz1WLmwLstV30g80nkgZf/wr+/BXJW/oIvRlonUkxv+IbBM3dX2OV8 AmRv1ySWPTP7AAMFB/9PQK/VtlNUJvg8GXj9ootzrteGfVZVVT4XBJkfwBcpC/XcPzldjv+3 HYudvpdNK3lLujXeA5fLOH+Z/G9WBc5pFVSMocI71I8bT8lIAzreg0WvkWg5V2WZsUMlnDL9 mpwIGFhlbM3gfDMs7MPMu8YQRFVdUvtSpaAs8OFfGQ0ia3LGZcjA6Ik2+xcqscEJzNH+qh8V m5jjp28yZgaqTaRbg3M/+MTbMpicpZuqF4rnB0AQD12/3BNWDR6bmh+EkYSMcEIpQmBM51qM EKYTQGybRCjpnKHGOxG0rfFY1085mBDZCH5Kx0cl0HVJuQKC+dV2ZY5AqjcKwAxpE75MLFkr wkkEGBECAAkFAlk3nEQCGwwACgkQoDSui/t3IH7nnwCfcJWUDUFKdCsBH/E5d+0ZnMQi+G0A nAuWpQkjM1ASeQwSHEeAWPgskBQL In-Reply-To: <748548e8-79e5-4957-be16-c5ea4d202d21@suse.com> ... to a field in the capability/controls struct. Signed-off-by: Jan Beulich Acked-by: Roger Pau Monné --- v4: Re-base. v2: New. --- a/xen/arch/x86/hvm/vmx/vmcs.c +++ b/xen/arch/x86/hvm/vmx/vmcs.c @@ -162,7 +162,6 @@ static int cf_check parse_ept_param_runt /* Dynamic (run-time adjusted) execution control flags. */ struct vmx_caps __ro_after_init vmx_caps; -u32 vmx_secondary_exec_control __read_mostly; uint64_t vmx_tertiary_exec_control __read_mostly; u32 vmx_vmexit_control __read_mostly; u32 vmx_vmentry_control __read_mostly; @@ -262,7 +261,6 @@ static int vmx_init_vmcs_config(bool bsp { u32 vmx_basic_msr_low, vmx_basic_msr_high, min, opt; struct vmx_caps caps = {}; - u32 _vmx_secondary_exec_control = 0; uint64_t _vmx_tertiary_exec_control = 0; u64 _vmx_ept_vpid_cap = 0; u64 _vmx_misc_cap = 0; @@ -357,7 +355,7 @@ static int vmx_init_vmcs_config(bool bsp SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY | SECONDARY_EXEC_VIRTUALIZE_X2APIC_MODE; - _vmx_secondary_exec_control = adjust_vmx_controls( + caps.secondary_exec_control = adjust_vmx_controls( "Secondary Exec Control", min, opt, MSR_IA32_VMX_PROCBASED_CTLS2, &mismatch); } @@ -373,7 +371,7 @@ static int vmx_init_vmcs_config(bool bsp } /* The IA32_VMX_EPT_VPID_CAP MSR exists only when EPT or VPID available */ - if ( _vmx_secondary_exec_control & (SECONDARY_EXEC_ENABLE_EPT | + if ( caps.secondary_exec_control & (SECONDARY_EXEC_ENABLE_EPT | SECONDARY_EXEC_ENABLE_VPID) ) { rdmsrl(MSR_IA32_VMX_EPT_VPID_CAP, _vmx_ept_vpid_cap); @@ -395,7 +393,7 @@ static int vmx_init_vmcs_config(bool bsp if ( !(_vmx_ept_vpid_cap & VMX_EPT_MEMORY_TYPE_WB) || !(_vmx_ept_vpid_cap & VMX_EPT_WALK_LENGTH_4_SUPPORTED) || !(_vmx_ept_vpid_cap & VMX_EPT_INVEPT_ALL_CONTEXT) ) - _vmx_secondary_exec_control &= ~SECONDARY_EXEC_ENABLE_EPT; + caps.secondary_exec_control &= ~SECONDARY_EXEC_ENABLE_EPT; /* * the CPU must support INVVPID all context invalidation, because we @@ -404,14 +402,14 @@ static int vmx_init_vmcs_config(bool bsp * Or we just don't use VPID. */ if ( !(_vmx_ept_vpid_cap & VMX_VPID_INVVPID_ALL_CONTEXT) ) - _vmx_secondary_exec_control &= ~SECONDARY_EXEC_ENABLE_VPID; + caps.secondary_exec_control &= ~SECONDARY_EXEC_ENABLE_VPID; /* EPT A/D bits is required for PML */ if ( !(_vmx_ept_vpid_cap & VMX_EPT_AD_BIT) ) - _vmx_secondary_exec_control &= ~SECONDARY_EXEC_ENABLE_PML; + caps.secondary_exec_control &= ~SECONDARY_EXEC_ENABLE_PML; } - if ( _vmx_secondary_exec_control & SECONDARY_EXEC_ENABLE_EPT ) + if ( caps.secondary_exec_control & SECONDARY_EXEC_ENABLE_EPT ) { /* * To use EPT we expect to be able to clear certain intercepts. @@ -424,25 +422,25 @@ static int vmx_init_vmcs_config(bool bsp if ( must_be_one & (CPU_BASED_INVLPG_EXITING | CPU_BASED_CR3_LOAD_EXITING | CPU_BASED_CR3_STORE_EXITING) ) - _vmx_secondary_exec_control &= + caps.secondary_exec_control &= ~(SECONDARY_EXEC_ENABLE_EPT | SECONDARY_EXEC_UNRESTRICTED_GUEST); } /* PML cannot be supported if EPT is not used */ - if ( !(_vmx_secondary_exec_control & SECONDARY_EXEC_ENABLE_EPT) ) - _vmx_secondary_exec_control &= ~SECONDARY_EXEC_ENABLE_PML; + if ( !(caps.secondary_exec_control & SECONDARY_EXEC_ENABLE_EPT) ) + caps.secondary_exec_control &= ~SECONDARY_EXEC_ENABLE_PML; /* Turn off opt_ept_pml if PML feature is not present. */ - if ( !(_vmx_secondary_exec_control & SECONDARY_EXEC_ENABLE_PML) ) + if ( !(caps.secondary_exec_control & SECONDARY_EXEC_ENABLE_PML) ) opt_ept_pml = false; - if ( (_vmx_secondary_exec_control & SECONDARY_EXEC_PAUSE_LOOP_EXITING) && + if ( (caps.secondary_exec_control & SECONDARY_EXEC_PAUSE_LOOP_EXITING) && ple_gap == 0 ) { if ( !vmx_caps.pin_based_exec_control ) printk(XENLOG_INFO "Disable Pause-Loop Exiting.\n"); - _vmx_secondary_exec_control &= ~ SECONDARY_EXEC_PAUSE_LOOP_EXITING; + caps.secondary_exec_control &= ~ SECONDARY_EXEC_PAUSE_LOOP_EXITING; } min = VM_EXIT_ACK_INTR_ON_EXIT; @@ -457,7 +455,7 @@ static int vmx_init_vmcs_config(bool bsp * delivery" and "acknowledge interrupt on exit" is set. For the latter * is a minimal requirement, only check the former, which is optional. */ - if ( !(_vmx_secondary_exec_control & SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY) ) + if ( !(caps.secondary_exec_control & SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY) ) caps.pin_based_exec_control &= ~PIN_BASED_POSTED_INTERRUPT; if ( iommu_intpost && @@ -469,7 +467,7 @@ static int vmx_init_vmcs_config(bool bsp } /* The IA32_VMX_VMFUNC MSR exists only when VMFUNC is available */ - if ( _vmx_secondary_exec_control & SECONDARY_EXEC_ENABLE_VM_FUNCTIONS ) + if ( caps.secondary_exec_control & SECONDARY_EXEC_ENABLE_VM_FUNCTIONS ) { rdmsrl(MSR_IA32_VMX_VMFUNC, _vmx_vmfunc); @@ -479,12 +477,12 @@ static int vmx_init_vmcs_config(bool bsp * Or we just don't use VMFUNC. */ if ( !(_vmx_vmfunc & VMX_VMFUNC_EPTP_SWITCHING) ) - _vmx_secondary_exec_control &= ~SECONDARY_EXEC_ENABLE_VM_FUNCTIONS; + caps.secondary_exec_control &= ~SECONDARY_EXEC_ENABLE_VM_FUNCTIONS; } /* Virtualization exceptions are only enabled if VMFUNC is enabled */ - if ( !(_vmx_secondary_exec_control & SECONDARY_EXEC_ENABLE_VM_FUNCTIONS) ) - _vmx_secondary_exec_control &= ~SECONDARY_EXEC_ENABLE_VIRT_EXCEPTIONS; + if ( !(caps.secondary_exec_control & SECONDARY_EXEC_ENABLE_VM_FUNCTIONS) ) + caps.secondary_exec_control &= ~SECONDARY_EXEC_ENABLE_VIRT_EXCEPTIONS; min = 0; opt = (VM_ENTRY_LOAD_GUEST_PAT | VM_ENTRY_LOAD_GUEST_EFER | @@ -499,7 +497,6 @@ static int vmx_init_vmcs_config(bool bsp { /* First time through. */ vmx_caps = caps; - vmx_secondary_exec_control = _vmx_secondary_exec_control; vmx_tertiary_exec_control = _vmx_tertiary_exec_control; vmx_ept_vpid_cap = _vmx_ept_vpid_cap; vmx_vmexit_control = _vmx_vmexit_control; @@ -534,7 +531,7 @@ static int vmx_init_vmcs_config(bool bsp vmx_caps.cpu_based_exec_control, caps.cpu_based_exec_control); mismatch |= cap_check( "Secondary Exec Control", - vmx_secondary_exec_control, _vmx_secondary_exec_control); + vmx_caps.secondary_exec_control, caps.secondary_exec_control); mismatch |= cap_check( "Tertiary Exec Control", vmx_tertiary_exec_control, _vmx_tertiary_exec_control); @@ -1115,7 +1112,7 @@ static int construct_vmcs(struct vcpu *v if ( d->arch.vtsc && !cpu_has_vmx_tsc_scaling ) v->arch.hvm.vmx.exec_control |= CPU_BASED_RDTSC_EXITING; - v->arch.hvm.vmx.secondary_exec_control = vmx_secondary_exec_control; + v->arch.hvm.vmx.secondary_exec_control = vmx_caps.secondary_exec_control; v->arch.hvm.vmx.tertiary_exec_control = vmx_tertiary_exec_control; /* @@ -2225,7 +2222,6 @@ int __init vmx_vmcs_init(void) * Make sure all dependent features are off as well. */ memset(&vmx_caps, 0, sizeof(vmx_caps)); - vmx_secondary_exec_control = 0; vmx_tertiary_exec_control = 0; vmx_vmexit_control = 0; vmx_vmentry_control = 0; --- a/xen/arch/x86/include/asm/hvm/vmx/vmcs.h +++ b/xen/arch/x86/include/asm/hvm/vmx/vmcs.h @@ -258,7 +258,6 @@ extern u32 vmx_vmentry_control; #define SECONDARY_EXEC_TSC_SCALING 0x02000000U #define SECONDARY_EXEC_BUS_LOCK_DETECTION 0x40000000U #define SECONDARY_EXEC_NOTIFY_VM_EXITING 0x80000000U -extern u32 vmx_secondary_exec_control; #define TERTIARY_EXEC_LOADIWKEY_EXITING BIT(0, UL) #define TERTIARY_EXEC_ENABLE_HLAT BIT(1, UL) @@ -303,15 +302,16 @@ struct vmx_caps { uint64_t basic_msr; uint32_t pin_based_exec_control; uint32_t cpu_based_exec_control; + uint32_t secondary_exec_control; }; extern struct vmx_caps vmx_caps; #define cpu_has_wbinvd_exiting \ (IS_ENABLED(CONFIG_INTEL_VMX) && \ - vmx_secondary_exec_control & SECONDARY_EXEC_WBINVD_EXITING) + (vmx_caps.secondary_exec_control & SECONDARY_EXEC_WBINVD_EXITING)) #define cpu_has_vmx_virtualize_apic_accesses \ (IS_ENABLED(CONFIG_INTEL_VMX) && \ - vmx_secondary_exec_control & SECONDARY_EXEC_VIRTUALIZE_APIC_ACCESSES) + (vmx_caps.secondary_exec_control & SECONDARY_EXEC_VIRTUALIZE_APIC_ACCESSES)) #define cpu_has_vmx_tpr_shadow \ (IS_ENABLED(CONFIG_INTEL_VMX) && \ (vmx_caps.cpu_based_exec_control & CPU_BASED_TPR_SHADOW)) @@ -329,16 +329,16 @@ extern struct vmx_caps vmx_caps; (vmx_caps.cpu_based_exec_control & CPU_BASED_ACTIVATE_TERTIARY_CONTROLS)) #define cpu_has_vmx_ept \ (IS_ENABLED(CONFIG_INTEL_VMX) && \ - vmx_secondary_exec_control & SECONDARY_EXEC_ENABLE_EPT) + (vmx_caps.secondary_exec_control & SECONDARY_EXEC_ENABLE_EPT)) #define cpu_has_vmx_dt_exiting \ (IS_ENABLED(CONFIG_INTEL_VMX) && \ - vmx_secondary_exec_control & SECONDARY_EXEC_DESCRIPTOR_TABLE_EXITING) + (vmx_caps.secondary_exec_control & SECONDARY_EXEC_DESCRIPTOR_TABLE_EXITING)) #define cpu_has_vmx_rdtscp \ (IS_ENABLED(CONFIG_INTEL_VMX) && \ - vmx_secondary_exec_control & SECONDARY_EXEC_ENABLE_RDTSCP) + (vmx_caps.secondary_exec_control & SECONDARY_EXEC_ENABLE_RDTSCP)) #define cpu_has_vmx_vpid \ (IS_ENABLED(CONFIG_INTEL_VMX) && \ - vmx_secondary_exec_control & SECONDARY_EXEC_ENABLE_VPID) + (vmx_caps.secondary_exec_control & SECONDARY_EXEC_ENABLE_VPID)) #define cpu_has_monitor_trap_flag \ (IS_ENABLED(CONFIG_INTEL_VMX) && \ (vmx_caps.cpu_based_exec_control & CPU_BASED_MONITOR_TRAP_FLAG)) @@ -350,56 +350,56 @@ extern struct vmx_caps vmx_caps; vmx_vmentry_control & VM_ENTRY_LOAD_GUEST_EFER) #define cpu_has_vmx_unrestricted_guest \ (IS_ENABLED(CONFIG_INTEL_VMX) && \ - vmx_secondary_exec_control & SECONDARY_EXEC_UNRESTRICTED_GUEST) + (vmx_caps.secondary_exec_control & SECONDARY_EXEC_UNRESTRICTED_GUEST)) #define vmx_unrestricted_guest(v) \ ((v)->arch.hvm.vmx.secondary_exec_control & \ SECONDARY_EXEC_UNRESTRICTED_GUEST) #define cpu_has_vmx_ple \ (IS_ENABLED(CONFIG_INTEL_VMX) && \ - vmx_secondary_exec_control & SECONDARY_EXEC_PAUSE_LOOP_EXITING) + (vmx_caps.secondary_exec_control & SECONDARY_EXEC_PAUSE_LOOP_EXITING)) #define cpu_has_vmx_invpcid \ (IS_ENABLED(CONFIG_INTEL_VMX) && \ - vmx_secondary_exec_control & SECONDARY_EXEC_ENABLE_INVPCID) + (vmx_caps.secondary_exec_control & SECONDARY_EXEC_ENABLE_INVPCID)) #define cpu_has_vmx_apic_reg_virt \ (IS_ENABLED(CONFIG_INTEL_VMX) && \ - vmx_secondary_exec_control & SECONDARY_EXEC_APIC_REGISTER_VIRT) + (vmx_caps.secondary_exec_control & SECONDARY_EXEC_APIC_REGISTER_VIRT)) #define cpu_has_vmx_virtual_intr_delivery \ (IS_ENABLED(CONFIG_INTEL_VMX) && \ - vmx_secondary_exec_control & SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY) + (vmx_caps.secondary_exec_control & SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY)) #define cpu_has_vmx_virtualize_x2apic_mode \ (IS_ENABLED(CONFIG_INTEL_VMX) && \ - vmx_secondary_exec_control & SECONDARY_EXEC_VIRTUALIZE_X2APIC_MODE) + (vmx_caps.secondary_exec_control & SECONDARY_EXEC_VIRTUALIZE_X2APIC_MODE)) #define cpu_has_vmx_posted_intr_processing \ (IS_ENABLED(CONFIG_INTEL_VMX) && \ (vmx_caps.pin_based_exec_control & PIN_BASED_POSTED_INTERRUPT)) #define cpu_has_vmx_vmcs_shadowing \ (IS_ENABLED(CONFIG_INTEL_VMX) && \ - vmx_secondary_exec_control & SECONDARY_EXEC_ENABLE_VMCS_SHADOWING) + (vmx_caps.secondary_exec_control & SECONDARY_EXEC_ENABLE_VMCS_SHADOWING)) #define cpu_has_vmx_vmfunc \ (IS_ENABLED(CONFIG_INTEL_VMX) && \ - vmx_secondary_exec_control & SECONDARY_EXEC_ENABLE_VM_FUNCTIONS) + (vmx_caps.secondary_exec_control & SECONDARY_EXEC_ENABLE_VM_FUNCTIONS)) #define cpu_has_vmx_virt_exceptions \ (IS_ENABLED(CONFIG_INTEL_VMX) && \ - vmx_secondary_exec_control & SECONDARY_EXEC_ENABLE_VIRT_EXCEPTIONS) + (vmx_caps.secondary_exec_control & SECONDARY_EXEC_ENABLE_VIRT_EXCEPTIONS)) #define cpu_has_vmx_pml \ (IS_ENABLED(CONFIG_INTEL_VMX) && \ - vmx_secondary_exec_control & SECONDARY_EXEC_ENABLE_PML) + (vmx_caps.secondary_exec_control & SECONDARY_EXEC_ENABLE_PML)) #define cpu_has_vmx_mpx \ (IS_ENABLED(CONFIG_INTEL_VMX) && \ (vmx_vmexit_control & VM_EXIT_CLEAR_BNDCFGS) && \ (vmx_vmentry_control & VM_ENTRY_LOAD_BNDCFGS)) #define cpu_has_vmx_xsaves \ (IS_ENABLED(CONFIG_INTEL_VMX) && \ - vmx_secondary_exec_control & SECONDARY_EXEC_XSAVES) + (vmx_caps.secondary_exec_control & SECONDARY_EXEC_XSAVES)) #define cpu_has_vmx_tsc_scaling \ (IS_ENABLED(CONFIG_INTEL_VMX) && \ - vmx_secondary_exec_control & SECONDARY_EXEC_TSC_SCALING) + (vmx_caps.secondary_exec_control & SECONDARY_EXEC_TSC_SCALING)) #define cpu_has_vmx_bus_lock_detection \ (IS_ENABLED(CONFIG_INTEL_VMX) && \ - vmx_secondary_exec_control & SECONDARY_EXEC_BUS_LOCK_DETECTION) + (vmx_caps.secondary_exec_control & SECONDARY_EXEC_BUS_LOCK_DETECTION)) #define cpu_has_vmx_notify_vm_exiting \ (IS_ENABLED(CONFIG_INTEL_VMX) && \ - vmx_secondary_exec_control & SECONDARY_EXEC_NOTIFY_VM_EXITING) + (vmx_caps.secondary_exec_control & SECONDARY_EXEC_NOTIFY_VM_EXITING)) #define VMCS_RID_TYPE_MASK 0x80000000U From patchwork Tue Feb 25 11:39:51 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 13989879 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 997CBC021B2 for ; Tue, 25 Feb 2025 11:41:20 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.895731.1304397 (Exim 4.92) (envelope-from ) id 1tmtJI-0000KM-OA; Tue, 25 Feb 2025 11:41:12 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 895731.1304397; Tue, 25 Feb 2025 11:41:12 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1tmtJI-0000KF-KU; Tue, 25 Feb 2025 11:41:12 +0000 Received: by outflank-mailman (input) for mailman id 895731; Tue, 25 Feb 2025 11:41:10 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1tmtI1-0002yH-EY for xen-devel@lists.xenproject.org; Tue, 25 Feb 2025 11:39:53 +0000 Received: from mail-wm1-x32c.google.com (mail-wm1-x32c.google.com [2a00:1450:4864:20::32c]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 3a4c33f9-f36d-11ef-9aae-95dc52dad729; Tue, 25 Feb 2025 12:39:52 +0100 (CET) Received: by mail-wm1-x32c.google.com with SMTP id 5b1f17b1804b1-43aac0390e8so11863175e9.2 for ; Tue, 25 Feb 2025 03:39:52 -0800 (PST) Received: from [10.156.60.236] (ip-037-024-206-209.um08.pools.vodafone-ip.de. [37.24.206.209]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43ab156a199sm23037925e9.39.2025.02.25.03.39.51 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 25 Feb 2025 03:39:51 -0800 (PST) X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 3a4c33f9-f36d-11ef-9aae-95dc52dad729 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1740483592; x=1741088392; darn=lists.xenproject.org; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=YTW4tUcMEeYNCm7ZKKGx4hPpDCz3H5iQewiKwcDe8Qg=; b=fgEKdDA3Etc3Zbz78H11Wf+ZVDH2YEDljja5A59U6TjGo0kfoZuxbXj5bUnyAaqTk5 hLGkvwAK0Qm1v6eZaXXJFkuwXzD9aJjZr37lx2S3B+/NmWpfXcxuJBKWBW5qsVm8IORW muwDtbl3CMp0BdQ0u8hDQ9fHrkDFs3GiwRp3kEubFqu8Me8mjKhgd5LHF/RNbMror5Wf 53tRRgVRM9/Uwtnz1MYtvkPgXokBwnwte2rpdusFmCXjXC8keH/nXRZ+k1umbsC8Wi4L tusHOGIaM3Mw8+iMitBtcpfJhfkQhBqqAlWKJFuyJHUCNT+rC1U28J6Z3wbCGclMdsk5 ckJg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740483592; x=1741088392; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=YTW4tUcMEeYNCm7ZKKGx4hPpDCz3H5iQewiKwcDe8Qg=; b=pyVUvXjH16+//o6ygP7E4nteI6FBcfH28+Jdq5ThzjP90skJAc4oXmw68mOBgxXseV P5kNXmzaIGuHcFhZNW6LXIvkmdEV6UsbA52S46UT2sfLyCeHBvaTugrtq8Pqha6r3z2n r9SGG5dD35+wVknkxnLOv1nOCU69/gvZ9as02h49GimXpzvWxjMTfQbosG/axCIzvLn7 00PcRxwffjzrvWICR+SM7VL/6dDhZH86iOs+sVw5du+U+RJMCx/Q7pLfshddtrmVkihg g6SiyKmuecb2EtV+kdp3LbFYUKKHZsXoIRzxvpluh3g3csm4uJkdnb/L1i/TJ539/SjQ 7JzA== X-Gm-Message-State: AOJu0YwDkaIXk33BIKL7KoEQKvzteX9dxQ2mg6dcj8dEvVXxUYzOCYf0 zHqhH3OZWwac53Xs93jAnFa5S9Cx7N2e33EeVRj7cB+7j4Q/k6YWdWZQhBUaKWcLKy8OUYkKVbI = X-Gm-Gg: ASbGncsr9teO4TSMnDa3dmD/DJzuEPCdWC8z5nVP6KDhDS6FpdengwZIIsr+MnJo0OP /+C1/ybuokyJIurOFAliSEMECybEn4w3we7CAw81piR7b5D1tjv7XTyqxHcplY2zIqoQkFgnWH6 d1UEOi0YkZHc/wIvu61tiJmc01y64KCqVM5a3EHeAcZ/poIRS7vceU7Lu3xfcax+teFrpZqwcZK 1X+jdn8K1uj+/RJjcyjq/3mTeEBXd/D5lGRMZXmLuGVo05/l1vQVKYgCgN+2ReXIbq2WK9D8vQ5 Nt7pkzFnrwQ6wi35N1UST0mGEVrenAC0vPpjZadLCIneTeUmICDPYUVe6ugeo7goMin5YTY7Cvv jpy6DZxFGU4g= X-Google-Smtp-Source: AGHT+IHdLVMUsozeU3HwST5JE+KQHGUlLbbb3yNRnRrtybFgKwVMEvGmc8jfpcovkbzkhqs8oAFtUQ== X-Received: by 2002:a05:600c:19c9:b0:439:9a5b:87d4 with SMTP id 5b1f17b1804b1-439ae1f3a3dmr137983165e9.13.1740483592218; Tue, 25 Feb 2025 03:39:52 -0800 (PST) Message-ID: <9c956657-4498-412c-b28b-c0005c105f1a@suse.com> Date: Tue, 25 Feb 2025 12:39:51 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH v4 07/11] VMX: convert vmx_tertiary_exec_control From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , =?utf-8?q?Roger_Pau_Monn?= =?utf-8?q?=C3=A9?= References: <748548e8-79e5-4957-be16-c5ea4d202d21@suse.com> Content-Language: en-US Autocrypt: addr=jbeulich@suse.com; keydata= xsDiBFk3nEQRBADAEaSw6zC/EJkiwGPXbWtPxl2xCdSoeepS07jW8UgcHNurfHvUzogEq5xk hu507c3BarVjyWCJOylMNR98Yd8VqD9UfmX0Hb8/BrA+Hl6/DB/eqGptrf4BSRwcZQM32aZK 7Pj2XbGWIUrZrd70x1eAP9QE3P79Y2oLrsCgbZJfEwCgvz9JjGmQqQkRiTVzlZVCJYcyGGsD /0tbFCzD2h20ahe8rC1gbb3K3qk+LpBtvjBu1RY9drYk0NymiGbJWZgab6t1jM7sk2vuf0Py O9Hf9XBmK0uE9IgMaiCpc32XV9oASz6UJebwkX+zF2jG5I1BfnO9g7KlotcA/v5ClMjgo6Gl MDY4HxoSRu3i1cqqSDtVlt+AOVBJBACrZcnHAUSuCXBPy0jOlBhxPqRWv6ND4c9PH1xjQ3NP nxJuMBS8rnNg22uyfAgmBKNLpLgAGVRMZGaGoJObGf72s6TeIqKJo/LtggAS9qAUiuKVnygo 3wjfkS9A3DRO+SpU7JqWdsveeIQyeyEJ/8PTowmSQLakF+3fote9ybzd880fSmFuIEJldWxp Y2ggPGpiZXVsaWNoQHN1c2UuY29tPsJgBBMRAgAgBQJZN5xEAhsDBgsJCAcDAgQVAggDBBYC AwECHgECF4AACgkQoDSui/t3IH4J+wCfQ5jHdEjCRHj23O/5ttg9r9OIruwAn3103WUITZee e7Sbg12UgcQ5lv7SzsFNBFk3nEQQCACCuTjCjFOUdi5Nm244F+78kLghRcin/awv+IrTcIWF hUpSs1Y91iQQ7KItirz5uwCPlwejSJDQJLIS+QtJHaXDXeV6NI0Uef1hP20+y8qydDiVkv6l IreXjTb7DvksRgJNvCkWtYnlS3mYvQ9NzS9PhyALWbXnH6sIJd2O9lKS1Mrfq+y0IXCP10eS FFGg+Av3IQeFatkJAyju0PPthyTqxSI4lZYuJVPknzgaeuJv/2NccrPvmeDg6Coe7ZIeQ8Yj t0ARxu2xytAkkLCel1Lz1WLmwLstV30g80nkgZf/wr+/BXJW/oIvRlonUkxv+IbBM3dX2OV8 AmRv1ySWPTP7AAMFB/9PQK/VtlNUJvg8GXj9ootzrteGfVZVVT4XBJkfwBcpC/XcPzldjv+3 HYudvpdNK3lLujXeA5fLOH+Z/G9WBc5pFVSMocI71I8bT8lIAzreg0WvkWg5V2WZsUMlnDL9 mpwIGFhlbM3gfDMs7MPMu8YQRFVdUvtSpaAs8OFfGQ0ia3LGZcjA6Ik2+xcqscEJzNH+qh8V m5jjp28yZgaqTaRbg3M/+MTbMpicpZuqF4rnB0AQD12/3BNWDR6bmh+EkYSMcEIpQmBM51qM EKYTQGybRCjpnKHGOxG0rfFY1085mBDZCH5Kx0cl0HVJuQKC+dV2ZY5AqjcKwAxpE75MLFkr wkkEGBECAAkFAlk3nEQCGwwACgkQoDSui/t3IH7nnwCfcJWUDUFKdCsBH/E5d+0ZnMQi+G0A nAuWpQkjM1ASeQwSHEeAWPgskBQL In-Reply-To: <748548e8-79e5-4957-be16-c5ea4d202d21@suse.com> ... to a field in the capability/controls struct. Signed-off-by: Jan Beulich Acked-by: Roger Pau Monné --- v4: Re-base. v3: New. --- a/xen/arch/x86/hvm/vmx/vmcs.c +++ b/xen/arch/x86/hvm/vmx/vmcs.c @@ -162,7 +162,6 @@ static int cf_check parse_ept_param_runt /* Dynamic (run-time adjusted) execution control flags. */ struct vmx_caps __ro_after_init vmx_caps; -uint64_t vmx_tertiary_exec_control __read_mostly; u32 vmx_vmexit_control __read_mostly; u32 vmx_vmentry_control __read_mostly; u64 vmx_ept_vpid_cap __read_mostly; @@ -261,7 +260,6 @@ static int vmx_init_vmcs_config(bool bsp { u32 vmx_basic_msr_low, vmx_basic_msr_high, min, opt; struct vmx_caps caps = {}; - uint64_t _vmx_tertiary_exec_control = 0; u64 _vmx_ept_vpid_cap = 0; u64 _vmx_misc_cap = 0; u32 _vmx_vmexit_control; @@ -365,7 +363,7 @@ static int vmx_init_vmcs_config(bool bsp uint64_t opt = (TERTIARY_EXEC_VIRT_SPEC_CTRL | TERTIARY_EXEC_EPT_PAGING_WRITE); - _vmx_tertiary_exec_control = adjust_vmx_controls2( + caps.tertiary_exec_control = adjust_vmx_controls2( "Tertiary Exec Control", 0, opt, MSR_IA32_VMX_PROCBASED_CTLS3, &mismatch); } @@ -497,7 +495,6 @@ static int vmx_init_vmcs_config(bool bsp { /* First time through. */ vmx_caps = caps; - vmx_tertiary_exec_control = _vmx_tertiary_exec_control; vmx_ept_vpid_cap = _vmx_ept_vpid_cap; vmx_vmexit_control = _vmx_vmexit_control; vmx_vmentry_control = _vmx_vmentry_control; @@ -534,7 +531,7 @@ static int vmx_init_vmcs_config(bool bsp vmx_caps.secondary_exec_control, caps.secondary_exec_control); mismatch |= cap_check( "Tertiary Exec Control", - vmx_tertiary_exec_control, _vmx_tertiary_exec_control); + vmx_caps.tertiary_exec_control, caps.tertiary_exec_control); mismatch |= cap_check( "VMExit Control", vmx_vmexit_control, _vmx_vmexit_control); @@ -1113,7 +1110,7 @@ static int construct_vmcs(struct vcpu *v v->arch.hvm.vmx.exec_control |= CPU_BASED_RDTSC_EXITING; v->arch.hvm.vmx.secondary_exec_control = vmx_caps.secondary_exec_control; - v->arch.hvm.vmx.tertiary_exec_control = vmx_tertiary_exec_control; + v->arch.hvm.vmx.tertiary_exec_control = vmx_caps.tertiary_exec_control; /* * Disable features which we don't want active by default: @@ -2222,7 +2219,6 @@ int __init vmx_vmcs_init(void) * Make sure all dependent features are off as well. */ memset(&vmx_caps, 0, sizeof(vmx_caps)); - vmx_tertiary_exec_control = 0; vmx_vmexit_control = 0; vmx_vmentry_control = 0; vmx_ept_vpid_cap = 0; --- a/xen/arch/x86/include/asm/hvm/vmx/vmcs.h +++ b/xen/arch/x86/include/asm/hvm/vmx/vmcs.h @@ -265,13 +265,12 @@ extern u32 vmx_vmentry_control; #define TERTIARY_EXEC_GUEST_PAGING_VERIFY BIT(3, UL) #define TERTIARY_EXEC_IPI_VIRT BIT(4, UL) #define TERTIARY_EXEC_VIRT_SPEC_CTRL BIT(7, UL) -extern uint64_t vmx_tertiary_exec_control; #define cpu_has_vmx_virt_spec_ctrl \ - (vmx_tertiary_exec_control & TERTIARY_EXEC_VIRT_SPEC_CTRL) + (vmx_caps.tertiary_exec_control & TERTIARY_EXEC_VIRT_SPEC_CTRL) #define cpu_has_vmx_ept_paging_write \ - (vmx_tertiary_exec_control & TERTIARY_EXEC_EPT_PAGING_WRITE) + (vmx_caps.tertiary_exec_control & TERTIARY_EXEC_EPT_PAGING_WRITE) #define VMX_EPT_EXEC_ONLY_SUPPORTED 0x00000001 #define VMX_EPT_WALK_LENGTH_4_SUPPORTED 0x00000040 @@ -303,6 +302,7 @@ struct vmx_caps { uint32_t pin_based_exec_control; uint32_t cpu_based_exec_control; uint32_t secondary_exec_control; + uint64_t tertiary_exec_control; }; extern struct vmx_caps vmx_caps; From patchwork Tue Feb 25 11:40:13 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 13989873 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 31238C021B2 for ; Tue, 25 Feb 2025 11:40:26 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.895694.1304357 (Exim 4.92) (envelope-from ) id 1tmtIP-00067A-Kx; Tue, 25 Feb 2025 11:40:17 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 895694.1304357; Tue, 25 Feb 2025 11:40:17 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1tmtIP-000673-HQ; Tue, 25 Feb 2025 11:40:17 +0000 Received: by outflank-mailman (input) for mailman id 895694; Tue, 25 Feb 2025 11:40:16 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1tmtIO-00066u-LL for xen-devel@lists.xenproject.org; Tue, 25 Feb 2025 11:40:16 +0000 Received: from mail-wr1-x429.google.com (mail-wr1-x429.google.com [2a00:1450:4864:20::429]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 47569899-f36d-11ef-9897-31a8f345e629; Tue, 25 Feb 2025 12:40:14 +0100 (CET) Received: by mail-wr1-x429.google.com with SMTP id ffacd0b85a97d-388cae9eb9fso2881033f8f.3 for ; Tue, 25 Feb 2025 03:40:14 -0800 (PST) Received: from [10.156.60.236] (ip-037-024-206-209.um08.pools.vodafone-ip.de. [37.24.206.209]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-390cd86cca1sm1990957f8f.24.2025.02.25.03.40.13 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 25 Feb 2025 03:40:13 -0800 (PST) X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 47569899-f36d-11ef-9897-31a8f345e629 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1740483614; x=1741088414; darn=lists.xenproject.org; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=mjdsrvYcKbS0IupcXcbfAMDfAYGI8EXf5PWUxNV1fao=; b=YgCUi9SLVewzseeWMvoEPstJ52hg62fsQXTbCMzvL8MykRFS2zZppRETr/Fh4X+T2s GRG6qb/zQr+Zj5CuR3lpMDsFXvdJhKXplje78ZSC7+LgOOwqe1uEF8AGMNCT7hLpACF4 yXAYmvooFRIrqmNfrYsVWkyen25Uw1naFTG2wJ7u2UeKizg6uoSM4eDWXm7oet9S3qXU B1pH/d4lgqirVM+/M8I+z2hZEshd3ir/+y1EHap3g3k/ovVcy4H0Fc+EDX8hyc840XVD UGqUbSomHNJKgT5FM9ECpCtvn0ej7i4E0J0WDu+2omgXoraYv2oy+uSbFTdwv9h7LnfD zjlg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740483614; x=1741088414; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=mjdsrvYcKbS0IupcXcbfAMDfAYGI8EXf5PWUxNV1fao=; b=aqVdXgv9MGbxKtf1/bqKbvJ3B6h++KP9oGe8/Jk359SARiKmYXPVogLjY9tMNLAgd8 AChdcqFu6ek9sd+5NKeBDsm2g/6V/pqlSWfGEl11zlmSjqpnmVR6BoclTV6VwDd/f5DX 8Nk5zIfwsmUJ+6xbFpjCisyjf/5JCRvcy+rbdcfVvtZf4ypQmeu8tiDB3drAAL8SyoVo GVjz4+x5i/j9EpOSQAXZSm90OPXD0KGkeNawFH7UUmhc6Q9xlgBL9n92+UEe11ql0YJw eWgBaJXNaWxej4aFoQCC5AedwLx4GnAQjfi4XO7A+ft6ILQWXlR+4ROd/7C/fHRSYU2B N/bQ== X-Gm-Message-State: AOJu0YxZz8habx4ptBb7je8sVLB9qwzI6iVjPnRvrDjUqehc41HSelK/ pf1GN+17EToI+J95dvxE9icfQVihEB9kyYdVg+Mdf6paJgH1fObNdaVkRGpd3sNexmlbZxoe4UQ = X-Gm-Gg: ASbGncudOKN3dRdpN4nXLbW+w0y8htRKk9H32gHiVfjA9NH8FQmhF1z299cziu3R0gs SlTevTVnONiC5rNC/HzDxQfLfV9WWHZshSJ1wqQ6fccniw9SYYRbJeWNre2flybQLUyYK4pr82p XUzWrpLwiZe+K+9Zd8xpXwZ+n9/mqFmpWuQhuM1/jajM46+Trr7x7kSclnEO23nhobmN0OS0tBB 9Ndk3tHlEyw1y8sbOHNR6O6XxZjXXYEN/jvVjlY6ljQp48fa+sy0L1fh7Z2vxV2NUi0TlX2oCE0 sZX1Go1e6TTbQZVbOezM1g4yg0RjKYhrsmCnAr/fzshWxbrd5OCCnROAZmKIofGijQl4Jxx1jkq zSFJS94PZQ9E= X-Google-Smtp-Source: AGHT+IFt89i5r2V9tX7MHUL32UXkZxA7ioHDMKodKPH8keCwOxpCP+9bcoBMwk6SWdapBsvOWxoHwQ== X-Received: by 2002:a5d:47a3:0:b0:38d:b610:190b with SMTP id ffacd0b85a97d-390cc63cc18mr2309744f8f.46.1740483614069; Tue, 25 Feb 2025 03:40:14 -0800 (PST) Message-ID: Date: Tue, 25 Feb 2025 12:40:13 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH v4 08/11] VMX: convert vmx_vmexit_control From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , =?utf-8?q?Roger_Pau_Monn?= =?utf-8?q?=C3=A9?= References: <748548e8-79e5-4957-be16-c5ea4d202d21@suse.com> Content-Language: en-US Autocrypt: addr=jbeulich@suse.com; keydata= xsDiBFk3nEQRBADAEaSw6zC/EJkiwGPXbWtPxl2xCdSoeepS07jW8UgcHNurfHvUzogEq5xk hu507c3BarVjyWCJOylMNR98Yd8VqD9UfmX0Hb8/BrA+Hl6/DB/eqGptrf4BSRwcZQM32aZK 7Pj2XbGWIUrZrd70x1eAP9QE3P79Y2oLrsCgbZJfEwCgvz9JjGmQqQkRiTVzlZVCJYcyGGsD /0tbFCzD2h20ahe8rC1gbb3K3qk+LpBtvjBu1RY9drYk0NymiGbJWZgab6t1jM7sk2vuf0Py O9Hf9XBmK0uE9IgMaiCpc32XV9oASz6UJebwkX+zF2jG5I1BfnO9g7KlotcA/v5ClMjgo6Gl MDY4HxoSRu3i1cqqSDtVlt+AOVBJBACrZcnHAUSuCXBPy0jOlBhxPqRWv6ND4c9PH1xjQ3NP nxJuMBS8rnNg22uyfAgmBKNLpLgAGVRMZGaGoJObGf72s6TeIqKJo/LtggAS9qAUiuKVnygo 3wjfkS9A3DRO+SpU7JqWdsveeIQyeyEJ/8PTowmSQLakF+3fote9ybzd880fSmFuIEJldWxp Y2ggPGpiZXVsaWNoQHN1c2UuY29tPsJgBBMRAgAgBQJZN5xEAhsDBgsJCAcDAgQVAggDBBYC AwECHgECF4AACgkQoDSui/t3IH4J+wCfQ5jHdEjCRHj23O/5ttg9r9OIruwAn3103WUITZee e7Sbg12UgcQ5lv7SzsFNBFk3nEQQCACCuTjCjFOUdi5Nm244F+78kLghRcin/awv+IrTcIWF hUpSs1Y91iQQ7KItirz5uwCPlwejSJDQJLIS+QtJHaXDXeV6NI0Uef1hP20+y8qydDiVkv6l IreXjTb7DvksRgJNvCkWtYnlS3mYvQ9NzS9PhyALWbXnH6sIJd2O9lKS1Mrfq+y0IXCP10eS FFGg+Av3IQeFatkJAyju0PPthyTqxSI4lZYuJVPknzgaeuJv/2NccrPvmeDg6Coe7ZIeQ8Yj t0ARxu2xytAkkLCel1Lz1WLmwLstV30g80nkgZf/wr+/BXJW/oIvRlonUkxv+IbBM3dX2OV8 AmRv1ySWPTP7AAMFB/9PQK/VtlNUJvg8GXj9ootzrteGfVZVVT4XBJkfwBcpC/XcPzldjv+3 HYudvpdNK3lLujXeA5fLOH+Z/G9WBc5pFVSMocI71I8bT8lIAzreg0WvkWg5V2WZsUMlnDL9 mpwIGFhlbM3gfDMs7MPMu8YQRFVdUvtSpaAs8OFfGQ0ia3LGZcjA6Ik2+xcqscEJzNH+qh8V m5jjp28yZgaqTaRbg3M/+MTbMpicpZuqF4rnB0AQD12/3BNWDR6bmh+EkYSMcEIpQmBM51qM EKYTQGybRCjpnKHGOxG0rfFY1085mBDZCH5Kx0cl0HVJuQKC+dV2ZY5AqjcKwAxpE75MLFkr wkkEGBECAAkFAlk3nEQCGwwACgkQoDSui/t3IH7nnwCfcJWUDUFKdCsBH/E5d+0ZnMQi+G0A nAuWpQkjM1ASeQwSHEeAWPgskBQL In-Reply-To: <748548e8-79e5-4957-be16-c5ea4d202d21@suse.com> ... to a field in the capability/controls struct. Signed-off-by: Jan Beulich Acked-by: Roger Pau Monné --- v4: Re-base. v2: New. --- a/xen/arch/x86/hvm/vmx/vmcs.c +++ b/xen/arch/x86/hvm/vmx/vmcs.c @@ -162,7 +162,6 @@ static int cf_check parse_ept_param_runt /* Dynamic (run-time adjusted) execution control flags. */ struct vmx_caps __ro_after_init vmx_caps; -u32 vmx_vmexit_control __read_mostly; u32 vmx_vmentry_control __read_mostly; u64 vmx_ept_vpid_cap __read_mostly; static uint64_t __read_mostly vmx_vmfunc; @@ -262,7 +261,6 @@ static int vmx_init_vmcs_config(bool bsp struct vmx_caps caps = {}; u64 _vmx_ept_vpid_cap = 0; u64 _vmx_misc_cap = 0; - u32 _vmx_vmexit_control; u32 _vmx_vmentry_control; u64 _vmx_vmfunc = 0; bool mismatch = false; @@ -445,7 +443,7 @@ static int vmx_init_vmcs_config(bool bsp opt = (VM_EXIT_SAVE_GUEST_PAT | VM_EXIT_LOAD_HOST_PAT | VM_EXIT_LOAD_HOST_EFER | VM_EXIT_CLEAR_BNDCFGS); min |= VM_EXIT_IA32E_MODE; - _vmx_vmexit_control = adjust_vmx_controls( + caps.vmexit_control = adjust_vmx_controls( "VMExit Control", min, opt, MSR_IA32_VMX_EXIT_CTLS, &mismatch); /* @@ -496,7 +494,6 @@ static int vmx_init_vmcs_config(bool bsp /* First time through. */ vmx_caps = caps; vmx_ept_vpid_cap = _vmx_ept_vpid_cap; - vmx_vmexit_control = _vmx_vmexit_control; vmx_vmentry_control = _vmx_vmentry_control; vmx_caps.basic_msr = ((uint64_t)vmx_basic_msr_high << 32) | vmx_basic_msr_low; @@ -534,7 +531,7 @@ static int vmx_init_vmcs_config(bool bsp vmx_caps.tertiary_exec_control, caps.tertiary_exec_control); mismatch |= cap_check( "VMExit Control", - vmx_vmexit_control, _vmx_vmexit_control); + vmx_caps.vmexit_control, caps.vmexit_control); mismatch |= cap_check( "VMEntry Control", vmx_vmentry_control, _vmx_vmentry_control); @@ -1096,7 +1093,7 @@ void nocall vmx_asm_vmexit_handler(void) static int construct_vmcs(struct vcpu *v) { struct domain *d = v->domain; - u32 vmexit_ctl = vmx_vmexit_control; + uint32_t vmexit_ctl = vmx_caps.vmexit_control; u32 vmentry_ctl = vmx_vmentry_control; int rc = 0; @@ -2219,7 +2216,6 @@ int __init vmx_vmcs_init(void) * Make sure all dependent features are off as well. */ memset(&vmx_caps, 0, sizeof(vmx_caps)); - vmx_vmexit_control = 0; vmx_vmentry_control = 0; vmx_ept_vpid_cap = 0; vmx_vmfunc = 0; --- a/xen/arch/x86/hvm/vmx/vvmx.c +++ b/xen/arch/x86/hvm/vmx/vvmx.c @@ -1060,7 +1060,7 @@ static void load_shadow_control(struct v nvmx_update_pin_control(v, vmx_caps.pin_based_exec_control); vmx_update_cpu_exec_control(v); vmx_update_secondary_exec_control(v); - nvmx_update_exit_control(v, vmx_vmexit_control); + nvmx_update_exit_control(v, vmx_caps.vmexit_control); nvmx_update_entry_control(v); vmx_update_exception_bitmap(v); nvmx_update_apic_access_address(v); --- a/xen/arch/x86/include/asm/hvm/vmx/vmcs.h +++ b/xen/arch/x86/include/asm/hvm/vmx/vmcs.h @@ -227,7 +227,6 @@ void vmx_vmcs_reload(struct vcpu *v); #define VM_EXIT_LOAD_HOST_EFER 0x00200000 #define VM_EXIT_SAVE_PREEMPT_TIMER 0x00400000 #define VM_EXIT_CLEAR_BNDCFGS 0x00800000 -extern u32 vmx_vmexit_control; #define VM_ENTRY_IA32E_MODE 0x00000200 #define VM_ENTRY_SMM 0x00000400 @@ -303,6 +302,7 @@ struct vmx_caps { uint32_t cpu_based_exec_control; uint32_t secondary_exec_control; uint64_t tertiary_exec_control; + uint32_t vmexit_control; }; extern struct vmx_caps vmx_caps; @@ -386,7 +386,7 @@ extern struct vmx_caps vmx_caps; (vmx_caps.secondary_exec_control & SECONDARY_EXEC_ENABLE_PML)) #define cpu_has_vmx_mpx \ (IS_ENABLED(CONFIG_INTEL_VMX) && \ - (vmx_vmexit_control & VM_EXIT_CLEAR_BNDCFGS) && \ + (vmx_caps.vmexit_control & VM_EXIT_CLEAR_BNDCFGS) && \ (vmx_vmentry_control & VM_ENTRY_LOAD_BNDCFGS)) #define cpu_has_vmx_xsaves \ (IS_ENABLED(CONFIG_INTEL_VMX) && \ From patchwork Tue Feb 25 11:40:45 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 13989878 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 36B89C021B2 for ; Tue, 25 Feb 2025 11:40:58 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.895709.1304387 (Exim 4.92) (envelope-from ) id 1tmtIw-0007Uy-GP; Tue, 25 Feb 2025 11:40:50 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 895709.1304387; Tue, 25 Feb 2025 11:40:50 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1tmtIw-0007Uo-DM; Tue, 25 Feb 2025 11:40:50 +0000 Received: by outflank-mailman (input) for mailman id 895709; Tue, 25 Feb 2025 11:40:48 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1tmtIu-00066u-OJ for xen-devel@lists.xenproject.org; Tue, 25 Feb 2025 11:40:48 +0000 Received: from mail-wr1-x431.google.com (mail-wr1-x431.google.com [2a00:1450:4864:20::431]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 5aabd93f-f36d-11ef-9897-31a8f345e629; Tue, 25 Feb 2025 12:40:47 +0100 (CET) Received: by mail-wr1-x431.google.com with SMTP id ffacd0b85a97d-38f2f783e4dso4683745f8f.3 for ; Tue, 25 Feb 2025 03:40:47 -0800 (PST) Received: from [10.156.60.236] (ip-037-024-206-209.um08.pools.vodafone-ip.de. [37.24.206.209]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439b02ce740sm137411855e9.4.2025.02.25.03.40.46 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 25 Feb 2025 03:40:46 -0800 (PST) X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 5aabd93f-f36d-11ef-9897-31a8f345e629 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1740483646; x=1741088446; darn=lists.xenproject.org; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=103JF9XcPrdRjYfu4uKdsEuP2Y/h+9+4HyktI+TGsw8=; b=VCySyXQnOMAeU0f5F3/WExsaH9OtpJCb7ClmXEB7CJtnsADsAOC5AtBjthSDhZJNoW rNfzssugGgjEQRxLTupNZhwadL/GnoMFB2DnTU+0WOBD56Q/1LwwF89Yy7ipJWXD0sPQ kEbFmj+chnTtewBRWWXHLocWDoEldA8bqQcfCJh9e6c97Ee0bhLtjVfbA6PlklOz/Hhr ti/wzs2WrM9r2z9a1de3TSZNBsyJ0j7p3tE9qUxNYFqs+OcwGxrS8nn+VTE1S228eZki Sufujcd9Dnbkv0q1NVj9KzQdARRr8/gXgXn8x7/iuoQ87AwTdNpFGKnNVtljL7YSw+kA iR5A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740483646; x=1741088446; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=103JF9XcPrdRjYfu4uKdsEuP2Y/h+9+4HyktI+TGsw8=; b=QWj40v9R3/i3CHyDL4CSt1CUF8jPZReKgIzfZUXoiuR7AkVjsiuzKqSHBGE92q+MM0 gcLWKwAKS78vB6zKA7wWR5G7kxTChkT7IbVKJoFbYcwYe0zS7XdTtEYGUubcqjBSRw9W sNgztiYde3bLgjwA+V/DAAjoJa0RondYXcA4TDlgB2iNOrdAGmrG9R8LQqdxIXs0gfx6 5IMozETzhk2fBh4gOnXn3JuAAJOpe4xoVHz7crhWsXcxZt3MN/85xIOGCiCbFS4dtbke R+fcDN5WvIhZMtwrF17Z7X9DfK2HjoqWYtLQ26eY7KFmxhJKbry++cbbHIU1CH+/Oe/M iTgQ== X-Gm-Message-State: AOJu0YxE3SiT0hBdE9kuFVN22GP1hzhQ00VAlgj8bIhAGk9fZP31GBEZ CsedXfV0tWk4egsz/P+b8GAAG1n72yy9TGu1N1f24TJCtM6sPURADiiF2tTNu570S0IyVNlHK3s = X-Gm-Gg: ASbGncuI14MIwIj92oCPU4uq9EOHMdt9DYPCBERPy6UVLignit9mDCwJlYeZTG96nI+ Aph3G6AIkdVZZHoAhlCy1LLoStcYC3Mn0a8h2I9v+SoFyvWxaaWTVUC31IXQCX7bDNKReQXv7cO fU0G9kXp5vzSl1Ar9v4Q3MTnIPcbvCapPnhZ+67uYTCOJRQrBsGfW0Cy/IDKr5wpvgMTd+1DiyW HipOk6+Zo5RhEmFyehOt0m7/6aNfc2fEtl+A+8KHagb8xiJFRG3TzPeEKp0X4ZCM9s2fob2swG7 ZnkQn06GmcaFoGjt7TIG0wMxkidN9BD12YcuSidtuC1bNgBgCfbm6DVup6ujZWk6ZjcWIj20ESl kkP76xnB0i0M= X-Google-Smtp-Source: AGHT+IG2FAzhQDQrONs7lDcpy0cXXVblKlyVjrPi8b8HDi1ROWY6qQwGi92DqMpQDtNj3mBSR4ugBw== X-Received: by 2002:a05:6000:2c6:b0:38f:23ed:2c7 with SMTP id ffacd0b85a97d-38f6e95af22mr16015589f8f.14.1740483646526; Tue, 25 Feb 2025 03:40:46 -0800 (PST) Message-ID: <7f9c88d3-7b1e-4ade-a1c3-e127b0416c89@suse.com> Date: Tue, 25 Feb 2025 12:40:45 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH v4 09/11] VMX: convert vmx_vmentry_control From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , =?utf-8?q?Roger_Pau_Monn?= =?utf-8?q?=C3=A9?= References: <748548e8-79e5-4957-be16-c5ea4d202d21@suse.com> Content-Language: en-US Autocrypt: addr=jbeulich@suse.com; keydata= xsDiBFk3nEQRBADAEaSw6zC/EJkiwGPXbWtPxl2xCdSoeepS07jW8UgcHNurfHvUzogEq5xk hu507c3BarVjyWCJOylMNR98Yd8VqD9UfmX0Hb8/BrA+Hl6/DB/eqGptrf4BSRwcZQM32aZK 7Pj2XbGWIUrZrd70x1eAP9QE3P79Y2oLrsCgbZJfEwCgvz9JjGmQqQkRiTVzlZVCJYcyGGsD /0tbFCzD2h20ahe8rC1gbb3K3qk+LpBtvjBu1RY9drYk0NymiGbJWZgab6t1jM7sk2vuf0Py O9Hf9XBmK0uE9IgMaiCpc32XV9oASz6UJebwkX+zF2jG5I1BfnO9g7KlotcA/v5ClMjgo6Gl MDY4HxoSRu3i1cqqSDtVlt+AOVBJBACrZcnHAUSuCXBPy0jOlBhxPqRWv6ND4c9PH1xjQ3NP nxJuMBS8rnNg22uyfAgmBKNLpLgAGVRMZGaGoJObGf72s6TeIqKJo/LtggAS9qAUiuKVnygo 3wjfkS9A3DRO+SpU7JqWdsveeIQyeyEJ/8PTowmSQLakF+3fote9ybzd880fSmFuIEJldWxp Y2ggPGpiZXVsaWNoQHN1c2UuY29tPsJgBBMRAgAgBQJZN5xEAhsDBgsJCAcDAgQVAggDBBYC AwECHgECF4AACgkQoDSui/t3IH4J+wCfQ5jHdEjCRHj23O/5ttg9r9OIruwAn3103WUITZee e7Sbg12UgcQ5lv7SzsFNBFk3nEQQCACCuTjCjFOUdi5Nm244F+78kLghRcin/awv+IrTcIWF hUpSs1Y91iQQ7KItirz5uwCPlwejSJDQJLIS+QtJHaXDXeV6NI0Uef1hP20+y8qydDiVkv6l IreXjTb7DvksRgJNvCkWtYnlS3mYvQ9NzS9PhyALWbXnH6sIJd2O9lKS1Mrfq+y0IXCP10eS FFGg+Av3IQeFatkJAyju0PPthyTqxSI4lZYuJVPknzgaeuJv/2NccrPvmeDg6Coe7ZIeQ8Yj t0ARxu2xytAkkLCel1Lz1WLmwLstV30g80nkgZf/wr+/BXJW/oIvRlonUkxv+IbBM3dX2OV8 AmRv1ySWPTP7AAMFB/9PQK/VtlNUJvg8GXj9ootzrteGfVZVVT4XBJkfwBcpC/XcPzldjv+3 HYudvpdNK3lLujXeA5fLOH+Z/G9WBc5pFVSMocI71I8bT8lIAzreg0WvkWg5V2WZsUMlnDL9 mpwIGFhlbM3gfDMs7MPMu8YQRFVdUvtSpaAs8OFfGQ0ia3LGZcjA6Ik2+xcqscEJzNH+qh8V m5jjp28yZgaqTaRbg3M/+MTbMpicpZuqF4rnB0AQD12/3BNWDR6bmh+EkYSMcEIpQmBM51qM EKYTQGybRCjpnKHGOxG0rfFY1085mBDZCH5Kx0cl0HVJuQKC+dV2ZY5AqjcKwAxpE75MLFkr wkkEGBECAAkFAlk3nEQCGwwACgkQoDSui/t3IH7nnwCfcJWUDUFKdCsBH/E5d+0ZnMQi+G0A nAuWpQkjM1ASeQwSHEeAWPgskBQL In-Reply-To: <748548e8-79e5-4957-be16-c5ea4d202d21@suse.com> ... to a field in the capability/controls struct. Signed-off-by: Jan Beulich Acked-by: Roger Pau Monné --- v4: Re-base. v2: New. --- a/xen/arch/x86/hvm/vmx/vmcs.c +++ b/xen/arch/x86/hvm/vmx/vmcs.c @@ -162,7 +162,6 @@ static int cf_check parse_ept_param_runt /* Dynamic (run-time adjusted) execution control flags. */ struct vmx_caps __ro_after_init vmx_caps; -u32 vmx_vmentry_control __read_mostly; u64 vmx_ept_vpid_cap __read_mostly; static uint64_t __read_mostly vmx_vmfunc; @@ -261,7 +260,6 @@ static int vmx_init_vmcs_config(bool bsp struct vmx_caps caps = {}; u64 _vmx_ept_vpid_cap = 0; u64 _vmx_misc_cap = 0; - u32 _vmx_vmentry_control; u64 _vmx_vmfunc = 0; bool mismatch = false; @@ -483,7 +481,7 @@ static int vmx_init_vmcs_config(bool bsp min = 0; opt = (VM_ENTRY_LOAD_GUEST_PAT | VM_ENTRY_LOAD_GUEST_EFER | VM_ENTRY_LOAD_BNDCFGS); - _vmx_vmentry_control = adjust_vmx_controls( + caps.vmentry_control = adjust_vmx_controls( "VMEntry Control", min, opt, MSR_IA32_VMX_ENTRY_CTLS, &mismatch); if ( mismatch ) @@ -494,7 +492,6 @@ static int vmx_init_vmcs_config(bool bsp /* First time through. */ vmx_caps = caps; vmx_ept_vpid_cap = _vmx_ept_vpid_cap; - vmx_vmentry_control = _vmx_vmentry_control; vmx_caps.basic_msr = ((uint64_t)vmx_basic_msr_high << 32) | vmx_basic_msr_low; vmx_vmfunc = _vmx_vmfunc; @@ -534,7 +531,7 @@ static int vmx_init_vmcs_config(bool bsp vmx_caps.vmexit_control, caps.vmexit_control); mismatch |= cap_check( "VMEntry Control", - vmx_vmentry_control, _vmx_vmentry_control); + vmx_caps.vmentry_control, caps.vmentry_control); mismatch |= cap_check( "EPT and VPID Capability", vmx_ept_vpid_cap, _vmx_ept_vpid_cap); @@ -1094,7 +1091,7 @@ static int construct_vmcs(struct vcpu *v { struct domain *d = v->domain; uint32_t vmexit_ctl = vmx_caps.vmexit_control; - u32 vmentry_ctl = vmx_vmentry_control; + u32 vmentry_ctl = vmx_caps.vmentry_control; int rc = 0; vmx_vmcs_enter(v); @@ -2216,7 +2213,6 @@ int __init vmx_vmcs_init(void) * Make sure all dependent features are off as well. */ memset(&vmx_caps, 0, sizeof(vmx_caps)); - vmx_vmentry_control = 0; vmx_ept_vpid_cap = 0; vmx_vmfunc = 0; } --- a/xen/arch/x86/include/asm/hvm/vmx/vmcs.h +++ b/xen/arch/x86/include/asm/hvm/vmx/vmcs.h @@ -235,7 +235,6 @@ void vmx_vmcs_reload(struct vcpu *v); #define VM_ENTRY_LOAD_GUEST_PAT 0x00004000 #define VM_ENTRY_LOAD_GUEST_EFER 0x00008000 #define VM_ENTRY_LOAD_BNDCFGS 0x00010000 -extern u32 vmx_vmentry_control; #define SECONDARY_EXEC_VIRTUALIZE_APIC_ACCESSES 0x00000001U #define SECONDARY_EXEC_ENABLE_EPT 0x00000002U @@ -303,6 +302,7 @@ struct vmx_caps { uint32_t secondary_exec_control; uint64_t tertiary_exec_control; uint32_t vmexit_control; + uint32_t vmentry_control; }; extern struct vmx_caps vmx_caps; @@ -344,10 +344,10 @@ extern struct vmx_caps vmx_caps; (vmx_caps.cpu_based_exec_control & CPU_BASED_MONITOR_TRAP_FLAG)) #define cpu_has_vmx_pat \ (IS_ENABLED(CONFIG_INTEL_VMX) && \ - vmx_vmentry_control & VM_ENTRY_LOAD_GUEST_PAT) + (vmx_caps.vmentry_control & VM_ENTRY_LOAD_GUEST_PAT)) #define cpu_has_vmx_efer \ (IS_ENABLED(CONFIG_INTEL_VMX) && \ - vmx_vmentry_control & VM_ENTRY_LOAD_GUEST_EFER) + (vmx_caps.vmentry_control & VM_ENTRY_LOAD_GUEST_EFER)) #define cpu_has_vmx_unrestricted_guest \ (IS_ENABLED(CONFIG_INTEL_VMX) && \ (vmx_caps.secondary_exec_control & SECONDARY_EXEC_UNRESTRICTED_GUEST)) @@ -387,7 +387,7 @@ extern struct vmx_caps vmx_caps; #define cpu_has_vmx_mpx \ (IS_ENABLED(CONFIG_INTEL_VMX) && \ (vmx_caps.vmexit_control & VM_EXIT_CLEAR_BNDCFGS) && \ - (vmx_vmentry_control & VM_ENTRY_LOAD_BNDCFGS)) + (vmx_caps.vmentry_control & VM_ENTRY_LOAD_BNDCFGS)) #define cpu_has_vmx_xsaves \ (IS_ENABLED(CONFIG_INTEL_VMX) && \ (vmx_caps.secondary_exec_control & SECONDARY_EXEC_XSAVES)) From patchwork Tue Feb 25 11:41:11 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 13989925 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 55A3EC021B2 for ; Tue, 25 Feb 2025 12:16:26 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.895752.1304407 (Exim 4.92) (envelope-from ) id 1tmtqq-0005qq-Gy; Tue, 25 Feb 2025 12:15:52 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 895752.1304407; Tue, 25 Feb 2025 12:15:52 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1tmtqq-0005qj-E4; Tue, 25 Feb 2025 12:15:52 +0000 Received: by outflank-mailman (input) for mailman id 895752; Tue, 25 Feb 2025 12:15:51 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1tmtJK-00066u-MR for xen-devel@lists.xenproject.org; Tue, 25 Feb 2025 11:41:14 +0000 Received: from mail-wm1-x336.google.com (mail-wm1-x336.google.com [2a00:1450:4864:20::336]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 6a2b3547-f36d-11ef-9897-31a8f345e629; Tue, 25 Feb 2025 12:41:13 +0100 (CET) Received: by mail-wm1-x336.google.com with SMTP id 5b1f17b1804b1-4398e839cd4so37826845e9.0 for ; Tue, 25 Feb 2025 03:41:13 -0800 (PST) Received: from [10.156.60.236] (ip-037-024-206-209.um08.pools.vodafone-ip.de. [37.24.206.209]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-390cd8e7198sm2001078f8f.71.2025.02.25.03.41.12 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 25 Feb 2025 03:41:12 -0800 (PST) X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 6a2b3547-f36d-11ef-9897-31a8f345e629 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1740483672; x=1741088472; darn=lists.xenproject.org; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=i1OI/Y4qbtVE73qnPIj1PoaN71h+JUP2SzXVxU7Ho84=; b=TetTShwCAg+eLW+Q7X0R+FzvhFwdGvuYSbAsgcpEmY5nMqq89eqHNdkXyQd1WV0dy+ lI5i8uz9NteF1SL3vDh+H28wMeHquKwe7ziJJ1dQ+Pa1SP56m/TH7U7yUvEd0lpirxzh J6PZftTCEfDjg93wwbQNcE/1OVF50wSf1uOeCEPyPTvHYe6jkRfpzTkyP/7kGilg4NEb esCnRwL8fgtWiSuI8IiEaW6rK/tn8dejKU1jVXxAsuMtfyLY1HPB3Lc/qjGwNBW3XpPE IgF3uFb8H5QDGLcbnrb7Yeju3ox7h5D7e2UZN5dZzncZXnUbNiFnL5ItidkNXCxudr0O pk7Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740483672; x=1741088472; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=i1OI/Y4qbtVE73qnPIj1PoaN71h+JUP2SzXVxU7Ho84=; b=GVd6RYK47Olc5TkaUwTlogYwca6rtT4ydK4mJ4JjL4EyD8u5qnYCvQqP2JwFrlvhMF 6u+pil43+GwQmtnVXX1D1AGm95Tw2dmso2xWTcwBX8Q+hob7i0gLQM97xXQQFvwewPA4 qbwk8KtPkT9vcwJnVw7X54BTQPFEsSScPmJ53L8iOKDTF9p2poC/pCIHkZhgW+uDYxPP fFvDyRJtXd6SIh2QhEZOWYljdFCephobDngDj1nIkq6DJik6D7e4fpfT0Y+PIcC/giAO e/+J55YPlaSPSWBgV2a4gSzAYmsr1aOTGLekw0Wg23fD0RRE46VMi5gBb6+uNWas4V2P NNlg== X-Gm-Message-State: AOJu0Yxe+liZ+Lc/381Wa6ZOVf/DwFy+MG3V7pmz0r5oombJ3v3zcBpF w8YhA1NmjieLowM0XoTfjVQtu9ovwpBgLtynBEnYTZQRi9eOcII7O+H7pqfeq6VqWqnYOpAPaIE = X-Gm-Gg: ASbGncsVxeyRtlmcEJnLMfuC+ULGJN1fvr+506qUAJ6kdwvI+7gtIbBlQIf4YRIaoPU 56tZINc+KsX3yvCHh9F038ja3tFIWIqstm009QrELIHTX+7K+xgP5DL8K2DatfXLv8Ykf1Yo+u7 BDj7BA/Dd7/Cebg1KHCy/A7qKr02Baa4vsJWyZLe4TdwlKKgQsZjLHQL+NwYMnfgie1igUQEY25 1x5xMhzWiml+sFEcNm/pzXBOpLISGNVYfgwZM9nESIqgTHChNsUJStH2MSwMzaQm3ioOROH1LA+ Zhn3mRo0CcqL+dFh2yazIe8QZOoDAoWOOoDY3ofkPCkyYhfMMVNDPZ1wBDfQ9B0+wNDv0klvuui ILMw9SqvzmS8= X-Google-Smtp-Source: AGHT+IGV3mr/fOY3pMG1TKV3Ad1VyE4p0EgXXpmGN+hxY3jO3XiEDpO21s1g0aFtNVHGWHBEVMl25A== X-Received: by 2002:a05:600c:58d4:b0:439:9536:fa6b with SMTP id 5b1f17b1804b1-439a30e65c0mr175214115e9.13.1740483672534; Tue, 25 Feb 2025 03:41:12 -0800 (PST) Message-ID: <1b2c4a56-50af-4543-afd0-a05a7d3093bc@suse.com> Date: Tue, 25 Feb 2025 12:41:11 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH v4 10/11] VMX: convert vmx_ept_vpid_cap From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , =?utf-8?q?Roger_Pau_Monn?= =?utf-8?q?=C3=A9?= References: <748548e8-79e5-4957-be16-c5ea4d202d21@suse.com> Content-Language: en-US Autocrypt: addr=jbeulich@suse.com; keydata= xsDiBFk3nEQRBADAEaSw6zC/EJkiwGPXbWtPxl2xCdSoeepS07jW8UgcHNurfHvUzogEq5xk hu507c3BarVjyWCJOylMNR98Yd8VqD9UfmX0Hb8/BrA+Hl6/DB/eqGptrf4BSRwcZQM32aZK 7Pj2XbGWIUrZrd70x1eAP9QE3P79Y2oLrsCgbZJfEwCgvz9JjGmQqQkRiTVzlZVCJYcyGGsD /0tbFCzD2h20ahe8rC1gbb3K3qk+LpBtvjBu1RY9drYk0NymiGbJWZgab6t1jM7sk2vuf0Py O9Hf9XBmK0uE9IgMaiCpc32XV9oASz6UJebwkX+zF2jG5I1BfnO9g7KlotcA/v5ClMjgo6Gl MDY4HxoSRu3i1cqqSDtVlt+AOVBJBACrZcnHAUSuCXBPy0jOlBhxPqRWv6ND4c9PH1xjQ3NP nxJuMBS8rnNg22uyfAgmBKNLpLgAGVRMZGaGoJObGf72s6TeIqKJo/LtggAS9qAUiuKVnygo 3wjfkS9A3DRO+SpU7JqWdsveeIQyeyEJ/8PTowmSQLakF+3fote9ybzd880fSmFuIEJldWxp Y2ggPGpiZXVsaWNoQHN1c2UuY29tPsJgBBMRAgAgBQJZN5xEAhsDBgsJCAcDAgQVAggDBBYC AwECHgECF4AACgkQoDSui/t3IH4J+wCfQ5jHdEjCRHj23O/5ttg9r9OIruwAn3103WUITZee e7Sbg12UgcQ5lv7SzsFNBFk3nEQQCACCuTjCjFOUdi5Nm244F+78kLghRcin/awv+IrTcIWF hUpSs1Y91iQQ7KItirz5uwCPlwejSJDQJLIS+QtJHaXDXeV6NI0Uef1hP20+y8qydDiVkv6l IreXjTb7DvksRgJNvCkWtYnlS3mYvQ9NzS9PhyALWbXnH6sIJd2O9lKS1Mrfq+y0IXCP10eS FFGg+Av3IQeFatkJAyju0PPthyTqxSI4lZYuJVPknzgaeuJv/2NccrPvmeDg6Coe7ZIeQ8Yj t0ARxu2xytAkkLCel1Lz1WLmwLstV30g80nkgZf/wr+/BXJW/oIvRlonUkxv+IbBM3dX2OV8 AmRv1ySWPTP7AAMFB/9PQK/VtlNUJvg8GXj9ootzrteGfVZVVT4XBJkfwBcpC/XcPzldjv+3 HYudvpdNK3lLujXeA5fLOH+Z/G9WBc5pFVSMocI71I8bT8lIAzreg0WvkWg5V2WZsUMlnDL9 mpwIGFhlbM3gfDMs7MPMu8YQRFVdUvtSpaAs8OFfGQ0ia3LGZcjA6Ik2+xcqscEJzNH+qh8V m5jjp28yZgaqTaRbg3M/+MTbMpicpZuqF4rnB0AQD12/3BNWDR6bmh+EkYSMcEIpQmBM51qM EKYTQGybRCjpnKHGOxG0rfFY1085mBDZCH5Kx0cl0HVJuQKC+dV2ZY5AqjcKwAxpE75MLFkr wkkEGBECAAkFAlk3nEQCGwwACgkQoDSui/t3IH7nnwCfcJWUDUFKdCsBH/E5d+0ZnMQi+G0A nAuWpQkjM1ASeQwSHEeAWPgskBQL In-Reply-To: <748548e8-79e5-4957-be16-c5ea4d202d21@suse.com> ... to fields in the capability/controls struct: Take the opportunity and split the two halves into separate EPT and VPID fields. Signed-off-by: Jan Beulich Acked-by: Roger Pau Monné --- v3: Re-base. v2: New. --- a/xen/arch/x86/hvm/vmx/vmcs.c +++ b/xen/arch/x86/hvm/vmx/vmcs.c @@ -162,7 +162,6 @@ static int cf_check parse_ept_param_runt /* Dynamic (run-time adjusted) execution control flags. */ struct vmx_caps __ro_after_init vmx_caps; -u64 vmx_ept_vpid_cap __read_mostly; static uint64_t __read_mostly vmx_vmfunc; static DEFINE_PER_CPU_READ_MOSTLY(paddr_t, vmxon_region); @@ -258,7 +257,6 @@ static int vmx_init_vmcs_config(bool bsp { u32 vmx_basic_msr_low, vmx_basic_msr_high, min, opt; struct vmx_caps caps = {}; - u64 _vmx_ept_vpid_cap = 0; u64 _vmx_misc_cap = 0; u64 _vmx_vmfunc = 0; bool mismatch = false; @@ -368,10 +366,10 @@ static int vmx_init_vmcs_config(bool bsp if ( caps.secondary_exec_control & (SECONDARY_EXEC_ENABLE_EPT | SECONDARY_EXEC_ENABLE_VPID) ) { - rdmsrl(MSR_IA32_VMX_EPT_VPID_CAP, _vmx_ept_vpid_cap); + rdmsr(MSR_IA32_VMX_EPT_VPID_CAP, caps.ept, caps.vpid); if ( !opt_ept_ad ) - _vmx_ept_vpid_cap &= ~VMX_EPT_AD_BIT; + caps.ept &= ~VMX_EPT_AD_BIT; /* * Additional sanity checking before using EPT: @@ -384,9 +382,9 @@ static int vmx_init_vmcs_config(bool bsp * * Or we just don't use EPT. */ - if ( !(_vmx_ept_vpid_cap & VMX_EPT_MEMORY_TYPE_WB) || - !(_vmx_ept_vpid_cap & VMX_EPT_WALK_LENGTH_4_SUPPORTED) || - !(_vmx_ept_vpid_cap & VMX_EPT_INVEPT_ALL_CONTEXT) ) + if ( !(caps.ept & VMX_EPT_MEMORY_TYPE_WB) || + !(caps.ept & VMX_EPT_WALK_LENGTH_4_SUPPORTED) || + !(caps.ept & VMX_EPT_INVEPT_ALL_CONTEXT) ) caps.secondary_exec_control &= ~SECONDARY_EXEC_ENABLE_EPT; /* @@ -395,11 +393,11 @@ static int vmx_init_vmcs_config(bool bsp * * Or we just don't use VPID. */ - if ( !(_vmx_ept_vpid_cap & VMX_VPID_INVVPID_ALL_CONTEXT) ) + if ( !(caps.vpid & VMX_VPID_INVVPID_ALL_CONTEXT) ) caps.secondary_exec_control &= ~SECONDARY_EXEC_ENABLE_VPID; /* EPT A/D bits is required for PML */ - if ( !(_vmx_ept_vpid_cap & VMX_EPT_AD_BIT) ) + if ( !(caps.ept & VMX_EPT_AD_BIT) ) caps.secondary_exec_control &= ~SECONDARY_EXEC_ENABLE_PML; } @@ -491,7 +489,6 @@ static int vmx_init_vmcs_config(bool bsp { /* First time through. */ vmx_caps = caps; - vmx_ept_vpid_cap = _vmx_ept_vpid_cap; vmx_caps.basic_msr = ((uint64_t)vmx_basic_msr_high << 32) | vmx_basic_msr_low; vmx_vmfunc = _vmx_vmfunc; @@ -532,9 +529,8 @@ static int vmx_init_vmcs_config(bool bsp mismatch |= cap_check( "VMEntry Control", vmx_caps.vmentry_control, caps.vmentry_control); - mismatch |= cap_check( - "EPT and VPID Capability", - vmx_ept_vpid_cap, _vmx_ept_vpid_cap); + mismatch |= cap_check("EPT Capability", vmx_caps.ept, caps.ept); + mismatch |= cap_check("VPID Capability", vmx_caps.vpid, caps.vpid); mismatch |= cap_check( "VMFUNC Capability", vmx_vmfunc, _vmx_vmfunc); @@ -2213,7 +2209,6 @@ int __init vmx_vmcs_init(void) * Make sure all dependent features are off as well. */ memset(&vmx_caps, 0, sizeof(vmx_caps)); - vmx_ept_vpid_cap = 0; vmx_vmfunc = 0; } --- a/xen/arch/x86/include/asm/hvm/vmx/vmcs.h +++ b/xen/arch/x86/include/asm/hvm/vmx/vmcs.h @@ -280,12 +280,11 @@ void vmx_vmcs_reload(struct vcpu *v); #define VMX_EPT_AD_BIT 0x00200000 #define VMX_EPT_INVEPT_SINGLE_CONTEXT 0x02000000 #define VMX_EPT_INVEPT_ALL_CONTEXT 0x04000000 -#define VMX_VPID_INVVPID_INSTRUCTION 0x00100000000ULL -#define VMX_VPID_INVVPID_INDIVIDUAL_ADDR 0x10000000000ULL -#define VMX_VPID_INVVPID_SINGLE_CONTEXT 0x20000000000ULL -#define VMX_VPID_INVVPID_ALL_CONTEXT 0x40000000000ULL -#define VMX_VPID_INVVPID_SINGLE_CONTEXT_RETAINING_GLOBAL 0x80000000000ULL -extern u64 vmx_ept_vpid_cap; +#define VMX_VPID_INVVPID_INSTRUCTION 0x00000001 +#define VMX_VPID_INVVPID_INDIVIDUAL_ADDR 0x00000100 +#define VMX_VPID_INVVPID_SINGLE_CONTEXT 0x00000200 +#define VMX_VPID_INVVPID_ALL_CONTEXT 0x00000400 +#define VMX_VPID_INVVPID_SINGLE_CONTEXT_RETAINING_GLOBAL 0x00000800 #define VMX_MISC_ACTIVITY_MASK 0x000001c0 #define VMX_MISC_PROC_TRACE 0x00004000 @@ -303,6 +302,8 @@ struct vmx_caps { uint64_t tertiary_exec_control; uint32_t vmexit_control; uint32_t vmentry_control; + uint32_t ept; + uint32_t vpid; }; extern struct vmx_caps vmx_caps; --- a/xen/arch/x86/include/asm/hvm/vmx/vmx.h +++ b/xen/arch/x86/include/asm/hvm/vmx/vmx.h @@ -278,17 +278,17 @@ typedef union cr_access_qual { extern uint8_t posted_intr_vector; #define cpu_has_vmx_ept_exec_only_supported \ - (vmx_ept_vpid_cap & VMX_EPT_EXEC_ONLY_SUPPORTED) + (vmx_caps.ept & VMX_EPT_EXEC_ONLY_SUPPORTED) #define cpu_has_vmx_ept_wl4_supported \ - (vmx_ept_vpid_cap & VMX_EPT_WALK_LENGTH_4_SUPPORTED) -#define cpu_has_vmx_ept_mt_uc (vmx_ept_vpid_cap & VMX_EPT_MEMORY_TYPE_UC) -#define cpu_has_vmx_ept_mt_wb (vmx_ept_vpid_cap & VMX_EPT_MEMORY_TYPE_WB) -#define cpu_has_vmx_ept_2mb (vmx_ept_vpid_cap & VMX_EPT_SUPERPAGE_2MB) -#define cpu_has_vmx_ept_1gb (vmx_ept_vpid_cap & VMX_EPT_SUPERPAGE_1GB) -#define cpu_has_vmx_ept_ad (vmx_ept_vpid_cap & VMX_EPT_AD_BIT) + (vmx_caps.ept & VMX_EPT_WALK_LENGTH_4_SUPPORTED) +#define cpu_has_vmx_ept_mt_uc (vmx_caps.ept & VMX_EPT_MEMORY_TYPE_UC) +#define cpu_has_vmx_ept_mt_wb (vmx_caps.ept & VMX_EPT_MEMORY_TYPE_WB) +#define cpu_has_vmx_ept_2mb (vmx_caps.ept & VMX_EPT_SUPERPAGE_2MB) +#define cpu_has_vmx_ept_1gb (vmx_caps.ept & VMX_EPT_SUPERPAGE_1GB) +#define cpu_has_vmx_ept_ad (vmx_caps.ept & VMX_EPT_AD_BIT) #define cpu_has_vmx_ept_invept_single_context \ - (vmx_ept_vpid_cap & VMX_EPT_INVEPT_SINGLE_CONTEXT) + (vmx_caps.ept & VMX_EPT_INVEPT_SINGLE_CONTEXT) #define EPT_2MB_SHIFT 16 #define EPT_1GB_SHIFT 17 @@ -299,11 +299,11 @@ extern uint8_t posted_intr_vector; #define INVEPT_ALL_CONTEXT 2 #define cpu_has_vmx_vpid_invvpid_individual_addr \ - (vmx_ept_vpid_cap & VMX_VPID_INVVPID_INDIVIDUAL_ADDR) + (vmx_caps.vpid & VMX_VPID_INVVPID_INDIVIDUAL_ADDR) #define cpu_has_vmx_vpid_invvpid_single_context \ - (vmx_ept_vpid_cap & VMX_VPID_INVVPID_SINGLE_CONTEXT) + (vmx_caps.vpid & VMX_VPID_INVVPID_SINGLE_CONTEXT) #define cpu_has_vmx_vpid_invvpid_single_context_retaining_global \ - (vmx_ept_vpid_cap & VMX_VPID_INVVPID_SINGLE_CONTEXT_RETAINING_GLOBAL) + (vmx_caps.vpid & VMX_VPID_INVVPID_SINGLE_CONTEXT_RETAINING_GLOBAL) #define INVVPID_INDIVIDUAL_ADDR 0 #define INVVPID_SINGLE_CONTEXT 1 From patchwork Tue Feb 25 11:41:36 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 13989951 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 13AB1C021BC for ; Tue, 25 Feb 2025 12:21:40 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.895764.1304416 (Exim 4.92) (envelope-from ) id 1tmtwI-0007oP-3C; Tue, 25 Feb 2025 12:21:30 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 895764.1304416; Tue, 25 Feb 2025 12:21:30 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1tmtwH-0007oI-WF; Tue, 25 Feb 2025 12:21:30 +0000 Received: by outflank-mailman (input) for mailman id 895764; Tue, 25 Feb 2025 12:21:28 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1tmtJj-00066u-T6 for xen-devel@lists.xenproject.org; Tue, 25 Feb 2025 11:41:39 +0000 Received: from mail-wm1-x32a.google.com (mail-wm1-x32a.google.com [2a00:1450:4864:20::32a]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 7941444e-f36d-11ef-9897-31a8f345e629; Tue, 25 Feb 2025 12:41:38 +0100 (CET) Received: by mail-wm1-x32a.google.com with SMTP id 5b1f17b1804b1-438a3216fc2so52054995e9.1 for ; Tue, 25 Feb 2025 03:41:38 -0800 (PST) Received: from [10.156.60.236] (ip-037-024-206-209.um08.pools.vodafone-ip.de. [37.24.206.209]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439b02f24acsm139068795e9.21.2025.02.25.03.41.37 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 25 Feb 2025 03:41:37 -0800 (PST) X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 7941444e-f36d-11ef-9897-31a8f345e629 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1740483698; x=1741088498; darn=lists.xenproject.org; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=MC0QH5fDEc6DdpYxn+3u5oeTofK6VmSDjHR9KmOWsFg=; b=YEe0C1ziYhfBjNWxGstckLUiCjnwSgEJB7JvUz8H2vuM+0Xs1ZNM5L1lhzKpcE2nY9 8PyCVXx8d05YcGmDgZpB46+CUgO/BSXeBOD62fP/RZ5ITeVx8i/2h34+xhN5leQcaKgo 1x4dXijUMlrEiFMv+KxfGgMFjjLxHpohplsRrJaVDahzY6PRN5QS7deTOJZ8iWVwkHw7 GOxUpfdWNXGuQ0hLGZhPqmf0G70EfmQwLrAUFxiIpXE3XCTHg0YAtcLOVr9vTB1OA7O0 NVS9cGkBMJHegivuN11Wt5GTF7uSNKJcrRh+N/pokxbRnu23JT8OjfxALxvo/lSKNqSv 6YVQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740483698; x=1741088498; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=MC0QH5fDEc6DdpYxn+3u5oeTofK6VmSDjHR9KmOWsFg=; b=bIyWpiGWwU4G7qupJ5Ld0XLqZf6fE2FD1Uf3gZPaUWnjbeKunJcajdvqeqw0dLMCy5 SGrXphniM6S7iY95UbsaPaiZX7K9i10In6K7aC4NB0aJAVbuAOngJvHKO56EOESEE3LC GtaKM9OS4gKZG4drKtAmejJuKr56G4Ki08KD5kTA48jPi1WJXGfJrgvrXn3kOmjks+Pw XnjJ42+CyyCsMhv0qsYinjYjYA65YkrphqjImm3VIRB2/fxPS+3rcHxx6EZp9PZKoyqo W3j9NNrnQRgceNH5RUhELYBdZXXmLRgNCmVocs1gCCOeXvBxTRGn8aMq0DT6CYLuSzY8 RwmQ== X-Gm-Message-State: AOJu0Yyalko1Xhkbsf+nrW0Q8QGuVPoDJasL5rVfR+Yo0FhN3/RKGdgu 9IX5+p+gmG5wQE3gFe97WPR30vgv41r25AmMu6T738OyCPH6JCFwW832ld8tGQ6nn/Xve/3E4uM = X-Gm-Gg: ASbGncvfVmU0Dm//VJ6+3XTAwys/M3WNiAWQnov03WtvoV1NxYR3EHxc0WHUIg4/HLj /P3sRCJ7od2svcUUOocRlmerj6G7NpVy1zGsRF456merlyIDKsX4gXuUWhVNz70T5qtby4zre3i qNsvCD+54EBADCulFhGef9Ajio07OqrACNtIozgb+WUlFqKPSnCPQWBQD41gLSzTXuUZmtn16gI f8mig8t+B8P8wpZjHchmtJknmB7IpNDui+zap+cxvdNbj8mqpK+luxPIKaGlKPMMDRR8nJNjXsO A0PS7rhGAwszrc+V2oXvvWAHtpXE7f/J5uWXe0SAPFDxMKBPvcZ/OsnnJmo9bpWlcapmF8U675p ngMMnPiMvOv8= X-Google-Smtp-Source: AGHT+IFpUHCr9koZ9eSiSPAbfY1uuhk7KWmSrGDYEpC8InxNEsDDcfgcbtaSh2jDUimKcJMvb7nMfQ== X-Received: by 2002:a5d:6d8f:0:b0:38f:2111:f5ac with SMTP id ffacd0b85a97d-38f707b0941mr14456590f8f.31.1740483697810; Tue, 25 Feb 2025 03:41:37 -0800 (PST) Message-ID: Date: Tue, 25 Feb 2025 12:41:36 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH v4 11/11] VMX: convert vmx_vmfunc From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , =?utf-8?q?Roger_Pau_Monn?= =?utf-8?q?=C3=A9?= References: <748548e8-79e5-4957-be16-c5ea4d202d21@suse.com> Content-Language: en-US Autocrypt: addr=jbeulich@suse.com; keydata= xsDiBFk3nEQRBADAEaSw6zC/EJkiwGPXbWtPxl2xCdSoeepS07jW8UgcHNurfHvUzogEq5xk hu507c3BarVjyWCJOylMNR98Yd8VqD9UfmX0Hb8/BrA+Hl6/DB/eqGptrf4BSRwcZQM32aZK 7Pj2XbGWIUrZrd70x1eAP9QE3P79Y2oLrsCgbZJfEwCgvz9JjGmQqQkRiTVzlZVCJYcyGGsD /0tbFCzD2h20ahe8rC1gbb3K3qk+LpBtvjBu1RY9drYk0NymiGbJWZgab6t1jM7sk2vuf0Py O9Hf9XBmK0uE9IgMaiCpc32XV9oASz6UJebwkX+zF2jG5I1BfnO9g7KlotcA/v5ClMjgo6Gl MDY4HxoSRu3i1cqqSDtVlt+AOVBJBACrZcnHAUSuCXBPy0jOlBhxPqRWv6ND4c9PH1xjQ3NP nxJuMBS8rnNg22uyfAgmBKNLpLgAGVRMZGaGoJObGf72s6TeIqKJo/LtggAS9qAUiuKVnygo 3wjfkS9A3DRO+SpU7JqWdsveeIQyeyEJ/8PTowmSQLakF+3fote9ybzd880fSmFuIEJldWxp Y2ggPGpiZXVsaWNoQHN1c2UuY29tPsJgBBMRAgAgBQJZN5xEAhsDBgsJCAcDAgQVAggDBBYC AwECHgECF4AACgkQoDSui/t3IH4J+wCfQ5jHdEjCRHj23O/5ttg9r9OIruwAn3103WUITZee e7Sbg12UgcQ5lv7SzsFNBFk3nEQQCACCuTjCjFOUdi5Nm244F+78kLghRcin/awv+IrTcIWF hUpSs1Y91iQQ7KItirz5uwCPlwejSJDQJLIS+QtJHaXDXeV6NI0Uef1hP20+y8qydDiVkv6l IreXjTb7DvksRgJNvCkWtYnlS3mYvQ9NzS9PhyALWbXnH6sIJd2O9lKS1Mrfq+y0IXCP10eS FFGg+Av3IQeFatkJAyju0PPthyTqxSI4lZYuJVPknzgaeuJv/2NccrPvmeDg6Coe7ZIeQ8Yj t0ARxu2xytAkkLCel1Lz1WLmwLstV30g80nkgZf/wr+/BXJW/oIvRlonUkxv+IbBM3dX2OV8 AmRv1ySWPTP7AAMFB/9PQK/VtlNUJvg8GXj9ootzrteGfVZVVT4XBJkfwBcpC/XcPzldjv+3 HYudvpdNK3lLujXeA5fLOH+Z/G9WBc5pFVSMocI71I8bT8lIAzreg0WvkWg5V2WZsUMlnDL9 mpwIGFhlbM3gfDMs7MPMu8YQRFVdUvtSpaAs8OFfGQ0ia3LGZcjA6Ik2+xcqscEJzNH+qh8V m5jjp28yZgaqTaRbg3M/+MTbMpicpZuqF4rnB0AQD12/3BNWDR6bmh+EkYSMcEIpQmBM51qM EKYTQGybRCjpnKHGOxG0rfFY1085mBDZCH5Kx0cl0HVJuQKC+dV2ZY5AqjcKwAxpE75MLFkr wkkEGBECAAkFAlk3nEQCGwwACgkQoDSui/t3IH7nnwCfcJWUDUFKdCsBH/E5d+0ZnMQi+G0A nAuWpQkjM1ASeQwSHEeAWPgskBQL In-Reply-To: <748548e8-79e5-4957-be16-c5ea4d202d21@suse.com> ... to a field in the capability/controls struct. Signed-off-by: Jan Beulich Acked-by: Roger Pau Monné --- v2: New. --- a/xen/arch/x86/hvm/vmx/vmcs.c +++ b/xen/arch/x86/hvm/vmx/vmcs.c @@ -162,7 +162,6 @@ static int cf_check parse_ept_param_runt /* Dynamic (run-time adjusted) execution control flags. */ struct vmx_caps __ro_after_init vmx_caps; -static uint64_t __read_mostly vmx_vmfunc; static DEFINE_PER_CPU_READ_MOSTLY(paddr_t, vmxon_region); static DEFINE_PER_CPU(paddr_t, current_vmcs); @@ -258,7 +257,6 @@ static int vmx_init_vmcs_config(bool bsp u32 vmx_basic_msr_low, vmx_basic_msr_high, min, opt; struct vmx_caps caps = {}; u64 _vmx_misc_cap = 0; - u64 _vmx_vmfunc = 0; bool mismatch = false; rdmsr(MSR_IA32_VMX_BASIC, vmx_basic_msr_low, vmx_basic_msr_high); @@ -461,14 +459,14 @@ static int vmx_init_vmcs_config(bool bsp /* The IA32_VMX_VMFUNC MSR exists only when VMFUNC is available */ if ( caps.secondary_exec_control & SECONDARY_EXEC_ENABLE_VM_FUNCTIONS ) { - rdmsrl(MSR_IA32_VMX_VMFUNC, _vmx_vmfunc); + rdmsrl(MSR_IA32_VMX_VMFUNC, caps.vmfunc); /* * VMFUNC leaf 0 (EPTP switching) must be supported. * * Or we just don't use VMFUNC. */ - if ( !(_vmx_vmfunc & VMX_VMFUNC_EPTP_SWITCHING) ) + if ( !(caps.vmfunc & VMX_VMFUNC_EPTP_SWITCHING) ) caps.secondary_exec_control &= ~SECONDARY_EXEC_ENABLE_VM_FUNCTIONS; } @@ -491,7 +489,6 @@ static int vmx_init_vmcs_config(bool bsp vmx_caps = caps; vmx_caps.basic_msr = ((uint64_t)vmx_basic_msr_high << 32) | vmx_basic_msr_low; - vmx_vmfunc = _vmx_vmfunc; vmx_display_features(); @@ -533,7 +530,7 @@ static int vmx_init_vmcs_config(bool bsp mismatch |= cap_check("VPID Capability", vmx_caps.vpid, caps.vpid); mismatch |= cap_check( "VMFUNC Capability", - vmx_vmfunc, _vmx_vmfunc); + vmx_caps.vmfunc, caps.vmfunc); if ( cpu_has_vmx_ins_outs_instr_info != !!(vmx_basic_msr_high & (VMX_BASIC_INS_OUT_INFO >> 32)) ) { @@ -2209,7 +2206,6 @@ int __init vmx_vmcs_init(void) * Make sure all dependent features are off as well. */ memset(&vmx_caps, 0, sizeof(vmx_caps)); - vmx_vmfunc = 0; } return ret; --- a/xen/arch/x86/include/asm/hvm/vmx/vmcs.h +++ b/xen/arch/x86/include/asm/hvm/vmx/vmcs.h @@ -304,6 +304,7 @@ struct vmx_caps { uint32_t vmentry_control; uint32_t ept; uint32_t vpid; + uint64_t vmfunc; }; extern struct vmx_caps vmx_caps;