Debrand for AlmaLinux OS

Use AlmaLinux OS secure boot cert

Enable Btrfs support for all kernel variants

hpsa: bring back deprecated PCI ids #CFHack #CFHack2024

mptsas: bring back deprecated PCI ids #CFHack #CFHack2024

megaraid_sas: bring back deprecated PCI ids #CFHack #CFHack2024

qla2xxx: bring back deprecated PCI ids #CFHack #CFHack2024

qla4xxx: bring back deprecated PCI ids

be2iscsi: bring back deprecated PCI ids

kernel/rh_messages.h: enable all disabled pci devices by moving to unmaintained
This commit is contained in:
Eduard Abdullin 2026-07-31 02:10:50 +00:00 committed by root
parent fdec302017
commit ec242e3c0c
24 changed files with 1126 additions and 11 deletions

View File

@ -12,7 +12,7 @@ RHEL_MINOR = 3
#
# Use this spot to avoid future merge conflicts.
# Do not trim this comment.
RHEL_RELEASE = 252
RHEL_RELEASE = 253
#
# RHEL_REBASE_NUM

View File

@ -1938,6 +1938,7 @@ CONFIG_DRM_NOUVEAU_SIL164=m
# CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20 is not set
# CONFIG_DRM_PANEL_SAMSUNG_DB7430 is not set
# CONFIG_DRM_PANEL_SAMSUNG_LD9040 is not set
# CONFIG_DRM_PANEL_SAMSUNG_LTL106HL02 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set
@ -2007,8 +2008,10 @@ CONFIG_DRM_SIMPLEDRM=y
# CONFIG_DRM_SOLOMON_SSD2825 is not set
# CONFIG_DRM_SSD130X is not set
# CONFIG_DRM_ST7571_I2C is not set
# CONFIG_DRM_ST7571 is not set
# CONFIG_DRM_ST7586 is not set
# CONFIG_DRM_ST7735R is not set
# CONFIG_DRM_ST7920 is not set
# CONFIG_DRM_TEGRA_DEBUG is not set
CONFIG_DRM_TEGRA=m
# CONFIG_DRM_THINE_THC63LVD1024 is not set

View File

@ -1930,6 +1930,7 @@ CONFIG_DRM_NOUVEAU_SIL164=m
# CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20 is not set
# CONFIG_DRM_PANEL_SAMSUNG_DB7430 is not set
# CONFIG_DRM_PANEL_SAMSUNG_LD9040 is not set
# CONFIG_DRM_PANEL_SAMSUNG_LTL106HL02 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set
@ -1999,8 +2000,10 @@ CONFIG_DRM_SIMPLEDRM=y
# CONFIG_DRM_SOLOMON_SSD2825 is not set
# CONFIG_DRM_SSD130X is not set
# CONFIG_DRM_ST7571_I2C is not set
# CONFIG_DRM_ST7571 is not set
# CONFIG_DRM_ST7586 is not set
# CONFIG_DRM_ST7735R is not set
# CONFIG_DRM_ST7920 is not set
# CONFIG_DRM_TEGRA_DEBUG is not set
CONFIG_DRM_TEGRA=m
# CONFIG_DRM_THINE_THC63LVD1024 is not set

View File

@ -1936,6 +1936,7 @@ CONFIG_DRM_NOUVEAU_SIL164=m
# CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20 is not set
# CONFIG_DRM_PANEL_SAMSUNG_DB7430 is not set
# CONFIG_DRM_PANEL_SAMSUNG_LD9040 is not set
# CONFIG_DRM_PANEL_SAMSUNG_LTL106HL02 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set
@ -2005,8 +2006,10 @@ CONFIG_DRM_SIMPLEDRM=y
# CONFIG_DRM_SOLOMON_SSD2825 is not set
# CONFIG_DRM_SSD130X is not set
# CONFIG_DRM_ST7571_I2C is not set
# CONFIG_DRM_ST7571 is not set
# CONFIG_DRM_ST7586 is not set
# CONFIG_DRM_ST7735R is not set
# CONFIG_DRM_ST7920 is not set
# CONFIG_DRM_TEGRA_DEBUG is not set
CONFIG_DRM_TEGRA=m
# CONFIG_DRM_THINE_THC63LVD1024 is not set

View File

@ -1928,6 +1928,7 @@ CONFIG_DRM_NOUVEAU_SIL164=m
# CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20 is not set
# CONFIG_DRM_PANEL_SAMSUNG_DB7430 is not set
# CONFIG_DRM_PANEL_SAMSUNG_LD9040 is not set
# CONFIG_DRM_PANEL_SAMSUNG_LTL106HL02 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set
@ -1997,8 +1998,10 @@ CONFIG_DRM_SIMPLEDRM=y
# CONFIG_DRM_SOLOMON_SSD2825 is not set
# CONFIG_DRM_SSD130X is not set
# CONFIG_DRM_ST7571_I2C is not set
# CONFIG_DRM_ST7571 is not set
# CONFIG_DRM_ST7586 is not set
# CONFIG_DRM_ST7735R is not set
# CONFIG_DRM_ST7920 is not set
# CONFIG_DRM_TEGRA_DEBUG is not set
CONFIG_DRM_TEGRA=m
# CONFIG_DRM_THINE_THC63LVD1024 is not set

View File

@ -1941,6 +1941,7 @@ CONFIG_DRM_NOUVEAU_SIL164=m
# CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20 is not set
# CONFIG_DRM_PANEL_SAMSUNG_DB7430 is not set
# CONFIG_DRM_PANEL_SAMSUNG_LD9040 is not set
# CONFIG_DRM_PANEL_SAMSUNG_LTL106HL02 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set
@ -2010,8 +2011,10 @@ CONFIG_DRM_SIMPLEDRM=y
# CONFIG_DRM_SOLOMON_SSD2825 is not set
# CONFIG_DRM_SSD130X is not set
# CONFIG_DRM_ST7571_I2C is not set
# CONFIG_DRM_ST7571 is not set
# CONFIG_DRM_ST7586 is not set
# CONFIG_DRM_ST7735R is not set
# CONFIG_DRM_ST7920 is not set
# CONFIG_DRM_TEGRA_DEBUG is not set
CONFIG_DRM_TEGRA=m
# CONFIG_DRM_THINE_THC63LVD1024 is not set

View File

@ -1933,6 +1933,7 @@ CONFIG_DRM_NOUVEAU_SIL164=m
# CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20 is not set
# CONFIG_DRM_PANEL_SAMSUNG_DB7430 is not set
# CONFIG_DRM_PANEL_SAMSUNG_LD9040 is not set
# CONFIG_DRM_PANEL_SAMSUNG_LTL106HL02 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set
@ -2002,8 +2003,10 @@ CONFIG_DRM_SIMPLEDRM=y
# CONFIG_DRM_SOLOMON_SSD2825 is not set
# CONFIG_DRM_SSD130X is not set
# CONFIG_DRM_ST7571_I2C is not set
# CONFIG_DRM_ST7571 is not set
# CONFIG_DRM_ST7586 is not set
# CONFIG_DRM_ST7735R is not set
# CONFIG_DRM_ST7920 is not set
# CONFIG_DRM_TEGRA_DEBUG is not set
CONFIG_DRM_TEGRA=m
# CONFIG_DRM_THINE_THC63LVD1024 is not set

View File

@ -1939,6 +1939,7 @@ CONFIG_DRM_NOUVEAU_SIL164=m
# CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20 is not set
# CONFIG_DRM_PANEL_SAMSUNG_DB7430 is not set
# CONFIG_DRM_PANEL_SAMSUNG_LD9040 is not set
# CONFIG_DRM_PANEL_SAMSUNG_LTL106HL02 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set
@ -2008,8 +2009,10 @@ CONFIG_DRM_SIMPLEDRM=y
# CONFIG_DRM_SOLOMON_SSD2825 is not set
# CONFIG_DRM_SSD130X is not set
# CONFIG_DRM_ST7571_I2C is not set
# CONFIG_DRM_ST7571 is not set
# CONFIG_DRM_ST7586 is not set
# CONFIG_DRM_ST7735R is not set
# CONFIG_DRM_ST7920 is not set
# CONFIG_DRM_TEGRA_DEBUG is not set
CONFIG_DRM_TEGRA=m
# CONFIG_DRM_THINE_THC63LVD1024 is not set

View File

