x86-cpuid.org: A machine-readable CPUID repository
From: | "Ahmed S. Darwish" <darwi-AT-linutronix.de> | |
To: | Borislav Petkov <bp-AT-alien8.de>, Andrew Cooper <andrew.cooper3-AT-citrix.com>, Ingo Molnar <mingo-AT-redhat.com>, Dave Hansen <dave.hansen-AT-linux.intel.com>, "H. Peter Anvin" <hpa-AT-zytor.com>, x86-AT-kernel.org, x86-cpuid-AT-lists.linux.dev | |
Subject: | [ANNOUNCE] x86-cpuid.org: A machine-readable CPUID repository | |
Date: | Thu, 18 Jul 2024 15:45:52 +0200 | |
Message-ID: | <ZpkckA2SHa1r3Bor@lx-t490> | |
Cc: | Thomas Gleixner <tglx-AT-linutronix.de>, Linus Torvalds <torvalds-AT-linux-foundation.org>, linux-kernel-AT-vger.kernel.org | |
Archive-link: | Article |
On x86 CPUs, the "CPUID" instruction is used for runtime identification of CPU features. It takes as input a leaf number in the EAX register and an optional subleaf number in the ECX register. According to the leaf and subleaf, certain information regarding CPU identification and supported features will be returned as output through the EAX, EBX, ECX, and EDX registers. Due to the extensiveness and long history of the x86 architecture, the amount of information that can be queried through CPUID is huge: now up to 800+ bitfields, scattered over 52 CPUID leaves. The returned bitfield descriptions can also differ according to the x86 CPU vendor. We would like to announce the x86-cpuid.org project, which aims to: 1. Standardize a machine-readable language/syntax for describing the CPUID instruction output. 2. Build an extensive database, in that machine-readable syntax, describing all the publicly-known CPUID bitfields output. Such a database will be properly maintained and act as the standard information source for multiple open-source projects downstream. 3. Augment the CPUID database with usage hints for significant open source projects like the Linux Kernel and the Xen hypervisor. Usage hints for other projects can be easily added later. 4. Provide code and data generators utilizing that CPUID database. In the project's machine-readable repository, we have covered: - 52 CPUID leaves (and all their known subleaves.) - 835 CPUID bitfields description, filtered by x86 CPU vendor. Attached to the above CPUID bitfield descriptions are: - 274 Linux kernel x86 feature flags (X86_FEATURE_* definitions) - 230 Linux kernel /proc/cpuinfo flags - 198 Xen hypervisor feature and attribute flags We have developed multiple "code/data generators" utilizing the above information for downstream projects. The first generator produces a complete CSV bitfield file for the Linux kernel's kcpuid utility under tools/arch/x86/kcpuid. This upgrades the tool to complete CPUID coverage, and a kcpuid series will be sent as a threaded reply to this announcement. The second generator produces C data structures for all CPUID leaves, with detailed C99 bitfield members included. We expect to use it to standardize the CPUID registers representation across the Linux kernel's x86 subsystem among other goals that are to be outlined in future series, such as a dependency data model for the kernel's X86_FEATURE flags. The project's documentation is extensive, and can be found at: - https://gitlab.com/x86-cpuid.org/x86-cpuid-db At plumbers last year, I've discussed the origin story of this effort: - https://lpc.events/event/17/contributions/1511/ At the x86 microconference this year, I should also provide an update on future steps: - https://lpc.events/event/18/contributions/1762/ Thanks a lot, Ahmed -- Linutronix GmbH