From patchwork Fri Nov 25 04:05:50 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Yang, Weijiang" X-Patchwork-Id: 25830 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:f944:0:0:0:0:0 with SMTP id q4csp3796558wrr; Thu, 24 Nov 2022 22:10:34 -0800 (PST) X-Google-Smtp-Source: AA0mqf7nNdkX3jZN9wfFfw8ga5bxQ9L8e5gQ1Qli5eiLpTnLOWRUAmQ/Z4pHhA2QRBtF0/jT/Y9N X-Received: by 2002:a05:6a02:183:b0:477:98cc:3c43 with SMTP id bj3-20020a056a02018300b0047798cc3c43mr14417147pgb.0.1669356634438; Thu, 24 Nov 2022 22:10:34 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669356634; cv=none; d=google.com; s=arc-20160816; b=LkAo176HPugtuTQObJAwTJqV1c43G5xRPPOO6ZZBfMKkKxy5sML/leUVGpjNuesv84 KUQtWYds8j2/jbAjWEfkvTNacPDKMqs1F4Ntg9aSbPpU+x1U9OzRMTcfY9+l94ZWsE4Z fbHKDitgBDNHn1Z9OQMPBq3gM1c13AZqpv269Gc4y+de3sfePxY4vXKfzfowN2XHtM4b dfswieJIOdoJEImfyD2BcxtZFELMya8/F4dcmy1amtq0cataqjb9pgU9nmchtQUv1TEB nzrrfbhA8Tajn4hDqM8niy7AtI6KFui0EDQQaam08B5q6nIpY+VRl3HxWwOO2bDErWn/ 08Wg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=VVo7NVKdCUWWVI5s4SO/IC1/ZMFUD351yNVQNy8PhDE=; b=hRTXYgATJjZWbjW0MEkhNuor9Wqcy0fuJZfjw5UIyILjLxw9zEfIOdZKBn0tVMaNSP gimw6E79/2LbBXMWDv/MKuPo2va9485c0ygahQnvXWHPjH3NVfgsEpr/9n3cokvLSPjr /UQomfplSYF0IHkl8zytYqltdc7yoCd4MRgW7t4+rPGikZLlc7cU9UjiUMa3hIBs5q4C edKzJN6clBj8GCFOX/Usf5oe3KTA9ndjNNZCgszoQCbYoajKgKSs3ICNdgPWIZGcZSoE kjIewumrLYw11xJPTJ98kKtHvCv359r2uQbXh7VkkWtSp2TvsM12hEF4S4PIWIwMozJJ jPkA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=MjKTWutU; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id t29-20020a63445d000000b0045f7fc4b812si3084749pgk.295.2022.11.24.22.10.21; Thu, 24 Nov 2022 22:10:34 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=MjKTWutU; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229658AbiKYGKH (ORCPT + 99 others); Fri, 25 Nov 2022 01:10:07 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46532 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229569AbiKYGKG (ORCPT ); Fri, 25 Nov 2022 01:10:06 -0500 Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 37E911FF9F; Thu, 24 Nov 2022 22:10:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1669356604; x=1700892604; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=AI/egaNUqDxRR3gqaRVx+qud/1s9AQV7uO5bYN6cCbw=; b=MjKTWutU9WXAwrfszMTQtta0ROYbcV5nB4chuxifXvOsPM2ry7Y3Z4Y0 7upfDhDsKktBLLBm5yRlIdPWtdzianAXBuVYgMEhffZW1cfstJ/XvU+We Y/u+cR78+pCoSVPlwmpZH929FhqVeHY5RG6Ruxz573K+ulM/FQ+ZaVq/e jfyxStlxpBCnwn8Uh1BBs76m9B/6G50GC805GxiNc46h17q0J8sgBa2PP brN8KKahRHnvyk+3NpQjBw/PtCI+USHEExryvnnuva59+Dx7ooKOMxRz9 g0ic3is8mkPLtdheXPS2UzcD6oArjaYOzhzS0K8E0CHJKFvvTSL0nnE0v A==; X-IronPort-AV: E=McAfee;i="6500,9779,10541"; a="313116793" X-IronPort-AV: E=Sophos;i="5.96,192,1665471600"; d="scan'208";a="313116793" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Nov 2022 22:10:02 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10541"; a="784838444" X-IronPort-AV: E=Sophos;i="5.96,192,1665471600"; d="scan'208";a="784838444" Received: from embargo.jf.intel.com ([10.165.9.183]) by fmsmga001-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Nov 2022 22:10:00 -0800 From: Yang Weijiang To: seanjc@google.com, pbonzini@redhat.com, jmattson@google.com, kvm@vger.kernel.org, linux-kernel@vger.kernel.org Cc: like.xu.linux@gmail.com, kan.liang@linux.intel.com, wei.w.wang@intel.com, weijiang.yang@intel.com, Like Xu , Peter Zijlstra , Andi Kleen Subject: [PATCH v2 01/15] perf/x86/lbr: Simplify the exposure check for the LBR_INFO registers Date: Thu, 24 Nov 2022 23:05:50 -0500 Message-Id: <20221125040604.5051-2-weijiang.yang@intel.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20221125040604.5051-1-weijiang.yang@intel.com> References: <20221125040604.5051-1-weijiang.yang@intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1750447302484540068?= X-GMAIL-MSGID: =?utf-8?q?1750447302484540068?= From: Like Xu The x86_pmu.lbr_info is 0 unless explicitly initialized, so there's no point checking x86_pmu.intel_cap.lbr_format. Cc: Peter Zijlstra Reviewed-by: Kan Liang Reviewed-by: Andi Kleen Signed-off-by: Like Xu Signed-off-by: Yang Weijiang --- arch/x86/events/intel/lbr.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/arch/x86/events/intel/lbr.c b/arch/x86/events/intel/lbr.c index 4dbde69c423b..e7caabfa1377 100644 --- a/arch/x86/events/intel/lbr.c +++ b/arch/x86/events/intel/lbr.c @@ -1606,12 +1606,10 @@ void __init intel_pmu_arch_lbr_init(void) */ void x86_perf_get_lbr(struct x86_pmu_lbr *lbr) { - int lbr_fmt = x86_pmu.intel_cap.lbr_format; - lbr->nr = x86_pmu.lbr_nr; lbr->from = x86_pmu.lbr_from; lbr->to = x86_pmu.lbr_to; - lbr->info = (lbr_fmt == LBR_FORMAT_INFO) ? x86_pmu.lbr_info : 0; + lbr->info = x86_pmu.lbr_info; } EXPORT_SYMBOL_GPL(x86_perf_get_lbr); From patchwork Fri Nov 25 04:05:51 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Yang, Weijiang" X-Patchwork-Id: 25829 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:f944:0:0:0:0:0 with SMTP id q4csp3796556wrr; Thu, 24 Nov 2022 22:10:33 -0800 (PST) X-Google-Smtp-Source: AA0mqf5Rvrl+wKV/zfXvAkLUk7GgisELLluEEFKkfA/1LilamgJm3GX2RAuxga1JN1kJ/X9SnLMf X-Received: by 2002:a17:90b:683:b0:213:cfb4:719 with SMTP id m3-20020a17090b068300b00213cfb40719mr17241100pjz.188.1669356633561; Thu, 24 Nov 2022 22:10:33 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669356633; cv=none; d=google.com; s=arc-20160816; b=tCim6XC82z7iy9J1812DEKNjgKGTK4VszZzEZxXCXPP+suQJVkVTwg4yV98fD2k3ko PDrVUlKmqvX99Sny1ZP1shhrX9zQVssOlNQRIE5hHmm5UEwOyaymxKzRnDVeVPD6jXkS A5qWhpbU0pZwra09wJBZYTvOeHtPzjMqkdYAkNiiADiPgR8ItXh0m2Ihppze/vgB3eMq YfC4J7nfSM1RdoTu3HBCT8R6Saek248GlDKPfTA27XrzBq+Tzag+0D6jZrlRm7YOgg5l p8gopvwXpYhHPJTnYKjKt+/iX5OHJcxufL0yEH69TMuQCNfDzYd3qmeoeCXFxOxq0opc 7xGw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=HB5jDdpQub4bjp14F3Oj6Cy/wgwkbr6huk0Mg052x40=; b=LkSmA1c5oaQmGqUNOeCgyXRkN1meI0gsv4iKpCvl9ckPcWF/ZhuPEuauPNpNNVPb5I Pon172CKq9aX7eo6EEnMx5SNNmAT96xdJFLbusWx2vshz5UyvDxQr1ESUopxUwQbZAzv mYZs97PK+agMp3Y9LJmGRdTiDC1+rAWGqo1dnADSKJ4xxo/gJwasMZy/qA4n7s5JbyRA zoxQO2Jwu6kyyep5wv7KJt+tmCyjG7yjlL9P7AMLEmbU5SkUk9ZqOUEQrMdU7UAZs1ul 85+BjuuqrsTCheB8fQ6lfaTsC7t5th1DW0P2YgExfGWJw2hgP+VZV5di40GOd6ZRdY4P yG0A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=K160Jpoa; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id s14-20020a170902988e00b0017b3392ca72si2662391plp.323.2022.11.24.22.10.19; Thu, 24 Nov 2022 22:10:33 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=K160Jpoa; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229548AbiKYGKF (ORCPT + 99 others); Fri, 25 Nov 2022 01:10:05 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46522 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229436AbiKYGKE (ORCPT ); Fri, 25 Nov 2022 01:10:04 -0500 Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5B11E1F633; Thu, 24 Nov 2022 22:10:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1669356603; x=1700892603; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=BxKmdti/F0ZDN+6HkQ50O9NI5gzI7uJBgUfpvPRf2BQ=; b=K160JpoaXFeFFMJCzDyATZ2n9HFdS4SNB0tT9DAGCJb20m3mZ5SfyosM 6BKoGG3DEhI3qjdMs5t22VIMU3XQMCPWdUbcC7CFpXF+ZBbsZ5eY7A/v0 VF3KNswHw9YqUSDvS5IuotTgXoDkyX7pB1wDCvJZRiySw2ZtBJ9bWHXdR hV/rvp/JzCvVandQSvhsi3UG3I2XA3iQHdyKtP/gosH9svr41+JMutWBB mPpSdbuwaF71eRdki/vijRArtMsfazjPYwFdTmVtcCT3nwqfcXJoj+8GK Vhzz0ZaX89+R4h6Tj4yWBXQgaKFK6HQPy6zbCIRZaOUqinBDOEiEr2cvR Q==; X-IronPort-AV: E=McAfee;i="6500,9779,10541"; a="313116799" X-IronPort-AV: E=Sophos;i="5.96,192,1665471600"; d="scan'208";a="313116799" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Nov 2022 22:10:02 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10541"; a="784838453" X-IronPort-AV: E=Sophos;i="5.96,192,1665471600"; d="scan'208";a="784838453" Received: from embargo.jf.intel.com ([10.165.9.183]) by fmsmga001-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Nov 2022 22:10:01 -0800 From: Yang Weijiang To: seanjc@google.com, pbonzini@redhat.com, jmattson@google.com, kvm@vger.kernel.org, linux-kernel@vger.kernel.org Cc: like.xu.linux@gmail.com, kan.liang@linux.intel.com, wei.w.wang@intel.com, weijiang.yang@intel.com, Sean Christopherson Subject: [PATCH v2 02/15] KVM: x86: Report XSS as an MSR to be saved if there are supported features Date: Thu, 24 Nov 2022 23:05:51 -0500 Message-Id: <20221125040604.5051-3-weijiang.yang@intel.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20221125040604.5051-1-weijiang.yang@intel.com> References: <20221125040604.5051-1-weijiang.yang@intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1750447301131068433?= X-GMAIL-MSGID: =?utf-8?q?1750447301131068433?= From: Sean Christopherson Add MSR_IA32_XSS to the list of MSRs reported to userspace if supported_xss is non-zero, i.e. KVM supports at least one XSS based feature. Signed-off-by: Sean Christopherson Signed-off-by: Yang Weijiang --- arch/x86/kvm/x86.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index f18f579ebde8..16726b44061b 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -1465,6 +1465,7 @@ static const u32 msrs_to_save_all[] = { MSR_F15H_PERF_CTR3, MSR_F15H_PERF_CTR4, MSR_F15H_PERF_CTR5, MSR_IA32_XFD, MSR_IA32_XFD_ERR, + MSR_IA32_XSS, }; static u32 msrs_to_save[ARRAY_SIZE(msrs_to_save_all)]; @@ -7061,6 +7062,10 @@ static void kvm_init_msr_list(void) if (!kvm_cpu_cap_has(X86_FEATURE_XFD)) continue; break; + case MSR_IA32_XSS: + if (!kvm_caps.supported_xss) + continue; + break; default: break; } From patchwork Fri Nov 25 04:05:52 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Yang, Weijiang" X-Patchwork-Id: 25831 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:f944:0:0:0:0:0 with SMTP id q4csp3796627wrr; Thu, 24 Nov 2022 22:10:44 -0800 (PST) X-Google-Smtp-Source: AA0mqf6PTo7eAkXtA+fsZNLlDanpCWtmpNMcMTzVWwLnxDNwZ2EAPn1AGfPubCS8w0/zywnHrHp0 X-Received: by 2002:aa7:91c9:0:b0:56d:8e07:4626 with SMTP id z9-20020aa791c9000000b0056d8e074626mr38327360pfa.70.1669356644241; Thu, 24 Nov 2022 22:10:44 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669356644; cv=none; d=google.com; s=arc-20160816; b=KF28WgPrMrdBdaIRR9eKdIA7Jw+WDFOr6AXFrhwhGIjxPTgV7jSNmHG6VWQvxlRpPh YDjtFlyqKkDo7I0H+6VvrK/PBvXPts4FrYqODhklLuWQrcOUFfp4aOiwfMNIOnqVseVo jkQ4HwHAfremXBwWIo2U/4eHqRVQMBaggwddg9oav/s3FgKIXG+zN0PMSRBFLmGtqCPO zyVHIJU5Bx+FN5ZlXjOYu8t6uFslYrLB82J6M0EV8Px/iH/+A6a91OjZk6hPH5GKqvoa 8dqjlJcWdGXjAEiz3HxjoGEVbVnCi/ifIyybZiFRZh5CkjYhpBQTKUn1q9LK8+UfBw+A OsHA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=UXpP06PjlwJwxmvAhtPas8KCEbPVKy771sdVz7timLk=; b=GlnaqiBRFSRw1953yiCFvLdMaScS6u6rmld9UwaMTBsionAzvEyqtEPVJ/CXjuAJ6n L+aAJIIlsDMpXSAt4reYFl4V1XvLRLWsDQj2KVgkNkF6wJv8KhhlpD38BQEHoYpqQDr7 WP18hfw9RZhy9aDnJMWIH+ncR19Y3wLSvtf7nY1+EF4PNm3evdG8QMFwBWE0SYRBl6dG juh5dSokRktJGioYOCSlDYyO+sL35qiOXvs1g4flNahAmLWTP/E/CVkSGfCKRhR36q8J iJiPOj+tbOIZC0aQ69bXSAHhGgbUG6wLKlhoq+7G8FTIu3Qp3zhoPpsX4vvPOGyfjjkA aBjQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=PBouoJNf; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id h7-20020a632107000000b00476d18b0d24si3379953pgh.742.2022.11.24.22.10.31; Thu, 24 Nov 2022 22:10:44 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=PBouoJNf; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229529AbiKYGKN (ORCPT + 99 others); Fri, 25 Nov 2022 01:10:13 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46562 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229612AbiKYGKH (ORCPT ); Fri, 25 Nov 2022 01:10:07 -0500 Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2E7DB1FFA5; Thu, 24 Nov 2022 22:10:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1669356606; x=1700892606; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=t9/hSW5oDqnsrlg6NZnVpU7UNXqQTtylzvwk+12qEN4=; b=PBouoJNfTi5QCMPrrGbC3zgErXj4D7ytTQuTyq3ibcbFDlk7g3oEEEuy v1nUta9rYp3lmA01Jm+pzuZAPY7S4GWw1w6u2PWai/jJlpHGsbMUR4jOf wgrB3e30o7VExz6zabbZ6GgiZT2axSTWlmwuVowS7Cu0uYu9Ry3W1rXsI F9fhplwK4JEFz3MsCfdNcyb08nm3CQforX6APYH0Uu6vtfzRhg01NzW+e Xde8DCr0CKEvT4aN9Z/cQq/AseM9eyst7bYGRcjW3f+GBhiEmtbVThnBV 3nAMWJ2QCe2IIuGY/+hlQ6HIGGdBjHwRdF8XSFU6qheSZBEH12igkILGm w==; X-IronPort-AV: E=McAfee;i="6500,9779,10541"; a="313116802" X-IronPort-AV: E=Sophos;i="5.96,192,1665471600"; d="scan'208";a="313116802" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Nov 2022 22:10:03 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10541"; a="784838459" X-IronPort-AV: E=Sophos;i="5.96,192,1665471600"; d="scan'208";a="784838459" Received: from embargo.jf.intel.com ([10.165.9.183]) by fmsmga001-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Nov 2022 22:10:02 -0800 From: Yang Weijiang To: seanjc@google.com, pbonzini@redhat.com, jmattson@google.com, kvm@vger.kernel.org, linux-kernel@vger.kernel.org Cc: like.xu.linux@gmail.com, kan.liang@linux.intel.com, wei.w.wang@intel.com, weijiang.yang@intel.com, Zhang Yi Z Subject: [PATCH v2 03/15] KVM: x86: Refresh CPUID on writes to MSR_IA32_XSS Date: Thu, 24 Nov 2022 23:05:52 -0500 Message-Id: <20221125040604.5051-4-weijiang.yang@intel.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20221125040604.5051-1-weijiang.yang@intel.com> References: <20221125040604.5051-1-weijiang.yang@intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1750447312415364662?= X-GMAIL-MSGID: =?utf-8?q?1750447312415364662?= Updated CPUID.0xD.0x1, which reports the current required storage size of all features enabled via XCR0 | XSS, when the guest's XSS is modified. Note, KVM does not yet support any XSS based features, i.e. supported_xss is guaranteed to be zero at this time. Co-developed-by: Zhang Yi Z Signed-off-by: Zhang Yi Z Signed-off-by: Yang Weijiang --- arch/x86/kvm/cpuid.c | 16 +++++++++++++--- arch/x86/kvm/x86.c | 6 ++++-- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c index 6b5912578edd..85e3df6217af 100644 --- a/arch/x86/kvm/cpuid.c +++ b/arch/x86/kvm/cpuid.c @@ -272,9 +272,19 @@ static void __kvm_update_cpuid_runtime(struct kvm_vcpu *vcpu, struct kvm_cpuid_e best->ebx = xstate_required_size(vcpu->arch.xcr0, false); best = cpuid_entry2_find(entries, nent, 0xD, 1); - if (best && (cpuid_entry_has(best, X86_FEATURE_XSAVES) || - cpuid_entry_has(best, X86_FEATURE_XSAVEC))) - best->ebx = xstate_required_size(vcpu->arch.xcr0, true); + if (best) { + if (cpuid_entry_has(best, X86_FEATURE_XSAVES) || + cpuid_entry_has(best, X86_FEATURE_XSAVEC)) { + u64 xstate = vcpu->arch.xcr0 | vcpu->arch.ia32_xss; + + best->ebx = xstate_required_size(xstate, true); + } + + if (!cpuid_entry_has(best, X86_FEATURE_XSAVES)) { + best->ecx = 0; + best->edx = 0; + } + } best = __kvm_find_kvm_cpuid_features(vcpu, entries, nent); if (kvm_hlt_in_guest(vcpu->kvm) && best && diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 16726b44061b..888a153e32bc 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -3685,8 +3685,10 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info) */ if (data & ~kvm_caps.supported_xss) return 1; - vcpu->arch.ia32_xss = data; - kvm_update_cpuid_runtime(vcpu); + if (vcpu->arch.ia32_xss != data) { + vcpu->arch.ia32_xss = data; + kvm_update_cpuid_runtime(vcpu); + } break; case MSR_SMI_COUNT: if (!msr_info->host_initiated) From patchwork Fri Nov 25 04:05:53 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Yang, Weijiang" X-Patchwork-Id: 25833 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:f944:0:0:0:0:0 with SMTP id q4csp3796771wrr; Thu, 24 Nov 2022 22:11:04 -0800 (PST) X-Google-Smtp-Source: AA0mqf5Ds9jPFjDT7UJCFKeKyLqr+W4GSb6mfqlv+9m04jKlLM9w+SIEjw5h2JFIgAMLfE+glcuR X-Received: by 2002:a05:6a00:1d25:b0:562:5f71:d188 with SMTP id a37-20020a056a001d2500b005625f71d188mr18706076pfx.57.1669356664438; Thu, 24 Nov 2022 22:11:04 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669356664; cv=none; d=google.com; s=arc-20160816; b=dDMrEJYcJjgzZJNxyrci9/9zfMpQ2m9rVd/5vIx7q+IxjBoW03vY85qFbEzNvhwMSN DDm2Z/cs0P2H+A86CEmCsyrz9e1uB1xqcWg3EBDa3g6tekmtpmI/V88icY13Azfsc7ko rvJhLiGb37WJ7AWwdnaVIewLtI85nLh7FWfROeChYb9nM3jfdD2q93JHRuBjvs8biJOZ JSOCdi8Jt15QCagDnHkn6GVvcYTYFkMJuZFHYzw8JZ2c0GPNcppmrHDTFnLpURNkPtGt iR/4MTIhmTvSgIX+9uppTXoHlOaN97+TXcEt2lsyeWOaqN3d52czmV4VFdwAzC9KMh5/ lzUg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=PAGhihyabK9bHNozOUMPz6xrt8persFE+LQwxp9p8qs=; b=P+jno+Dnuh3eS5oLIPijCx+OvrH9Bl98FevAFCo7nVQUo30PWed/Hfjrcs22kZ4BIu q/ACz237ldLM31biamEhMvzFrEUYhenTzr1Te4Pf3oj2tJF10+pIf2Epi1Vsqe3DtB95 2pSYcJJk7kIBdt+fVIM49wahC5o8kOm66tL8xQ2rMesEIUcX8TgneLBWxk9g3PoDGIKB oww7x3VkAAvqdvi3q0481bEuSJLEoKycVOH99wQfri4ALgF5Sx6paA6cnjF1xpLgvGzc 3PvmF8A9lraz87Rh5fK1VyZkrieGrtLH8ES9ATxxkZIUqyIyZLVgV5LGUeUhMy9cDshN 9P6w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=Ftflqx7L; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id v18-20020a17090a521200b00212fa6d38f0si5422630pjh.120.2022.11.24.22.10.49; Thu, 24 Nov 2022 22:11:04 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=Ftflqx7L; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229739AbiKYGKT (ORCPT + 99 others); Fri, 25 Nov 2022 01:10:19 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46564 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229533AbiKYGKH (ORCPT ); Fri, 25 Nov 2022 01:10:07 -0500 Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2E9441FFB6; Thu, 24 Nov 2022 22:10:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1669356606; x=1700892606; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=qJL0YY0cEqsriSTvxd9rHPp99tCc85Xr5CQ9zZVfS+Q=; b=Ftflqx7Lln6M2vSzwNjQtkcsj7u4WZOAimoZO/wTrUDqORRYYhACsA0d 2R8xQ8z6KFXC8EAfES6/wx9fh8vcULhN+wMa4t0DremPqZeeZH8GXmY2Y xAkxKbp4mW86r8d/CKqlfF4py/FMZWOD0ssh/j4sSdiqAOuVMVcMyCjFz nN4KjvmiuVr1vssjMB5XCEyz8dYhoJQms2fhgMjlsHOJyC1Te7iQIHEjN Pip55GMYRP/36L2u9eYD2HpTtKx2ua56CQJQckv2h9pWeSsdtw5nkhWpO SnaEUfhJdPUVZ9HI5PaJjIhIgTcw+Ma6QMbFfiCowQMVUmtxA6QNEWI7t w==; X-IronPort-AV: E=McAfee;i="6500,9779,10541"; a="313116805" X-IronPort-AV: E=Sophos;i="5.96,192,1665471600"; d="scan'208";a="313116805" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Nov 2022 22:10:03 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10541"; a="784838464" X-IronPort-AV: E=Sophos;i="5.96,192,1665471600"; d="scan'208";a="784838464" Received: from embargo.jf.intel.com ([10.165.9.183]) by fmsmga001-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Nov 2022 22:10:03 -0800 From: Yang Weijiang To: seanjc@google.com, pbonzini@redhat.com, jmattson@google.com, kvm@vger.kernel.org, linux-kernel@vger.kernel.org Cc: like.xu.linux@gmail.com, kan.liang@linux.intel.com, wei.w.wang@intel.com, weijiang.yang@intel.com Subject: [PATCH v2 04/15] KVM: PMU: disable LBR handling if architectural LBR is available Date: Thu, 24 Nov 2022 23:05:53 -0500 Message-Id: <20221125040604.5051-5-weijiang.yang@intel.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20221125040604.5051-1-weijiang.yang@intel.com> References: <20221125040604.5051-1-weijiang.yang@intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1750447334067449453?= X-GMAIL-MSGID: =?utf-8?q?1750447334067449453?= From: Paolo Bonzini Traditional LBR is absent on CPU models that have architectural LBR, so disable all processing of traditional LBR MSRs if they are not there. Signed-off-by: Paolo Bonzini Signed-off-by: Yang Weijiang --- arch/x86/kvm/vmx/pmu_intel.c | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/arch/x86/kvm/vmx/pmu_intel.c b/arch/x86/kvm/vmx/pmu_intel.c index e5cec07ca8d9..905673228932 100644 --- a/arch/x86/kvm/vmx/pmu_intel.c +++ b/arch/x86/kvm/vmx/pmu_intel.c @@ -170,19 +170,23 @@ static inline struct kvm_pmc *get_fw_gp_pmc(struct kvm_pmu *pmu, u32 msr) static bool intel_pmu_is_valid_lbr_msr(struct kvm_vcpu *vcpu, u32 index) { struct x86_pmu_lbr *records = vcpu_to_lbr_records(vcpu); - bool ret = false; if (!intel_pmu_lbr_is_enabled(vcpu)) - return ret; + return false; - ret = (index == MSR_LBR_SELECT) || (index == MSR_LBR_TOS) || - (index >= records->from && index < records->from + records->nr) || - (index >= records->to && index < records->to + records->nr); + if (!guest_cpuid_has(vcpu, X86_FEATURE_ARCH_LBR) && + (index == MSR_LBR_SELECT || index == MSR_LBR_TOS)) + return true; - if (!ret && records->info) - ret = (index >= records->info && index < records->info + records->nr); + if ((index >= records->from && index < records->from + records->nr) || + (index >= records->to && index < records->to + records->nr)) + return true; - return ret; + if (records->info && index >= records->info && + index < records->info + records->nr) + return true; + + return false; } static bool intel_is_valid_msr(struct kvm_vcpu *vcpu, u32 msr) @@ -702,6 +706,9 @@ static void vmx_update_intercept_for_lbr_msrs(struct kvm_vcpu *vcpu, bool set) vmx_set_intercept_for_msr(vcpu, lbr->info + i, MSR_TYPE_RW, set); } + if (guest_cpuid_has(vcpu, X86_FEATURE_ARCH_LBR)) + return; + vmx_set_intercept_for_msr(vcpu, MSR_LBR_SELECT, MSR_TYPE_RW, set); vmx_set_intercept_for_msr(vcpu, MSR_LBR_TOS, MSR_TYPE_RW, set); } @@ -742,10 +749,12 @@ void vmx_passthrough_lbr_msrs(struct kvm_vcpu *vcpu) { struct kvm_pmu *pmu = vcpu_to_pmu(vcpu); struct lbr_desc *lbr_desc = vcpu_to_lbr_desc(vcpu); + bool lbr_enable = !guest_cpuid_has(vcpu, X86_FEATURE_ARCH_LBR) && + (vmcs_read64(GUEST_IA32_DEBUGCTL) & DEBUGCTLMSR_LBR); if (!lbr_desc->event) { vmx_disable_lbr_msrs_passthrough(vcpu); - if (vmcs_read64(GUEST_IA32_DEBUGCTL) & DEBUGCTLMSR_LBR) + if (lbr_enable) goto warn; if (test_bit(INTEL_PMC_IDX_FIXED_VLBR, pmu->pmc_in_use)) goto warn; @@ -768,7 +777,10 @@ void vmx_passthrough_lbr_msrs(struct kvm_vcpu *vcpu) static void intel_pmu_cleanup(struct kvm_vcpu *vcpu) { - if (!(vmcs_read64(GUEST_IA32_DEBUGCTL) & DEBUGCTLMSR_LBR)) + bool lbr_enable = !guest_cpuid_has(vcpu, X86_FEATURE_ARCH_LBR) && + (vmcs_read64(GUEST_IA32_DEBUGCTL) & DEBUGCTLMSR_LBR); + + if (!lbr_enable) intel_pmu_release_guest_lbr_event(vcpu); } From patchwork Fri Nov 25 04:05:54 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Yang, Weijiang" X-Patchwork-Id: 25832 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:f944:0:0:0:0:0 with SMTP id q4csp3796649wrr; Thu, 24 Nov 2022 22:10:50 -0800 (PST) X-Google-Smtp-Source: AA0mqf5xho+dAWBTOXkMSUkggtsc5J0xoq0vkSROYwrAvtJ5THXRzkTWNpSZyAI4h0y57W1P3b1L X-Received: by 2002:a17:902:d88d:b0:186:cb27:4e01 with SMTP id b13-20020a170902d88d00b00186cb274e01mr18756949plz.139.1669356650472; Thu, 24 Nov 2022 22:10:50 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669356650; cv=none; d=google.com; s=arc-20160816; b=na2P/B2UmwghKcezj/pTYlMA3Q1EobXwzR6MIMS3UR7x8jXKxaQAowOALH3Jw9p/di SVeiRpwsDZUjlW6l24xxVq0gADvTq7fuzCiJqDD5bzfKnBd3Vsj8AszVNqKBgOmeECyF LYfk7mAyf0dMSwhZyjqARxqGVK1jfUsqcT7hYuuVgFL6tclf+3dsGcHlkcAfq8gDL59+ 9cYnY1gbUEpI4tRAFVReY5P7OQPT7HFOfvGHIfnETgfCjWRkLtG8np2TQ7T2GX5yG0OH +BlKHzdEzef2oQ+z25cC0f0oPpKgrNwcjt04en+5J0Po4ZvLe9XKNInAXWnH8C2PcWbw vt+A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=B8iF9ytd6JiIYyYvCw74MlnzszfXNUHvDSjccixGJWQ=; b=K32ZHBq9RB9s820RV0+fk5jovcAvZsA92DIobLRq7MP0O4hFrmMh8Tn3LMyEZodJJA dARkN0YEOWo7lymHR7nyOFkM/yE5RcNKUMZQRyn+xYXW5gJ5RcVP5KPaqrV5Bg9YedPX UnVuDUnqYUoQpPjXIMGrq3H4JzJJqP/pfTxAh3R8PYdBZPiXt6RmUDuvQwX6Zd/zJLNk CEc1etY2syY486qWXUq6+sMcYfA7tXWQ/vjOFW7QrmzaNoLHyaiPVeDbRVQv9MSaIgfj 25uge4TYd9r05GPKHlQt46SXlKq9sd/DX8I0kJtHRKHP5ZFBKxqw0xOqo9aKlyiP4+aF Ywig== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=NfCyRjja; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id d30-20020a634f1e000000b0046f729604fesi3191956pgb.170.2022.11.24.22.10.37; Thu, 24 Nov 2022 22:10:50 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=NfCyRjja; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229683AbiKYGKP (ORCPT + 99 others); Fri, 25 Nov 2022 01:10:15 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46568 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229626AbiKYGKH (ORCPT ); Fri, 25 Nov 2022 01:10:07 -0500 Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6E31821817; Thu, 24 Nov 2022 22:10:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1669356606; x=1700892606; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=sRn8LM+gX2zunJO+2ncLhKelO3DkPaFu9w4V7AXAhmA=; b=NfCyRjja37H1QZvvDd6DR6YKRRtGeGU/a03Xmg6eu1NYwd0Bmj7Owv+S 1Xcg4Dql/nMRnqTVPcr9nFE962CsLIjJWStbJGAh1Wwi0W26i+wHltw/v QkNAS37cQnmAFqF4/9gP9n7YeyRl1Vdc3FL+wn0fVk306lOOLsWCOYyJ8 lpyWL/IT8IPTUXkibCKOJUJ1ziwX/dFm3ulUoYNHACGWh/tiEDcNoL9Aw TxC9s25sxc2a+kO0RVdrvH3rF9PRg9qZvcikp1EpdEAy/GT1adjDQ5/rA Cka+ifdvmNcGLFWvO/Ysma27kzQI3p+DWwaj+R3Iq005SpJRVfyn6j6PK Q==; X-IronPort-AV: E=McAfee;i="6500,9779,10541"; a="313116808" X-IronPort-AV: E=Sophos;i="5.96,192,1665471600"; d="scan'208";a="313116808" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Nov 2022 22:10:04 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10541"; a="784838469" X-IronPort-AV: E=Sophos;i="5.96,192,1665471600"; d="scan'208";a="784838469" Received: from embargo.jf.intel.com ([10.165.9.183]) by fmsmga001-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Nov 2022 22:10:03 -0800 From: Yang Weijiang To: seanjc@google.com, pbonzini@redhat.com, jmattson@google.com, kvm@vger.kernel.org, linux-kernel@vger.kernel.org Cc: like.xu.linux@gmail.com, kan.liang@linux.intel.com, wei.w.wang@intel.com, weijiang.yang@intel.com, Like Xu Subject: [PATCH v2 05/15] KVM: vmx/pmu: Emulate MSR_ARCH_LBR_DEPTH for guest Arch LBR Date: Thu, 24 Nov 2022 23:05:54 -0500 Message-Id: <20221125040604.5051-6-weijiang.yang@intel.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20221125040604.5051-1-weijiang.yang@intel.com> References: <20221125040604.5051-1-weijiang.yang@intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1750447319046519985?= X-GMAIL-MSGID: =?utf-8?q?1750447319046519985?= From: Like Xu The number of Arch LBR entries available is determined by the value in host MSR_ARCH_LBR_DEPTH.DEPTH. The supported LBR depth values are enumerated in CPUID.(EAX=01CH, ECX=0):EAX[7:0]. For each bit "n" set in this field, the MSR_ARCH_LBR_DEPTH.DEPTH value of "8*(n+1)" is supported. In the first generation of Arch LBR, max entry size is 32, host configures the max size and guest always honors the setting. Write to MSR_ARCH_LBR_DEPTH has side-effect, all LBR entries are reset to 0. Kernel PMU driver can leverage this effect to do fask reset to LBR record MSRs. KVM allows guest to achieve it when Arch LBR records MSRs are passed through to the guest. Signed-off-by: Like Xu Co-developed-by: Yang Weijiang Signed-off-by: Yang Weijiang --- arch/x86/include/asm/kvm_host.h | 3 ++ arch/x86/kvm/vmx/pmu_intel.c | 58 +++++++++++++++++++++++++++++++-- 2 files changed, 58 insertions(+), 3 deletions(-) diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h index 70af7240a1d5..2dba2fdd9cdc 100644 --- a/arch/x86/include/asm/kvm_host.h +++ b/arch/x86/include/asm/kvm_host.h @@ -571,6 +571,9 @@ struct kvm_pmu { * redundant check before cleanup if guest don't use vPMU at all. */ u8 event_count; + + /* Guest arch lbr depth supported by KVM. */ + u64 kvm_arch_lbr_depth; }; struct kvm_pmu_ops; diff --git a/arch/x86/kvm/vmx/pmu_intel.c b/arch/x86/kvm/vmx/pmu_intel.c index 905673228932..0c78cb4b72be 100644 --- a/arch/x86/kvm/vmx/pmu_intel.c +++ b/arch/x86/kvm/vmx/pmu_intel.c @@ -178,6 +178,10 @@ static bool intel_pmu_is_valid_lbr_msr(struct kvm_vcpu *vcpu, u32 index) (index == MSR_LBR_SELECT || index == MSR_LBR_TOS)) return true; + if (index == MSR_ARCH_LBR_DEPTH) + return kvm_cpu_cap_has(X86_FEATURE_ARCH_LBR) && + guest_cpuid_has(vcpu, X86_FEATURE_ARCH_LBR); + if ((index >= records->from && index < records->from + records->nr) || (index >= records->to && index < records->to + records->nr)) return true; @@ -345,6 +349,7 @@ static int intel_pmu_get_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info) { struct kvm_pmu *pmu = vcpu_to_pmu(vcpu); struct kvm_pmc *pmc; + struct lbr_desc *lbr_desc = vcpu_to_lbr_desc(vcpu); u32 msr = msr_info->index; switch (msr) { @@ -369,6 +374,9 @@ static int intel_pmu_get_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info) case MSR_PEBS_DATA_CFG: msr_info->data = pmu->pebs_data_cfg; return 0; + case MSR_ARCH_LBR_DEPTH: + msr_info->data = lbr_desc->records.nr; + return 0; default: if ((pmc = get_gp_pmc(pmu, msr, MSR_IA32_PERFCTR0)) || (pmc = get_gp_pmc(pmu, msr, MSR_IA32_PMC0))) { @@ -395,6 +403,7 @@ static int intel_pmu_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info) { struct kvm_pmu *pmu = vcpu_to_pmu(vcpu); struct kvm_pmc *pmc; + struct lbr_desc *lbr_desc = vcpu_to_lbr_desc(vcpu); u32 msr = msr_info->index; u64 data = msr_info->data; u64 reserved_bits, diff; @@ -456,6 +465,24 @@ static int intel_pmu_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info) return 0; } break; + case MSR_ARCH_LBR_DEPTH: + if (!pmu->kvm_arch_lbr_depth && !msr_info->host_initiated) + return 1; + /* + * When guest/host depth are different, the handling would be tricky, + * so only max depth is supported for both host and guest. + */ + if (data != pmu->kvm_arch_lbr_depth) + return 1; + + lbr_desc->records.nr = data; + /* + * Writing depth MSR from guest could either setting the + * MSR or resetting the LBR records with the side-effect. + */ + if (kvm_cpu_cap_has(X86_FEATURE_ARCH_LBR)) + wrmsrl(MSR_ARCH_LBR_DEPTH, lbr_desc->records.nr); + return 0; default: if ((pmc = get_gp_pmc(pmu, msr, MSR_IA32_PERFCTR0)) || (pmc = get_gp_pmc(pmu, msr, MSR_IA32_PMC0))) { @@ -506,6 +533,32 @@ static void setup_fixed_pmc_eventsel(struct kvm_pmu *pmu) } } +static bool cpuid_enable_lbr(struct kvm_vcpu *vcpu) +{ + struct kvm_pmu *pmu = vcpu_to_pmu(vcpu); + struct kvm_cpuid_entry2 *entry; + int depth_bit; + + if (!kvm_cpu_cap_has(X86_FEATURE_ARCH_LBR)) + return !static_cpu_has(X86_FEATURE_ARCH_LBR) && + cpuid_model_is_consistent(vcpu); + + pmu->kvm_arch_lbr_depth = 0; + if (!guest_cpuid_has(vcpu, X86_FEATURE_ARCH_LBR)) + return false; + + entry = kvm_find_cpuid_entry(vcpu, 0x1C); + if (!entry) + return false; + + depth_bit = fls(cpuid_eax(0x1C) & 0xff); + if ((entry->eax & 0xff) != (1 << (depth_bit - 1))) + return false; + + pmu->kvm_arch_lbr_depth = depth_bit * 8; + return true; +} + static void intel_pmu_refresh(struct kvm_vcpu *vcpu) { struct kvm_pmu *pmu = vcpu_to_pmu(vcpu); @@ -589,9 +642,7 @@ static void intel_pmu_refresh(struct kvm_vcpu *vcpu) bitmap_set(pmu->all_valid_pmc_idx, INTEL_PMC_MAX_GENERIC, pmu->nr_arch_fixed_counters); - perf_capabilities = vcpu_get_perf_capabilities(vcpu); - if (cpuid_model_is_consistent(vcpu) && - (perf_capabilities & PMU_CAP_LBR_FMT)) + if (cpuid_enable_lbr(vcpu)) x86_perf_get_lbr(&lbr_desc->records); else lbr_desc->records.nr = 0; @@ -599,6 +650,7 @@ static void intel_pmu_refresh(struct kvm_vcpu *vcpu) if (lbr_desc->records.nr) bitmap_set(pmu->all_valid_pmc_idx, INTEL_PMC_IDX_FIXED_VLBR, 1); + perf_capabilities = vcpu_get_perf_capabilities(vcpu); if (perf_capabilities & PERF_CAP_PEBS_FORMAT) { if (perf_capabilities & PERF_CAP_PEBS_BASELINE) { pmu->pebs_enable_mask = counter_mask; From patchwork Fri Nov 25 04:05:55 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Yang, Weijiang" X-Patchwork-Id: 25836 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:f944:0:0:0:0:0 with SMTP id q4csp3796976wrr; Thu, 24 Nov 2022 22:11:30 -0800 (PST) X-Google-Smtp-Source: AA0mqf4isq/x3z+8ynGtIHKr781BpruxinrH+vWZdhXm0D+uYxD9BsleN6mFNeBV01kL5Cy/u7Mm X-Received: by 2002:a63:f53:0:b0:476:e093:b068 with SMTP id 19-20020a630f53000000b00476e093b068mr14081544pgp.325.1669356690360; Thu, 24 Nov 2022 22:11:30 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669356690; cv=none; d=google.com; s=arc-20160816; b=fsXH2Bp8xd5XaOjoQZi1K1juL9dVgEEbgE1NdO9uwSkRkie5NQCHRUt+o2oq8lWm3Y 0Bi0zpeXx1qhwzAWmuR4aSwvvtm4qY5gKkUqHFFF2akI7B2Ekf8mtDkpbBP9+/zI0C68 Usbkn6oHBEBgLBHxgYynjvH+WUTledTRGcGe5F4bc+xUgraK69InW+P72zussOQiqNZt emXCaKNXLT+iFmzjdkzBahNP1YtITi31RUoNwwyYKwMdO+hqNM791JuEQaNfSY/JFnuk jPMKT0/deOks9Pk4pTjHPvlKlSP/MMJAl3c5b05I+aYu2YJd+Cgt4z0hKWPH5ZHYB9/5 EiBw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=/gxYNqlly5CyZX0pDvwhRZm/tDdsASWs4+lWJBw8ftY=; b=FgeGXTCspuKGqFPAErDL+rBoHedmGLy4uhgTi743alk8zdCL783ssdden9w0tXJ0B/ uuGD2fsybPAVj/8f3N6RciTIh84f79cJp0ZvYX3sTZZGNVXEhzdmzHcn9pu4K6J1H6ee 71yFCkt/bGa2h+drnRdkGL0UD9o8m12opeD3M0Y2nApiF7DY/X1++6deJaRPhEAwBXM0 I5r4+rhhFidHHLk2R2KbHRktSTRyBbbcLoC/mWxWgfjpYMGOFvxBdd+VnFIDW3YZ7RuJ Cub4/6s4JTwBOamwB4d4ZBkXot9XkmL/EHXYrIH7B6V56fbx4TARfYSSiF+dMY/ZIyOj 2M0w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=LTrNjthr; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id ot17-20020a17090b3b5100b00213b3144671si7559558pjb.0.2022.11.24.22.11.17; Thu, 24 Nov 2022 22:11:30 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=LTrNjthr; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229770AbiKYGK2 (ORCPT + 99 others); Fri, 25 Nov 2022 01:10:28 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46670 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229685AbiKYGKL (ORCPT ); Fri, 25 Nov 2022 01:10:11 -0500 Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9778321835; Thu, 24 Nov 2022 22:10:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1669356609; x=1700892609; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=2E8o88X70Bz2N9wjYZ3YWXzwXXJYBrtBan5h7P/+Xgs=; b=LTrNjthrZw1HAQAFPi8UZg45fAmVSdXmzGnRzsX5YGdbQUdfDUfu+bLW NFDTIA5Y9rrntV+OJgX5x00Qusdd5+attWtvPenSEkBH+rtehSSwv14wk CLzaaqzcg8/2srzcMMwX5D7dIqN79Znczu/11GOD+Irj81FyaEETXMxm+ AICXoAtfxgEhZ7Y2IGJ9XNRzt8pthwECAogLklBPRyK5pFKjpXJIk4ewW PM0eE5N8L83BC1YGocY1sqTqycXZzpXWebtXdBH+lNH+gHYzP00Jf2V/E 7lkNnRan/RbATGff3dPxq6x+XCpJiGCI4FaXq0VuEKQRS6reE4SItPIaO Q==; X-IronPort-AV: E=McAfee;i="6500,9779,10541"; a="313116812" X-IronPort-AV: E=Sophos;i="5.96,192,1665471600"; d="scan'208";a="313116812" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Nov 2022 22:10:05 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10541"; a="784838478" X-IronPort-AV: E=Sophos;i="5.96,192,1665471600"; d="scan'208";a="784838478" Received: from embargo.jf.intel.com ([10.165.9.183]) by fmsmga001-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Nov 2022 22:10:04 -0800 From: Yang Weijiang To: seanjc@google.com, pbonzini@redhat.com, jmattson@google.com, kvm@vger.kernel.org, linux-kernel@vger.kernel.org Cc: like.xu.linux@gmail.com, kan.liang@linux.intel.com, wei.w.wang@intel.com, weijiang.yang@intel.com, Like Xu Subject: [PATCH v2 06/15] KVM: vmx/pmu: Emulate MSR_ARCH_LBR_CTL for guest Arch LBR Date: Thu, 24 Nov 2022 23:05:55 -0500 Message-Id: <20221125040604.5051-7-weijiang.yang@intel.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20221125040604.5051-1-weijiang.yang@intel.com> References: <20221125040604.5051-1-weijiang.yang@intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1750447360593090057?= X-GMAIL-MSGID: =?utf-8?q?1750447360593090057?= From: Paolo Bonzini Arch LBR is enabled by setting MSR_ARCH_LBR_CTL.LBREn to 1. A new guest state field named "Guest IA32_LBR_CTL" is added to enhance guest LBR usage. When guest Arch LBR is enabled, a guest LBR event will be created like the model-specific LBR does. Clear guest LBR enable bit on host PMI handling so guest can see expected config. On processors that support Arch LBR, MSR_IA32_DEBUGCTLMSR[bit 0] has no meaning. It can be written to 0 or 1, but reads will always return 0. Like IA32_DEBUGCTL, IA32_ARCH_LBR_CTL msr is also preserved on INIT. Regardless of the Arch LBR or legacy LBR, when the LBR_EN bit 0 of the corresponding control MSR is set to 1, LBR recording will be enabled. Signed-off-by: Like Xu Co-developed-by: Like Xu Signed-off-by: Paolo Bonzini Co-developed-by: Yang Weijiang Signed-off-by: Yang Weijiang --- arch/x86/events/intel/lbr.c | 2 - arch/x86/include/asm/msr-index.h | 1 + arch/x86/include/asm/vmx.h | 2 + arch/x86/kvm/vmx/pmu_intel.c | 67 ++++++++++++++++++++++++++++---- arch/x86/kvm/vmx/vmx.c | 7 ++++ 5 files changed, 69 insertions(+), 10 deletions(-) diff --git a/arch/x86/events/intel/lbr.c b/arch/x86/events/intel/lbr.c index e7caabfa1377..ef589984b907 100644 --- a/arch/x86/events/intel/lbr.c +++ b/arch/x86/events/intel/lbr.c @@ -100,8 +100,6 @@ ARCH_LBR_RETURN |\ ARCH_LBR_OTHER_BRANCH) -#define ARCH_LBR_CTL_MASK 0x7f000e - static void intel_pmu_lbr_filter(struct cpu_hw_events *cpuc); static __always_inline bool is_lbr_call_stack_bit_set(u64 config) diff --git a/arch/x86/include/asm/msr-index.h b/arch/x86/include/asm/msr-index.h index 10ac52705892..2a9eaab2fdb1 100644 --- a/arch/x86/include/asm/msr-index.h +++ b/arch/x86/include/asm/msr-index.h @@ -220,6 +220,7 @@ #define LBR_INFO_BR_TYPE (0xfull << LBR_INFO_BR_TYPE_OFFSET) #define MSR_ARCH_LBR_CTL 0x000014ce +#define ARCH_LBR_CTL_MASK 0x7f000e #define ARCH_LBR_CTL_LBREN BIT(0) #define ARCH_LBR_CTL_CPL_OFFSET 1 #define ARCH_LBR_CTL_CPL (0x3ull << ARCH_LBR_CTL_CPL_OFFSET) diff --git a/arch/x86/include/asm/vmx.h b/arch/x86/include/asm/vmx.h index 498dc600bd5c..8502c068202c 100644 --- a/arch/x86/include/asm/vmx.h +++ b/arch/x86/include/asm/vmx.h @@ -257,6 +257,8 @@ enum vmcs_field { GUEST_BNDCFGS_HIGH = 0x00002813, GUEST_IA32_RTIT_CTL = 0x00002814, GUEST_IA32_RTIT_CTL_HIGH = 0x00002815, + GUEST_IA32_LBR_CTL = 0x00002816, + GUEST_IA32_LBR_CTL_HIGH = 0x00002817, HOST_IA32_PAT = 0x00002c00, HOST_IA32_PAT_HIGH = 0x00002c01, HOST_IA32_EFER = 0x00002c02, diff --git a/arch/x86/kvm/vmx/pmu_intel.c b/arch/x86/kvm/vmx/pmu_intel.c index 0c78cb4b72be..b57944d5e7d8 100644 --- a/arch/x86/kvm/vmx/pmu_intel.c +++ b/arch/x86/kvm/vmx/pmu_intel.c @@ -19,6 +19,7 @@ #include "pmu.h" #define MSR_PMC_FULL_WIDTH_BIT (MSR_IA32_PMC0 - MSR_IA32_PERFCTR0) +#define KVM_ARCH_LBR_CTL_MASK (ARCH_LBR_CTL_MASK | ARCH_LBR_CTL_LBREN) static struct kvm_event_hw_type_mapping intel_arch_events[] = { [0] = { 0x3c, 0x00, PERF_COUNT_HW_CPU_CYCLES }, @@ -178,7 +179,7 @@ static bool intel_pmu_is_valid_lbr_msr(struct kvm_vcpu *vcpu, u32 index) (index == MSR_LBR_SELECT || index == MSR_LBR_TOS)) return true; - if (index == MSR_ARCH_LBR_DEPTH) + if (index == MSR_ARCH_LBR_DEPTH || index == MSR_ARCH_LBR_CTL) return kvm_cpu_cap_has(X86_FEATURE_ARCH_LBR) && guest_cpuid_has(vcpu, X86_FEATURE_ARCH_LBR); @@ -345,6 +346,30 @@ static bool intel_pmu_handle_lbr_msrs_access(struct kvm_vcpu *vcpu, return true; } +static bool arch_lbr_ctl_is_valid(struct kvm_vcpu *vcpu, u64 ctl) +{ + struct kvm_cpuid_entry2 *entry; + struct kvm_pmu *pmu = vcpu_to_pmu(vcpu); + + if (!pmu->kvm_arch_lbr_depth) + return false; + + if (ctl & ~KVM_ARCH_LBR_CTL_MASK) + return false; + + entry = kvm_find_cpuid_entry(vcpu, 0x1c); + if (!entry) + return false; + + if (!(entry->ebx & BIT(0)) && (ctl & ARCH_LBR_CTL_CPL)) + return false; + if (!(entry->ebx & BIT(2)) && (ctl & ARCH_LBR_CTL_STACK)) + return false; + if (!(entry->ebx & BIT(1)) && (ctl & ARCH_LBR_CTL_FILTER)) + return false; + return true; +} + static int intel_pmu_get_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info) { struct kvm_pmu *pmu = vcpu_to_pmu(vcpu); @@ -377,6 +402,14 @@ static int intel_pmu_get_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info) case MSR_ARCH_LBR_DEPTH: msr_info->data = lbr_desc->records.nr; return 0; + case MSR_ARCH_LBR_CTL: + if (!kvm_cpu_cap_has(X86_FEATURE_ARCH_LBR)) { + WARN_ON_ONCE(!msr_info->host_initiated); + msr_info->data = 0; + } else { + msr_info->data = vmcs_read64(GUEST_IA32_LBR_CTL); + } + return 0; default: if ((pmc = get_gp_pmc(pmu, msr, MSR_IA32_PERFCTR0)) || (pmc = get_gp_pmc(pmu, msr, MSR_IA32_PMC0))) { @@ -483,6 +516,18 @@ static int intel_pmu_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info) if (kvm_cpu_cap_has(X86_FEATURE_ARCH_LBR)) wrmsrl(MSR_ARCH_LBR_DEPTH, lbr_desc->records.nr); return 0; + case MSR_ARCH_LBR_CTL: + if (msr_info->host_initiated && !pmu->kvm_arch_lbr_depth) + return data != 0; + + if (!arch_lbr_ctl_is_valid(vcpu, data)) + break; + + vmcs_write64(GUEST_IA32_LBR_CTL, data); + if (intel_pmu_lbr_is_enabled(vcpu) && !lbr_desc->event && + (data & ARCH_LBR_CTL_LBREN)) + intel_pmu_create_guest_lbr_event(vcpu); + return 0; default: if ((pmc = get_gp_pmc(pmu, msr, MSR_IA32_PERFCTR0)) || (pmc = get_gp_pmc(pmu, msr, MSR_IA32_PMC0))) { @@ -727,12 +772,16 @@ static void intel_pmu_reset(struct kvm_vcpu *vcpu) */ static void intel_pmu_legacy_freezing_lbrs_on_pmi(struct kvm_vcpu *vcpu) { - u64 data = vmcs_read64(GUEST_IA32_DEBUGCTL); + u32 lbr_ctl_field = GUEST_IA32_DEBUGCTL; - if (data & DEBUGCTLMSR_FREEZE_LBRS_ON_PMI) { - data &= ~DEBUGCTLMSR_LBR; - vmcs_write64(GUEST_IA32_DEBUGCTL, data); - } + if (!(vmcs_read64(GUEST_IA32_DEBUGCTL) & DEBUGCTLMSR_FREEZE_LBRS_ON_PMI)) + return; + + if (kvm_cpu_cap_has(X86_FEATURE_ARCH_LBR) && + guest_cpuid_has(vcpu, X86_FEATURE_ARCH_LBR)) + lbr_ctl_field = GUEST_IA32_LBR_CTL; + + vmcs_write64(lbr_ctl_field, vmcs_read64(lbr_ctl_field) & ~0x1ULL); } static void intel_pmu_deliver_pmi(struct kvm_vcpu *vcpu) @@ -801,7 +850,8 @@ void vmx_passthrough_lbr_msrs(struct kvm_vcpu *vcpu) { struct kvm_pmu *pmu = vcpu_to_pmu(vcpu); struct lbr_desc *lbr_desc = vcpu_to_lbr_desc(vcpu); - bool lbr_enable = !guest_cpuid_has(vcpu, X86_FEATURE_ARCH_LBR) && + bool lbr_enable = guest_cpuid_has(vcpu, X86_FEATURE_ARCH_LBR) ? + (vmcs_read64(GUEST_IA32_LBR_CTL) & ARCH_LBR_CTL_LBREN) : (vmcs_read64(GUEST_IA32_DEBUGCTL) & DEBUGCTLMSR_LBR); if (!lbr_desc->event) { @@ -829,7 +879,8 @@ void vmx_passthrough_lbr_msrs(struct kvm_vcpu *vcpu) static void intel_pmu_cleanup(struct kvm_vcpu *vcpu) { - bool lbr_enable = !guest_cpuid_has(vcpu, X86_FEATURE_ARCH_LBR) && + bool lbr_enable = guest_cpuid_has(vcpu, X86_FEATURE_ARCH_LBR) ? + (vmcs_read64(GUEST_IA32_LBR_CTL) & ARCH_LBR_CTL_LBREN) : (vmcs_read64(GUEST_IA32_DEBUGCTL) & DEBUGCTLMSR_LBR); if (!lbr_enable) diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c index cea8c07f5229..1ae2efc29546 100644 --- a/arch/x86/kvm/vmx/vmx.c +++ b/arch/x86/kvm/vmx/vmx.c @@ -2120,6 +2120,13 @@ static int vmx_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info) VM_EXIT_SAVE_DEBUG_CONTROLS) get_vmcs12(vcpu)->guest_ia32_debugctl = data; + /* + * For Arch LBR, IA32_DEBUGCTL[bit 0] has no meaning. + * It can be written to 0 or 1, but reads will always return 0. + */ + if (guest_cpuid_has(vcpu, X86_FEATURE_ARCH_LBR)) + data &= ~DEBUGCTLMSR_LBR; + vmcs_write64(GUEST_IA32_DEBUGCTL, data); if (intel_pmu_lbr_is_enabled(vcpu) && !to_vmx(vcpu)->lbr_desc.event && (data & DEBUGCTLMSR_LBR)) From patchwork Fri Nov 25 04:05:56 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Yang, Weijiang" X-Patchwork-Id: 25834 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:f944:0:0:0:0:0 with SMTP id q4csp3796816wrr; Thu, 24 Nov 2022 22:11:11 -0800 (PST) X-Google-Smtp-Source: AA0mqf4rQmjWzzx64CqXESef01g2tkLVl1vk76g8VObKYXSQAYVfzvkUaG+BWF2/Ms1p2H7cJvPP X-Received: by 2002:a17:90b:394e:b0:20a:6106:a283 with SMTP id oe14-20020a17090b394e00b0020a6106a283mr17509580pjb.107.1669356671011; Thu, 24 Nov 2022 22:11:11 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669356671; cv=none; d=google.com; s=arc-20160816; b=CvxC2zs00w2zWKr6XqrKbSjTF8J3fhnKL310y6o7lAkTy2c3oM1uSEH0EdSRpB9pC8 Lpcb8Qc7orIPTrBi+op96c9rIatFzl8okJ73MdrSHBQ9Ud5ctIEsF7+SyaSptT9H3FxZ I1hnPWAVdeM1aW7kzk+fBL74SBRBJ23x2ZGXVEu3se5ecktsvjwiZ6dvhR3mZ2vwUGgg HJpRwaHMIlMTGqpg5ro7FZJ0u7dmaS40mprz08e7U874PToM6yEDUYm5IDkvbURzaHA3 q6hwuYcLffatQRm967+Oad/xRdW8X8aJpuFUCAJbba4T2LdoXI75TUtOhBnB0yc6oGVD XNDQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=SAj1IlFiQBAugkqGh/ARzpmR4MUe/h0omQdpnKbk9KU=; b=gqkJI5W1jtLzadhF50DXsugKPK0LI1Uj5HwqnXh/kmw49aWDUCG3AP8Km92wtz6458 dvU7IOfpJqNh52dcDLAak8Dd9RTyKTdX4zytSjRzECedEGo7zrv3FK+AKgA8AHsuY+HN lWVvrxkK/dXkZR+D7BmYhR5y/7AoFUSr0P6foUj13Vtjn0nrK0jRYFG3XDST3h0v1sNv FJMcMc95cHhFdnQ88r3UJ77ok0EvSVi5wfwfLjc+DFyrPACPYxDLc4nAtivG/n402Mic ih1CtIBFrh4+nM6uV8VPozlY00zZKKWx/xAIIvwaUnQnZuu4+rMngjzs88K+VJ0Ln4SQ SYxA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=IU8LTg3z; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id eb8-20020a056a004c8800b005698856bb2bsi2717172pfb.330.2022.11.24.22.10.57; Thu, 24 Nov 2022 22:11:10 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=IU8LTg3z; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229612AbiKYGKX (ORCPT + 99 others); Fri, 25 Nov 2022 01:10:23 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46644 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229552AbiKYGKK (ORCPT ); Fri, 25 Nov 2022 01:10:10 -0500 Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 982EA218BD; Thu, 24 Nov 2022 22:10:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1669356609; x=1700892609; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=M4kb7p5+X7+i5pIzuPmnOCjVzb90Vg8h9Ud5SArkn+Y=; b=IU8LTg3zcksBkIC8YWLnK6Kt2j4JHgqpRiD1zMu2DuGoCgQ0U8l3Ch2N r3R4iYcMLCJ7UPsbQDthZMTCuw7ObWO9ADsWccjnH90BlMhSIoqNhtps+ N7L3l13DMbB7w79++tvMgSHJW0uGlm4tPPpIArsiT0jOy/sl7ogEGaSl+ F74gh2dx2RPCwS1MzRvTNAuBdKbeX69tPsd46OmMwrspLfeEGBLc813nG RrPbvD71SOIHKzKd6ELzb/kwNRbMNNZzRHLU5mqGwGynfuH2RPJtVSTS9 aBOjavzNF0nFfJA+2YQ0pKos93pcBwKNrTT1KSE81rbUL0CIeIscbEgMf Q==; X-IronPort-AV: E=McAfee;i="6500,9779,10541"; a="313116816" X-IronPort-AV: E=Sophos;i="5.96,192,1665471600"; d="scan'208";a="313116816" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Nov 2022 22:10:05 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10541"; a="784838482" X-IronPort-AV: E=Sophos;i="5.96,192,1665471600"; d="scan'208";a="784838482" Received: from embargo.jf.intel.com ([10.165.9.183]) by fmsmga001-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Nov 2022 22:10:04 -0800 From: Yang Weijiang To: seanjc@google.com, pbonzini@redhat.com, jmattson@google.com, kvm@vger.kernel.org, linux-kernel@vger.kernel.org Cc: like.xu.linux@gmail.com, kan.liang@linux.intel.com, wei.w.wang@intel.com, weijiang.yang@intel.com Subject: [PATCH v2 07/15] KVM: VMX: Support passthrough of architectural LBRs Date: Thu, 24 Nov 2022 23:05:56 -0500 Message-Id: <20221125040604.5051-8-weijiang.yang@intel.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20221125040604.5051-1-weijiang.yang@intel.com> References: <20221125040604.5051-1-weijiang.yang@intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1750447340996297791?= X-GMAIL-MSGID: =?utf-8?q?1750447340996297791?= From: Paolo Bonzini MSR_ARCH_LBR_* can be pointed to by records->from, records->to and records->info, so list them in is_valid_passthrough_msr. Signed-off-by: Paolo Bonzini Signed-off-by: Yang Weijiang --- arch/x86/kvm/vmx/vmx.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c index 1ae2efc29546..9bd52ad3bbf4 100644 --- a/arch/x86/kvm/vmx/vmx.c +++ b/arch/x86/kvm/vmx/vmx.c @@ -638,6 +638,9 @@ static bool is_valid_passthrough_msr(u32 msr) case MSR_LBR_NHM_TO ... MSR_LBR_NHM_TO + 31: case MSR_LBR_CORE_FROM ... MSR_LBR_CORE_FROM + 8: case MSR_LBR_CORE_TO ... MSR_LBR_CORE_TO + 8: + case MSR_ARCH_LBR_FROM_0 ... MSR_ARCH_LBR_FROM_0 + 31: + case MSR_ARCH_LBR_TO_0 ... MSR_ARCH_LBR_TO_0 + 31: + case MSR_ARCH_LBR_INFO_0 ... MSR_ARCH_LBR_INFO_0 + 31: /* LBR MSRs. These are handled in vmx_update_intercept_for_lbr_msrs() */ return true; } From patchwork Fri Nov 25 04:05:57 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Yang, Weijiang" X-Patchwork-Id: 25835 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:f944:0:0:0:0:0 with SMTP id q4csp3796847wrr; Thu, 24 Nov 2022 22:11:16 -0800 (PST) X-Google-Smtp-Source: AA0mqf4BXSABbeEJUBdUJNX2K8arZy15sgiR+W6K5gxd+LCX2C7AxdNNdpLGWLXHf9KM9FzRbzn7 X-Received: by 2002:a62:16d3:0:b0:562:c1d4:e287 with SMTP id 202-20020a6216d3000000b00562c1d4e287mr16846664pfw.80.1669356676084; Thu, 24 Nov 2022 22:11:16 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669356676; cv=none; d=google.com; s=arc-20160816; b=DtxR+y+IvlpUapqRi1EX5VVLYL+TYPR1pAUl6qQMM44YvFA2Z0L8iWVK7gjsPrgufu qcEN6ncZ4kKxFGyZzxtFam7rPE0OBUonxVzJxDPD/5aAeFT3aGCb03yio1WK0JdNgKCh BitFY2DR+PBS5UxPm9/AOgKVdqADWoPDQh80EZNd/5Dm7pjvwfYAuvnnphtUSGsBYI4j OaPs/FEmwNJNq7SQk5djYLMz1LLzF6tiXQooVmfTmxbuSUC/lXWL4eQspP6InbJzyzKS eiVAi5sMAbcyqwto3ZM5QqjaOhHPpWlTBDodW1LGcd8MugAjyigpyNSYzWvEwI/vGv9K +5xw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=250Psnjf8knNBTjuQuYPP65hzx7sXcXWNZdZTKIffU4=; b=qZ0nWl6BLz5RFtIhrMAYHhNkXC5kfvR9JUwqU0s+zNXt+n0YE+Up4smkfkS0oPQh/o nk0Vu0Dpzy/rLIqlCPI7gONWU4KpqJFiJOH1E3KYD7H+Z4WxGitdU0Z1rVzlZnu3eVM3 3B4n5BUjhRHCfG+Qj7OjBmKOizXN/RXwA4aqsU1JRi3KHcmtg1/3qbGvdp0p4ybrQyQz ynXM8aNypbFioAX14/B4+RNN8q9eBwu/nWHKJ1IJYWuClUXv8mS40DYzfes21VW7jMPR APnONbSnNz53HmghF5vtC9fYdFri1p3q1GwbLAL45TNOLjicJHvXt6Li2YDcN20Zni8i Aaig== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=Q7NjNOMU; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id i7-20020a17090332c700b00186de874df8si3218482plr.442.2022.11.24.22.11.03; Thu, 24 Nov 2022 22:11:16 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=Q7NjNOMU; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229762AbiKYGK0 (ORCPT + 99 others); Fri, 25 Nov 2022 01:10:26 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46668 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229682AbiKYGKK (ORCPT ); Fri, 25 Nov 2022 01:10:10 -0500 Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9837321E0A; Thu, 24 Nov 2022 22:10:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1669356609; x=1700892609; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=9dgyRevU02/WAQF4wQb17DisD5XuSJGZ1MCakKBODE8=; b=Q7NjNOMU/YLxFz32Hs29P0c9gp5MrXGW8SjLMYveXkX/J/n8RxZotiS8 xfh0zLwdkHbPNh7jAbJxavU/8mN5COEDLA7tDTuuTivgjuNWByry6zj7Y 70hcyGS7v/+Ysx+hA2GMOGPHqQ/zx28yUESc+n+N6QC+BQueFNi26Yo1B 1kV1EfaJnjSVHozjHDeVe1/BPLVmChobvPuoVZEBM/jSrBxsYJJWrrodk LuWkdYLYqR3GCTZdbXkQBFfk+7o0s8EjY9hKVhLjiUP5swohlE7p9dIn2 gBe7bA2/b90CJs6JDV9xgB7rIPQannsmEYdmTVY4PpXDnKAZUZ8rzlyKu A==; X-IronPort-AV: E=McAfee;i="6500,9779,10541"; a="313116819" X-IronPort-AV: E=Sophos;i="5.96,192,1665471600"; d="scan'208";a="313116819" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Nov 2022 22:10:06 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10541"; a="784838485" X-IronPort-AV: E=Sophos;i="5.96,192,1665471600"; d="scan'208";a="784838485" Received: from embargo.jf.intel.com ([10.165.9.183]) by fmsmga001-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Nov 2022 22:10:05 -0800 From: Yang Weijiang To: seanjc@google.com, pbonzini@redhat.com, jmattson@google.com, kvm@vger.kernel.org, linux-kernel@vger.kernel.org Cc: like.xu.linux@gmail.com, kan.liang@linux.intel.com, wei.w.wang@intel.com, weijiang.yang@intel.com Subject: [PATCH v2 08/15] KVM: x86: Add Arch LBR MSRs to msrs_to_save_all list Date: Thu, 24 Nov 2022 23:05:57 -0500 Message-Id: <20221125040604.5051-9-weijiang.yang@intel.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20221125040604.5051-1-weijiang.yang@intel.com> References: <20221125040604.5051-1-weijiang.yang@intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1750447345896023204?= X-GMAIL-MSGID: =?utf-8?q?1750447345896023204?= Arch LBR MSR_ARCH_LBR_DEPTH and MSR_ARCH_LBR_CTL are queried by userspace application before it wants to {save|restore} the Arch LBR data. Other LBR related data MSRs are omitted here intentionally due to lengthy list(32*3). Userspace can still use KVM_{GET|SET}_MSRS to access them if necessary. Suggested-by: Jim Mattson Signed-off-by: Yang Weijiang --- arch/x86/kvm/x86.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 888a153e32bc..74c858eaa1ea 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -1466,6 +1466,7 @@ static const u32 msrs_to_save_all[] = { MSR_IA32_XFD, MSR_IA32_XFD_ERR, MSR_IA32_XSS, + MSR_ARCH_LBR_CTL, MSR_ARCH_LBR_DEPTH, }; static u32 msrs_to_save[ARRAY_SIZE(msrs_to_save_all)]; @@ -3877,6 +3878,8 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info) case MSR_IA32_PEBS_ENABLE: case MSR_IA32_DS_AREA: case MSR_PEBS_DATA_CFG: + case MSR_ARCH_LBR_CTL: + case MSR_ARCH_LBR_DEPTH: case MSR_F15H_PERF_CTL0 ... MSR_F15H_PERF_CTR5: if (kvm_pmu_is_valid_msr(vcpu, msr)) return kvm_pmu_set_msr(vcpu, msr_info); @@ -3980,6 +3983,8 @@ int kvm_get_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info) case MSR_IA32_PEBS_ENABLE: case MSR_IA32_DS_AREA: case MSR_PEBS_DATA_CFG: + case MSR_ARCH_LBR_CTL: + case MSR_ARCH_LBR_DEPTH: case MSR_F15H_PERF_CTL0 ... MSR_F15H_PERF_CTR5: if (kvm_pmu_is_valid_msr(vcpu, msr_info->index)) return kvm_pmu_get_msr(vcpu, msr_info); @@ -7068,6 +7073,11 @@ static void kvm_init_msr_list(void) if (!kvm_caps.supported_xss) continue; break; + case MSR_ARCH_LBR_DEPTH: + case MSR_ARCH_LBR_CTL: + if (!kvm_cpu_cap_has(X86_FEATURE_ARCH_LBR)) + continue; + break; default: break; } From patchwork Fri Nov 25 04:05:58 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Yang, Weijiang" X-Patchwork-Id: 25837 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:f944:0:0:0:0:0 with SMTP id q4csp3796988wrr; Thu, 24 Nov 2022 22:11:32 -0800 (PST) X-Google-Smtp-Source: AA0mqf65DAvBYFTmrOXpmEaxKJcicEgYpPBrqPQw1pH2p8o1ZVV8+OZ1jLlbXPe4YW5i3xEctasg X-Received: by 2002:aa7:9f0d:0:b0:56b:e16d:b08 with SMTP id g13-20020aa79f0d000000b0056be16d0b08mr17055865pfr.70.1669356691759; Thu, 24 Nov 2022 22:11:31 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669356691; cv=none; d=google.com; s=arc-20160816; b=grAwdpkiM2xjAjNq1C5UWop/pDXlah+AhHyeCSNGFOh7DpG4WmOQBLlG/CNECQdxDK W+iKGogVzpMlhL2fQi3mvE3L2aHREmj1wnapVla42B3xC6plviHu5mEdl7D1qaDSV+07 7JdD04SHjBci6+FFJmKvHMBuzNOLuWeQ6hQpaiHV6UZVDmDckY+iK2qcf+r/6/oP2lQ8 u5fWImiQDS6ozBbrQYPyZijFGgv7mz55302p8GGHb+D6lk5JHalSL5ehMavfZ9hsSdTY EbrbV/vs0/4GefyhkT/QwtNAJDvVAb9NsCsvBdx+pqiRdnR1emgLIrHNjs5luREWqFQN lzRw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=6mZJl0fRfCQELADKxoCc2M2kYvpfFGvIkMOD6HZY30Y=; b=IppCU5pEu7zJH+lQyHkuSmCHZnJ0MYjfvmWUj3P9Qav0p2lRjV+eT+38HLiGyDtTQw blKsFtzy4sGEmaOoOsBWFBwX5ydoiJfw6l23Mem3NrYbbN8dD45DBAUSSU10dJygA+XU R75avymg14i2i9LUFSOT/U9X8Saxk7DDIwDi48enLGhIoCwBbTY/cr4/E/XO07Tqu9tJ DJ/D4Y0qW1OQvzB/gb7sypKLzNiA4cUUMpSrL96e7oQMnUZpIKp1QfQ/2VAVQHMTC+FE aIfJ143NaWwR6Hzc1b41XknG+xUrEBv57deF8ghTCNS6klGbUBoMXDoQ0b7lvsgABDoM 785w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=mBQKPIQQ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id g8-20020a636b08000000b0045466821a09si3380690pgc.371.2022.11.24.22.11.18; Thu, 24 Nov 2022 22:11:31 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=mBQKPIQQ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229726AbiKYGKa (ORCPT + 99 others); Fri, 25 Nov 2022 01:10:30 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46724 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229694AbiKYGKL (ORCPT ); Fri, 25 Nov 2022 01:10:11 -0500 Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B33A41FFB6; Thu, 24 Nov 2022 22:10:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1669356610; x=1700892610; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=b0HflqpockXVYHP3iADSezT3+7UDyiWMjXkwdZSqFCg=; b=mBQKPIQQCPtGFRuenM7zc53TkNMuXdWh+SdA050qvxUm4KTSn58S0sJu EOxh3b+BghG/X7E674OOzi3YA8rSuZZrSgV2llcStjYnE7hLh4jXNiYzt tvquV/ZgwQFRIZHVHMsgJActubZ79p6lt5xaRAZ67T4zSxooo35pQdkXH jKL9Sfo5HWOSW0oK/KnwfP0c3Hb0qryUXLDJQywrkYchFBlxQrYOhOW+L TMsq2NZLIhA8vdOUohfXzQXmmvmF8V39Nsx0e2tsI9JNinl1uWZ+CjeO/ 11k3AyhtFhA4Y3+HK1XGKJ3o/9HAQyQchG3gyU4xgFXo9rFw9TPKVCaLK g==; X-IronPort-AV: E=McAfee;i="6500,9779,10541"; a="313116824" X-IronPort-AV: E=Sophos;i="5.96,192,1665471600"; d="scan'208";a="313116824" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Nov 2022 22:10:06 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10541"; a="784838490" X-IronPort-AV: E=Sophos;i="5.96,192,1665471600"; d="scan'208";a="784838490" Received: from embargo.jf.intel.com ([10.165.9.183]) by fmsmga001-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Nov 2022 22:10:06 -0800 From: Yang Weijiang To: seanjc@google.com, pbonzini@redhat.com, jmattson@google.com, kvm@vger.kernel.org, linux-kernel@vger.kernel.org Cc: like.xu.linux@gmail.com, kan.liang@linux.intel.com, wei.w.wang@intel.com, weijiang.yang@intel.com Subject: [PATCH v2 09/15] KVM: x86: Refine the matching and clearing logic for supported_xss Date: Thu, 24 Nov 2022 23:05:58 -0500 Message-Id: <20221125040604.5051-10-weijiang.yang@intel.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20221125040604.5051-1-weijiang.yang@intel.com> References: <20221125040604.5051-1-weijiang.yang@intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1750447362631167165?= X-GMAIL-MSGID: =?utf-8?q?1750447362631167165?= From: Paolo Bonzini Refine the code path of the existing clearing of supported_xss in this way: initialize the supported_xss with the filter of KVM_SUPPORTED_XSS mask and update its value in a bit clear manner (rather than bit setting). Suggested-by: Sean Christopherson Signed-off-by: Like Xu Signed-off-by: Paolo Bonzini Signed-off-by: Yang Weijiang --- arch/x86/kvm/vmx/vmx.c | 5 +++-- arch/x86/kvm/x86.c | 6 +++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c index 9bd52ad3bbf4..2ab4c33b5008 100644 --- a/arch/x86/kvm/vmx/vmx.c +++ b/arch/x86/kvm/vmx/vmx.c @@ -7738,9 +7738,10 @@ static __init void vmx_set_cpu_caps(void) kvm_cpu_cap_set(X86_FEATURE_UMIP); /* CPUID 0xD.1 */ - kvm_caps.supported_xss = 0; - if (!cpu_has_vmx_xsaves()) + if (!cpu_has_vmx_xsaves()) { kvm_cpu_cap_clear(X86_FEATURE_XSAVES); + kvm_caps.supported_xss = 0; + } /* CPUID 0x80000001 and 0x7 (RDPID) */ if (!cpu_has_vmx_rdtscp()) { diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 74c858eaa1ea..889be0c9176d 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -217,6 +217,8 @@ static struct kvm_user_return_msrs __percpu *user_return_msrs; | XFEATURE_MASK_BNDCSR | XFEATURE_MASK_AVX512 \ | XFEATURE_MASK_PKRU | XFEATURE_MASK_XTILE) +#define KVM_SUPPORTED_XSS 0 + u64 __read_mostly host_efer; EXPORT_SYMBOL_GPL(host_efer); @@ -11999,8 +12001,10 @@ int kvm_arch_hardware_setup(void *opaque) rdmsrl_safe(MSR_EFER, &host_efer); - if (boot_cpu_has(X86_FEATURE_XSAVES)) + if (boot_cpu_has(X86_FEATURE_XSAVES)) { rdmsrl(MSR_IA32_XSS, host_xss); + kvm_caps.supported_xss = host_xss & KVM_SUPPORTED_XSS; + } kvm_init_pmu_capability(); From patchwork Fri Nov 25 04:05:59 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Yang, Weijiang" X-Patchwork-Id: 25841 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:f944:0:0:0:0:0 with SMTP id q4csp3797333wrr; Thu, 24 Nov 2022 22:12:23 -0800 (PST) X-Google-Smtp-Source: AA0mqf4Wtjq0RRK3771KUnPI65mQQujKMZtonwpNHCqamMQ+gdBWRn7Z67Wey/q5TUmjs0g6F7jD X-Received: by 2002:a63:1d03:0:b0:46f:abcc:a793 with SMTP id d3-20020a631d03000000b0046fabcca793mr34401894pgd.234.1669356743649; Thu, 24 Nov 2022 22:12:23 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669356743; cv=none; d=google.com; s=arc-20160816; b=aLeNOQOuWjm9UUgnfsGO1s5Lwvz0fa2JziXpl08nmumSgxz/lHGkrDlYxZA/NVqmLR o7uXpeg8nLU74Ti5p8t0XLnrm5ll73UWcPYZ8TGs6MCiT1ShDZcMTSQ6WzqsRs2ySTgL xQI2WmN/0Efyvi5QPxYRTTdvf8SzGCKVrl9BS0Bx+zkKiKTeUiFYeUWv/L8K+EQkQIQP HJwvSN6R/73+vWzJRonlWNGBaPH7ZxgFcDXxQw7vKIcGxauOxeoPMCHbSdNw2MHeYrX9 +RLuVpviyW9dLUpziJabNgph5DxtMrgI4GMvtYR5gK7Q2gMV+Br1X8hVnqfaEkY1aHDE sL1w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=ow3CKi5U4BE4Cq4WcgxqEK1ZmIhl+Y2MNI4QkzWBzKg=; b=t7e43PP/GKag5fi8EjNVBj9l+2CL7ds2ac7lkceIyqR6NkbzTblAWcU2uLUNHSLbmW JvPbFu1WN2b+byVNdGOw4lRvIQZF7T1jQcKgkyN+qENhJTAlbE8MSfTp6qo1RbAuKO9h Nrf+8qxPfAbUBSQsAsIEqAJ1ihvyhXazvqkXwZ53SkpfRQdlxvQNzOv3Iutob50NhoTl C5hQDGQNSaYHNZxz6Nh5tsHILdmrrBi0lRlnVjTRBPPHP90H83oKmi2eQKeU23M+9721 TgcL+EUTWhURYSTGru61qYUtC1Mg0qn9ZvPPhePUO/65CS5o1yjj7NVwC6HaCl9C3d7G Y8iw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b="nCDcZx/L"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id f6-20020a170902ce8600b001893740c58asi3340195plg.393.2022.11.24.22.12.10; Thu, 24 Nov 2022 22:12:23 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b="nCDcZx/L"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229815AbiKYGKh (ORCPT + 99 others); Fri, 25 Nov 2022 01:10:37 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46692 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229720AbiKYGKO (ORCPT ); Fri, 25 Nov 2022 01:10:14 -0500 Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0776222294; Thu, 24 Nov 2022 22:10:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1669356612; x=1700892612; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=XVMiy0FcFAZYiVIkFM8ypMBa329vVOR1LUMYPRJkpL4=; b=nCDcZx/L47hER35LaPRPdJFSeOs9IWi+1qk5mNnl/x0pxWunwTEZFhj+ w1JFIxTX2rbhfOIF9wg4TuWY7s+FdnMauyyJ+gt2vaa0xik90ARllN6lU R4j4etuUFgOa4+qn92gIsUlshxr/dtSk5ozhtbs/SElYPx2IRFobMTlA9 MJd7ze+iD2/4YeFgJM1JTupjxGT3yOvx7D5MhXzwQXqo7j2t8kuOqo0hh rYHbI+3wp+HZ7huUGgIG1VDk4BmeYnNqCqarGIleLDhzKbQP03BoNmh0j Ez21eXPGSamJmE/TDWRNrIcMV81RqJ3OZa+0vRcj4nneNY7d+vrzO6DAR g==; X-IronPort-AV: E=McAfee;i="6500,9779,10541"; a="313116827" X-IronPort-AV: E=Sophos;i="5.96,192,1665471600"; d="scan'208";a="313116827" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Nov 2022 22:10:08 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10541"; a="784838496" X-IronPort-AV: E=Sophos;i="5.96,192,1665471600"; d="scan'208";a="784838496" Received: from embargo.jf.intel.com ([10.165.9.183]) by fmsmga001-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Nov 2022 22:10:06 -0800 From: Yang Weijiang To: seanjc@google.com, pbonzini@redhat.com, jmattson@google.com, kvm@vger.kernel.org, linux-kernel@vger.kernel.org Cc: like.xu.linux@gmail.com, kan.liang@linux.intel.com, wei.w.wang@intel.com, weijiang.yang@intel.com, Like Xu Subject: [PATCH v2 10/15] KVM: x86/vmx: Check Arch LBR config when return perf capabilities Date: Thu, 24 Nov 2022 23:05:59 -0500 Message-Id: <20221125040604.5051-11-weijiang.yang@intel.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20221125040604.5051-1-weijiang.yang@intel.com> References: <20221125040604.5051-1-weijiang.yang@intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1750447416766940038?= X-GMAIL-MSGID: =?utf-8?q?1750447416766940038?= Two new bit fields(VM_EXIT_CLEAR_IA32_LBR_CTL, VM_ENTRY_LOAD_IA32_LBR_CTL) are added to support guest Arch LBR. These two bits should be set in order to make Arch LBR workable in both guest and host. Since we don't support Arch LBR in nested guest, clear the two bits before run L2 VM. Co-developed-by: Like Xu Signed-off-by: Like Xu Signed-off-by: Yang Weijiang --- arch/x86/include/asm/vmx.h | 2 ++ arch/x86/kvm/vmx/capabilities.h | 5 +++++ arch/x86/kvm/vmx/nested.c | 8 ++++++++ arch/x86/kvm/vmx/vmx.c | 11 +++++++++++ arch/x86/kvm/vmx/vmx.h | 6 ++++-- 5 files changed, 30 insertions(+), 2 deletions(-) diff --git a/arch/x86/include/asm/vmx.h b/arch/x86/include/asm/vmx.h index 8502c068202c..59f7c6baffd2 100644 --- a/arch/x86/include/asm/vmx.h +++ b/arch/x86/include/asm/vmx.h @@ -102,6 +102,7 @@ #define VM_EXIT_CLEAR_BNDCFGS 0x00800000 #define VM_EXIT_PT_CONCEAL_PIP 0x01000000 #define VM_EXIT_CLEAR_IA32_RTIT_CTL 0x02000000 +#define VM_EXIT_CLEAR_IA32_LBR_CTL 0x04000000 #define VM_EXIT_ALWAYSON_WITHOUT_TRUE_MSR 0x00036dff @@ -115,6 +116,7 @@ #define VM_ENTRY_LOAD_BNDCFGS 0x00010000 #define VM_ENTRY_PT_CONCEAL_PIP 0x00020000 #define VM_ENTRY_LOAD_IA32_RTIT_CTL 0x00040000 +#define VM_ENTRY_LOAD_IA32_LBR_CTL 0x00200000 #define VM_ENTRY_ALWAYSON_WITHOUT_TRUE_MSR 0x000011ff diff --git a/arch/x86/kvm/vmx/capabilities.h b/arch/x86/kvm/vmx/capabilities.h index cd2ac9536c99..5affd2b5123e 100644 --- a/arch/x86/kvm/vmx/capabilities.h +++ b/arch/x86/kvm/vmx/capabilities.h @@ -395,6 +395,11 @@ static inline bool vmx_pebs_supported(void) return boot_cpu_has(X86_FEATURE_PEBS) && kvm_pmu_cap.pebs_ept; } +static inline bool cpu_has_vmx_arch_lbr(void) +{ + return vmcs_config.vmentry_ctrl & VM_ENTRY_LOAD_IA32_LBR_CTL; +} + static inline bool cpu_has_notify_vmexit(void) { return vmcs_config.cpu_based_2nd_exec_ctrl & diff --git a/arch/x86/kvm/vmx/nested.c b/arch/x86/kvm/vmx/nested.c index b28be793de29..59bdd9873fb5 100644 --- a/arch/x86/kvm/vmx/nested.c +++ b/arch/x86/kvm/vmx/nested.c @@ -2360,6 +2360,10 @@ static void prepare_vmcs02_early(struct vcpu_vmx *vmx, struct loaded_vmcs *vmcs0 if (guest_efer != host_efer) exec_control |= VM_ENTRY_LOAD_IA32_EFER; } + + if (cpu_has_vmx_arch_lbr()) + exec_control &= ~VM_ENTRY_LOAD_IA32_LBR_CTL; + vm_entry_controls_set(vmx, exec_control); /* @@ -2374,6 +2378,10 @@ static void prepare_vmcs02_early(struct vcpu_vmx *vmx, struct loaded_vmcs *vmcs0 exec_control |= VM_EXIT_LOAD_IA32_EFER; else exec_control &= ~VM_EXIT_LOAD_IA32_EFER; + + if (cpu_has_vmx_arch_lbr()) + exec_control &= ~VM_EXIT_CLEAR_IA32_LBR_CTL; + vm_exit_controls_set(vmx, exec_control); /* diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c index 2ab4c33b5008..359da38a19a1 100644 --- a/arch/x86/kvm/vmx/vmx.c +++ b/arch/x86/kvm/vmx/vmx.c @@ -2599,6 +2599,7 @@ static __init int setup_vmcs_config(struct vmcs_config *vmcs_conf, { VM_ENTRY_LOAD_IA32_EFER, VM_EXIT_LOAD_IA32_EFER }, { VM_ENTRY_LOAD_BNDCFGS, VM_EXIT_CLEAR_BNDCFGS }, { VM_ENTRY_LOAD_IA32_RTIT_CTL, VM_EXIT_CLEAR_IA32_RTIT_CTL }, + { VM_ENTRY_LOAD_IA32_LBR_CTL, VM_EXIT_CLEAR_IA32_LBR_CTL }, }; memset(vmcs_conf, 0, sizeof(*vmcs_conf)); @@ -4794,6 +4795,9 @@ static void vmx_vcpu_reset(struct kvm_vcpu *vcpu, bool init_event) vpid_sync_context(vmx->vpid); vmx_update_fb_clear_dis(vcpu, vmx); + + if (!init_event && cpu_has_vmx_arch_lbr()) + vmcs_write64(GUEST_IA32_LBR_CTL, 0); } static void vmx_enable_irq_window(struct kvm_vcpu *vcpu) @@ -6191,6 +6195,10 @@ void dump_vmcs(struct kvm_vcpu *vcpu) vmentry_ctl & VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL) pr_err("PerfGlobCtl = 0x%016llx\n", vmcs_read64(GUEST_IA32_PERF_GLOBAL_CTRL)); + if (kvm_cpu_cap_has(X86_FEATURE_ARCH_LBR) && + vmentry_ctl & VM_ENTRY_LOAD_IA32_LBR_CTL) + pr_err("ArchLBRCtl = 0x%016llx\n", + vmcs_read64(GUEST_IA32_LBR_CTL)); if (vmentry_ctl & VM_ENTRY_LOAD_BNDCFGS) pr_err("BndCfgS = 0x%016llx\n", vmcs_read64(GUEST_BNDCFGS)); pr_err("Interruptibility = %08x ActivityState = %08x\n", @@ -7700,6 +7708,9 @@ static u64 vmx_get_perf_capabilities(void) perf_cap &= ~PERF_CAP_PEBS_BASELINE; } + if (boot_cpu_has(X86_FEATURE_ARCH_LBR) && !cpu_has_vmx_arch_lbr()) + perf_cap &= ~PMU_CAP_LBR_FMT; + return perf_cap; } diff --git a/arch/x86/kvm/vmx/vmx.h b/arch/x86/kvm/vmx/vmx.h index a3da84f4ea45..f68c8a53a248 100644 --- a/arch/x86/kvm/vmx/vmx.h +++ b/arch/x86/kvm/vmx/vmx.h @@ -493,7 +493,8 @@ static inline u8 vmx_get_rvi(void) VM_ENTRY_LOAD_IA32_EFER | \ VM_ENTRY_LOAD_BNDCFGS | \ VM_ENTRY_PT_CONCEAL_PIP | \ - VM_ENTRY_LOAD_IA32_RTIT_CTL) + VM_ENTRY_LOAD_IA32_RTIT_CTL | \ + VM_ENTRY_LOAD_IA32_LBR_CTL) #define __KVM_REQUIRED_VMX_VM_EXIT_CONTROLS \ (VM_EXIT_SAVE_DEBUG_CONTROLS | \ @@ -515,7 +516,8 @@ static inline u8 vmx_get_rvi(void) VM_EXIT_LOAD_IA32_EFER | \ VM_EXIT_CLEAR_BNDCFGS | \ VM_EXIT_PT_CONCEAL_PIP | \ - VM_EXIT_CLEAR_IA32_RTIT_CTL) + VM_EXIT_CLEAR_IA32_RTIT_CTL | \ + VM_EXIT_CLEAR_IA32_LBR_CTL) #define KVM_REQUIRED_VMX_PIN_BASED_VM_EXEC_CONTROL \ (PIN_BASED_EXT_INTR_MASK | \ From patchwork Fri Nov 25 04:06:00 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Yang, Weijiang" X-Patchwork-Id: 25839 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:f944:0:0:0:0:0 with SMTP id q4csp3797331wrr; Thu, 24 Nov 2022 22:12:23 -0800 (PST) X-Google-Smtp-Source: AA0mqf7sZFQoF0kXAFK6VDGHH6kRI1FKT6Pf8uobCHaWonuE+Xly1OtHN02FR/HC7nP3CoggQKZc X-Received: by 2002:aa7:8054:0:b0:56c:4303:a93d with SMTP id y20-20020aa78054000000b0056c4303a93dmr21288399pfm.73.1669356743540; Thu, 24 Nov 2022 22:12:23 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669356743; cv=none; d=google.com; s=arc-20160816; b=oZ0GwbLe0H4vpnY6ot0sfPS4gvaeR3kn6WApdJu+SftsoQhBT0WmdAGg7P4FyjsLzK n3c90gntfnfgAk39M9CeOPU2jPZjj6J3+dh5uQ40n9unewvuGkewVUy279IKPDCx8dXq SR0LpO0/K5anZxxpdH/O71yHP183aGwMd2BBFhneEV0ODCwKmh8e7nZIcnO5+iAb6Ihi X025fwTvPviA4wDAqq9TI7eusujfT/+ayH2NwD9sWqS/pymo1nsuJPzdTIVAJ2PaJ1Qo dcrf8osRrp1Khw+QoBKAC6MUaTbZkOiGpHGKGNcKtLsVeEmkjEdhxdFspjhQWNzwjxFc XS0Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=lxzZG9AxB7xmlHUKkHpPNVBHnondu8QFtzvOEx7jSp4=; b=nQPMHR2UE/t32HdsxdM6vE5i+GvWTYgyUjICJ/QNeltQW0wniVXXtWThZE0MA9Bbta xFalb7G/5Z1lnjLhOnljUyXeD827/8Frw0vSG1VjS02qV6a3r1G61C0+gYILmVUXIBc+ 81WzAFRcPibYGI8gD1pfBRqsb0fD9ompmHu1IEkUFzXiuME3iKkmRL86bzBu3k6pi2bW 0AvV/Phibqnn+8yjPKVroYJKU02bo1tYk0Uzsxggw6GcT3jNx7cY51ODHEYLUiXrXvix 2hZ7P8XU9AnHCEozDQeE/8NymO62BW/cynOzt78LKqqEavJMdm+DPlfjXUIYg1ZI/eDk W+Cw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=U5D3pNhX; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id n18-20020a170902d2d200b0017145b821d2si3237583plc.477.2022.11.24.22.12.10; Thu, 24 Nov 2022 22:12:23 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=U5D3pNhX; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229840AbiKYGKt (ORCPT + 99 others); Fri, 25 Nov 2022 01:10:49 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46710 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229753AbiKYGKU (ORCPT ); Fri, 25 Nov 2022 01:10:20 -0500 Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E622F22BD6; Thu, 24 Nov 2022 22:10:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1669356613; x=1700892613; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=4eg8NP/fJsLd5N9GLFwt3wbkem8wIETGsx0i+IB7Xnc=; b=U5D3pNhX4mHG06hyTw0MmsWE8R++7J3xpnujZ+Z+7EzCmpAsRHfyqqns LxprgLE7xrGjBVNljPL5jejIfyJOYiaM5QQ1Ff05Uc0ccNgQsC9ZYwgY4 0YoTTUlL+CZDY8WmlGzWgKzI0w0qyYSc5lOqPdm4w//KSouQAKm6DBl2l TIDlIVYd9ASVyhpAK0nrGkHqGAVaW4Vk7UQf4wYwwDAi6dVIXXjMdaOkR WiVRb266ZlXXnT2tEssGBFSRP5zi/WzYpUwX0WpUy7yqYQJP3EfCRXNlI k2Ev5EysFVmEq74Y5vEmaVq4MKpa18cXogJGmYbgLe9lz0bpWLnj61HlA g==; X-IronPort-AV: E=McAfee;i="6500,9779,10541"; a="313116831" X-IronPort-AV: E=Sophos;i="5.96,192,1665471600"; d="scan'208";a="313116831" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Nov 2022 22:10:08 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10541"; a="784838500" X-IronPort-AV: E=Sophos;i="5.96,192,1665471600"; d="scan'208";a="784838500" Received: from embargo.jf.intel.com ([10.165.9.183]) by fmsmga001-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Nov 2022 22:10:07 -0800 From: Yang Weijiang To: seanjc@google.com, pbonzini@redhat.com, jmattson@google.com, kvm@vger.kernel.org, linux-kernel@vger.kernel.org Cc: like.xu.linux@gmail.com, kan.liang@linux.intel.com, wei.w.wang@intel.com, weijiang.yang@intel.com, Like Xu Subject: [PATCH v2 11/15] KVM: x86: Add XSAVE Support for Architectural LBR Date: Thu, 24 Nov 2022 23:06:00 -0500 Message-Id: <20221125040604.5051-12-weijiang.yang@intel.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20221125040604.5051-1-weijiang.yang@intel.com> References: <20221125040604.5051-1-weijiang.yang@intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1750447416722057282?= X-GMAIL-MSGID: =?utf-8?q?1750447416722057282?= From: Like Xu On processors supporting XSAVES and XRSTORS, Architectural LBR XSAVE support is enumerated from CPUID.(EAX=0DH, ECX=1):ECX[bit 15]. The detailed sub-leaf for Arch LBR is enumerated in CPUID.(0DH, 0FH). XSAVES provides a faster means than RDMSR for guest to read all LBRs. When guest IA32_XSS[bit 15] is set, the Arch LBR state can be saved using XSAVES and restored by XRSTORS with the appropriate RFBM. Signed-off-by: Like Xu Signed-off-by: Yang Weijiang --- arch/x86/kvm/vmx/vmx.c | 4 ++++ arch/x86/kvm/x86.c | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c index 359da38a19a1..3bc892e8cf7a 100644 --- a/arch/x86/kvm/vmx/vmx.c +++ b/arch/x86/kvm/vmx/vmx.c @@ -7733,6 +7733,10 @@ static __init void vmx_set_cpu_caps(void) kvm_cpu_cap_check_and_set(X86_FEATURE_DS); kvm_cpu_cap_check_and_set(X86_FEATURE_DTES64); } + if (!cpu_has_vmx_arch_lbr()) { + kvm_cpu_cap_clear(X86_FEATURE_ARCH_LBR); + kvm_caps.supported_xss &= ~XFEATURE_MASK_LBR; + } if (!enable_pmu) kvm_cpu_cap_clear(X86_FEATURE_PDCM); diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 889be0c9176d..38df08d9d0cb 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -217,7 +217,7 @@ static struct kvm_user_return_msrs __percpu *user_return_msrs; | XFEATURE_MASK_BNDCSR | XFEATURE_MASK_AVX512 \ | XFEATURE_MASK_PKRU | XFEATURE_MASK_XTILE) -#define KVM_SUPPORTED_XSS 0 +#define KVM_SUPPORTED_XSS XFEATURE_MASK_LBR u64 __read_mostly host_efer; EXPORT_SYMBOL_GPL(host_efer); From patchwork Fri Nov 25 04:06:01 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: "Yang, Weijiang" X-Patchwork-Id: 25842 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:f944:0:0:0:0:0 with SMTP id q4csp3797504wrr; Thu, 24 Nov 2022 22:12:50 -0800 (PST) X-Google-Smtp-Source: AA0mqf7UedUfrahl6bVvRnecmSz694uHmcu3N4Ndw6+jnXnWGshMGtL+2bPCM8sCSltGQDVpzSdI X-Received: by 2002:a17:902:cad4:b0:189:e4e:7943 with SMTP id y20-20020a170902cad400b001890e4e7943mr19540670pld.33.1669356769814; Thu, 24 Nov 2022 22:12:49 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669356769; cv=none; d=google.com; s=arc-20160816; b=P5Icek7srzdQ8VTBYYViVagrQPWJTFgn6SUqWEsdGQFOP0TyK1LM+wnV5iUHJDc+up 8uIWH5VwdvujFLVumkOTaNUYN8JXTCyhSUqyoOiWZ8L5/yXVMSkMWFzprro6FPyrLC5i lMFcNXryFEYlwsUeH/p1ZHKBPOKwwtbTeLLuzOMdlhQ4DkK/rY0QqOaoqj6lE0+olYPw 3uygnWGAIPVxuS1q8fV3qJOjgqwcCH2/D77SB0rV5/G+kJYeFf77/c/B9OOZ/9z4ouPh L4KKyHDpGOoCkVSebuc7jfqo/6Ijwkj1swz3IOOli0UBY360ROurgGjXRqUB21khYCYn bHDA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=Jn5gN5zZ9t91vOxrwaSSZ0lGcw0lY7VPCBZ6XgakwTI=; b=VGRq3jVQT2PPI3rGf7Lyv4LMCKKaAAEaIXq8VqfHGDGO/FSMcM2H4ByVcQJMa8ZxdE HaRV2pG3hJ3TYKfyDwIp+AmqT3SWe/EXGNfCw1+39x6nAZr2HZgn7v+Gi/5ah28F18/H lIjF+G8OIVZgTH+VCzy2wqriRuTTEDsJpeBAeU8JE91/drVrDsBq99t8bU5Ae9VK5rpt VtdhS/tZAf6VdyqvkpAe5/ZAfMTfeKHIA+ypCHb+gPP8kXEox6SVcOjwzXeyLud5L0aT C4RxzkMMKW0ktrirnm3HpUM9DYKis+SmCCEFBln41GE4DAe5iw3xof0cLac4mnu5Fttg x5rA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=nLcoIkm0; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id b5-20020a170902e94500b00188bee77e8fsi2834974pll.35.2022.11.24.22.12.36; Thu, 24 Nov 2022 22:12:49 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=nLcoIkm0; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229723AbiKYGKv (ORCPT + 99 others); Fri, 25 Nov 2022 01:10:51 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46688 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229754AbiKYGKU (ORCPT ); Fri, 25 Nov 2022 01:10:20 -0500 Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CBA9E22B1C; Thu, 24 Nov 2022 22:10:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1669356613; x=1700892613; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=B/nXKs95F6cYlY8EdEbdbW8W7+97emyxpTHZVVLBCto=; b=nLcoIkm0rcAFXHqueAmyZzoi8L60l7Cm70dS/10EctVGC18pY4JvFWJ1 0xCrcSKyAbgcaacAw8KF0xIfOBOo3fMzJZxewvi6/Y4ofKaXFuRl7dIib dSGX2NbC/0bzoF7uGEIVef0IIF1INCnubbsl1smr9Lm1CsTEbvm+XKwR6 zmgEy0aEI92E9IaAJqfnRBjv3gancxGNLqp9dkvHjylyZ/HZFNQZIuyWg bdkuVPKfTDwQDlGIqUP23eIdKvS3phGy0x6VUUdPjHwNMN28N94h/j+dk DwA1aU8CFiTSiIloH4vp1nuIQa3t78L5aH//cmR7NNoJ24KW3fY1wZ0pl g==; X-IronPort-AV: E=McAfee;i="6500,9779,10541"; a="313116833" X-IronPort-AV: E=Sophos;i="5.96,192,1665471600"; d="scan'208";a="313116833" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Nov 2022 22:10:08 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10541"; a="784838505" X-IronPort-AV: E=Sophos;i="5.96,192,1665471600"; d="scan'208";a="784838505" Received: from embargo.jf.intel.com ([10.165.9.183]) by fmsmga001-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Nov 2022 22:10:08 -0800 From: Yang Weijiang To: seanjc@google.com, pbonzini@redhat.com, jmattson@google.com, kvm@vger.kernel.org, linux-kernel@vger.kernel.org Cc: like.xu.linux@gmail.com, kan.liang@linux.intel.com, wei.w.wang@intel.com, weijiang.yang@intel.com Subject: [PATCH v2 12/15] KVM: x86/vmx: Disable Arch LBREn bit in #DB and warm reset Date: Thu, 24 Nov 2022 23:06:01 -0500 Message-Id: <20221125040604.5051-13-weijiang.yang@intel.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20221125040604.5051-1-weijiang.yang@intel.com> References: <20221125040604.5051-1-weijiang.yang@intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1750447444726406862?= X-GMAIL-MSGID: =?utf-8?q?1750447444726406862?= Per SDM 3B, Chapter 18: “On a debug breakpoint event (#DB), IA32_LBR_CTL.LBREn is cleared.” and "On a warm reset, all LBR MSRs, including IA32_LBR_DEPTH, have their values preserved. However, IA32_LBR_CTL.LBREn is cleared to 0, disabling LBRs.", clear the bit manually before inject #DB or when vCPU is in warm reset. Signed-off-by: Yang Weijiang --- arch/x86/kvm/vmx/vmx.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c index 3bc892e8cf7a..6ad765ea4059 100644 --- a/arch/x86/kvm/vmx/vmx.c +++ b/arch/x86/kvm/vmx/vmx.c @@ -1695,6 +1695,20 @@ static void vmx_clear_hlt(struct kvm_vcpu *vcpu) vmcs_write32(GUEST_ACTIVITY_STATE, GUEST_ACTIVITY_ACTIVE); } +static void disable_arch_lbr_ctl(struct kvm_vcpu *vcpu) +{ + struct lbr_desc *lbr_desc = vcpu_to_lbr_desc(vcpu); + struct kvm_pmu *pmu = vcpu_to_pmu(vcpu); + + if (kvm_cpu_cap_has(X86_FEATURE_ARCH_LBR) && + test_bit(INTEL_PMC_IDX_FIXED_VLBR, pmu->pmc_in_use) && + lbr_desc->event) { + u64 ctl = vmcs_read64(GUEST_IA32_LBR_CTL); + + vmcs_write64(GUEST_IA32_LBR_CTL, ctl & ~ARCH_LBR_CTL_LBREN); + } +} + static void vmx_inject_exception(struct kvm_vcpu *vcpu) { struct kvm_queued_exception *ex = &vcpu->arch.exception; @@ -1738,6 +1752,9 @@ static void vmx_inject_exception(struct kvm_vcpu *vcpu) vmcs_write32(VM_ENTRY_INTR_INFO_FIELD, intr_info); vmx_clear_hlt(vcpu); + + if (ex->vector == DB_VECTOR) + disable_arch_lbr_ctl(vcpu); } static void vmx_setup_uret_msr(struct vcpu_vmx *vmx, unsigned int msr, @@ -4796,7 +4813,9 @@ static void vmx_vcpu_reset(struct kvm_vcpu *vcpu, bool init_event) vmx_update_fb_clear_dis(vcpu, vmx); - if (!init_event && cpu_has_vmx_arch_lbr()) + if (init_event) + disable_arch_lbr_ctl(vcpu); + else if (cpu_has_vmx_arch_lbr()) vmcs_write64(GUEST_IA32_LBR_CTL, 0); } @@ -4873,6 +4892,9 @@ static void vmx_inject_nmi(struct kvm_vcpu *vcpu) INTR_TYPE_NMI_INTR | INTR_INFO_VALID_MASK | NMI_VECTOR); vmx_clear_hlt(vcpu); + + if (vcpu->arch.exception.vector == DB_VECTOR) + disable_arch_lbr_ctl(vcpu); } bool vmx_get_nmi_mask(struct kvm_vcpu *vcpu) From patchwork Fri Nov 25 04:06:02 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Yang, Weijiang" X-Patchwork-Id: 25843 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:f944:0:0:0:0:0 with SMTP id q4csp3797785wrr; Thu, 24 Nov 2022 22:13:39 -0800 (PST) X-Google-Smtp-Source: AA0mqf66gFk08iV9Vt9va8lWZubKlOlU2yVID6bM0caxqEG8NDya5AjxJejHbMS9v9kq7B86iKYT X-Received: by 2002:a17:903:2311:b0:174:4ab2:6457 with SMTP id d17-20020a170903231100b001744ab26457mr29995167plh.118.1669356819107; Thu, 24 Nov 2022 22:13:39 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669356819; cv=none; d=google.com; s=arc-20160816; b=n6l7vitw8uqBSxwNohX0iG3tMLlHQIahCF2KUSHykh9U5GB63VdteqE3+cS/hhfz0G BGY2C2HjtoexIpJmD7TkHe84USHeKRldhdUAfM/TzLESJvdp7hHvHCQEDFw1Oc34QSMI XDtRMI6pEesQAImKhhNxPln9/DcYOZgyP4cRedKZYmv3xmNlLV+c3ZqwGfdGBcu2hq+E DJF7DsrxcHc46M2keRZcmkl8032chwwElukhzNtEZoDyFsJb0vieJphCmXCIawIXIXKu erzTsQbYbmOtNqmf+VE6KoMf2nxZRReSMjKWCsc62GdPrt/xpMYDlcOInEPQQBrSbUw2 kITg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=xRxNONB1RzE+TqTqmjee85nSqxc7IalJNYe92j42OR0=; b=hpMXg2FnX8LsnohloDSWn98zVWWc/d6wTvonblOBE9mSjc5f4WozByDk+zwy7Kwsp0 zP/1gBuqVJJZlSJXVH1yzFqGasJLvzJmrZ5YFQyx3tdJFmjaVHirwvAo2PKeGiINz46J OLnUtZ9uWxL/NxOfHaBYMMr6zXIQWYks1MTHGklEJZTYC0bl50mVC+uUXXA+popEA4MT OKA59Xy0ydORKze5WiSyTH7WnLozMZCrrqznkppM8DfVxDEYybgKpvG1TxgoRkSq9PaM 4cbrGt7OEHpNbSpBZVjDJedFH570d+rh2PFSvSOyodwh2samPuD5ik65raLFxm3HacEZ vznQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=PfhLpw6O; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id b5-20020a170902e94500b00188bee77e8fsi2834974pll.35.2022.11.24.22.13.26; Thu, 24 Nov 2022 22:13:39 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=PfhLpw6O; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229794AbiKYGK5 (ORCPT + 99 others); Fri, 25 Nov 2022 01:10:57 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47446 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229766AbiKYGK1 (ORCPT ); Fri, 25 Nov 2022 01:10:27 -0500 Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E612F22BCD; Thu, 24 Nov 2022 22:10:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1669356613; x=1700892613; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=ZRezuqpS1DNAdKTjqyDv8lThqt77vwERhvQMC7EhTww=; b=PfhLpw6OxcCqKtAU/iISkmt6pRayg3b8VWuktnaaOYy5bHc4aJUev5lj DNeVpvN4lNRnt06l2eijMM9dRZoY07w+na2m13SxCrkY92zoJzhDszB9o L0LRTO83XfNrwDKT/+ytX103SxjIDz4S7/QbC2AhoXbByDBXxMWf7hKx9 0KrFHKy5uReZGleu7o0sPVW3ApptntDblqGmCQ8dDuER67F24prd2O4Z8 IgDYKajv/V2Kv1OxPo6rvkCsEUlBJqHQbGy23o5qpU7hh1ZT+4LNzI7/X /lv4K32hiOMve15SEHnmQPW+Ib+RpYmrLkAEdyFVeGZXDvpg0r8KN+E5Z w==; X-IronPort-AV: E=McAfee;i="6500,9779,10541"; a="313116836" X-IronPort-AV: E=Sophos;i="5.96,192,1665471600"; d="scan'208";a="313116836" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Nov 2022 22:10:09 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10541"; a="784838509" X-IronPort-AV: E=Sophos;i="5.96,192,1665471600"; d="scan'208";a="784838509" Received: from embargo.jf.intel.com ([10.165.9.183]) by fmsmga001-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Nov 2022 22:10:08 -0800 From: Yang Weijiang To: seanjc@google.com, pbonzini@redhat.com, jmattson@google.com, kvm@vger.kernel.org, linux-kernel@vger.kernel.org Cc: like.xu.linux@gmail.com, kan.liang@linux.intel.com, wei.w.wang@intel.com, weijiang.yang@intel.com Subject: [PATCH v2 13/15] KVM: x86/vmx: Save/Restore guest Arch LBR Ctrl msr at SMM entry/exit Date: Thu, 24 Nov 2022 23:06:02 -0500 Message-Id: <20221125040604.5051-14-weijiang.yang@intel.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20221125040604.5051-1-weijiang.yang@intel.com> References: <20221125040604.5051-1-weijiang.yang@intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1750447496053994974?= X-GMAIL-MSGID: =?utf-8?q?1750447496053994974?= Per SDM 3B Chapter 18: "IA32_LBR_CTL.LBREn is saved and cleared on #SMI, and restored on RSM", store guest IA32_LBR_CTL in SMRAM and clear LBREn in VMCS at SMM entry, and do reverse things at SMM exit. Suggested-by: Paolo Bonzini Signed-off-by: Yang Weijiang --- arch/x86/kvm/smm.c | 1 + arch/x86/kvm/smm.h | 3 ++- arch/x86/kvm/vmx/vmx.c | 22 ++++++++++++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/arch/x86/kvm/smm.c b/arch/x86/kvm/smm.c index a9c1c2af8d94..5987090b440f 100644 --- a/arch/x86/kvm/smm.c +++ b/arch/x86/kvm/smm.c @@ -86,6 +86,7 @@ static void check_smram_offsets(void) CHECK_SMRAM64_OFFSET(smm_revison, 0xFEFC); CHECK_SMRAM64_OFFSET(smbase, 0xFF00); CHECK_SMRAM64_OFFSET(reserved4, 0xFF04); + CHECK_SMRAM64_OFFSET(arch_lbr_ctl, 0xFF10); CHECK_SMRAM64_OFFSET(ssp, 0xFF18); CHECK_SMRAM64_OFFSET(svm_guest_pat, 0xFF20); CHECK_SMRAM64_OFFSET(svm_host_efer, 0xFF28); diff --git a/arch/x86/kvm/smm.h b/arch/x86/kvm/smm.h index a1cf2ac5bd78..5a6479205d91 100644 --- a/arch/x86/kvm/smm.h +++ b/arch/x86/kvm/smm.h @@ -114,7 +114,8 @@ struct kvm_smram_state_64 { u32 reserved3[3]; u32 smm_revison; u32 smbase; - u32 reserved4[5]; + u32 reserved4[3]; + u64 arch_lbr_ctl; /* ssp and svm_* fields below are not implemented by KVM */ u64 ssp; diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c index 6ad765ea4059..cc782233c075 100644 --- a/arch/x86/kvm/vmx/vmx.c +++ b/arch/x86/kvm/vmx/vmx.c @@ -8006,11 +8006,21 @@ static int vmx_enter_smm(struct kvm_vcpu *vcpu, union kvm_smram *smram) vmx->nested.smm.vmxon = vmx->nested.vmxon; vmx->nested.vmxon = false; vmx_clear_hlt(vcpu); + + if (kvm_cpu_cap_has(X86_FEATURE_ARCH_LBR) && + guest_cpuid_has(vcpu, X86_FEATURE_LM)) { + u64 ctl = vmcs_read64(GUEST_IA32_LBR_CTL); + + smram->smram64.arch_lbr_ctl = ctl; + vmcs_write64(GUEST_IA32_LBR_CTL, ctl & ~ARCH_LBR_CTL_LBREN); + } + return 0; } static int vmx_leave_smm(struct kvm_vcpu *vcpu, const union kvm_smram *smram) { + struct lbr_desc *lbr_desc = vcpu_to_lbr_desc(vcpu); struct vcpu_vmx *vmx = to_vmx(vcpu); int ret; @@ -8027,6 +8037,18 @@ static int vmx_leave_smm(struct kvm_vcpu *vcpu, const union kvm_smram *smram) vmx->nested.nested_run_pending = 1; vmx->nested.smm.guest_mode = false; } + + if (kvm_cpu_cap_has(X86_FEATURE_ARCH_LBR) && + guest_cpuid_has(vcpu, X86_FEATURE_LM)) { + u64 ctl = smram->smram64.arch_lbr_ctl; + + vmcs_write64(GUEST_IA32_LBR_CTL, ctl & ARCH_LBR_CTL_LBREN); + + if (intel_pmu_lbr_is_enabled(vcpu) && + (ctl & ARCH_LBR_CTL_LBREN) && !lbr_desc->event) + intel_pmu_create_guest_lbr_event(vcpu); + } + return 0; } From patchwork Fri Nov 25 04:06:03 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Yang, Weijiang" X-Patchwork-Id: 25838 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:f944:0:0:0:0:0 with SMTP id q4csp3797105wrr; Thu, 24 Nov 2022 22:11:49 -0800 (PST) X-Google-Smtp-Source: AA0mqf4V1bEoMYfS0WI/k8ND5SboKoh/ZSA5tkjePRQIkdV0UjyBxYpA5nVtk0UZJm84ujzGh5oV X-Received: by 2002:a05:6a00:80a:b0:56e:76e2:a375 with SMTP id m10-20020a056a00080a00b0056e76e2a375mr39231979pfk.4.1669356708749; Thu, 24 Nov 2022 22:11:48 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669356708; cv=none; d=google.com; s=arc-20160816; b=O5Yi/jzK2L5pu60zZfmqfzDzt2cSovySZYNRDa+T3zar14E5rym4Ji7TI3XvOF4JXa B2ikVyxGDgpGOsx3wgK3ix9Ki9NUT7VaINg7nS5rMYmxun3AaGPqeJSaJ8hn765zOmKY cEWHXCV7kHEa/2zmXZAannBoqKy29RgMw6p92eTj/lGDFzDYpdyAabAzky1xNafAMegG zvbyb4Oar33IbBwvgymp3lOK4XVb7qpHWeaual9u6/0y6jZrzWM6IosRvSODCh0T8vM/ +msPZ5/dHVo3WJ42CWhSPQ61+MVlOr6GIYvw+HHkrgtkZAMQ1rHEBIX3KjCCdtPz+WFE tHZQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=mxVTYXPqQQ4gCEsn/8lbdhpQojQRuHzYSa8hi+7KE9g=; b=L1YDCVrh2Hww457hjvjETZAfuU/Yx+L79hqpdVtfMCRkFxZh4qIMLURD5NHfoSPCAk dbHPiiy1Bojl0pAIUi4QP5s11pXB+WrnTYuaCuR1vROx49i8wH/IwlJhG2C49RBe4k9P +dft1nyHfAML9/a26k+gaTmPVFYXxAkOlah8sH1sVWAoSADuz7eWqL9DcwjPbATvSlC7 T8e5m5P8nmDpOMgXF6RXpkRInb4drRFIaJEyL8im8y5OtywdeQovGcsgSJZFQH1B09J2 hQzvDy+uNYPxWRIc2fejszkL0hqZvI3G2P4PQD2VYDnQgfTelxXpNRIoZVLiwR8v5AVO Tuhg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b="br/r1axc"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id j18-20020a170902f25200b00176e58d4a4esi2793485plc.100.2022.11.24.22.11.35; Thu, 24 Nov 2022 22:11:48 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b="br/r1axc"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229810AbiKYGKd (ORCPT + 99 others); Fri, 25 Nov 2022 01:10:33 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46720 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229719AbiKYGKO (ORCPT ); Fri, 25 Nov 2022 01:10:14 -0500 Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7B917222A9; Thu, 24 Nov 2022 22:10:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1669356612; x=1700892612; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=ocg4R/4Chs+EqwuQwqmxE6TqaZ6QtQMHjlZtRSIWBto=; b=br/r1axc9nvIgqklZl/mhwQZGd0fdSFmxGarjdHPykYYezZGddVamWCx lEErTylk7bIKdiA2TqCRlsTHL7wBP+i8wLv3YjuBta0/dVGY9ud47YYL0 QKrjfq1uc7uS4/udB0c+LmUS3xF+UQOCRq+Icn9XJ5LYn+0edg5Km8IaX KccXkTQr4T/Xiv4J/ZGxf1IRDS87/t0HIw6FAGkhElF/30R/vObDqgggw CdPdnU4IMP/X3fu04IiCzZZW86dDn6rtGtaBnddiZePK6U53x91TReDj2 4T89+zMyi8RwbYlD3aJBnNA83W0Xldq80XvJcGDPxRlajp+1OnDN+SiXM g==; X-IronPort-AV: E=McAfee;i="6500,9779,10541"; a="313116839" X-IronPort-AV: E=Sophos;i="5.96,192,1665471600"; d="scan'208";a="313116839" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Nov 2022 22:10:09 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10541"; a="784838512" X-IronPort-AV: E=Sophos;i="5.96,192,1665471600"; d="scan'208";a="784838512" Received: from embargo.jf.intel.com ([10.165.9.183]) by fmsmga001-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Nov 2022 22:10:09 -0800 From: Yang Weijiang To: seanjc@google.com, pbonzini@redhat.com, jmattson@google.com, kvm@vger.kernel.org, linux-kernel@vger.kernel.org Cc: like.xu.linux@gmail.com, kan.liang@linux.intel.com, wei.w.wang@intel.com, weijiang.yang@intel.com Subject: [PATCH v2 14/15] KVM: x86: Add Arch LBR data MSR access interface Date: Thu, 24 Nov 2022 23:06:03 -0500 Message-Id: <20221125040604.5051-15-weijiang.yang@intel.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20221125040604.5051-1-weijiang.yang@intel.com> References: <20221125040604.5051-1-weijiang.yang@intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1750447380223545848?= X-GMAIL-MSGID: =?utf-8?q?1750447380223545848?= Arch LBR MSRs are xsave-supported, but they're operated as "independent" xsave feature by PMU code, i.e., during thread/process context switch, the MSRs are saved/restored with perf_event_task_sched_{in|out} instead of generic kernel fpu switch code, i.e.,save_fpregs_to_fpstate() and restore_fpregs_from_fpstate(). When vcpu guest/host fpu state swap happens, Arch LBR MSRs are retained so they can be accessed directly. Signed-off-by: Yang Weijiang Reviewed-by: Kan Liang --- arch/x86/kvm/vmx/pmu_intel.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/arch/x86/kvm/vmx/pmu_intel.c b/arch/x86/kvm/vmx/pmu_intel.c index b57944d5e7d8..241128972776 100644 --- a/arch/x86/kvm/vmx/pmu_intel.c +++ b/arch/x86/kvm/vmx/pmu_intel.c @@ -410,6 +410,11 @@ static int intel_pmu_get_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info) msr_info->data = vmcs_read64(GUEST_IA32_LBR_CTL); } return 0; + case MSR_ARCH_LBR_FROM_0 ... MSR_ARCH_LBR_FROM_0 + 31: + case MSR_ARCH_LBR_TO_0 ... MSR_ARCH_LBR_TO_0 + 31: + case MSR_ARCH_LBR_INFO_0 ... MSR_ARCH_LBR_INFO_0 + 31: + rdmsrl(msr_info->index, msr_info->data); + return 0; default: if ((pmc = get_gp_pmc(pmu, msr, MSR_IA32_PERFCTR0)) || (pmc = get_gp_pmc(pmu, msr, MSR_IA32_PMC0))) { @@ -528,6 +533,11 @@ static int intel_pmu_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info) (data & ARCH_LBR_CTL_LBREN)) intel_pmu_create_guest_lbr_event(vcpu); return 0; + case MSR_ARCH_LBR_FROM_0 ... MSR_ARCH_LBR_FROM_0 + 31: + case MSR_ARCH_LBR_TO_0 ... MSR_ARCH_LBR_TO_0 + 31: + case MSR_ARCH_LBR_INFO_0 ... MSR_ARCH_LBR_INFO_0 + 31: + wrmsrl(msr_info->index, msr_info->data); + return 0; default: if ((pmc = get_gp_pmc(pmu, msr, MSR_IA32_PERFCTR0)) || (pmc = get_gp_pmc(pmu, msr, MSR_IA32_PMC0))) { From patchwork Fri Nov 25 04:06:04 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Yang, Weijiang" X-Patchwork-Id: 25840 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:f944:0:0:0:0:0 with SMTP id q4csp3797332wrr; Thu, 24 Nov 2022 22:12:23 -0800 (PST) X-Google-Smtp-Source: AA0mqf4+sfNPBs5pPnyjAWXUaTFqfiqJ9BzJDiZOISNS/hzwK7M+FzExwC5uDv8WI0aTCfx7wsZg X-Received: by 2002:a17:90a:3b47:b0:218:f54e:5abb with SMTP id t7-20020a17090a3b4700b00218f54e5abbmr8823094pjf.106.1669356743636; Thu, 24 Nov 2022 22:12:23 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669356743; cv=none; d=google.com; s=arc-20160816; b=vuGvVY9RIP3AGMY/Gw4NdWmbf+23p7dw3EaxhM7mJeC1nKRmoLC+TxpHoFz94cpdKw blb9nDGv01TiIGglmBPL1NQXdIcgBlJEfV1dtIyABMQ9XwktVySsLfxGHfrRCUB7AW5t lA5s9CUhN7NuE6fU3CHNfeYoNAudsKEQx5obvkwnRy8ToFSWnY4kXF9M8tdfuaortoCc VH7wvHwIGMVNnd+I9cny1K/nGdB7PKrKeWWabpmHeuchz3zhy6RReXyvLC9EWV/v7DaO SG0ooTe7xmT4MSgwxRdA6Qo3HwKEr9HuV9KRacoZn4XXaceqvdjRosIQ1Q2cOLVfldWv y5wQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=vS2MzqTDlQToLeZxOZ5EokR5zfc8UftuZTF7WEBsIMw=; b=h3d3zMls9cIXUO+II/TW8zcmNoaxrpFK/8BQoI8SSttpQO/5UJqyF2Cxa5CgXUSgbH D9sQ+VrCGDYiTFz02EsHixZh59j/d7faCqMc5cws5S/TpTsuq11V58vMz9nQy/X+vHmO Imp/QwcdXJf685HKf0X+fWzGILnKBYPwPLiK1GNyr7IEw3kGy6mBohIHWgrmmxbBlyIw 86QuDrjH97diM5/M+xBm0L2IpCm/mams4BJ9oc2E0V7mk+7ObGhKiAMHhL7KS/n0QhZL gG6yMI3C8Y0i25HPYSUYWxw5lHv9iDz+BwW8DWFViUF2T3nMhkpHFbrOtwed40Mtp7uz xMfA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=Yt1g5DEN; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id e2-20020a637442000000b00476fddeafe1si2237175pgn.394.2022.11.24.22.12.10; Thu, 24 Nov 2022 22:12:23 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=Yt1g5DEN; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229610AbiKYGKj (ORCPT + 99 others); Fri, 25 Nov 2022 01:10:39 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46892 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229724AbiKYGKO (ORCPT ); Fri, 25 Nov 2022 01:10:14 -0500 Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B8B0C220FC; Thu, 24 Nov 2022 22:10:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1669356612; x=1700892612; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=uj6HM1hQ0tM0PgUYcKz/8p4PHCsF17smG+1Rma8X0Ak=; b=Yt1g5DEN6KsaWsu/re+tUyKxHUPOO/UqT5t2+lo+i8T93739D1OWm6+w bL3j+QCi0sqvJdUUoMs/20pM+gJCe8LjnQEwYy3SZwAg+5niTPm8cdC9j ee00VLQb6J1HXW85Is+XAnWEzbdF3SVgBTy9kGEBVo1qpyF2R0IEbCc3x T2wfRA4bV3W6/qg8QDYYyUYgFiYRmHuMGQYVen2pRCFrg4jCoctQtD+7A Hlx4MmYIRQRcZOpLHzE+38mXbyarszQX4sqzgnnak+Nzc8s0rWnL5Xu53 MPPvwoJ6UBxpRXQAo3b62RVqfiEInGY35BQRBEBMzoTofqdivbLzehcGs Q==; X-IronPort-AV: E=McAfee;i="6500,9779,10541"; a="313116844" X-IronPort-AV: E=Sophos;i="5.96,192,1665471600"; d="scan'208";a="313116844" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Nov 2022 22:10:10 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10541"; a="784838516" X-IronPort-AV: E=Sophos;i="5.96,192,1665471600"; d="scan'208";a="784838516" Received: from embargo.jf.intel.com ([10.165.9.183]) by fmsmga001-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Nov 2022 22:10:09 -0800 From: Yang Weijiang To: seanjc@google.com, pbonzini@redhat.com, jmattson@google.com, kvm@vger.kernel.org, linux-kernel@vger.kernel.org Cc: like.xu.linux@gmail.com, kan.liang@linux.intel.com, wei.w.wang@intel.com, weijiang.yang@intel.com, Like Xu Subject: [PATCH v2 15/15] KVM: x86/cpuid: Advertise Arch LBR feature in CPUID Date: Thu, 24 Nov 2022 23:06:04 -0500 Message-Id: <20221125040604.5051-16-weijiang.yang@intel.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20221125040604.5051-1-weijiang.yang@intel.com> References: <20221125040604.5051-1-weijiang.yang@intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1750447416405318651?= X-GMAIL-MSGID: =?utf-8?q?1750447416405318651?= Add Arch LBR feature bit in CPU cap-mask to expose the feature. Only max LBR depth is supported for guest, and it's consistent with host Arch LBR settings. Co-developed-by: Like Xu Signed-off-by: Like Xu Signed-off-by: Yang Weijiang Reviewed-by: Kan Liang --- arch/x86/kvm/cpuid.c | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c index 85e3df6217af..60b3c591d462 100644 --- a/arch/x86/kvm/cpuid.c +++ b/arch/x86/kvm/cpuid.c @@ -134,6 +134,19 @@ static int kvm_check_cpuid(struct kvm_vcpu *vcpu, if (vaddr_bits != 48 && vaddr_bits != 57 && vaddr_bits != 0) return -EINVAL; } + if (kvm_cpu_cap_has(X86_FEATURE_ARCH_LBR)) { + best = cpuid_entry2_find(entries, nent, 0x1c, 0); + if (best) { + unsigned int eax, ebx, ecx, edx; + + /* Reject user-space CPUID if depth is different from host's.*/ + cpuid_count(0x1c, 0, &eax, &ebx, &ecx, &edx); + + if ((eax & 0xff) && + (best->eax & 0xff) != BIT(fls(eax & 0xff) - 1)) + return -EINVAL; + } + } /* * Exposing dynamic xfeatures to the guest requires additional @@ -652,7 +665,7 @@ void kvm_set_cpu_caps(void) F(SPEC_CTRL_SSBD) | F(ARCH_CAPABILITIES) | F(INTEL_STIBP) | F(MD_CLEAR) | F(AVX512_VP2INTERSECT) | F(FSRM) | F(SERIALIZE) | F(TSXLDTRK) | F(AVX512_FP16) | - F(AMX_TILE) | F(AMX_INT8) | F(AMX_BF16) + F(AMX_TILE) | F(AMX_INT8) | F(AMX_BF16) | F(ARCH_LBR) ); /* TSC_ADJUST and ARCH_CAPABILITIES are emulated in software. */ @@ -1074,6 +1087,27 @@ static inline int __do_cpuid_func(struct kvm_cpuid_array *array, u32 function) goto out; } break; + /* Architectural LBR */ + case 0x1c: { + u32 lbr_depth_mask = entry->eax & 0xff; + + if (!lbr_depth_mask || + !kvm_cpu_cap_has(X86_FEATURE_ARCH_LBR)) { + entry->eax = entry->ebx = entry->ecx = entry->edx = 0; + break; + } + /* + * KVM only exposes the maximum supported depth, which is the + * fixed value used on the host side. + * KVM doesn't allow VMM userspace to adjust LBR depth because + * guest LBR emulation depends on the configuration of host LBR + * driver. + */ + lbr_depth_mask = BIT((fls(lbr_depth_mask) - 1)); + entry->eax &= ~0xff; + entry->eax |= lbr_depth_mask; + break; + } /* Intel AMX TILE */ case 0x1d: if (!kvm_cpu_cap_has(X86_FEATURE_AMX_TILE)) {