@ -1931,6 +1931,7 @@ CONFIG_DRM_NOUVEAU_SIL164=m
# CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20 is not set
# CONFIG_DRM_PANEL_SAMSUNG_DB7430 is not set
# CONFIG_DRM_PANEL_SAMSUNG_LD9040 is not set
# CONFIG_DRM_PANEL_SAMSUNG_LTL106HL02 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set
@ -2000,8 +2001,10 @@ CONFIG_DRM_SIMPLEDRM=y
# CONFIG_DRM_SOLOMON_SSD2825 is not set
# CONFIG_DRM_SSD130X is not set
# CONFIG_DRM_ST7571_I2C is not set
# CONFIG_DRM_ST7571 is not set
# CONFIG_DRM_ST7586 is not set
# CONFIG_DRM_ST7735R is not set
# CONFIG_DRM_ST7920 is not set
# CONFIG_DRM_TEGRA_DEBUG is not set
CONFIG_DRM_TEGRA=m
# CONFIG_DRM_THINE_THC63LVD1024 is not set

View File

@ -1538,6 +1538,7 @@ CONFIG_DRM_NOUVEAU_SIL164=m
# CONFIG_DRM_PANEL_SAMSUNG_AMS639RQ08 is not set
# CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20 is not set
# CONFIG_DRM_PANEL_SAMSUNG_DB7430 is not set
# CONFIG_DRM_PANEL_SAMSUNG_LTL106HL02 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set
@ -1607,8 +1608,10 @@ CONFIG_DRM_SIMPLEDRM=y
# CONFIG_DRM_SOLOMON_SSD2825 is not set
# CONFIG_DRM_SSD130X is not set
# CONFIG_DRM_ST7571_I2C is not set
# CONFIG_DRM_ST7571 is not set
# CONFIG_DRM_ST7586 is not set
# CONFIG_DRM_ST7735R is not set
# CONFIG_DRM_ST7920 is not set
# CONFIG_DRM_THINE_THC63LVD1024 is not set
# CONFIG_DRM_TI_DLPC3433 is not set
# CONFIG_DRM_TIDSS is not set

View File

@ -1530,6 +1530,7 @@ CONFIG_DRM_NOUVEAU_SIL164=m
# CONFIG_DRM_PANEL_SAMSUNG_AMS639RQ08 is not set
# CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20 is not set
# CONFIG_DRM_PANEL_SAMSUNG_DB7430 is not set
# CONFIG_DRM_PANEL_SAMSUNG_LTL106HL02 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set
@ -1599,8 +1600,10 @@ CONFIG_DRM_SIMPLEDRM=y
# CONFIG_DRM_SOLOMON_SSD2825 is not set
# CONFIG_DRM_SSD130X is not set
# CONFIG_DRM_ST7571_I2C is not set
# CONFIG_DRM_ST7571 is not set
# CONFIG_DRM_ST7586 is not set
# CONFIG_DRM_ST7735R is not set
# CONFIG_DRM_ST7920 is not set
# CONFIG_DRM_THINE_THC63LVD1024 is not set
# CONFIG_DRM_TI_DLPC3433 is not set
# CONFIG_DRM_TIDSS is not set

View File

@ -1550,6 +1550,7 @@ CONFIG_DRM_NOUVEAU_SIL164=m
# CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20 is not set
# CONFIG_DRM_PANEL_SAMSUNG_DB7430 is not set
# CONFIG_DRM_PANEL_SAMSUNG_LD9040 is not set
# CONFIG_DRM_PANEL_SAMSUNG_LTL106HL02 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set
@ -1619,8 +1620,10 @@ CONFIG_DRM_SIMPLEDRM=y
# CONFIG_DRM_SOLOMON_SSD2825 is not set
# CONFIG_DRM_SSD130X is not set
# CONFIG_DRM_ST7571_I2C is not set
# CONFIG_DRM_ST7571 is not set
# CONFIG_DRM_ST7586 is not set
# CONFIG_DRM_ST7735R is not set
# CONFIG_DRM_ST7920 is not set
# CONFIG_DRM_THINE_THC63LVD1024 is not set
# CONFIG_DRM_TI_DLPC3433 is not set
# CONFIG_DRM_TIDSS is not set

View File

@ -1542,6 +1542,7 @@ CONFIG_DRM_NOUVEAU_SIL164=m
# CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20 is not set
# CONFIG_DRM_PANEL_SAMSUNG_DB7430 is not set
# CONFIG_DRM_PANEL_SAMSUNG_LD9040 is not set
# CONFIG_DRM_PANEL_SAMSUNG_LTL106HL02 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set
@ -1611,8 +1612,10 @@ CONFIG_DRM_SIMPLEDRM=y
# CONFIG_DRM_SOLOMON_SSD2825 is not set
# CONFIG_DRM_SSD130X is not set
# CONFIG_DRM_ST7571_I2C is not set
# CONFIG_DRM_ST7571 is not set
# CONFIG_DRM_ST7586 is not set
# CONFIG_DRM_ST7735R is not set
# CONFIG_DRM_ST7920 is not set
# CONFIG_DRM_THINE_THC63LVD1024 is not set
# CONFIG_DRM_TI_DLPC3433 is not set
# CONFIG_DRM_TIDSS is not set

View File

@ -1546,6 +1546,7 @@ CONFIG_DRM_NOUVEAU_SIL164=m
# CONFIG_DRM_PANEL_SAMSUNG_AMS639RQ08 is not set
# CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20 is not set
# CONFIG_DRM_PANEL_SAMSUNG_DB7430 is not set
# CONFIG_DRM_PANEL_SAMSUNG_LTL106HL02 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set
@ -1615,8 +1616,10 @@ CONFIG_DRM_SCHED_KUNIT_TEST=m
# CONFIG_DRM_SOLOMON_SSD2825 is not set
# CONFIG_DRM_SSD130X is not set
# CONFIG_DRM_ST7571_I2C is not set
# CONFIG_DRM_ST7571 is not set
# CONFIG_DRM_ST7586 is not set
# CONFIG_DRM_ST7735R is not set
# CONFIG_DRM_ST7920 is not set
# CONFIG_DRM_THINE_THC63LVD1024 is not set
# CONFIG_DRM_TI_DLPC3433 is not set
# CONFIG_DRM_TIDSS is not set

View File

@ -1538,6 +1538,7 @@ CONFIG_DRM_NOUVEAU_SIL164=m
# CONFIG_DRM_PANEL_SAMSUNG_AMS639RQ08 is not set
# CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20 is not set
# CONFIG_DRM_PANEL_SAMSUNG_DB7430 is not set
# CONFIG_DRM_PANEL_SAMSUNG_LTL106HL02 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set
@ -1607,8 +1608,10 @@ CONFIG_DRM_SCHED_KUNIT_TEST=m
# CONFIG_DRM_SOLOMON_SSD2825 is not set
# CONFIG_DRM_SSD130X is not set
# CONFIG_DRM_ST7571_I2C is not set
# CONFIG_DRM_ST7571 is not set
# CONFIG_DRM_ST7586 is not set
# CONFIG_DRM_ST7735R is not set
# CONFIG_DRM_ST7920 is not set
# CONFIG_DRM_THINE_THC63LVD1024 is not set
# CONFIG_DRM_TI_DLPC3433 is not set
# CONFIG_DRM_TIDSS is not set

View File

@ -1539,6 +1539,7 @@ CONFIG_DRM_NOUVEAU_SIL164=m
# CONFIG_DRM_PANEL_SAMSUNG_AMS639RQ08 is not set
# CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20 is not set
# CONFIG_DRM_PANEL_SAMSUNG_DB7430 is not set
# CONFIG_DRM_PANEL_SAMSUNG_LTL106HL02 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set
@ -1608,8 +1609,10 @@ CONFIG_DRM_SCHED_KUNIT_TEST=m
# CONFIG_DRM_SOLOMON_SSD2825 is not set
# CONFIG_DRM_SSD130X is not set
# CONFIG_DRM_ST7571_I2C is not set
# CONFIG_DRM_ST7571 is not set
# CONFIG_DRM_ST7586 is not set
# CONFIG_DRM_ST7735R is not set
# CONFIG_DRM_ST7920 is not set
# CONFIG_DRM_THINE_THC63LVD1024 is not set
# CONFIG_DRM_TI_DLPC3433 is not set
# CONFIG_DRM_TIDSS is not set

View File

