scripts/update-intel-ucode-defs.py
Source file repositories/reference/linux-study-clean/scripts/update-intel-ucode-defs.py
File Facts
- System
- Linux kernel
- Corpus path
scripts/update-intel-ucode-defs.py- Extension
.py- Size
- 4214 bytes
- Lines
- 131
- Domain
- Support Tooling And Documentation
- Bucket
- scripts
- Inferred role
- Support Tooling And Documentation: scripts
- Status
- atlas-only
Why This File Exists
Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.
- Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.
Dependency Surface
- No C-style include directives detected by the generator.
Detected Declarations
- No top-level syscall, struct, function, initcall, or export declaration detected by the generator.
Annotated Snippet
#!/usr/bin/env python3
# SPDX-License-Identifier: GPL-2.0
import argparse
import re
import shutil
import subprocess
import sys
import os
script = os.path.relpath(__file__)
DESCRIPTION = f"""
For Intel CPUs, update the microcode revisions that determine
X86_BUG_OLD_MICROCODE.
This script is intended to be run in response to releases of the
official Intel microcode GitHub repository:
https://github.com/intel/Intel-Linux-Processor-Microcode-Data-Files.git
It takes the Intel microcode files as input and uses iucode-tool to
extract the revision information. It prints the output in the format
expected by intel-ucode-defs.h.
Usage:
./{script} /path/to/microcode/files > /path/to/intel-ucode-defs.h
Typically, someone at Intel would see a new public release, wait for at
least three months to ensure the update is stable, run this script to
refresh the intel-ucode-defs.h file, and send a patch upstream to update
the mainline and stable versions.
Any exception to this process should be supported with an appropriate
justification.
"""
SIG_RE = re.compile(r'sig (0x[0-9a-fA-F]+)')
PFM_RE = re.compile(r'pf_mask (0x[0-9a-fA-F]+)')
REV_RE = re.compile(r'rev (0x[0-9a-fA-F]+)')
# Functions to extract family, model, and stepping
def bits(val, bottom, top):
mask = (1 << (top + 1 - bottom)) - 1
return (val >> bottom) & mask
def family(sig):
if bits(sig, 8, 11) == 0xf:
return bits(sig, 8, 11) + bits(sig, 20, 27)
return bits(sig, 8, 11)
def model(sig):
return bits(sig, 4, 7) | (bits(sig, 16, 19) << 4)
def step(sig):
return bits(sig, 0, 3)
class Ucode:
def __init__(self, sig, pfm, rev):
self.family = family(sig)
self.model = model(sig)
self.steppings = 1 << step(sig)
self.platforms = pfm
self.rev = rev
self.key = (self.family, self.model, self.steppings, self.platforms)
def __eq__(self, other):
return self.key == other.key
def __hash__(self):
return hash(self.key)
Annotation
- Atlas domain: Support Tooling And Documentation / scripts.
- Implementation status: atlas-only.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.