Received: by 2002:a05:6a10:f3d0:0:0:0:0 with SMTP id a16csp1886422pxv; Fri, 2 Jul 2021 15:10:23 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw5Csw5UJb/UGi1Zi2/ZyIIuSclzLzxaXwR5hznhgAnu47IyabZCgZBzIPpCdnhkNRD98dS X-Received: by 2002:a17:906:d20b:: with SMTP id w11mr1968709ejz.242.1625263823124; Fri, 02 Jul 2021 15:10:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1625263823; cv=none; d=google.com; s=arc-20160816; b=soCnBJQwdAmYmF4wRZeYfWStSIn5S1wsqw6PXHJSX5w59TOfbeuMovK/Q3xPc6nsna YgeBDESVCUB91or7/+JL94AThogujqlQaUQAKXcNKC7tJJjLUnkzPsMuJUrctAvGZBkv W5fXu5ywPxUp8//hPVaYuwSlu8NnWbL76+kGPauN1ZaocadhbO7CwwIqF3p2G9V672yt 1ZK0bzgOcIbSpnUIzZHqd/u36NMkLxX7RD3Ii8Q5zDKa5P5Vf4/DErVvT0c7C66YEs/A xCByt+9xjhIZxObfWVhCj2i+hqOmaOnFUx3lsU9uL8bWKvZeTFETaMJs6qG6p4jjTuG2 rlWg== 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; bh=yBaohIy523h2Ua1RAel7siJoTMAwj3xFNRBHDxC2/u0=; b=biGRVDijwuBpYrimd96ry1LgKlnM10XG70Z7BPZqH0/JKxu01+Z8FG2vMif7J5IBiQ B5hMA0AJT2FX79x4vHXvjy429eKYrk/BC4kzcdUKu/3dJGQ7QXX3NnwDYqTaO15WDygg wVDfZon4Q2cw0YTjIW6kE2Y4/ZFrCU913ZdODtquhofA5mDKMM81OXtISBfgZZMKAsfb A4P1i+KhIPtbT3K7/DOSKiN+H+o9PT50tUTIQxRWajfEfO1ndmt6AaRjuy7jVgi7qZpL Sft8R/ZCi00/thSc88piUSCmJ+Mw6q9XlMllb+uhh6DYUWiaQJ1hqbfVR/kRshJvXtNq USKA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id v4si4801261edj.103.2021.07.02.15.10.00; Fri, 02 Jul 2021 15:10:23 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234003AbhGBWIq (ORCPT + 99 others); Fri, 2 Jul 2021 18:08:46 -0400 Received: from mga12.intel.com ([192.55.52.136]:50197 "EHLO mga12.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233186AbhGBWH7 (ORCPT ); Fri, 2 Jul 2021 18:07:59 -0400 X-IronPort-AV: E=McAfee;i="6200,9189,10033"; a="188472747" X-IronPort-AV: E=Sophos;i="5.83,320,1616482800"; d="scan'208";a="188472747" Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Jul 2021 15:05:25 -0700 X-IronPort-AV: E=Sophos;i="5.83,320,1616482800"; d="scan'208";a="642814792" Received: from ls.sc.intel.com (HELO localhost) ([143.183.96.54]) by fmsmga006-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Jul 2021 15:05:25 -0700 From: isaku.yamahata@intel.com To: Thomas Gleixner , Ingo Molnar , Borislav Petkov , "H . Peter Anvin" , Paolo Bonzini , Vitaly Kuznetsov , Wanpeng Li , Jim Mattson , Joerg Roedel , erdemaktas@google.com, Connor Kuehl , Sean Christopherson , x86@kernel.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org Cc: isaku.yamahata@intel.com, isaku.yamahata@gmail.com, Sean Christopherson , Xiaoyao Li , Chao Gao Subject: [RFC PATCH v2 36/69] KVM: x86: Add a switch_db_regs flag to handle TDX's auto-switched behavior Date: Fri, 2 Jul 2021 15:04:42 -0700 Message-Id: <1f79ce2ad686f25767711ccd6a520324dd6e1c21.1625186503.git.isaku.yamahata@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Sean Christopherson Add a flag, KVM_DEBUGREG_AUTO_SWITCHED_GUEST, to skip saving/restoring DRs irrespective of any other flags. TDX-SEAM unconditionally saves and restores guest DRs and reset to architectural INIT state on TD exit. So, KVM needs to save host DRs before TD enter without restoring guest DRs and restore host DRs after TD exit. Opportunistically convert the KVM_DEBUGREG_* definitions to use BIT(). Reported-by: Xiaoyao Li Signed-off-by: Sean Christopherson Co-developed-by: Chao Gao Signed-off-by: Chao Gao Signed-off-by: Isaku Yamahata --- arch/x86/include/asm/kvm_host.h | 11 ++++++++--- arch/x86/kvm/x86.c | 3 ++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h index 96e6cd95d884..7822b531a5e2 100644 --- a/arch/x86/include/asm/kvm_host.h +++ b/arch/x86/include/asm/kvm_host.h @@ -488,9 +488,14 @@ struct kvm_pmu { struct kvm_pmu_ops; enum { - KVM_DEBUGREG_BP_ENABLED = 1, - KVM_DEBUGREG_WONT_EXIT = 2, - KVM_DEBUGREG_RELOAD = 4, + KVM_DEBUGREG_BP_ENABLED = BIT(0), + KVM_DEBUGREG_WONT_EXIT = BIT(1), + KVM_DEBUGREG_RELOAD = BIT(2), + /* + * Guest debug registers are saved/restored by hardware on exit from + * or enter guest. KVM needn't switch them. + */ + KVM_DEBUGREG_AUTO_SWITCH_GUEST = BIT(3), }; struct kvm_mtrr_range { diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 4b436cae1732..f1d5e0a53640 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -9441,7 +9441,7 @@ static int vcpu_enter_guest(struct kvm_vcpu *vcpu) if (test_thread_flag(TIF_NEED_FPU_LOAD)) switch_fpu_return(); - if (unlikely(vcpu->arch.switch_db_regs)) { + if (unlikely(vcpu->arch.switch_db_regs & ~KVM_DEBUGREG_AUTO_SWITCH_GUEST)) { set_debugreg(0, 7); set_debugreg(vcpu->arch.eff_db[0], 0); set_debugreg(vcpu->arch.eff_db[1], 1); @@ -9473,6 +9473,7 @@ static int vcpu_enter_guest(struct kvm_vcpu *vcpu) */ if (unlikely(vcpu->arch.switch_db_regs & KVM_DEBUGREG_WONT_EXIT)) { WARN_ON(vcpu->guest_debug & KVM_GUESTDBG_USE_HW_BP); + WARN_ON(vcpu->arch.switch_db_regs & KVM_DEBUGREG_AUTO_SWITCH_GUEST); static_call(kvm_x86_sync_dirty_debug_regs)(vcpu); kvm_update_dr0123(vcpu); kvm_update_dr7(vcpu); -- 2.25.1