@ -1653,6 +1653,7 @@ CONFIG_DRM_NOUVEAU_SIL164=m
# CONFIG_DRM_PANEL_SAMSUNG_AMS639RQ08 is not set
# CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20 is not set
# CONFIG_DRM_PANEL_SAMSUNG_DB7430 is not set
# CONFIG_DRM_PANEL_SAMSUNG_LTL106HL02 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set
@ -1722,8 +1723,10 @@ CONFIG_DRM_SIMPLEDRM=y
# CONFIG_DRM_SOLOMON_SSD2825 is not set
# CONFIG_DRM_SSD130X is not set
# CONFIG_DRM_ST7571_I2C is not set
# CONFIG_DRM_ST7571 is not set
# CONFIG_DRM_ST7586 is not set
# CONFIG_DRM_ST7735R is not set
# CONFIG_DRM_ST7920 is not set
# CONFIG_DRM_THINE_THC63LVD1024 is not set
# CONFIG_DRM_TI_DLPC3433 is not set
# CONFIG_DRM_TIDSS is not set

View File

@ -1645,6 +1645,7 @@ CONFIG_DRM_NOUVEAU_SIL164=m
# CONFIG_DRM_PANEL_SAMSUNG_AMS639RQ08 is not set
# CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20 is not set
# CONFIG_DRM_PANEL_SAMSUNG_DB7430 is not set
# CONFIG_DRM_PANEL_SAMSUNG_LTL106HL02 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set
@ -1714,8 +1715,10 @@ CONFIG_DRM_SIMPLEDRM=y
# CONFIG_DRM_SOLOMON_SSD2825 is not set
# CONFIG_DRM_SSD130X is not set
# CONFIG_DRM_ST7571_I2C is not set
# CONFIG_DRM_ST7571 is not set
# CONFIG_DRM_ST7586 is not set
# CONFIG_DRM_ST7735R is not set
# CONFIG_DRM_ST7920 is not set
# CONFIG_DRM_THINE_THC63LVD1024 is not set
# CONFIG_DRM_TI_DLPC3433 is not set
# CONFIG_DRM_TIDSS is not set

View File

@ -1656,6 +1656,7 @@ CONFIG_DRM_NOUVEAU_SIL164=m
# CONFIG_DRM_PANEL_SAMSUNG_AMS639RQ08 is not set
# CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20 is not set
# CONFIG_DRM_PANEL_SAMSUNG_DB7430 is not set
# CONFIG_DRM_PANEL_SAMSUNG_LTL106HL02 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set
@ -1725,8 +1726,10 @@ CONFIG_DRM_SIMPLEDRM=y
# CONFIG_DRM_SOLOMON_SSD2825 is not set
# CONFIG_DRM_SSD130X is not set
# CONFIG_DRM_ST7571_I2C is not set
# CONFIG_DRM_ST7571 is not set
# CONFIG_DRM_ST7586 is not set
# CONFIG_DRM_ST7735R is not set
# CONFIG_DRM_ST7920 is not set
# CONFIG_DRM_THINE_THC63LVD1024 is not set
# CONFIG_DRM_TI_DLPC3433 is not set
# CONFIG_DRM_TIDSS is not set

View File

@ -1648,6 +1648,7 @@ CONFIG_DRM_NOUVEAU_SIL164=m
# CONFIG_DRM_PANEL_SAMSUNG_AMS639RQ08 is not set
# CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20 is not set
# CONFIG_DRM_PANEL_SAMSUNG_DB7430 is not set
# CONFIG_DRM_PANEL_SAMSUNG_LTL106HL02 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set
@ -1717,8 +1718,10 @@ CONFIG_DRM_SIMPLEDRM=y
# CONFIG_DRM_SOLOMON_SSD2825 is not set
# CONFIG_DRM_SSD130X is not set
# CONFIG_DRM_ST7571_I2C is not set
# CONFIG_DRM_ST7571 is not set
# CONFIG_DRM_ST7586 is not set
# CONFIG_DRM_ST7735R is not set
# CONFIG_DRM_ST7920 is not set
# CONFIG_DRM_THINE_THC63LVD1024 is not set
# CONFIG_DRM_TI_DLPC3433 is not set
# CONFIG_DRM_TIDSS is not set

View File

@ -1,3 +1,54 @@
* Wed Jul 29 2026 CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> [6.12.0-253.el10]
- redhat: add kmap.py tool and kernel-kmap-internal package (Rado Vrbovsky)
- net/sched: cls_api: Handle TC_ACT_CONSUMED in tcf_qevent_handle (CKI Backport Bot) [RHEL-214083] {CVE-2026-64530}
- x86/fpu: Ensure XFD state on signal delivery (Steve Best) [RHEL-213537]
- platform/x86: intel-hid: Protect ACPI notify handler against recursion (Steve Best) [RHEL-213294]
- iTCO_wdt: mask NMI_NOW bit for update_no_reboot_bit() call (Dennis Chen) [RHEL-212108]
- ksm: use range-walk function to jump over holes in scan_get_next_rmap_item (Rafael Aquini) [RHEL-189556] {CVE-2025-68211}
- i2c: i801: fix hardware state machine corruption in error path (Steve Best) [RHEL-212367]
- gitlab-ci: enable riscv64 builds for c10s and rhel10 (Michael Krausch-Hofmann)
- pinctrl: mediatek: paris: bypass pinctrl GPIO layer in set GPIO direction (Jiri Benc) [RHEL-191293]
- pinctrl: mediatek: eint: Drop base from mtk_eint_chip_write_mask() (Jiri Benc) [RHEL-191293]
- pinctrl: mediatek: make devm allocations safer and clearer in mtk_eint_do_init() (Jiri Benc) [RHEL-191293]
- pinctrl: Use dev_fwnode() (Jiri Benc) [RHEL-191293]
- pinctrl: mediatek: eint: Fix invalid pointer dereference for v1 platforms (Jiri Benc) [RHEL-191293]
- pinctrl: mediatek: paris: use new GPIO line value setter callbacks (Jiri Benc) [RHEL-191293]
- pinctrl: mediatek: paris: don't double-check the GPIO number (Jiri Benc) [RHEL-191293]
- pinctrl: mediatek: common-v1: Fix error checking in mtk_eint_init() (Jiri Benc) [RHEL-191293]
- pinctrl: mediatek: Fix new design debounce issue (Jiri Benc) [RHEL-191293]
- pinctrl: mediatek: common-v1: Fix EINT breakage on older controllers (Jiri Benc) [RHEL-191293]
- pinctrl: mediatek: Fix the invalid conditions (Jiri Benc) [RHEL-191293]
- pinctrl: mediatek: Add EINT support for multiple addresses (Jiri Benc) [RHEL-191293]
- pinctrl: mediatek: Drop mtk_pinconf_bias_set_pd() (Jiri Benc) [RHEL-191293]
- pinctrl: mediatek: add support for MTK_PULL_PD_TYPE (Jiri Benc) [RHEL-191293]
- x86/cpu: Enable FSGSBASE early in cpu_init_exception_handling() (Steve Best) [RHEL-211103]
- cpufreq: intel_pstate: Sync policy->cur during CPU offline (Steve Best) [RHEL-210859]
- platform/x86/amd/hsmp: Clamp ioctl/send_message indices (Spectre v1) (Steve Best) [RHEL-208745]
- xfs: resample the data fork mapping after cycling ILOCK (Carlos Maiolino) [RHEL-193944]
- KVM: s390: Fix S390_USER_OPEREXEC enablement without STFLE 74 (Christoph Schlameuss) [RHEL-158929]
- procfs: fix possible double mmput() in do_procmap_query() (Rafael Aquini) [RHEL-189666] {CVE-2026-23199}
- procfs: avoid fetching build ID while holding VMA lock (Rafael Aquini) [RHEL-189666] {CVE-2026-23199}
- i2c: tegra: Fix NOIRQ suspend/resume (Charles Mirabile) [RHEL-174252]
- i2c: tegra: Update Tegra410 I2C timing parameters (Charles Mirabile) [RHEL-174252]
- i2c: tegra: Disable fair arbitration for non-MCTP buses (Charles Mirabile) [RHEL-174252]
- i2c: tegra: use dmaengine_get_dma_device() for DMA buffer allocation (Charles Mirabile) [RHEL-174252]
- isofs: validate Rock Ridge CE continuation extent against volume size (CKI Backport Bot) [RHEL-187413] {CVE-2026-46303}
- intel_idle: Add Panther Lake C-states table (Steve Best) [RHEL-185572]
- KVM: s390: selftests: Add IRQ routing address offset tests (Christoph Schlameuss) [RHEL-183882]
- KVM: s390: Limit adapter indicator access to mapped page (Christoph Schlameuss) [RHEL-183882]
- tools/power/x86/intel-speed-select: Fix output when running on unsupported CLX platforms (Steve Best) [RHEL-184884]
- tools/power/x86/intel-speed-select: Fix some program return value (Steve Best) [RHEL-184884]
- tools/power/x86/intel-speed-select: Fix cpu extended family ID decoding (Steve Best) [RHEL-184884]
- platform/x86/intel/tpmi/plr: Prevent fault during unbind (Steve Best) [RHEL-182358]
- Revert "Drivers: hv: Add CONFIG_HYPERV_VMBUS option" (Karol Herbst) [RHEL-170737]
- Revert "drm/i915: Use preempt_disable/enable_rt() where recommended" (Karol Herbst) [RHEL-170737]
- Revert "drm/gem: fix build for mm_get_unmapped_area() call after backmerge" (Karol Herbst) [RHEL-170737]
- Partiall revert "mm: update shmem_[kernel]_file_*() functions to use vma_flags_t" (Karol Herbst) [RHEL-170737]
- drm: add 4th argument to vfs_parse_fs_string calls (Karol Herbst) [RHEL-170737]
- redhat/configs: Add new configs from DRM 7.0 backport (Karol Herbst) [RHEL-170737]
- Merge DRM changes from upstream v6.19..v7.0 (Karol Herbst) [RHEL-170737]
Resolves: RHEL-158929, RHEL-170737, RHEL-174252, RHEL-182358, RHEL-183882, RHEL-184884, RHEL-185572, RHEL-187413, RHEL-189556, RHEL-189666, RHEL-191293, RHEL-193944, RHEL-208745, RHEL-210859, RHEL-211103, RHEL-212108, RHEL-212367, RHEL-213294, RHEL-213537, RHEL-214083
* Tue Jul 28 2026 CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> [6.12.0-252.el10]
- Revert "selftests/pidfd: add tests for PIDFD_SELF_*" (John J Coleman) [RHEL-214159]
- Revert "selftests/mm: Use PKEY_UNRESTRICTED macro" (John J Coleman) [RHEL-214159]

