From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 6610C3B27C7 for ; Thu, 23 Jul 2026 05:47:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784785666; cv=none; b=P+1q1cUl5QEGpox87jmULui/wvL4ACUMTroKp2+uMui3epmpH5oNsCisU9JsVZqZM/8eNt6yPSwaGJp/nTiVEQVvF+NtjR4ZVhFDbxmVf3ABd4C/8MKUzgouWkTOuJdlVykoEn6MPrLwth1QYTu/0Md+ynnBy9TRy8+p1cS+QX8= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784785666; c=relaxed/simple; bh=30TjLJiyQlI/tuv+DqSoaJxN7whHWVaZ3PrtxE4yy7M=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=T8LM08EsCsPML3cpqL48x2GE/rKsB//7hwAtthwtsIsy4w+swBZNn1w2E+xtwZqTj2tSkOqPq7M8lt18bwjAtDNXk8Ca459rAIPZp+nXOf6MEOQnf2xcVQo/qs2TkOlTsLZ1O6Rhbv4hhUYHdTr+uXBF9i4F38V0rVM2J/5HcaU= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=HTLosv2G; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="HTLosv2G" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 164FB1F000E9; Thu, 23 Jul 2026 05:47:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1784785665; bh=B9+s2iyp5CFSfmHeBjbioJM2LCYw3VJoATmvyHpBwTo=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=HTLosv2GSdRrOI092J3NSVreXtqhyu0wNswovZLx/xjjcuTjYs0M6MvjLz/J+pPSa y8jsvlct+8HbBA/hVnJPA1AyF4o2lKdHa1kDyTbCbq2XUCFLF3CJQuuVZbf2ERrxsw xFux0wfKqhB/1BPgj14DMQnjCB45ddTcLn+AJvoiP89vQ0xR5bQ/EJzmYsqleqV6N6 vw86k3gbDrGWOAUHAGxFzMslBOa8eVzRL8oKa17A/D3P2f0Y1mxaM5dygmkbZ3o+Qu XMf1uV11TqWNDpYKpDhBpsX9sHcU0OGtiVcrZahyN4X5uYDZJYWXVrVJDatlYpZlvW YjvsMF/qwt3dA== From: "Naveen N Rao (AMD)" To: Borislav Petkov , Dave Hansen Cc: , , Thomas Gleixner , Nikunj A Dadhania , Manali Shukla , Bharata B Rao , "H. Peter Anvin" Subject: [PATCH v4 2/3] x86/apic: Introduce a variable to track the number of EILVT registers Date: Thu, 23 Jul 2026 11:14:07 +0530 Message-ID: <0896bd4c3a4103659e3e1533506cf75e12b8c6c7.1784785046.git.naveen@kernel.org> X-Mailer: git-send-email 2.54.0 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: 8bit Future AMD processors will be increasing the number of EILVT registers. Rather than hardcoding the maximum EILVT register count and using that everywhere, introduce a variable in 'struct apic' to track the EILVT register count. The number of EILVT registers is exposed through the extended APIC Feature Register (APIC_EFEAT) bits 23:16. Use this to initialize the count and fall back to the current default (APIC_EILVT_NR_AMD_10H) if the count is not available. Signed-off-by: Naveen N Rao (AMD) Tested-by: Manali Shukla --- arch/x86/include/asm/apic.h | 2 ++ arch/x86/include/asm/apicdef.h | 1 + arch/x86/kernel/apic/apic.c | 10 ++++++++++ 3 files changed, 13 insertions(+) diff --git a/arch/x86/include/asm/apic.h b/arch/x86/include/asm/apic.h index 9cd493d467d4..578cc28b3134 100644 --- a/arch/x86/include/asm/apic.h +++ b/arch/x86/include/asm/apic.h @@ -317,6 +317,8 @@ struct apic { void (*update_vector)(unsigned int cpu, unsigned int vector, bool set); + u32 eilvt_regs_count; + char *name; }; diff --git a/arch/x86/include/asm/apicdef.h b/arch/x86/include/asm/apicdef.h index bc125c4429dc..ba7657e75ad1 100644 --- a/arch/x86/include/asm/apicdef.h +++ b/arch/x86/include/asm/apicdef.h @@ -134,6 +134,7 @@ #define APIC_TDR_DIV_64 0x9 #define APIC_TDR_DIV_128 0xA #define APIC_EFEAT 0x400 +#define APIC_EFEAT_XLC(x) (((x) >> 16) & 0xff) #define APIC_ECTRL 0x410 #define APIC_SEOI 0x420 #define APIC_IER 0x480 diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c index 90025451ace2..c990f403ec7f 100644 --- a/arch/x86/kernel/apic/apic.c +++ b/arch/x86/kernel/apic/apic.c @@ -410,6 +410,15 @@ int setup_APIC_eilvt(u8 offset, u8 vector, u8 msg_type, u8 mask) } EXPORT_SYMBOL_GPL(setup_APIC_eilvt); +static __init void init_eilvt(void) +{ + if (cpu_feature_enabled(X86_FEATURE_EXTAPIC)) + apic->eilvt_regs_count = APIC_EFEAT_XLC(apic_read(APIC_EFEAT)); + + if (!apic->eilvt_regs_count && boot_cpu_data.x86_vendor == X86_VENDOR_AMD) + apic->eilvt_regs_count = APIC_EILVT_NR_AMD_10H; +} + /* * Program the next event, relative to now */ @@ -2345,6 +2354,7 @@ static void __init apic_bsp_setup(bool upmode) if (upmode) apic_bsp_up_setup(); setup_local_APIC(); + init_eilvt(); enable_IO_APIC(); end_local_APIC_setup(); -- 2.54.0