Received: by 2002:a05:6a10:9afc:0:0:0:0 with SMTP id t28csp2276674pxm; Fri, 4 Mar 2022 12:56:20 -0800 (PST) X-Google-Smtp-Source: ABdhPJyRNQeRJwJyyxa9DwoAN0dXiLGn0Q9ZEyntviUhTy1zpc539TcJw5BrBOYtkAvrQsMBMWlO X-Received: by 2002:a17:902:cacb:b0:14f:ef7f:b0c4 with SMTP id y11-20020a170902cacb00b0014fef7fb0c4mr236616pld.135.1646427380670; Fri, 04 Mar 2022 12:56:20 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1646427380; cv=none; d=google.com; s=arc-20160816; b=hmFDrDC6KBMwqE45R8AmJ0JtnOSJLF4SBfzKy9lUQlYC6lK/MtrEQFZgbORkr/d8m7 YnI3iKfM23TRbETHxea2IhHa7sgPhgUfEMEztZqDhO/Wy8m85IIBSvmiQ0++EqIPUDM2 4TOQeOkE6/BYYMDnaEBCVU7mpVgvYLeTVL3R1Vy2H8X3IoMSuNkBPwL61DGjgIAVJO/U ZLytxC17uZszf2rZEYB2a7nI4/L3yUSlQBX7sYjYnCSr5U8QzV4ZRObYOBSQGpaqyHLR JqtpGFHb1N+wmZ8Gn81I/DHe8rzLdAEjjALVlbghdtfOcIl+gfUnYuBpqel8yRXCetuf 42fA== 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=soifiaUZfeLYRVmXD0JpQejG2STbMMuNdv08PY7rmqM=; b=V0F2eNANI3jdZ80EP6mTQe5w+7YipfQNj7S1mKll/v4I0fEyyBJLJZA7P0G7NkSQOp iEGNIwF6L8gl8hXMzCAfJ/08lqIFXnlmDN0PDITJHsY6T9SX3EobG3Z9DLd/Znenoaj2 zqEG0sXcUj7PJHIkYFL8MHUIKb2d4Vtjl4F+jOaUus+zLuhXV1zIITlNBAgJ1DrsRej6 k/nETcZ+OtQHWaVtVWgbGRSPyCvnVumSiIf5RpnJ2zj+JYhZgvhGlRkxwQBRtuKovi4j DEd82gLK0mpJz7fT9ZTrETsi7fy63a3hwXUcTRWAk2IGvpC5zFPVH9PZuB4X/n3GTFg0 SQOw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=YhtE9mph; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [2620:137:e000::1:18]) by mx.google.com with ESMTPS id h11-20020a170902704b00b0014af1b7c591si5233864plt.580.2022.03.04.12.56.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Mar 2022 12:56:20 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) client-ip=2620:137:e000::1:18; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=YhtE9mph; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 62E442325EF; Fri, 4 Mar 2022 11:58:30 -0800 (PST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229540AbiCDT7N (ORCPT + 99 others); Fri, 4 Mar 2022 14:59:13 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36870 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229486AbiCDT7J (ORCPT ); Fri, 4 Mar 2022 14:59:09 -0500 Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 36227269A76; Fri, 4 Mar 2022 11:50:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1646423438; x=1677959438; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=yZvt824DDrlOBsR8+5xXANYwUJhPov5Rl143h3UTjL0=; b=YhtE9mphf7afCqU2LFBHaQrZCKS1aR7rljNBXfa+x8iX0k2bnFlTJNgm /kSO8k2gs/oQDw6pk/uCfK5KRh0dWokI/lPFLKcEgSz758QSi98D1uNPf TpSMpydyE1XKfL5Bn2lLMqmcbVznrEvQG71assGwiZ2eU+OLow/AV4fWP +7fARovdCmmB5VmzGEcZ+751mpHNj9tVNQts4xjGlxsPTpXIIesVjAotm tME4N7LfJhryy0SQKiblbpIDkBVRsGMqv+ElUFwjhM888NCd4P1Mdszpb 9RpEcu729dEk7ikWE9WQHX7SVuJ0oMIodVKzceeLAUf0EgAYVB40sO4QU Q==; X-IronPort-AV: E=McAfee;i="6200,9189,10276"; a="253779626" X-IronPort-AV: E=Sophos;i="5.90,156,1643702400"; d="scan'208";a="253779626" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 Mar 2022 11:50:36 -0800 X-IronPort-AV: E=Sophos;i="5.90,156,1643702400"; d="scan'208";a="552344492" Received: from ls.sc.intel.com (HELO localhost) ([143.183.96.54]) by orsmga008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 Mar 2022 11:50:36 -0800 From: isaku.yamahata@intel.com To: kvm@vger.kernel.org, linux-kernel@vger.kernel.org Cc: isaku.yamahata@intel.com, isaku.yamahata@gmail.com, Paolo Bonzini , Jim Mattson , erdemaktas@google.com, Connor Kuehl , Sean Christopherson Subject: [RFC PATCH v5 075/104] KVM: x86: Check for pending APICv interrupt in kvm_vcpu_has_events() Date: Fri, 4 Mar 2022 11:49:31 -0800 Message-Id: X-Mailer: git-send-email 2.25.1 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.3 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RDNS_NONE,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE 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 From: Sean Christopherson Return true for kvm_vcpu_has_events() if the vCPU has a pending APICv interrupt to support TDX's usage of APICv. Unlike VMX, TDX doesn't have access to vmcs.GUEST_INTR_STATUS and so can't emulate posted interrupts, i.e. needs to generate a posted interrupt and more importantly can't manually move requested interrupts into the vIRR (which it also doesn't have access to). Because pi_has_pending_interrupt() is heavy operation which uses two atomic test bit operations and one atomic 256 bit bitmap check, introduce new callback for this check instead of reusing dy_apicv_has_pending_interrupt() callback to avoid affecting the exiting code. Signed-off-by: Sean Christopherson Signed-off-by: Isaku Yamahata --- arch/x86/include/asm/kvm_host.h | 1 + arch/x86/kvm/vmx/main.c | 9 +++++++++ arch/x86/kvm/x86.c | 5 ++++- 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h index 489374a57b66..8dab9f16f559 100644 --- a/arch/x86/include/asm/kvm_host.h +++ b/arch/x86/include/asm/kvm_host.h @@ -1491,6 +1491,7 @@ struct kvm_x86_ops { void (*start_assignment)(struct kvm *kvm); void (*apicv_post_state_restore)(struct kvm_vcpu *vcpu); bool (*dy_apicv_has_pending_interrupt)(struct kvm_vcpu *vcpu); + bool (*apicv_has_pending_interrupt)(struct kvm_vcpu *vcpu); int (*set_hv_timer)(struct kvm_vcpu *vcpu, u64 guest_deadline_tsc, bool *expired); diff --git a/arch/x86/kvm/vmx/main.c b/arch/x86/kvm/vmx/main.c index 882358ac270b..d75caf0d6861 100644 --- a/arch/x86/kvm/vmx/main.c +++ b/arch/x86/kvm/vmx/main.c @@ -148,6 +148,14 @@ static void vt_vcpu_load(struct kvm_vcpu *vcpu, int cpu) return vmx_vcpu_load(vcpu, cpu); } +static bool vt_apicv_has_pending_interrupt(struct kvm_vcpu *vcpu) +{ + if (is_td_vcpu(vcpu)) + return pi_has_pending_interrupt(vcpu); + + return false; +} + static void vt_flush_tlb_all(struct kvm_vcpu *vcpu) { if (is_td_vcpu(vcpu)) @@ -297,6 +305,7 @@ struct kvm_x86_ops vt_x86_ops __initdata = { .sync_pir_to_irr = vmx_sync_pir_to_irr, .deliver_interrupt = vmx_deliver_interrupt, .dy_apicv_has_pending_interrupt = pi_has_pending_interrupt, + .apicv_has_pending_interrupt = vt_apicv_has_pending_interrupt, .set_tss_addr = vmx_set_tss_addr, .set_identity_map_addr = vmx_set_identity_map_addr, diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 89d04cd64cd0..314ae43e07bf 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -12111,7 +12111,10 @@ static inline bool kvm_vcpu_has_events(struct kvm_vcpu *vcpu) if (kvm_arch_interrupt_allowed(vcpu) && (kvm_cpu_has_interrupt(vcpu) || - kvm_guest_apic_has_interrupt(vcpu))) + kvm_guest_apic_has_interrupt(vcpu) || + (vcpu->arch.apicv_active && + kvm_x86_ops.apicv_has_pending_interrupt && + kvm_x86_ops.apicv_has_pending_interrupt(vcpu)))) return true; if (kvm_hv_has_stimer_pending(vcpu)) -- 2.25.1