View File

@ -179,15 +179,15 @@ Summary: The Linux kernel
%define specrpmversion 6.12.0
%define specversion 6.12.0
%define patchversion 6.12
%define pkgrelease 252
%define pkgrelease 253
%define kversion 6
%define tarfile_release 6.12.0-252.el10
%define tarfile_release 6.12.0-253.el10
# This is needed to do merge window version magic
%define patchlevel 12
# This allows pkg_release to have configurable %%{?dist} tag
%define specrelease 252%{?buildid}%{?dist}
%define specrelease 253%{?buildid}%{?dist}
# This defines the kabi tarball version
%define kabiversion 6.12.0-252.el10
%define kabiversion 6.12.0-253.el10
# If this variable is set to 1, a bpf selftests build failure will cause a
# fatal kernel package build error
@ -253,6 +253,8 @@ Summary: The Linux kernel
%define with_ynl %{?_without_ynl: 0} %{?!_without_ynl: 1}
# kernel-debuginfo
%define with_debuginfo %{?_without_debuginfo: 0} %{?!_without_debuginfo: 1}
# kernel-kmap-internal: source-to-module mapping data (JSON)
%define with_kmap %{?_without_kmap: 0} %{?!_without_kmap: 1}
# kernel-abi-stablelists
%define with_kernel_abi_stablelists %{?_without_kernel_abi_stablelists: 0} %{?!_without_kernel_abi_stablelists: 1}
# internal samples and selftests
@ -642,6 +644,10 @@ Summary: The Linux kernel
%define _enable_debug_packages 0
%endif
%ifnarch x86_64 ppc64le s390x aarch64 riscv64
%define with_kmap 0
%endif
# Architectures we build tools/cpupower on
%if 0%{?fedora}
%define cpupowerarchs %{ix86} x86_64 ppc64le aarch64
@ -1101,6 +1107,9 @@ Source489: %{name}-x86_64-automotive-debug-rhel.config
# Sources for kernel-tools
Source2002: kvm_stat.logrotate
# Sources for kernel-kmap-internal
Source2100: kmap.py
# Some people enjoy building customized kernels from the dist-git in Fedora and
# use this to override configuration options. One day they may all use the
# source tree, but in the mean time we carry this to support the legacy workflow
@ -1435,6 +1444,27 @@ This package provides debug information for the rv package.
# with_tools
%endif
%if %{with_kmap} && %{with_base}
%package -n %{name}-kmap-internal
Summary: Kernel source-to-module mapping data and module list
Group: Development/System
BuildRequires: python3
%description -n %{name}-kmap-internal
The %{name}-kmap-internal package contains a JSON mapping file that describes
which C source files contributed to each kernel module and to the built-in
vmlinux image, and which RPM package each module is shipped in.
Files installed under /usr/share/%{name}-kmap-internal/:
kernel-map-<KVERREL>.json - unified mapping file for all kernel variants containing:
- variants: list of variant names (e.g., ["stock", "rt", "automotive"])
- source-map: source file mappings
- obj-src: maps kernel objects to source files with variant indices
- src-obj: maps source files to kernel objects with variant indices
- module-map: module to RPM mappings
- module-rpm: maps module names to RPM package names with variant indices
- rpm-modules: maps RPM package names to module names with variant indices
%endif
%if %{with_selftests}
%package selftests-internal
@ -3007,6 +3037,44 @@ UKI_secureboot_cert=%{_datadir}/pki/sb-certs/secureboot-uki-virt-%{_arch}.cer
%endif
fi # $DoModules -eq 1
%if %{with_kmap} && %{with_base}
# Generate source-to-module mapping data using kmap.py.
# Must run before the next BuildKernel call issues make mrproper, which
# would wipe the .cmd files that kmap.py reads. Skip debug variants
# (same source mapping as the base kernel).
if [[ "$Variant" != *debug* ]]; then
_kmap_bdir=$(pwd)
_kmap_basedir=%{_builddir}/kmap-data
_kmap_merged=$_kmap_basedir/kernel-map.json
_kmap_variant=${Variant:-stock}
_kmap_listprefix=../kernel${Variant:+-${Variant}}
mkdir -p $_kmap_basedir
# Build kmap.py arguments; merge with existing data if present
_kmap_args="--directory $_kmap_bdir --outputdir $_kmap_basedir --rhel upstream --variant $_kmap_variant --time"
_kmap_args="$_kmap_args --vmlinux-rpm %{name}-core-%{KVERREL}.rpm"
if [ -f "$_kmap_merged" ]; then
_kmap_args="$_kmap_args --input kernel-map.json"
fi
# Add module list files for module-to-RPM mapping
for _kmap_type in modules-core modules modules-extra modules-internal; do
if [ -f "${_kmap_listprefix}-${_kmap_type}.list" ]; then
_kmap_rpm=%{name}-${_kmap_type}-%{KVERREL}.rpm
_kmap_args="$_kmap_args --module-list ${_kmap_rpm}:${_kmap_listprefix}-${_kmap_type}.list"
fi
done
%if 0%{!?fedora:1}
if [ -f "${_kmap_listprefix}-modules-partner.list" ]; then
_kmap_rpm=%{name}-modules-partner-%{KVERREL}.rpm
_kmap_args="$_kmap_args --module-list ${_kmap_rpm}:${_kmap_listprefix}-modules-partner.list"
fi
%endif
python3 %{SOURCE2100} $_kmap_args
fi
%endif
remove_depmod_files()
{
# remove files that will be auto generated by depmod at rpm -i time
@ -3907,6 +3975,14 @@ find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/
popd
%endif
%if %{with_kmap} && %{with_base}
# Install kmap data files produced during %build.
_kmap_basedir=%{_builddir}/kmap-data
_kmap_destbase=$RPM_BUILD_ROOT%{_datadir}/%{name}-kmap-internal
mkdir -p $_kmap_destbase
install -m 644 $_kmap_basedir/kernel-map.json $_kmap_destbase/kernel-map-%{KVERREL}.json
%endif
###
### clean
###
@ -4406,6 +4482,13 @@ fi\
%{_libexecdir}/kselftests
%endif
%if %{with_kmap} && %{with_base}
%files -n %{name}-kmap-internal
%defattr(-,root,root)
%dir %{_datadir}/%{name}-kmap-internal
%{_datadir}/%{name}-kmap-internal/kernel-map-%{KVERREL}.json
%endif
# empty meta-package
%if %{with_up_base}
%ifnarch %nobuildarches noarch
@ -4576,14 +4659,14 @@ fi\
#
#
%changelog
* Wed Jul 29 2026 Eduard Abdullin <eabdullin@almalinux.org> - 6.12.0-252
* Fri Jul 31 2026 Eduard Abdullin <eabdullin@almalinux.org> - 6.12.0-253
- Debrand for AlmaLinux OS
- Use AlmaLinux OS secure boot cert
* Wed Jul 29 2026 Neal Gompa <ngompa@almalinux.org> - 6.12.0-252
* Fri Jul 31 2026 Neal Gompa <ngompa@almalinux.org> - 6.12.0-253
- Enable Btrfs support for all kernel variants
* Wed Jul 29 2026 Andrew Lukoshko <alukoshko@almalinux.org> - 6.12.0-252
* Fri Jul 31 2026 Andrew Lukoshko <alukoshko@almalinux.org> - 6.12.0-253
- hpsa: bring back deprecated PCI ids #CFHack #CFHack2024
- mptsas: bring back deprecated PCI ids #CFHack #CFHack2024
- megaraid_sas: bring back deprecated PCI ids #CFHack #CFHack2024
@ -4593,6 +4676,56 @@ fi\
- kernel/rh_messages.h: enable all disabled pci devices by moving to
unmaintained
* Wed Jul 29 2026 CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> [6.12.0-253.el10]
- redhat: add kmap.py tool and kernel-kmap-internal package (Rado Vrbovsky)
- net/sched: cls_api: Handle TC_ACT_CONSUMED in tcf_qevent_handle (CKI Backport Bot) [RHEL-214083] {CVE-2026-64530}
- x86/fpu: Ensure XFD state on signal delivery (Steve Best) [RHEL-213537]
- platform/x86: intel-hid: Protect ACPI notify handler against recursion (Steve Best) [RHEL-213294]
- iTCO_wdt: mask NMI_NOW bit for update_no_reboot_bit() call (Dennis Chen) [RHEL-212108]
- ksm: use range-walk function to jump over holes in scan_get_next_rmap_item (Rafael Aquini) [RHEL-189556] {CVE-2025-68211}
- i2c: i801: fix hardware state machine corruption in error path (Steve Best) [RHEL-212367]
- gitlab-ci: enable riscv64 builds for c10s and rhel10 (Michael Krausch-Hofmann)
- pinctrl: mediatek: paris: bypass pinctrl GPIO layer in set GPIO direction (Jiri Benc) [RHEL-191293]
- pinctrl: mediatek: eint: Drop base from mtk_eint_chip_write_mask() (Jiri Benc) [RHEL-191293]
- pinctrl: mediatek: make devm allocations safer and clearer in mtk_eint_do_init() (Jiri Benc) [RHEL-191293]
- pinctrl: Use dev_fwnode() (Jiri Benc) [RHEL-191293]
- pinctrl: mediatek: eint: Fix invalid pointer dereference for v1 platforms (Jiri Benc) [RHEL-191293]
- pinctrl: mediatek: paris: use new GPIO line value setter callbacks (Jiri Benc) [RHEL-191293]
- pinctrl: mediatek: paris: don't double-check the GPIO number (Jiri Benc) [RHEL-191293]
- pinctrl: mediatek: common-v1: Fix error checking in mtk_eint_init() (Jiri Benc) [RHEL-191293]
- pinctrl: mediatek: Fix new design debounce issue (Jiri Benc) [RHEL-191293]
- pinctrl: mediatek: common-v1: Fix EINT breakage on older controllers (Jiri Benc) [RHEL-191293]
- pinctrl: mediatek: Fix the invalid conditions (Jiri Benc) [RHEL-191293]
- pinctrl: mediatek: Add EINT support for multiple addresses (Jiri Benc) [RHEL-191293]
- pinctrl: mediatek: Drop mtk_pinconf_bias_set_pd() (Jiri Benc) [RHEL-191293]
- pinctrl: mediatek: add support for MTK_PULL_PD_TYPE (Jiri Benc) [RHEL-191293]
- x86/cpu: Enable FSGSBASE early in cpu_init_exception_handling() (Steve Best) [RHEL-211103]
- cpufreq: intel_pstate: Sync policy->cur during CPU offline (Steve Best) [RHEL-210859]
- platform/x86/amd/hsmp: Clamp ioctl/send_message indices (Spectre v1) (Steve Best) [RHEL-208745]
- xfs: resample the data fork mapping after cycling ILOCK (Carlos Maiolino) [RHEL-193944]
- KVM: s390: Fix S390_USER_OPEREXEC enablement without STFLE 74 (Christoph Schlameuss) [RHEL-158929]
- procfs: fix possible double mmput() in do_procmap_query() (Rafael Aquini) [RHEL-189666] {CVE-2026-23199}
- procfs: avoid fetching build ID while holding VMA lock (Rafael Aquini) [RHEL-189666] {CVE-2026-23199}
- i2c: tegra: Fix NOIRQ suspend/resume (Charles Mirabile) [RHEL-174252]
- i2c: tegra: Update Tegra410 I2C timing parameters (Charles Mirabile) [RHEL-174252]
- i2c: tegra: Disable fair arbitration for non-MCTP buses (Charles Mirabile) [RHEL-174252]
- i2c: tegra: use dmaengine_get_dma_device() for DMA buffer allocation (Charles Mirabile) [RHEL-174252]
- isofs: validate Rock Ridge CE continuation extent against volume size (CKI Backport Bot) [RHEL-187413] {CVE-2026-46303}
- intel_idle: Add Panther Lake C-states table (Steve Best) [RHEL-185572]
- KVM: s390: selftests: Add IRQ routing address offset tests (Christoph Schlameuss) [RHEL-183882]
- KVM: s390: Limit adapter indicator access to mapped page (Christoph Schlameuss) [RHEL-183882]
- tools/power/x86/intel-speed-select: Fix output when running on unsupported CLX platforms (Steve Best) [RHEL-184884]
- tools/power/x86/intel-speed-select: Fix some program return value (Steve Best) [RHEL-184884]
- tools/power/x86/intel-speed-select: Fix cpu extended family ID decoding (Steve Best) [RHEL-184884]
- platform/x86/intel/tpmi/plr: Prevent fault during unbind (Steve Best) [RHEL-182358]
- Revert "Drivers: hv: Add CONFIG_HYPERV_VMBUS option" (Karol Herbst) [RHEL-170737]
- Revert "drm/i915: Use preempt_disable/enable_rt() where recommended" (Karol Herbst) [RHEL-170737]
- Revert "drm/gem: fix build for mm_get_unmapped_area() call after backmerge" (Karol Herbst) [RHEL-170737]
- Partiall revert "mm: update shmem_[kernel]_file_*() functions to use vma_flags_t" (Karol Herbst) [RHEL-170737]
- drm: add 4th argument to vfs_parse_fs_string calls (Karol Herbst) [RHEL-170737]
- redhat/configs: Add new configs from DRM 7.0 backport (Karol Herbst) [RHEL-170737]
- Merge DRM changes from upstream v6.19..v7.0 (Karol Herbst) [RHEL-170737]
* Tue Jul 28 2026 CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> [6.12.0-252.el10]
- Revert "selftests/pidfd: add tests for PIDFD_SELF_*" (John J Coleman) [RHEL-214159]
- Revert "selftests/mm: Use PKEY_UNRESTRICTED macro" (John J Coleman) [RHEL-214159]

874
kmap.py Executable file
View File

@ -0,0 +1,874 @@
#!/usr/bin/env python3
"""
kmap.py - Kernel Source-to-Binary Mapping Tool
DESCRIPTION
This tool parses Linux kernel build artifacts (.cmd files, archives) to
create a JSON mapping of which source files contribute to which kernel
binaries (modules and vmlinux). It supports merging data from multiple
kernel build variants (e.g., stock, debug, rt) into a single output
file using variant indices to track per-variant mappings.
Supported RHEL versions: 7, 8, 9, upstream
FEATURES
- Parses .cmd files generated by kbuild to extract compilation commands
- Supports C (gcc/clang) and Rust (rustc) source files
- Handles built-in objects via built-in.o.cmd (RHEL 7), built-in.a
(RHEL 8/9), or vmlinux.a (upstream)
- Merges multiple kernel variants into single output with variant indices
- Maps modules to their containing RPM packages
OUTPUT FORMAT
The output is a JSON file with the following structure:
{
"variants": ["stock", "rt", ...],
"source-map": {
"obj-src": {<object>: {<source>: [<variant_indices>]}},
"src-obj": {<source>: {<object>: [<variant_indices>]}}
},
"module-map": {
"module-rpm": {<module>: {<rpm_name>: [<variant_indices>]}},
"rpm-modules": {<rpm_name>: {<module>: [<variant_indices>]}}
}
}
PARSING THE OUTPUT
import json
with open('kernel-map.json') as f:
data = json.load(f)
variants = data['variants']
obj_src = data['source-map']['obj-src']
src_obj = data['source-map']['src-obj']
module_rpm = data['module-map']['module-rpm']
rpm_modules = data['module-map']['rpm-modules']
# Get sources for vmlinux in variant "stock" (index 0)
vmlinux_sources = [src for src, indices in obj_src['vmlinux'].items()
if 0 in indices]
# Find which object a source contributes to
fork_objects = [obj for obj, indices in src_obj['kernel/fork.c'].items()
if 0 in indices]
# Get RPM for a module
def get_rpm(module, variant_idx):
for rpm, indices in module_rpm.get(module, {}).items():
if variant_idx in indices:
return rpm
return None
USAGE
# Single variant
./kmap.py -d /build/stock -r upstream -v stock -o /output
# Merge multiple variants
./kmap.py -d /build/stock -r upstream -v stock -o /output
./kmap.py -d /build/debug -r upstream -v debug -o /output -i kernel-map.json
./kmap.py -d /build/rt -r upstream -v rt -o /output -i kernel-map.json
# With module-to-RPM mapping
./kmap.py -d /build -r upstream -v stock -o /output \\
--vmlinux-rpm kernel-core-5.14.0.rpm \\
--module-list kernel-modules-5.14.0.rpm:modules.list
CREDITS
Inspired by gen_compile_commands.py and Joe Lawrence.
Time measurement option added for Jan Stancek.
"""
import re
import os
import pathlib
import json
import argparse
import subprocess
import time
# =============================================================================
# Constants
# =============================================================================
VMLINUX = 'vmlinux'
KERNEL_PREFIX = 'kernel/'
# Supported compilers and linkers
COMPILERS = ('gcc', 'clang')
LINKER = 'ld'
RUST_COMPILER = 'rustc'
# =============================================================================
# Regex Patterns
#
# These patterns parse the kernel build .cmd files to extract:
# - What compiler/linker was used
# - What source files were compiled
# - What object files were linked
# =============================================================================
# Pattern for .ko.cmd files (module linking)
# Matches: cmd_path/to/module.ko := ld <params> -o <ko_name> <input_files>
# Note: upstream kernels use 'savedcmd_' prefix instead of 'cmd_'
_KO_CMD_PATTERN = (
r'^(saved)?cmd_[^ ]*\.ko\s*:=\s*ld\s+'
r'(?P<params>.*) -o (?P<ko_name>\S+) (?P<input_files>[^;]+?)\s*(?:;|$)'
)
# Pattern for .o.cmd files (object compilation)
# Matches multiple formats:
# - C/asm: cmd_*.o := gcc/clang <params> -o <output> <input>
# - Rust: cmd_*.o := rustc <params> --emit=obj=<output> <input.rs>
# - Rust source mapping: source_*.o := <file.rs>
_O_CMD_PATTERN = (
r'^(saved)?(?:cmd_|source_)[^ ]*\.o\s+:=\s+'
r'(?:'
r'(?P<prefix>(?:\S+=\S+\s+)*)?'
r'(?P<command>gcc|clang|ld|rustc)\s+'
r'(?P<params>.*?)'
r'(?:'
r'\s+-o\s+(?P<obj_out>\S+)\s+(?P<input_files>[^;]+?)'
r'|'
r'\s+--emit=obj=(?P<rust_obj_out>\S+).*?\s+(?P<rust_input_file>\S+\.rs)'
r')'
r'|'
r'(?P<source_file>\S+\.rs)'
r')\s*(?:;|$)'
)
ko_matcher = re.compile(_KO_CMD_PATTERN)
o_matcher = re.compile(_O_CMD_PATTERN)
# =============================================================================
# Utility Functions
# =============================================================================
def parse_args():
"""
Parse command line arguments
"""
parser = argparse.ArgumentParser(
prog='Kernel Build Mapper',
description='Scrape Linux Kernel .cmd files to map contribution '
'of individual source files to kernel binaries.',
)
parser.add_argument('-d', '--directory',
help='Directory with kernel build artifacts.',
default='',
type=str)
parser.add_argument('-o', '--outputdir',
help='Directory where to put generated files.',
default='',
type=str)
parser.add_argument('-p', '--prefix',
help='Name prefix to the generated files.',
default='',
type=str)
parser.add_argument('-r', '--rhel',
help='Specify to what version of RHEL artifacts belong (upstream for RHEL 10+/kernel-ark)',
choices=['7', '8', '9', 'upstream'],
required=True)
parser.add_argument('-m', '--no-modules',
help='*SKIP* collecting information about modules',
action='store_true')
parser.add_argument('-b', '--no-builtin',
help='*SKIP* collecting information about built-in',
action='store_true')
parser.add_argument('-t', '--time',
help='Print elapsed time at the end',
action='store_true')
parser.add_argument('-v', '--variant',
help='Name of this kernel variant (e.g., stock, debug, rt)',
required=True,
type=str)
parser.add_argument('-i', '--input',
help='Existing JSON file to merge with (from previous variant runs)',
default='',
type=str)
parser.add_argument('--module-list',
help='Module list in format <rpm-name>:<path> (can be specified multiple times)',
action='append',
default=[],
metavar='RPM:PATH')
parser.add_argument('--vmlinux-rpm',
help='RPM package name for vmlinux (e.g., "kernel-5.14.0.rpm")',
default='',
type=str)
return parser.parse_args()
def load_file(filename, build_dir=''):
"""
Load a text file and return non-empty lines as a list
"""
full_path = os.path.join(build_dir, filename)
try:
with open(full_path, 'rt', encoding='utf-8') as file:
return [line.rstrip() for line in file if line.rstrip()]
except FileNotFoundError:
print(f'File "{full_path}" not found.')
return []
def name_to_cmd(filename, suffix):
"""
Convert object filename to corresponding .cmd script filename
Example: kernel/fork.o -> kernel/.fork.o.cmd
"""
path, _ = os.path.splitext(filename)
dirname = os.path.dirname(path)
basename = os.path.basename(path)
return os.path.join(dirname, '.' + basename + suffix)
def strip_path_prefixes(path, build_dir):
"""
Normalize path by removing build directory prefix and other artifacts
"""
path = pathlib.Path(path)
if build_dir:
try:
return str(path.resolve().relative_to(pathlib.Path(build_dir).resolve()))
except ValueError:
pass
if path.is_absolute():
path = pathlib.Path(*path.parts[1:])
while path.parts and path.parts[0] == 'repos':
path = pathlib.Path(*path.parts[1:])
return str(path)
def is_external_source(path):
"""
Check if path should be excluded from source mapping
Filters out:
- Rust toolchain sources (not part of kernel source)
- Generated assembly files (e.g., initramfs_data.S)
"""
if 'rustlib' in path:
return True
if path.endswith('_data.S'):
return True
return False
def is_mod_file_reference(ld_input):
"""
Check if linker input is a .mod file reference (RHEL 9+ module linking)
In RHEL 9+, module linking uses @path/to/module.mod files that contain
the list of object files to link.
"""
files = ld_input.split()
return len(files) == 1 and files[0].startswith('@') and files[0].endswith('.mod')
# =============================================================================
# SourceMap Class
# =============================================================================
class SourceMap:
"""
Collects and manages kernel source-to-binary mappings.
This class parses kernel build artifacts (.cmd files, archives) to determine
which source files contribute to which kernel binaries (modules and vmlinux).
Data structures:
obj_to_src: {object_name: {source_file: [variant_indices]}}
src_to_obj: {source_file: {object_name: [variant_indices]}}
module_rpm: {module_name: {rpm_name: [variant_indices]}}
rpm_to_modules: {rpm_name: {module_name: [variant_indices]}}
Variant indices correspond to positions in the 'variants' list.
"""
# Dispatch table for RHEL-specific builtin collection methods
BUILTIN_COLLECTORS = {
'7': '_collect_builtin_rhel7',
'8': '_collect_builtin_archive',
'9': '_collect_builtin_archive',
'upstream': '_collect_builtin_vmlinux_archive',
}
def __init__(self, build_dir='', output_dir='', outprefix='', rhel='7', variant=''):
# Source mappings
self.obj_to_src = {}
self.src_to_obj = {}
# Module-to-RPM mappings
self.module_rpm = {}
self.rpm_to_modules = {}
# Configuration
self.build_dir = build_dir
self.output_dir = output_dir
self.outprefix = outprefix
self.rhel = rhel
# Module list
self.modlist = set()
# Variant tracking for multi-variant merging
self.variants = []
self.variant = variant
self.variant_idx = 0
# -------------------------------------------------------------------------
# Variant Management
# -------------------------------------------------------------------------
def load_existing(self, filename):
"""
Load existing merged data from previous variant runs
"""
if not filename:
return
full_path = os.path.join(self.output_dir, filename) if self.output_dir else filename
if not os.path.exists(full_path):
return
with open(full_path, 'rt', encoding='utf-8') as f:
data = json.load(f)
self.variants = data.get('variants', [])
module_map = data.get('module-map', {})
self.module_rpm = module_map.get('module-rpm', {})
self.rpm_to_modules = module_map.get('rpm-modules', {})
source_map = data.get('source-map', {})
self.obj_to_src = source_map.get('obj-src', {})
self.src_to_obj = source_map.get('src-obj', {})
def add_variant(self):
"""
Register current variant and store its index
"""
if self.variant in self.variants:
self.variant_idx = self.variants.index(self.variant)
else:
self.variant_idx = len(self.variants)
self.variants.append(self.variant)
# -------------------------------------------------------------------------
# Source Merging Helpers
# -------------------------------------------------------------------------
def _merge_sources(self, target, source):
"""
Merge source dict into target dict by combining variant index lists
"""
for src, indices in source.items():
if src not in target:
target[src] = []
for idx in indices:
if idx not in target[src]:
target[src].append(idx)
def _add_source(self, sources, source_path):
"""
Add a source file to the sources dict with current variant index
Returns True if source was added, False if filtered out
"""
source_path = os.path.normpath(source_path)
source_path = strip_path_prefixes(source_path, self.build_dir)
if is_external_source(source_path):
return False
sources[source_path] = [self.variant_idx]
return True
# -------------------------------------------------------------------------
# .cmd File Parsing
# -------------------------------------------------------------------------
def _parse_ko_cmd(self, ko_name):
"""
Parse .ko.cmd file to find the primary object file linked into the module
"""
ko_script = name_to_cmd(ko_name, '.ko.cmd')
lines = load_file(ko_script, build_dir=self.build_dir)
for line in lines:
result = ko_matcher.match(line)
if result:
input_files = result.group('input_files').split()
return input_files[0]
return None
def _parse_o_cmd(self, o_name, translate=True):
"""
Parse .o.cmd file to extract source files that contribute to the object
Handles:
- C/assembly compilation (gcc, clang)
- Linking (ld) - recursively parses linked objects
- Rust compilation (rustc)
- Rust source file mappings
Args:
o_name: Object file name or .cmd file path
translate: If True, convert object name to .cmd path (e.g., kernel/fork.o
becomes kernel/.fork.o.cmd). If False, use o_name as-is.
This parameter exists to handle different kbuild behaviors
across RHEL versions - some code paths may already have .cmd
paths while others have object names that need translation.
"""
sources = {}
o_script = name_to_cmd(o_name, '.o.cmd') if translate else o_name
lines = load_file(o_script, build_dir=self.build_dir)
for line in lines:
result = o_matcher.match(line)
if not result:
continue
command = result.group('command')
if command in COMPILERS:
self._handle_compiler(result, sources)
break
elif command == LINKER:
self._handle_linker(result, sources)
break
elif command == RUST_COMPILER:
self._handle_rustc(result, sources)
break
else:
self._handle_rust_source_mapping(result, sources)
break
return sources
def _handle_compiler(self, match_result, sources):
"""
Handle gcc/clang compilation - extract the input source file
"""
obj_input = match_result.group('input_files')
if obj_input:
self._add_source(sources, obj_input)
def _handle_linker(self, match_result, sources):
"""
Handle ld linking - recursively parse linked objects
"""
obj_input = match_result.group('input_files')
if not obj_input:
return
if is_mod_file_reference(obj_input):
self._merge_sources(sources, self._parse_mod_cmd(obj_input))
else:
for obj_file in obj_input.split():
self._merge_sources(sources, self._parse_o_cmd(obj_file))
def _handle_rustc(self, match_result, sources):
"""
Handle rustc compilation - extract the Rust source file
"""
rust_input = match_result.group('rust_input_file')
if rust_input:
self._add_source(sources, rust_input)
def _handle_rust_source_mapping(self, match_result, sources):
"""
Handle Rust source file mapping (source_*.o := *.rs)
"""
source_file = match_result.group('source_file')
if source_file and source_file.endswith('.rs'):
self._add_source(sources, source_file)
def _parse_mod_cmd(self, mod_name):
"""
Parse .mod file used by RHEL 9+ for linking modules
These files contain a list of object files to link into the module.
"""
sources = {}
mod_name = mod_name.strip('@')
lines = load_file(mod_name, build_dir=self.build_dir)
for line in lines:
self._merge_sources(sources, self._parse_o_cmd(line))
return sources
def _parse_a_cmd(self, a_name):
"""
Parse archive .cmd file (RHEL 7 built-in.o.cmd files)
"""
sources = {}
lines = load_file(a_name, build_dir=self.build_dir)
for line in lines:
result = o_matcher.match(line)
if not result:
continue
ar_input = result.group('input_files')
for filename in ar_input.rsplit():
if filename.endswith('.o'):
self._merge_sources(sources, self._parse_o_cmd(filename))
elif filename.endswith('.a'):
self._merge_sources(sources, self._parse_a_cmd(filename))
return sources
# -------------------------------------------------------------------------
# Module Collection
# -------------------------------------------------------------------------
def _load_module_list(self, modorder='modules.order'):
"""
Load modules.order file and normalize paths
RHEL 7, 8: modules.order has 'kernel/' prefix that needs to be stripped
RHEL 9, upstream: modules.order paths are used as-is
"""
lines = load_file(modorder, build_dir=self.build_dir)
if not lines:
print(f'Warning: modules.order is empty or not found')
self.modlist = set()
return
if self.rhel in ['9', 'upstream']:
self.modlist = set(lines)
else:
# RHEL 7, 8: strip fake 'kernel/' prefix added by kbuild
self.modlist = {
path[len(KERNEL_PREFIX):] if path.startswith(KERNEL_PREFIX) else path
for path in lines
}
def _parse_module_objects(self):
"""
Parse all module .cmd files and extract source mappings.
Note on RHEL version differences:
- RHEL 7/8/9: modules.order contains .ko paths (e.g., fs/exfat/exfat.ko)
- upstream: modules.order contains .o paths (e.g., fs/exfat/exfat.o)
The normalization below ensures consistent .ko keys in output regardless
of the modules.order format.
"""
for kobj in self.modlist:
# Normalize to .ko - upstream has .o paths in modules.order
if self.rhel == 'upstream' and kobj.endswith('.o'):
module_name = kobj[:-2] + '.ko'
else:
module_name = kobj
obj_name = self._parse_ko_cmd(module_name)
if obj_name is None:
print(f'Warning: Could not parse .ko.cmd for "{module_name}", skipping.')
continue
obj_source = self._parse_o_cmd(obj_name)
if module_name not in self.obj_to_src:
self.obj_to_src[module_name] = {}
self._merge_sources(self.obj_to_src[module_name], obj_source)
def collect_modules(self, no_modules=False, modorder='modules.order'):
"""
Collect source files for kernel modules
"""
if no_modules:
return
self._load_module_list(modorder)
self._parse_module_objects()
# -------------------------------------------------------------------------
# Builtin Collection (RHEL version-specific)
# -------------------------------------------------------------------------
def _collect_builtin_rhel7(self):
"""
Collect built-in objects for RHEL 7 using *built-in.o.cmd files
"""
pattern = '*built-in.o.cmd'
cmd_list = {
strip_path_prefixes(path, self.build_dir)
for path in pathlib.Path(self.build_dir).rglob(pattern)
}
for entry in cmd_list:
sources = self._parse_a_cmd(entry)
self._merge_sources(self.obj_to_src[VMLINUX], sources)
def _collect_builtin_archive(self):
"""
Collect built-in objects for RHEL 8/9 using *built-in.a archives
"""
pattern = '*built-in.a'
archive_list = {
strip_path_prefixes(path, self.build_dir)
for path in pathlib.Path(self.build_dir).rglob(pattern)
}
for entry in archive_list:
path = os.path.join(self.build_dir, entry)
objects = subprocess.check_output(['ar', 't', path]).decode().split()
for obj in objects:
obj_path = strip_path_prefixes(obj, build_dir=self.build_dir)
sources = self._parse_o_cmd(obj_path)
self._merge_sources(self.obj_to_src[VMLINUX], sources)
def _collect_builtin_vmlinux_archive(self):
"""
Collect built-in objects for upstream kernels using single vmlinux.a archive
"""
path = os.path.join(self.build_dir, 'vmlinux.a')
objects = subprocess.check_output(['ar', 't', path]).decode().split()
for obj in objects:
obj_path = strip_path_prefixes(obj, build_dir=self.build_dir)
sources = self._parse_o_cmd(obj_path)
self._merge_sources(self.obj_to_src[VMLINUX], sources)
def collect_builtin(self, no_builtin=False):
"""
Collect source files for vmlinux built-in objects
Uses RHEL version-specific collection method via dispatch table.
"""
if VMLINUX not in self.obj_to_src:
self.obj_to_src[VMLINUX] = {}
if no_builtin:
return
collector_name = self.BUILTIN_COLLECTORS.get(self.rhel, '_collect_builtin_archive')
collector = getattr(self, collector_name)
collector()
# -------------------------------------------------------------------------
# Module-to-RPM Mapping
# -------------------------------------------------------------------------
def _parse_module_list_file(self, filename, rpm_name):
"""
Parse a module list file and add entries to module_rpm mapping
Handles various formats:
- Absolute paths: /lib/modules/5.14.0/kernel/drivers/net/e1000.ko.xz
- Relative paths: kernel/drivers/net/e1000.ko
- Skips RPM spec directives (%dir, %defattr, etc.)
Args:
filename: Path to the module list file
rpm_name: Literal RPM package name (e.g., "kernel-modules-5.14.0.rpm")
"""
if not filename or not os.path.exists(filename):
return
with open(filename, 'rt', encoding='utf-8') as f:
for line in f:
line = line.strip()
# Skip empty lines, comments, and RPM spec directives
if not line or line.startswith('#') or line.startswith('%'):
continue
# Skip non-module files
if '.ko' not in line:
continue
# Extract module name from path
module = os.path.basename(line)
# Remove .ko and any compression suffix
module = re.sub(r'\.ko(\.[^.]+)?$', '', module)
if not module:
continue
if module not in self.module_rpm:
self.module_rpm[module] = {}
if rpm_name not in self.module_rpm[module]:
self.module_rpm[module][rpm_name] = []
if self.variant_idx not in self.module_rpm[module][rpm_name]:
self.module_rpm[module][rpm_name].append(self.variant_idx)
def collect_module_rpm(self, module_lists, vmlinux_rpm=''):
"""
Collect module-to-RPM name mappings from module list files
Args:
module_lists: List of "rpm_name:path" strings
vmlinux_rpm: RPM package name for vmlinux
"""
if not module_lists and not vmlinux_rpm:
return
# Add vmlinux to specified RPM
if vmlinux_rpm:
if VMLINUX not in self.module_rpm:
self.module_rpm[VMLINUX] = {}
if vmlinux_rpm not in self.module_rpm[VMLINUX]:
self.module_rpm[VMLINUX][vmlinux_rpm] = []
if self.variant_idx not in self.module_rpm[VMLINUX][vmlinux_rpm]:
self.module_rpm[VMLINUX][vmlinux_rpm].append(self.variant_idx)
# Process module list files
for entry in module_lists:
if ':' not in entry:
print(f'Warning: Invalid --module-list format "{entry}", expected RPM:PATH')
continue
rpm_name, path = entry.split(':', 1)
self._parse_module_list_file(path, rpm_name)
# -------------------------------------------------------------------------
# Output
# -------------------------------------------------------------------------
def _build_reverse_map(self):
"""
Create reverse mapping (source -> {obj: [indices]}) from obj_to_src
"""
for obj, sources in self.obj_to_src.items():
for source, indices in sources.items():
if source not in self.src_to_obj:
self.src_to_obj[source] = {}
if obj not in self.src_to_obj[source]:
self.src_to_obj[source][obj] = []
for idx in indices:
if idx not in self.src_to_obj[source][obj]:
self.src_to_obj[source][obj].append(idx)
def _build_rpm_reverse_map(self):
"""
Create reverse mapping (rpm -> {module: [indices]}) from module_rpm
"""
for module, rpms in self.module_rpm.items():
for rpm, indices in rpms.items():
if rpm not in self.rpm_to_modules:
self.rpm_to_modules[rpm] = {}
if module not in self.rpm_to_modules[rpm]:
self.rpm_to_modules[rpm][module] = []
for idx in indices:
if idx not in self.rpm_to_modules[rpm][module]:
self.rpm_to_modules[rpm][module].append(idx)
def save_data(self):
"""
Save collected data to JSON file
Output structure:
- variants: list of variant names
- source-map: source file mappings
- obj-src: object/module -> {source: [variant_indices]}
- src-obj: source -> {object/module: [variant_indices]}
- module-map: module to RPM mappings
- module-rpm: module name -> {rpm-name: [variant_indices]}
- rpm-modules: rpm-name -> {module name: [variant_indices]}
Variant indices correspond to positions in the 'variants' list.
"""
output = {
'variants': self.variants,
'source-map': {
'obj-src': self.obj_to_src,
'src-obj': self.src_to_obj
},
'module-map': {
'module-rpm': self.module_rpm,
'rpm-modules': self.rpm_to_modules
}
}
filename = self.outprefix + 'kernel-map.json'
with open(os.path.join(self.output_dir, filename), 'wt', encoding='utf-8') as f:
json.dump(output, f, indent=2, sort_keys=True)
# -------------------------------------------------------------------------
# Main Entry Point
# -------------------------------------------------------------------------
def collect_data(self, no_modules=False, no_builtin=False, modorder='modules.order',
input_file='', module_lists=None, vmlinux_rpm=''):
"""
Main entry point - collect all data and save to JSON
"""
self.load_existing(input_file)
self.add_variant()
self.collect_modules(no_modules, modorder)
self.collect_builtin(no_builtin)
self.collect_module_rpm(module_lists or [], vmlinux_rpm)
self._build_reverse_map()
self._build_rpm_reverse_map()
self.save_data()
# =============================================================================
# Main
# =============================================================================
def main():
"""
Main entry point
"""
args = parse_args()
start = time.monotonic()
source_map = SourceMap(
build_dir=args.directory,
output_dir=args.outputdir,
outprefix=args.prefix,
rhel=args.rhel,
variant=args.variant)
source_map.collect_data(
no_modules=args.no_modules,
no_builtin=args.no_builtin,
input_file=args.input,
module_lists=args.module_list,
vmlinux_rpm=args.vmlinux_rpm)
if args.time:
elapsed = time.monotonic() - start
minutes, seconds = divmod(int(elapsed), 60)
print(f'Elapsed time: {minutes:02d}:{seconds:02d}')
if __name__ == '__main__':
main()

View File

@ -1,5 +1,5 @@
SHA512 (kernel-abi-stablelists-6.6.0.tar.bz2) = 4f917598056dee5e23814621ec96ff2e4a411c8c4ba9d56ecb01b23cb96431825bedbecfcbaac9338efbf5cb21694d85497fa0bf43e7c80d9cd10bc6dd144dbd
SHA512 (kernel-kabi-dw-6.6.0.tar.bz2) = 19308cd976031d05e18ef7f5d093218acdb89446418bab0cd956ff12cf66369915b9e64bb66fa9f20939428a60e81884fec5be3529c6c7461738d6540d3cc5c6
SHA512 (linux-6.12.0-252.el10.tar.xz) = 8a0e6d572c6d325a946a2e988360496f270451f3f72063f8b9b77ba01efe42930b839ac3520ac76b245989e8e85dc47c77109a984de3d55fc248ac028a782f24
SHA512 (kernel-abi-stablelists-6.12.0-252.el10.tar.xz) = 24ea0efba26c75fe5e2558333e14bb68fccb83090fe251432154d8707e34891b1e1f0483cf9cdd8dfed87c1a717ca24ee2a26b771d40fe953fc415b335fb8aeb
SHA512 (kernel-kabi-dw-6.12.0-252.el10.tar.xz) = 30d51d42365bdeb6fa5cc39a266934cb128bbb080dafada43dda605f754f115e5af4b9343e6715a61d275267efdd2dc129bb5f04d27de4517019450b32ccecc7
SHA512 (linux-6.12.0-253.el10.tar.xz) = c591cae2174bc74ade06202126bb35607b7478a3dc96a9f044375ce33d4325cd16f8512001b6c88a14dc808060fdaddc2c0a3a32fd6e29ea0044be756731d428
SHA512 (kernel-abi-stablelists-6.12.0-253.el10.tar.xz) = 5e380cbb78f3d8cebf2ba77eb8ff68770bbac1c32c931a5442d75b9b52f21d94f5bdcc6b577ac884713528b8458ebf467a86ddc32a64aeeab36ebf9cdf87fdcf
SHA512 (kernel-kabi-dw-6.12.0-253.el10.tar.xz) = 638b2290798338b50b1abd19618a202ca1ff4a20d6405253bf85da30a1912bf871349afdcf6cecf255573b3d3848c156922ad87b5e2e94c15e6d38afcb5748e9