Received: by 2002:ac0:da4c:0:0:0:0:0 with SMTP id a12csp1128055imi; Fri, 22 Jul 2022 18:17:51 -0700 (PDT) X-Google-Smtp-Source: AGRyM1vB9pgAj2DIhZ7nz+lzTzYWQIMcuDMFebhkYlepcoE5cvqnydIki2CM02Htjb5R+rtnWY77 X-Received: by 2002:a17:90b:48d2:b0:1f2:4a4d:8b35 with SMTP id li18-20020a17090b48d200b001f24a4d8b35mr2578660pjb.26.1658539071736; Fri, 22 Jul 2022 18:17:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1658539071; cv=none; d=google.com; s=arc-20160816; b=e7P0IxncV4dp6AzwYSx0GDXw5X1+75nA4cRrJ9cz+Nveta9mRhrzZTbe/5zAFankRS NvBDOwYgZ6ZwrIeM4K8mdm8C61+pweo01sBJt99mw9zT5B8slM2EnGinovC+7hjGl2uN qXJh7tlmcFvspJskIAXe6XurSbXFvdiQG8nQSJrlQzcdxZokZS+7qWa1CHVOrN38KWd6 Kd8KF+8WqfNIHxssTa0NrEpIuG60PatKB5Jt/mIZ/w0HJarybACEB9UbdITWxuPO4WIn wt12ifOsPmYny6wSLEfkSIb290uceDyWaAAS7OM/ZodHGJ0N1BjQnIVTSz90ENcNjuNd 7rVA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:references:mime-version :message-id:in-reply-to:date:reply-to:dkim-signature; bh=T7ZTAzFvlMNUytdgH9fHZ5hBLaLMdGvy2GiaJFqTamQ=; b=saQ53ZIqvAVaMPcHa+Yg7aUuIo1RR2bAFDSnJpPQeF8/EuwL4GBypEYmrmei5aNupy GPOs5Hga01Dt57MjMvYhKtOyMNGgj7vjTRkGVBzA/Vl4fADIv8QlrBbfjOVgRNAB1l7c cyDcfjhpkNOXztc1H0UVMabefWVF6RwCyjs6xAPcSs4LnrCLAwbUIzoRSYwpttWprNvl 05Ovj35c3i6MDe9PMKQYckkJOF2qRjiS1UFa7yeXjWVu46CAURils+xgb2t1HyEOQo52 /d/e92TDF24wM4Tli2WLZcuXN/kn8s4zd29Id4AiB64zKR5Qr3GL+5ShHDvoIND/w4US 0C0w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=YkyM0tuS; 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=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id s3-20020a635243000000b00410702fee9dsi7341775pgl.346.2022.07.22.18.17.37; Fri, 22 Jul 2022 18:17:51 -0700 (PDT) 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=@google.com header.s=20210112 header.b=YkyM0tuS; 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=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236939AbiGWAxi (ORCPT + 99 others); Fri, 22 Jul 2022 20:53:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59380 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237005AbiGWAxJ (ORCPT ); Fri, 22 Jul 2022 20:53:09 -0400 Received: from mail-pg1-x549.google.com (mail-pg1-x549.google.com [IPv6:2607:f8b0:4864:20::549]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4353EC1999 for ; Fri, 22 Jul 2022 17:52:21 -0700 (PDT) Received: by mail-pg1-x549.google.com with SMTP id 31-20020a63125f000000b00419a2da53bdso2997457pgs.8 for ; Fri, 22 Jul 2022 17:52:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=T7ZTAzFvlMNUytdgH9fHZ5hBLaLMdGvy2GiaJFqTamQ=; b=YkyM0tuSTGHGXWkmXGXxraYWNkICZoIIZ/iNxzXeej5x62mZNIzndSUh7y35R+tRQT yX+h/pIuM34hqyXRcWKNf1ZKTqoZwhg8hw6M3u9Km2yQ2Oexi+ex8qBUXWepRoBjE7Gc BiFdywACFdX8qvB7TRmqtU8tQ2+vtXYIem4s+zuDCZMhIoeG+1z44CoryhCPsIn4CkCS 0olu86UllNl4xe1DVS3ABIK1/pdAoNdqIuXk+mQ70lqaMc1pvtFuMgx7cIunQYj5qh9n BA/FmPAX+UsDTI6SAHC8qMgfxMEjTSeqb8TQTHp7toXcVDnZymLoqLwrr83h+y4FM+Uf 8pNA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=T7ZTAzFvlMNUytdgH9fHZ5hBLaLMdGvy2GiaJFqTamQ=; b=G9YAP00fdww6S/3XKspjeF/KsEQ6u3TszyBzw3Z0M1yFNA5UpzdQXAQ728Dftt8Yp/ wnUZqZnGkxZsia7dROWr8EAkswO8W807KP4g6kFLBofo+wKXrcUPLts2NfAhSEt5G1Id nNKoMl8vgVgO1/M8zfsMV66SqT4lcRR7TI+SKevW5jUlDYavSm8PtQdLmwuIKimn5whl AoCvlQXuqJm+q3CX23FkHYAdJdUqwK+qwPouYdSW22xy9V/UWryQT/zR9fXnlZYRP3Qb 9GkB7biXyF0yEeUlv53fDHruv0JQ7hLk76bJg9hvnQOyptspUbDG9QbvJY5j2vXXtxPt rxYg== X-Gm-Message-State: AJIora/PEooxhAs/ue3TNSXbx4DbFNpH+xQnC03YvIelNkKTrVd4CPPn UaPAgSH5IoJjJJSkNYuvMsUrpGklPxM= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:90a:887:b0:1f2:af6:4d20 with SMTP id v7-20020a17090a088700b001f20af64d20mr20342695pjc.190.1658537529073; Fri, 22 Jul 2022 17:52:09 -0700 (PDT) Reply-To: Sean Christopherson Date: Sat, 23 Jul 2022 00:51:30 +0000 In-Reply-To: <20220723005137.1649592-1-seanjc@google.com> Message-Id: <20220723005137.1649592-18-seanjc@google.com> Mime-Version: 1.0 References: <20220723005137.1649592-1-seanjc@google.com> X-Mailer: git-send-email 2.37.1.359.gd136c6c3e2-goog Subject: [PATCH v4 17/24] KVM: nVMX: Add a helper to identify low-priority #DB traps From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Jim Mattson , Maxim Levitsky , Oliver Upton , Peter Shier Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=unavailable 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 Add a helper to identify "low"-priority #DB traps, i.e. trap-like #DBs that aren't TSS T flag #DBs, and tweak the related code to operate on any queued exception. A future commit will separate exceptions that are intercepted by L1, i.e. cause nested VM-Exit, from those that do NOT trigger nested VM-Exit. I.e. there will be multiple exception structs and multiple invocations of the helpers. No functional change intended. Signed-off-by: Sean Christopherson Reviewed-by: Maxim Levitsky arch.exception.pending || - vcpu->arch.exception.vector != DB_VECTOR) + if (!ex->pending || ex->vector != DB_VECTOR) return 0; /* General Detect #DBs are always fault-like. */ - return vcpu->arch.exception.payload & ~DR6_BD; + return ex->payload & ~DR6_BD; +} + +/* + * Returns true if there's a pending #DB exception that is lower priority than + * a pending Monitor Trap Flag VM-Exit. TSS T-flag #DBs are not emulated by + * KVM, but could theoretically be injected by userspace. Note, this code is + * imperfect, see above. + */ +static bool vmx_is_low_priority_db_trap(struct kvm_queued_exception *ex) +{ + return vmx_get_pending_dbg_trap(ex) & ~DR6_BT; } /* @@ -3885,8 +3895,9 @@ static inline unsigned long vmx_get_pending_dbg_trap(struct kvm_vcpu *vcpu) */ static void nested_vmx_update_pending_dbg(struct kvm_vcpu *vcpu) { - unsigned long pending_dbg = vmx_get_pending_dbg_trap(vcpu); + unsigned long pending_dbg; + pending_dbg = vmx_get_pending_dbg_trap(&vcpu->arch.exception); if (pending_dbg) vmcs_writel(GUEST_PENDING_DBG_EXCEPTIONS, pending_dbg); } @@ -3956,7 +3967,7 @@ static int vmx_check_nested_events(struct kvm_vcpu *vcpu) * prioritize SMI over MTF and trap-like #DBs. */ if (vcpu->arch.exception.pending && - !(vmx_get_pending_dbg_trap(vcpu) & ~DR6_BT)) { + !vmx_is_low_priority_db_trap(&vcpu->arch.exception)) { if (block_nested_exceptions) return -EBUSY; if (!nested_vmx_check_exception(vcpu, &exit_qual)) -- 2.37.1.359.gd136c6c3e2-goog