From patchwork Mon Jun 1 22:24:13 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jim Mattson X-Patchwork-Id: 11582765 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 22E3D912 for ; Mon, 1 Jun 2020 22:24:41 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 0B8372076B for ; Mon, 1 Jun 2020 22:24:41 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="D4EjhKlj" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728779AbgFAWYk (ORCPT ); Mon, 1 Jun 2020 18:24:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50756 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728216AbgFAWYj (ORCPT ); Mon, 1 Jun 2020 18:24:39 -0400 Received: from mail-yb1-xb49.google.com (mail-yb1-xb49.google.com [IPv6:2607:f8b0:4864:20::b49]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 838E1C061A0E for ; Mon, 1 Jun 2020 15:24:38 -0700 (PDT) Received: by mail-yb1-xb49.google.com with SMTP id h129so14284840ybc.3 for ; Mon, 01 Jun 2020 15:24:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=8LGvgjxPtHovpdfipQl4OzIV0OZgS4Psratbe52QpYI=; b=D4EjhKljo66zAmzcE74W2Z6+2+uQP/r15aP1E7YXkTeFsGejV8IN0LAr9ks2Qn79iS 58Oifvol/eu8k2vKR5YcmX6vx1a5USb1rNTyTO/ksTT4mPKBMe3nhgyHhja5+N2l+GPq CaEidxMPzHumpImm8hDSYEGEZeIFeECfLLVks0kGFgYaTi77floy5w0pYpm17enssPbG sixq+sMRjGZg37jQ779JWmWp2uSIGea1GYj74IIdPQHxggRkLDdqP3GaHnhiFmP8Cj7e c+KpmDrMzyiMccxo3Jp7VuToIQDAeLo+KMGKs45qkO+dvgUvWAfoHEZ5d5H4x+WyvOcY 2wJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=8LGvgjxPtHovpdfipQl4OzIV0OZgS4Psratbe52QpYI=; b=HZTLlzWVlYOvkN0dgaEwtmOjsJdF+ujzrOhTXfKUHkSjevUEAs002Dms9xTvEBKPQv htmfJGOxdWAzjXa3zZCFRDjmQP2jOqxncRaUbm/kC+Fxf0CgpCg1QPYsZTjGWDvkBn2r kRc5227BeQT75rPpXZFQrnEUmSHfQLNDsoERcnXlX7c60J4gjuBii9PqvQ6t/VhwEwvC y9OBDBg6pvQ5DcTSMNf6FJimZK72blC6QRm7IDTWP6fF801UdrBrKFePPEZP7ydLF7m/ uqf3rbV5QoChEjnU8csIJ91fNaubf9Tk3HaRmuyY+UZPWhlgfpQINXX/PHCv8CDjZLIL tNgQ== X-Gm-Message-State: AOAM5332kdU6rG15SGLR6cpdINnErwgwm2tRu2tyXWV8Uq/NC/xunib8 qN7LKcpHgWnhAXBh3WnqU6tAve7IfQv5xmGDGrX2MBZpzMaZ8wJB8hVwJVEZDEtRO8A/ghV82eG NJuYHtr9Igxuyj312d+Kfa5aWhWWGohcURVXJDAdvniC16Jlw7EpCzPck2CrL98c= X-Google-Smtp-Source: ABdhPJwDJsoqPna/zuF6W+qLXYqSsCNqtDOzJxdnOsvSqE35jPUb+ipOCIUXYKgn+PgPdxRyFeEsRHZU237UGA== X-Received: by 2002:a25:ab4a:: with SMTP id u68mr13912680ybi.271.1591050277722; Mon, 01 Jun 2020 15:24:37 -0700 (PDT) Date: Mon, 1 Jun 2020 15:24:13 -0700 In-Reply-To: <20200601222416.71303-1-jmattson@google.com> Message-Id: <20200601222416.71303-2-jmattson@google.com> Mime-Version: 1.0 References: <20200601222416.71303-1-jmattson@google.com> X-Mailer: git-send-email 2.27.0.rc2.251.g90737beb825-goog Subject: [PATCH v3 1/4] kvm: svm: Prefer vcpu->cpu to raw_smp_processor_id() From: Jim Mattson To: kvm@vger.kernel.org, Paolo Bonzini Cc: Liran Alon , Oliver Upton , Peter Shier , Jim Mattson Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org The current logical processor id is cached in vcpu->cpu. Use it instead of raw_smp_processor_id() when a kvm_vcpu struct is available. Signed-off-by: Jim Mattson Reviewed-by: Oliver Upton --- arch/x86/kvm/svm/svm.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c index 9e333b91ff78..f0dd481be435 100644 --- a/arch/x86/kvm/svm/svm.c +++ b/arch/x86/kvm/svm/svm.c @@ -2990,21 +2990,18 @@ static int handle_exit(struct kvm_vcpu *vcpu, fastpath_t exit_fastpath) static void reload_tss(struct kvm_vcpu *vcpu) { - int cpu = raw_smp_processor_id(); + struct svm_cpu_data *sd = per_cpu(svm_data, vcpu->cpu); - struct svm_cpu_data *sd = per_cpu(svm_data, cpu); sd->tss_desc->type = 9; /* available 32/64-bit TSS */ load_TR_desc(); } static void pre_svm_run(struct vcpu_svm *svm) { - int cpu = raw_smp_processor_id(); - - struct svm_cpu_data *sd = per_cpu(svm_data, cpu); + struct svm_cpu_data *sd = per_cpu(svm_data, svm->vcpu.cpu); if (sev_guest(svm->vcpu.kvm)) - return pre_sev_run(svm, cpu); + return pre_sev_run(svm, svm->vcpu.cpu); /* FIXME: handle wraparound of asid_generation */ if (svm->asid_generation != sd->asid_generation) From patchwork Mon Jun 1 22:24:14 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jim Mattson X-Patchwork-Id: 11582767 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 9AFEC1392 for ; Mon, 1 Jun 2020 22:24:41 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 828B6207BB for ; Mon, 1 Jun 2020 22:24:41 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="cX/Y7aSS" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728825AbgFAWYk (ORCPT ); Mon, 1 Jun 2020 18:24:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50762 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728216AbgFAWYk (ORCPT ); Mon, 1 Jun 2020 18:24:40 -0400 Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 54B65C061A0E for ; Mon, 1 Jun 2020 15:24:40 -0700 (PDT) Received: by mail-yb1-xb4a.google.com with SMTP id e192so12763610ybf.17 for ; Mon, 01 Jun 2020 15:24:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=esuDLQ5YIiqnB7jmaMDCOvaz2pEkozZla8OGqrKe1Bg=; b=cX/Y7aSSYGVar3zQ/yaxlnlBTSQeonQOF0rrTUMXf6R+3APe0xdO30EAvm40NHceDA 8GLkLDQN9Fd7luNM1yxJx3IvkMIiHxR9rrmb8Jn6c6R5j/QKxvp9E37nsKLJoBm5X+GW ZSfC+ToubfdrLIJqet9X0fYZMh0Wo61gEoaS9bn13VCZOeQzIEjzxz5/wHO1WbEkQSad pDSWplTnJ7avtOZKFJl54/TLv4Ud3LrZV+aO8eNv/GglvWp+dujm6Xe1u4CEqPGEMErD Yl05N8DVHrBaQCY19D31b83zsodFxcLH/Pv7IXi10jnswFSPTX3iBqc8kJwaamRcsaSS l9tA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=esuDLQ5YIiqnB7jmaMDCOvaz2pEkozZla8OGqrKe1Bg=; b=Mkz9V5ZagpjybPg8f0ufeMRpelPem9IC5fHFXvSTcSRDkOK63tiuGzqt5CfwaDP5zZ UU1S2y4YMgPG0pKiePyfYnicZ20iKbKpY0SR/eGzXJJwNIZsT5RKavhrSxS4VwqljIBi A/AHe2q0C+nKvNfBK9wr5xaLxCs/ZX+nK7uWXNlP9Q7/WunTagUayIT3miSgmHrVoca6 WTl8F42WI8BJ3hdobHourqhzQZVGPqIkReYt78vhL3uCQa0akD8MfsV5PJ0CNwQ2eWAT xon/W+i6yr/FqaX/Aci764cCQrKQ2J32M6WL6rk2bV4r9IbY6CFHHcuYuwkUx5AGq6cO S/oQ== X-Gm-Message-State: AOAM531kgmfFzwRB82Hi+blSBf5ppD/vBm9ubMFrsXbOmpnvgysQc36g 5HDh74+ahRSTYM0WVnbV6WrhJHfi4q0pU+aeO1xSI2U++cZ6UM/nytsiLsqKubluyikdFCFT3R3 yLoLWZTZwH0XyTc+wyjg3UnKysxrbt4Or0QyOUPbo1mzfV23Aq335ozGvnQGZo4c= X-Google-Smtp-Source: ABdhPJyvPtpTdwRYcC2FQBjYbvWLX3qfT2kg9ta3dTGop5pTXN+yBvW9CM7uBa6KT1QGKytyNejPjTvx/3Sgnw== X-Received: by 2002:a25:354:: with SMTP id 81mr39089015ybd.257.1591050279334; Mon, 01 Jun 2020 15:24:39 -0700 (PDT) Date: Mon, 1 Jun 2020 15:24:14 -0700 In-Reply-To: <20200601222416.71303-1-jmattson@google.com> Message-Id: <20200601222416.71303-3-jmattson@google.com> Mime-Version: 1.0 References: <20200601222416.71303-1-jmattson@google.com> X-Mailer: git-send-email 2.27.0.rc2.251.g90737beb825-goog Subject: [PATCH v3 2/4] kvm: svm: Always set svm->last_cpu on VMRUN From: Jim Mattson To: kvm@vger.kernel.org, Paolo Bonzini Cc: Liran Alon , Oliver Upton , Peter Shier , Jim Mattson Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org Previously, this field was only set when using SEV. Set it for all vCPU configurations, so that it can be communicated to userspace for diagnosing potential hardware errors. Signed-off-by: Jim Mattson Reviewed-by: Oliver Upton Reviewed-by: Peter Shier --- arch/x86/kvm/svm/sev.c | 1 - arch/x86/kvm/svm/svm.c | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/x86/kvm/svm/sev.c b/arch/x86/kvm/svm/sev.c index 89f7f3aebd31..aa61d5d1e7f3 100644 --- a/arch/x86/kvm/svm/sev.c +++ b/arch/x86/kvm/svm/sev.c @@ -1184,7 +1184,6 @@ void pre_sev_run(struct vcpu_svm *svm, int cpu) svm->last_cpu == cpu) return; - svm->last_cpu = cpu; sd->sev_vmcbs[asid] = svm->vmcb; svm->vmcb->control.tlb_ctl = TLB_CONTROL_FLUSH_ASID; mark_dirty(svm->vmcb, VMCB_ASID); diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c index f0dd481be435..442dbb763639 100644 --- a/arch/x86/kvm/svm/svm.c +++ b/arch/x86/kvm/svm/svm.c @@ -3394,6 +3394,7 @@ static fastpath_t svm_vcpu_run(struct kvm_vcpu *vcpu) */ x86_spec_ctrl_set_guest(svm->spec_ctrl, svm->virt_spec_ctrl); + svm->last_cpu = vcpu->cpu; __svm_vcpu_run(svm->vmcb_pa, (unsigned long *)&svm->vcpu.arch.regs); #ifdef CONFIG_X86_64 From patchwork Mon Jun 1 22:24:15 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jim Mattson X-Patchwork-Id: 11582769 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 87DEE92A for ; Mon, 1 Jun 2020 22:24:43 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 6F4C32076B for ; Mon, 1 Jun 2020 22:24:43 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="syFUZnRW" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728861AbgFAWYm (ORCPT ); Mon, 1 Jun 2020 18:24:42 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50770 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728829AbgFAWYm (ORCPT ); Mon, 1 Jun 2020 18:24:42 -0400 Received: from mail-qv1-xf4a.google.com (mail-qv1-xf4a.google.com [IPv6:2607:f8b0:4864:20::f4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D7AFCC061A0E for ; Mon, 1 Jun 2020 15:24:41 -0700 (PDT) Received: by mail-qv1-xf4a.google.com with SMTP id s20so1550787qvw.12 for ; Mon, 01 Jun 2020 15:24:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=w71DdQoWum2Kp6HNHDyrfluiKwehR5flNSkldp7Yl4Q=; b=syFUZnRWEfAhTOeiMM2UmOa94rJraaS8S2V/4s+f3ryC8Szgv7pkdwhUTawue8wKd9 fnVvScoBeennLI0tfOSk+e66+zsAPTZlebqPo9vuJhW63dr6UJuJ6WBUMGqlFLZANZH6 fmB8DmSRYZ+Zjb7OjVWgESS6IGdn3ze6AfNgYkCuHL+pn0TcRBCzSmUsVOabTX7YuA0a T52QpNWIgS/QQs57bkDQQEJD2bkrq6/eXFFL5LTgga0orvPu/b63zPFF8C1QnE4lcgoO S4YXBSUL/AHkbIa9kL1Y/AnnAwzB+OuLjNdNf2sw6OC2S+4bo+RrWb3VXWcdPkjFSF3q pHhQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=w71DdQoWum2Kp6HNHDyrfluiKwehR5flNSkldp7Yl4Q=; b=lbbh1z8UHVh13orSunPQQeo18lsehypN+K4qDCwd/AeAJsmn+vUI2L/TjFCDOO6h8n GBDuNR+exSJHvu7uft5xR3XbV2R7Md8WkgviCEMwHz8u8S0xn8TNqEvbTzZ4edUouvlC SwBY6hmYHxv0NtOxIIQdJENBhHGTJ0B+Ot9Ikl+AYwn1VAwUy33BZmC5EG80vv++rY5H rmrM0cuiUCnptZv68Rj14rShX+UfHc5hmyQzwBOpDn0XXYcX3dsGVHKeWQKvyESvBEFw Lp8Q4mZ3TvMsPH1yZ7d5p5aDnRcw0qIw/+PNHzEaQdE/hNjxib8pwhnzFSRJydv/z3L6 KS8A== X-Gm-Message-State: AOAM532Rs2HuyYkrKB0z8kyJmnVGoaC/Tw0juwratTrmgzLMMRoL+NuP GDQUIBl0Vcr2/EOkGFaOKNwmjby57EYE9J4MlRG+1ItVn96M15qlwLjdmDtgnttvEHuHaTSeS/B faO1bGhCr1FpNo7GHQo1cgq2HtWtsSEPV5Izab8VBWncmAES2PTtSKFJki8Qa8q8= X-Google-Smtp-Source: ABdhPJzMQUW3JKYyhnldZa4MUjZO9LfwTQGgeRWfBFwulRuDoxg/UZ03Bbm0B350ww9DDFBfwlJgcrv+V4m++Q== X-Received: by 2002:a05:6214:6a1:: with SMTP id s1mr22730957qvz.46.1591050280897; Mon, 01 Jun 2020 15:24:40 -0700 (PDT) Date: Mon, 1 Jun 2020 15:24:15 -0700 In-Reply-To: <20200601222416.71303-1-jmattson@google.com> Message-Id: <20200601222416.71303-4-jmattson@google.com> Mime-Version: 1.0 References: <20200601222416.71303-1-jmattson@google.com> X-Mailer: git-send-email 2.27.0.rc2.251.g90737beb825-goog Subject: [PATCH v3 3/4] kvm: vmx: Add last_cpu to struct vcpu_vmx From: Jim Mattson To: kvm@vger.kernel.org, Paolo Bonzini Cc: Liran Alon , Oliver Upton , Peter Shier , Jim Mattson Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org As we already do in svm, record the last logical processor on which a vCPU has run, so that it can be communicated to userspace for potential hardware errors. Signed-off-by: Jim Mattson Reviewed-by: Oliver Upton Reviewed-by: Peter Shier --- arch/x86/kvm/vmx/vmx.c | 1 + arch/x86/kvm/vmx/vmx.h | 3 +++ 2 files changed, 4 insertions(+) diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c index 170cc76a581f..42856970d3b8 100644 --- a/arch/x86/kvm/vmx/vmx.c +++ b/arch/x86/kvm/vmx/vmx.c @@ -6730,6 +6730,7 @@ static fastpath_t vmx_vcpu_run(struct kvm_vcpu *vcpu) if (vcpu->arch.cr2 != read_cr2()) write_cr2(vcpu->arch.cr2); + vmx->last_cpu = vcpu->cpu; vmx->fail = __vmx_vcpu_run(vmx, (unsigned long *)&vcpu->arch.regs, vmx->loaded_vmcs->launched); diff --git a/arch/x86/kvm/vmx/vmx.h b/arch/x86/kvm/vmx/vmx.h index 672c28f17e49..8a1e833cf4fb 100644 --- a/arch/x86/kvm/vmx/vmx.h +++ b/arch/x86/kvm/vmx/vmx.h @@ -302,6 +302,9 @@ struct vcpu_vmx { u64 ept_pointer; struct pt_desc pt_desc; + + /* which host CPU was used for running this vcpu */ + unsigned int last_cpu; }; enum ept_pointers_status { From patchwork Mon Jun 1 22:24:16 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jim Mattson X-Patchwork-Id: 11582771 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 3641B92A for ; Mon, 1 Jun 2020 22:24:45 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 1E0872068D for ; Mon, 1 Jun 2020 22:24:45 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="tBEjZydn" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728886AbgFAWYo (ORCPT ); Mon, 1 Jun 2020 18:24:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50776 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728846AbgFAWYn (ORCPT ); Mon, 1 Jun 2020 18:24:43 -0400 Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 77596C061A0E for ; Mon, 1 Jun 2020 15:24:43 -0700 (PDT) Received: by mail-yb1-xb4a.google.com with SMTP id u186so5814996ybf.1 for ; Mon, 01 Jun 2020 15:24:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=RZe2iTzkFTucjCz18OJF8aeEcSZVzJ9FXQMhSY4aNNY=; b=tBEjZydnJuG7cxcCB/fGHGZBOUUo519sHl42fHE0BUg6Wmb5k/Xu8ubqJIXxKq44lz cCOOW4oPWJNge5rMItHeADlsR+TGuFzhCPWceNB77Nb7DlXErjsbU3xD3vIkY3kMLUNz TOnXJiwmrjNcguImYblJrEuuH7Wb7ND7+oYtZo5vxlG1kpulgeh+Jx5kUrBx+N2mvMjb WdflAJGupZmJbTiq60tLwREcoTJvptjEtsIlFu1ClZGCEJwYP1JK7K5TR1hAVvmRbXan 2cDRsIgOySnaAFbydMe7wOhVJgiCdMjMmHumY7+X/w1cE3o/2chlogzET1vfBW+1smOd xGAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=RZe2iTzkFTucjCz18OJF8aeEcSZVzJ9FXQMhSY4aNNY=; b=mxrjCUWO7Aq3ZGqdtNKw2xBUGxK5ud1D2hRlY1Wi+x77qKjDF5yx/llt5BZw2rNidy tZDL6mqrlXp0/zEBHDUXjEOnLheFh8BAPEuwsMJxwpH0bGWgf24IT7ScUf2rl+v3sgN1 9pEDKoiognA78gpSL+tFgf+zNQk63rVHvrzNm3j/5HKp0Cs7yhoLBF+adhrBsJyRCSCt 7z43myZ6U206Aw+lUBeTmawX33FiHEpRClweXDciVCVDaD3GYd8LyRtI5i/tEYZaQant 8ifeqDfdvknbMVjWVY4UVaejR2nub9SqWqwU+eKn0lU69evSPcAF1sSFr9qBzR4OepAl D2rw== X-Gm-Message-State: AOAM532V7SHK001+pyzQTU2QccTo7r7bGIBOrNsccdo+lT0dV/tC6mDW 2H9sjJFvuAB0kZTUDaSsZ/fvVwqiDAGfP/iGw9/nTjdyDsfk+HxfKdZZjtTtoWW15ER/EGZge7v hjDchTEJFjzQPhsSjP8ore91KjQN53McibUOAMYC5uzOYu6FZZksboCkrmgoBnQo= X-Google-Smtp-Source: ABdhPJwJUXlI3D2CG+jYW12H4k6d3YFl+78drRER2bRtjjDi5PiJ4Cv4ge6kjBAfKEs3vqQqDTAlCrBGGHBe+Q== X-Received: by 2002:a05:6902:1003:: with SMTP id w3mr19068739ybt.174.1591050282468; Mon, 01 Jun 2020 15:24:42 -0700 (PDT) Date: Mon, 1 Jun 2020 15:24:16 -0700 In-Reply-To: <20200601222416.71303-1-jmattson@google.com> Message-Id: <20200601222416.71303-5-jmattson@google.com> Mime-Version: 1.0 References: <20200601222416.71303-1-jmattson@google.com> X-Mailer: git-send-email 2.27.0.rc2.251.g90737beb825-goog Subject: [PATCH v3 4/4] kvm: x86: Add "last CPU" to some KVM_EXIT information From: Jim Mattson To: kvm@vger.kernel.org, Paolo Bonzini Cc: Liran Alon , Oliver Upton , Peter Shier , Jim Mattson Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org More often than not, a failed VM-entry in an x86 production environment is induced by a defective CPU. To help identify the bad hardware, include the id of the last logical CPU to run a vCPU in the information provided to userspace on a KVM exit for failed VM-entry or for KVM internal errors not associated with emulation. The presence of this additional information is indicated by a new capability, KVM_CAP_LAST_CPU. Signed-off-by: Jim Mattson Reviewed-by: Oliver Upton Reviewed-by: Peter Shier --- Documentation/virt/kvm/api.rst | 1 + arch/x86/kvm/svm/svm.c | 4 +++- arch/x86/kvm/vmx/vmx.c | 10 ++++++++-- arch/x86/kvm/x86.c | 1 + include/uapi/linux/kvm.h | 2 ++ 5 files changed, 15 insertions(+), 3 deletions(-) diff --git a/Documentation/virt/kvm/api.rst b/Documentation/virt/kvm/api.rst index d280af5345df..17db8b68c165 100644 --- a/Documentation/virt/kvm/api.rst +++ b/Documentation/virt/kvm/api.rst @@ -4792,6 +4792,7 @@ hardware_exit_reason. /* KVM_EXIT_FAIL_ENTRY */ struct { __u64 hardware_entry_failure_reason; + __u32 cpu; /* if KVM_LAST_CPU */ } fail_entry; If exit_reason is KVM_EXIT_FAIL_ENTRY, the vcpu could not be run due diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c index 442dbb763639..938be4172bab 100644 --- a/arch/x86/kvm/svm/svm.c +++ b/arch/x86/kvm/svm/svm.c @@ -2945,6 +2945,7 @@ static int handle_exit(struct kvm_vcpu *vcpu, fastpath_t exit_fastpath) kvm_run->exit_reason = KVM_EXIT_FAIL_ENTRY; kvm_run->fail_entry.hardware_entry_failure_reason = svm->vmcb->control.exit_code; + kvm_run->fail_entry.cpu = svm->last_cpu; dump_vmcb(vcpu); return 0; } @@ -2968,8 +2969,9 @@ static int handle_exit(struct kvm_vcpu *vcpu, fastpath_t exit_fastpath) vcpu->run->exit_reason = KVM_EXIT_INTERNAL_ERROR; vcpu->run->internal.suberror = KVM_INTERNAL_ERROR_UNEXPECTED_EXIT_REASON; - vcpu->run->internal.ndata = 1; + vcpu->run->internal.ndata = 2; vcpu->run->internal.data[0] = exit_code; + vcpu->run->internal.data[1] = svm->last_cpu; return 0; } diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c index 42856970d3b8..da5490b94704 100644 --- a/arch/x86/kvm/vmx/vmx.c +++ b/arch/x86/kvm/vmx/vmx.c @@ -4758,10 +4758,11 @@ static int handle_exception_nmi(struct kvm_vcpu *vcpu) !(is_page_fault(intr_info) && !(error_code & PFERR_RSVD_MASK))) { vcpu->run->exit_reason = KVM_EXIT_INTERNAL_ERROR; vcpu->run->internal.suberror = KVM_INTERNAL_ERROR_SIMUL_EX; - vcpu->run->internal.ndata = 3; + vcpu->run->internal.ndata = 4; vcpu->run->internal.data[0] = vect_info; vcpu->run->internal.data[1] = intr_info; vcpu->run->internal.data[2] = error_code; + vcpu->run->internal.data[3] = vmx->last_cpu; return 0; } @@ -5983,6 +5984,7 @@ static int vmx_handle_exit(struct kvm_vcpu *vcpu, fastpath_t exit_fastpath) vcpu->run->exit_reason = KVM_EXIT_FAIL_ENTRY; vcpu->run->fail_entry.hardware_entry_failure_reason = exit_reason; + vcpu->run->fail_entry.cpu = vmx->last_cpu; return 0; } @@ -5991,6 +5993,7 @@ static int vmx_handle_exit(struct kvm_vcpu *vcpu, fastpath_t exit_fastpath) vcpu->run->exit_reason = KVM_EXIT_FAIL_ENTRY; vcpu->run->fail_entry.hardware_entry_failure_reason = vmcs_read32(VM_INSTRUCTION_ERROR); + vcpu->run->fail_entry.cpu = vmx->last_cpu; return 0; } @@ -6017,6 +6020,8 @@ static int vmx_handle_exit(struct kvm_vcpu *vcpu, fastpath_t exit_fastpath) vcpu->run->internal.data[3] = vmcs_read64(GUEST_PHYSICAL_ADDRESS); } + vcpu->run->internal.data[vcpu->run->internal.ndata++] = + vmx->last_cpu; return 0; } @@ -6072,8 +6077,9 @@ static int vmx_handle_exit(struct kvm_vcpu *vcpu, fastpath_t exit_fastpath) vcpu->run->exit_reason = KVM_EXIT_INTERNAL_ERROR; vcpu->run->internal.suberror = KVM_INTERNAL_ERROR_UNEXPECTED_EXIT_REASON; - vcpu->run->internal.ndata = 1; + vcpu->run->internal.ndata = 2; vcpu->run->internal.data[0] = exit_reason; + vcpu->run->internal.data[1] = vmx->last_cpu; return 0; } diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 9e41b5135340..20c420a45847 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -3472,6 +3472,7 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext) case KVM_CAP_MSR_PLATFORM_INFO: case KVM_CAP_EXCEPTION_PAYLOAD: case KVM_CAP_SET_GUEST_DEBUG: + case KVM_CAP_LAST_CPU: r = 1; break; case KVM_CAP_SYNC_REGS: diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h index 6721eb563eda..3edbd44d85bf 100644 --- a/include/uapi/linux/kvm.h +++ b/include/uapi/linux/kvm.h @@ -289,6 +289,7 @@ struct kvm_run { /* KVM_EXIT_FAIL_ENTRY */ struct { __u64 hardware_entry_failure_reason; + __u32 cpu; } fail_entry; /* KVM_EXIT_EXCEPTION */ struct { @@ -1031,6 +1032,7 @@ struct kvm_ppc_resize_hpt { #define KVM_CAP_PPC_SECURE_GUEST 181 #define KVM_CAP_HALT_POLL 182 #define KVM_CAP_ASYNC_PF_INT 183 +#define KVM_CAP_LAST_CPU 184 #ifdef KVM_CAP_IRQ_ROUTING