From nobody Sun Feb 8 19:56:58 2026 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.10]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 62FE33D7D63; Tue, 3 Feb 2026 18:17:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.10 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770142665; cv=none; b=XzZn+pdfIL4DDRFtxtbgVhMr0BQYIWHIOTvlTM0L57n8qytMolTs/8qRSMcLALhdNSZ6VVrqmOU/629CCLfExXtSiH7TKWjsc56z0LgtoQKeDkyvs62Yk+gTbxw/bzuirzCLwMUKgbTW3sPENvMWc3gnot7IhzWGI5r6J4ldqQg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770142665; c=relaxed/simple; bh=9XI7vB+0OJRjYggT6bE/btEJW/0e/kC1khjIdnkgrRc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ZO/6bjEA1aBgiXBPdiwHZLCGTSNLWOLDTJBmXG2thowNkwlvUE1//mEdMIKZzdiE1bzO6kqCVj4/9mDu8fie0utQ0mkOnPJE3ysaTpmCVshBilXkyDojJAa2qub2chJcKyH7Ky/YWBjpug66sGOLiGmIH7eK7g8DjoyOy3Qm72M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=MBvL2Ua9; arc=none smtp.client-ip=198.175.65.10 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="MBvL2Ua9" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1770142665; x=1801678665; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=9XI7vB+0OJRjYggT6bE/btEJW/0e/kC1khjIdnkgrRc=; b=MBvL2Ua9Yk1BInlgt+YWY26OnQNg3N1CplfcNCPJg+ElNpCE9vhCsx8e a/ufl1Rg2LSacMEJMDYHgimP5+j8Yk9hccjII61e+gNCm+31BzFJm8OmJ ZURCaPlfZqbyoivSrhDwLaevXGKyrlbscr2JxcS7Zs7r4hjOG3FZi9OW/ NYWhgMnAMpbALowUaCEeyX1Yebgu2oOx7vieZlFWhC1uBnrp/jwYAuH60 x+9Mm6hz+2/Iz3eqJSGUWquAvDZMSioY3PceduOuEHtVfi0Wa/mYYB1en YOFO/83f0LxWvHNWYpvCgj6Ty967C4eBCj6Mpnx950PWfVSx8t/oaexxH Q==; X-CSE-ConnectionGUID: DfXAEdEpSKi77E2yxDA7pA== X-CSE-MsgGUID: YFDwxr65RfC2TXAo90dwfg== X-IronPort-AV: E=McAfee;i="6800,10657,11691"; a="88745810" X-IronPort-AV: E=Sophos;i="6.21,271,1763452800"; d="scan'208";a="88745810" Received: from fmviesa006.fm.intel.com ([10.60.135.146]) by orvoesa102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Feb 2026 10:17:42 -0800 X-CSE-ConnectionGUID: Zfh5TzQVTgK6R48jzLbj6A== X-CSE-MsgGUID: 4zEi82FJSUOUGp+5STScvw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.21,271,1763452800"; d="scan'208";a="209605488" Received: from khuang2-desk.gar.corp.intel.com (HELO localhost) ([10.124.221.188]) by fmviesa006-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Feb 2026 10:17:42 -0800 From: isaku.yamahata@intel.com To: kvm@vger.kernel.org Cc: isaku.yamahata@intel.com, isaku.yamahata@gmail.com, Paolo Bonzini , Sean Christopherson , linux-kernel@vger.kernel.org Subject: [PATCH 14/32] KVM: VMX: Make vmx_calc_deadline_l1_to_host() non-static Date: Tue, 3 Feb 2026 10:16:57 -0800 Message-ID: X-Mailer: git-send-email 2.45.2 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Isaku Yamahata Remove static from vmx_calc_deadline_l1_to_host() and declare in vmx.h. As nVMX APIC timer virtualization will use vmx_calc_deadline_l1_to_host(), make it available to nested.c. Make u64_shl_div_u64() usable for X86_32 that vmx_calc_deadline_l1_to_host() uses for both X86_32 and X86_64. Without this change, ARCH=3Di386 fails to compile. Signed-off-by: Isaku Yamahata --- arch/x86/kvm/vmx/vmx.c | 41 ++++++++++++++++++++++++----------------- arch/x86/kvm/vmx/vmx.h | 2 ++ 2 files changed, 26 insertions(+), 17 deletions(-) diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c index dc6b6659a093..41c94f5194f6 100644 --- a/arch/x86/kvm/vmx/vmx.c +++ b/arch/x86/kvm/vmx/vmx.c @@ -8218,25 +8218,32 @@ int vmx_check_intercept(struct kvm_vcpu *vcpu, return X86EMUL_INTERCEPTED; } =20 -#ifdef CONFIG_X86_64 /* (a << shift) / divisor, return 1 if overflow otherwise 0 */ static inline int u64_shl_div_u64(u64 a, unsigned int shift, u64 divisor, u64 *result) { - u64 low =3D a << shift, high =3D a >> (64 - shift); + u64 high =3D a >> (64 - shift); +#ifdef CONFIG_X86_64 + u64 low =3D a << shift; +#endif =20 /* To avoid the overflow on divq */ if (high >=3D divisor) return 1; =20 +#ifdef CONFIG_X86_64 /* Low hold the result, high hold rem which is discarded */ asm("divq %2\n\t" : "=3Da" (low), "=3Dd" (high) : "rm" (divisor), "0" (low), "1" (high)); *result =3D low; +#else + *result =3D mul_u64_u64_div_u64(a, 1ULL << shift, divisor); +#endif =20 return 0; } =20 +#ifdef CONFIG_X86_64 int vmx_set_hv_timer(struct kvm_vcpu *vcpu, u64 guest_deadline_tsc, bool *expired) { @@ -8314,7 +8321,21 @@ void vmx_cancel_apic_virt_timer(struct kvm_vcpu *vcp= u) tertiary_exec_controls_clearbit(to_vmx(vcpu), TERTIARY_EXEC_GUEST_APIC_TI= MER); } =20 -static u64 vmx_calc_deadline_l1_to_host(struct kvm_vcpu *vcpu, u64 l1_tsc) +void vmx_set_guest_tsc_deadline_virt(struct kvm_vcpu *vcpu, + u64 guest_deadline_virt) +{ + vmcs_write64(GUEST_DEADLINE_VIR, guest_deadline_virt); + vmcs_write64(GUEST_DEADLINE_PHY, + vmx_calc_deadline_l1_to_host(vcpu, guest_deadline_virt)); +} + +u64 vmx_get_guest_tsc_deadline_virt(struct kvm_vcpu *vcpu) +{ + return vmcs_read64(GUEST_DEADLINE_VIR); +} +#endif + +u64 vmx_calc_deadline_l1_to_host(struct kvm_vcpu *vcpu, u64 l1_tsc) { u64 host_tsc_now =3D rdtsc(); u64 l1_tsc_now =3D kvm_read_l1_tsc(vcpu, host_tsc_now); @@ -8354,20 +8375,6 @@ static u64 vmx_calc_deadline_l1_to_host(struct kvm_v= cpu *vcpu, u64 l1_tsc) return host_tsc; } =20 -void vmx_set_guest_tsc_deadline_virt(struct kvm_vcpu *vcpu, - u64 guest_deadline_virt) -{ - vmcs_write64(GUEST_DEADLINE_VIR, guest_deadline_virt); - vmcs_write64(GUEST_DEADLINE_PHY, - vmx_calc_deadline_l1_to_host(vcpu, guest_deadline_virt)); -} - -u64 vmx_get_guest_tsc_deadline_virt(struct kvm_vcpu *vcpu) -{ - return vmcs_read64(GUEST_DEADLINE_VIR); -} -#endif - void vmx_update_cpu_dirty_logging(struct kvm_vcpu *vcpu) { struct vcpu_vmx *vmx =3D to_vmx(vcpu); diff --git a/arch/x86/kvm/vmx/vmx.h b/arch/x86/kvm/vmx/vmx.h index cb32d0fdf3b8..28625a2d17bd 100644 --- a/arch/x86/kvm/vmx/vmx.h +++ b/arch/x86/kvm/vmx/vmx.h @@ -405,6 +405,8 @@ static inline void vmx_enable_intercept_for_msr(struct = kvm_vcpu *vcpu, u64 vmx_get_l2_tsc_offset(struct kvm_vcpu *vcpu); u64 vmx_get_l2_tsc_multiplier(struct kvm_vcpu *vcpu); =20 +u64 vmx_calc_deadline_l1_to_host(struct kvm_vcpu *vcpu, u64 l1_tsc); + gva_t vmx_get_untagged_addr(struct kvm_vcpu *vcpu, gva_t gva, unsigned int= flags); =20 void vmx_update_cpu_dirty_logging(struct kvm_vcpu *vcpu); --=20 2.45.2