diff --git a/Makefile.rhelver b/Makefile.rhelver index 679d82097..d069eebd1 100644 --- a/Makefile.rhelver +++ b/Makefile.rhelver @@ -12,7 +12,7 @@ RHEL_MINOR = 99 # # Use this spot to avoid future merge conflicts. # Do not trim this comment. -RHEL_RELEASE = 63 +RHEL_RELEASE = 0 # # RHEL_REBASE_NUM diff --git a/Patchlist.changelog b/Patchlist.changelog index 8a6548b6e..eb16b5b6c 100644 --- a/Patchlist.changelog +++ b/Patchlist.changelog @@ -1,435 +1,132 @@ -https://gitlab.com/cki-project/kernel-ark/-/commit/3c3fe7f3d440e344ba33049fa99d14eb6172224b - 3c3fe7f3d440e344ba33049fa99d14eb6172224b redhat: include resolve_btfids in kernel-devel +https://gitlab.com/cki-project/kernel-ark/-/commit/37f88e3ca1bde6c898222d6dbd8f4d804c2e9834 + 37f88e3ca1bde6c898222d6dbd8f4d804c2e9834 media: qcom: camss: Fix ordering of pm_runtime_enable -https://gitlab.com/cki-project/kernel-ark/-/commit/8b553d8591d86f4a768f3b55f99f8480872cb823 - 8b553d8591d86f4a768f3b55f99f8480872cb823 redhat: workaround CKI cross compilation for scripts +https://gitlab.com/cki-project/kernel-ark/-/commit/9f2335d9e326af21c4376eec9bece213a512e726 + 9f2335d9e326af21c4376eec9bece213a512e726 media: qcom: camss: Remove use_count guard in stop_streaming -https://gitlab.com/cki-project/kernel-ark/-/commit/b0c8e7622950ce4bd430980be9a93e56bda43672 - b0c8e7622950ce4bd430980be9a93e56bda43672 crypto: akcipher - Disable signing and decryption +https://gitlab.com/cki-project/kernel-ark/-/commit/7e88a0ffc13ab94b37a3d45e1180bf98d5a1ab75 + 7e88a0ffc13ab94b37a3d45e1180bf98d5a1ab75 arm64: dts: allwinner: a64: Add GPU thermal trips to the SoC dtsi -https://gitlab.com/cki-project/kernel-ark/-/commit/a09122a7a65c8e9f1a0982f6a9c768bf040f6df9 - a09122a7a65c8e9f1a0982f6a9c768bf040f6df9 crypto: dh - implement FIPS PCT +https://gitlab.com/cki-project/kernel-ark/-/commit/5b1fd9a9d2bd49e45e3703121c69142a78f75acb + 5b1fd9a9d2bd49e45e3703121c69142a78f75acb arm64: dts: rockchip: Raise Pinebook Pro's panel backlight PWM frequency -https://gitlab.com/cki-project/kernel-ark/-/commit/a9c9a82dfe33e40861d7d0a13ae9fe50a5b49c12 - a9c9a82dfe33e40861d7d0a13ae9fe50a5b49c12 crypto: ecdh - disallow plain "ecdh" usage in FIPS mode +https://gitlab.com/cki-project/kernel-ark/-/commit/1702e478b95131f3004b3c2eb2afd9eb88c69972 + 1702e478b95131f3004b3c2eb2afd9eb88c69972 arm64: dts: qcom: sc8280xp-x13s: Enable RGB sensor -https://gitlab.com/cki-project/kernel-ark/-/commit/135f5f0257aaf5fc358eb35665b88f78cfa9882d - 135f5f0257aaf5fc358eb35665b88f78cfa9882d crypto: seqiv - flag instantiations as FIPS compliant +https://gitlab.com/cki-project/kernel-ark/-/commit/eac4ee8c9ca0b44bc1611e735a08a940792f5ef0 + eac4ee8c9ca0b44bc1611e735a08a940792f5ef0 ARM: dts: bcm2837/bcm2712: adjust local intc node names -https://gitlab.com/cki-project/kernel-ark/-/commit/6425c2e128af3870617dd29da8110e7fa17b9ba9 - 6425c2e128af3870617dd29da8110e7fa17b9ba9 not upstream: Disable vdso getrandom when FIPS is enabled +https://gitlab.com/cki-project/kernel-ark/-/commit/68ca5d3e34a03dffe1ff51bf8a585923d7c985e5 + 68ca5d3e34a03dffe1ff51bf8a585923d7c985e5 arm64: dts: broadcom: Add minimal support for Raspberry Pi 5 -https://gitlab.com/cki-project/kernel-ark/-/commit/ecb1311a2f2e5baf8cd394850d03d33e18c8ba41 - ecb1311a2f2e5baf8cd394850d03d33e18c8ba41 [kernel] bpf: set default value for bpf_jit_harden +https://gitlab.com/cki-project/kernel-ark/-/commit/9d4f912ea7ae72beae0943fb93468c93c08d53fd + 9d4f912ea7ae72beae0943fb93468c93c08d53fd redhat: include resolve_btfids in kernel-devel -https://gitlab.com/cki-project/kernel-ark/-/commit/6ae23a2899f457adcbd4e081dec7a49a62b5ec87 - 6ae23a2899f457adcbd4e081dec7a49a62b5ec87 Add support to rh_waived cmdline boot parameter +https://gitlab.com/cki-project/kernel-ark/-/commit/9b332458aa4b5d43c795b8c03e1041956d92e09b + 9b332458aa4b5d43c795b8c03e1041956d92e09b redhat: workaround CKI cross compilation for scripts -https://gitlab.com/cki-project/kernel-ark/-/commit/ea1b0021eef49f13c5a0ccf1e2e1e506a9992250 - ea1b0021eef49f13c5a0ccf1e2e1e506a9992250 rh_flags: fix failed when register_sysctl_sz rh_flags_table to kernel +https://gitlab.com/cki-project/kernel-ark/-/commit/1bd2b8b9cdd378bc0bcc46ffb3580b810b22bec5 + 1bd2b8b9cdd378bc0bcc46ffb3580b810b22bec5 crypto: akcipher - Disable signing and decryption -https://gitlab.com/cki-project/kernel-ark/-/commit/38fda603cbe1d8e6158f027bcf5119813f4043b3 - 38fda603cbe1d8e6158f027bcf5119813f4043b3 [redhat] rh_flags: constify the ctl_table argument of proc_handler +https://gitlab.com/cki-project/kernel-ark/-/commit/35655c383bfd88c12f760899ea64659da5a29627 + 35655c383bfd88c12f760899ea64659da5a29627 crypto: dh - implement FIPS PCT -https://gitlab.com/cki-project/kernel-ark/-/commit/6fd960759f97a5d7638604bf050268d3019d079d - 6fd960759f97a5d7638604bf050268d3019d079d redhat: rh_flags: declare proper static methods when !CONFIG_RHEL_DIFFERENCES +https://gitlab.com/cki-project/kernel-ark/-/commit/dc99bf18097cb54436cdea0c68844819d2adfe75 + dc99bf18097cb54436cdea0c68844819d2adfe75 crypto: ecdh - disallow plain "ecdh" usage in FIPS mode -https://gitlab.com/cki-project/kernel-ark/-/commit/e17bacfa75053db9c6d53889a7bbcacf2dc792fa - e17bacfa75053db9c6d53889a7bbcacf2dc792fa not upstream: drop openssl ENGINE API usage +https://gitlab.com/cki-project/kernel-ark/-/commit/d684af303ca6e652bcb52c6637f1c49a65f59100 + d684af303ca6e652bcb52c6637f1c49a65f59100 crypto: seqiv - flag instantiations as FIPS compliant -https://gitlab.com/cki-project/kernel-ark/-/commit/1dac14d8c6c96cf0d5482ae5058a0d5a9168a658 - 1dac14d8c6c96cf0d5482ae5058a0d5a9168a658 media: ipu-bridge: Add HIDs from out of tree IPU6 driver ipu-bridge copy +https://gitlab.com/cki-project/kernel-ark/-/commit/7c0d780c693acc53b94b27e5a9c72d377b98aab4 + 7c0d780c693acc53b94b27e5a9c72d377b98aab4 not upstream: drop openssl ENGINE API usage -https://gitlab.com/cki-project/kernel-ark/-/commit/4cb78cb3abf1fe71466080bfaab5f2d235346ff3 - 4cb78cb3abf1fe71466080bfaab5f2d235346ff3 media: ipu-bridge: Sort ipu_supported_sensors[] array by ACPI HID +https://gitlab.com/cki-project/kernel-ark/-/commit/f8e0850f38863ef52f2cd55fdcdb3abaaad9e73e + f8e0850f38863ef52f2cd55fdcdb3abaaad9e73e lsm: update security_lock_kernel_down -https://gitlab.com/cki-project/kernel-ark/-/commit/1135086f19f762f7d488a88bd340dd9b2025bda1 - 1135086f19f762f7d488a88bd340dd9b2025bda1 redhat: make bnx2xx drivers unmaintained in rhel-10 +https://gitlab.com/cki-project/kernel-ark/-/commit/32ab33b828ef7b77647c69cf192ca42d9f6566e9 + 32ab33b828ef7b77647c69cf192ca42d9f6566e9 scsi: sd: Add "probe_type" module parameter to allow synchronous probing -https://gitlab.com/cki-project/kernel-ark/-/commit/afa4fe68597f6ffc6e42e14cc07140de86be94c9 - afa4fe68597f6ffc6e42e14cc07140de86be94c9 rh_flags: Rename rh_features to rh_flags +https://gitlab.com/cki-project/kernel-ark/-/commit/060bc66dee0bd947f7a19240d1059128c39a555b + 060bc66dee0bd947f7a19240d1059128c39a555b Revert "Remove EXPERT from ARCH_FORCE_MAX_ORDER for aarch64" -https://gitlab.com/cki-project/kernel-ark/-/commit/5dcb5dbc042a90d7db565097011d4c484fc9ac37 - 5dcb5dbc042a90d7db565097011d4c484fc9ac37 kernel: rh_features: fix reading empty feature list from /proc +https://gitlab.com/cki-project/kernel-ark/-/commit/87bee3c15d593cdf1f4c337d65900cc8639459e2 + 87bee3c15d593cdf1f4c337d65900cc8639459e2 Enable IO_URING for RHEL -https://gitlab.com/cki-project/kernel-ark/-/commit/c202035d59c34a262d5118ffdf050ac7447fb962 - c202035d59c34a262d5118ffdf050ac7447fb962 rh_features: move rh_features entry to sys/kernel +https://gitlab.com/cki-project/kernel-ark/-/commit/c1791b7d3183881333af9a8fec60565ac55cad61 + c1791b7d3183881333af9a8fec60565ac55cad61 Remove EXPERT from ARCH_FORCE_MAX_ORDER for aarch64 -https://gitlab.com/cki-project/kernel-ark/-/commit/16e99d54bb828c9eb4b0b57768ce79242b74a348 - 16e99d54bb828c9eb4b0b57768ce79242b74a348 rh_features: convert to atomic allocation +https://gitlab.com/cki-project/kernel-ark/-/commit/ad94095fbf83123eeb07fdbf38af75b0f5344f27 + ad94095fbf83123eeb07fdbf38af75b0f5344f27 redhat: version two of Makefile.rhelver tweaks -https://gitlab.com/cki-project/kernel-ark/-/commit/7315ec7f71bc1599b029ffae4e2a552e9c023d32 - 7315ec7f71bc1599b029ffae4e2a552e9c023d32 add rh_features to /proc +https://gitlab.com/cki-project/kernel-ark/-/commit/baf728d501a2661e474ebbae11d667849e17d29b + baf728d501a2661e474ebbae11d667849e17d29b redhat: adapt to upstream Makefile change -https://gitlab.com/cki-project/kernel-ark/-/commit/21299dacb012c66bbc4defe87a3faf2d6ef1b75f - 21299dacb012c66bbc4defe87a3faf2d6ef1b75f add support for rh_features +https://gitlab.com/cki-project/kernel-ark/-/commit/472b92a5d9724cbbd0607fd5d82947764c2b972f + 472b92a5d9724cbbd0607fd5d82947764c2b972f Change acpi_bus_get_acpi_device to acpi_get_acpi_dev -https://gitlab.com/cki-project/kernel-ark/-/commit/e9fde71eb980d49c9b876604529cf44f2d0ea748 - e9fde71eb980d49c9b876604529cf44f2d0ea748 [redhat] PCI: Fix pci_rh_check_status() call semantics +https://gitlab.com/cki-project/kernel-ark/-/commit/d75c410357fb64130d57d556ff9229139c14a8e8 + d75c410357fb64130d57d556ff9229139c14a8e8 RHEL: disable io_uring support -https://gitlab.com/cki-project/kernel-ark/-/commit/632956bf1b0e79933a0699d2fcdf643a2ff9ba98 - 632956bf1b0e79933a0699d2fcdf643a2ff9ba98 scsi: sd: condition probe_type under RHEL_DIFFERENCES +https://gitlab.com/cki-project/kernel-ark/-/commit/6e698e13917736eccc5bb20af0bc67490d8528cf + 6e698e13917736eccc5bb20af0bc67490d8528cf REDHAT: coresight: etm4x: Disable coresight on HPE Apollo 70 -https://gitlab.com/cki-project/kernel-ark/-/commit/562ec649489202ef85643f9f9ba841b25e5075a2 - 562ec649489202ef85643f9f9ba841b25e5075a2 scsi: sd: remove unused sd_probe_types +https://gitlab.com/cki-project/kernel-ark/-/commit/85626adff3f11ecbdb88472ddbd9ce884ef9e114 + 85626adff3f11ecbdb88472ddbd9ce884ef9e114 KEYS: Make use of platform keyring for module signature verify -https://gitlab.com/cki-project/kernel-ark/-/commit/3fb78807aaa5b028cab9a996e85a79857c901b31 - 3fb78807aaa5b028cab9a996e85a79857c901b31 [redhat] rh_messages.h: mark mlx5 on Bluefield-3 as unmaintained +https://gitlab.com/cki-project/kernel-ark/-/commit/ee87b152d9cb9f421259db9bfc8e3904c8d7305f + ee87b152d9cb9f421259db9bfc8e3904c8d7305f Input: rmi4 - remove the need for artificial IRQ in case of HID -https://gitlab.com/cki-project/kernel-ark/-/commit/247defdf31d28a812a2c06c345d598ba34660559 - 247defdf31d28a812a2c06c345d598ba34660559 [redhat] rh_messages.h: initial driver and device lists +https://gitlab.com/cki-project/kernel-ark/-/commit/1ed5225c5a34662ad010075699d8790f5b7171dc + 1ed5225c5a34662ad010075699d8790f5b7171dc ARM: tegra: usb no reset -https://gitlab.com/cki-project/kernel-ark/-/commit/2fd98b58fbd8495418edb8115f29e747ff6b7ef8 - 2fd98b58fbd8495418edb8115f29e747ff6b7ef8 arch/x86: Fix XSAVE check for x86_64-v2 check +https://gitlab.com/cki-project/kernel-ark/-/commit/b0ed5d1de8bc342f1620f00d8378a8c7b3f41e26 + b0ed5d1de8bc342f1620f00d8378a8c7b3f41e26 s390: Lock down the kernel when the IPL secure flag is set -https://gitlab.com/cki-project/kernel-ark/-/commit/4a1d665621d643c55a3cf6630ec5ea43579019a0 - 4a1d665621d643c55a3cf6630ec5ea43579019a0 arch/x86/kernel/setup.c: fixup rh_check_supported +https://gitlab.com/cki-project/kernel-ark/-/commit/a2c6c57e2d1d60148bc3e623dbc046aef65eacdb + a2c6c57e2d1d60148bc3e623dbc046aef65eacdb efi: Lock down the kernel if booted in secure boot mode -https://gitlab.com/cki-project/kernel-ark/-/commit/898831969d6533bc59caf962d687a767894a25e1 - 898831969d6533bc59caf962d687a767894a25e1 lsm: update security_lock_kernel_down +https://gitlab.com/cki-project/kernel-ark/-/commit/c9a7afaa703bfd5c439fcada879031982e1f31a5 + c9a7afaa703bfd5c439fcada879031982e1f31a5 efi: Add an EFI_SECURE_BOOT flag to indicate secure boot mode -https://gitlab.com/cki-project/kernel-ark/-/commit/08c8933b07e21e2e5d5fcccde47fa235f8600428 - 08c8933b07e21e2e5d5fcccde47fa235f8600428 arch/x86: mark x86_64-v1 and x86_64-v2 processors as deprecated +https://gitlab.com/cki-project/kernel-ark/-/commit/044abfe144b8f9413327cb5f6de53fa65bee13fa + 044abfe144b8f9413327cb5f6de53fa65bee13fa security: lockdown: expose a hook to lock the kernel down -https://gitlab.com/cki-project/kernel-ark/-/commit/6554e12af642c1a7a39be5d6d403879072fa949e - 6554e12af642c1a7a39be5d6d403879072fa949e redhat: kABI: add missing RH_KABI_SIZE_ALIGN_CHECKS Kconfig option +https://gitlab.com/cki-project/kernel-ark/-/commit/df4dc5c5082636ea3dd0096eae3e113c3b3903d7 + df4dc5c5082636ea3dd0096eae3e113c3b3903d7 Make get_cert_list() use efi_status_to_str() to print error messages. -https://gitlab.com/cki-project/kernel-ark/-/commit/63dd10f139d9f2de8cfdd5b403227dd367cdaad6 - 63dd10f139d9f2de8cfdd5b403227dd367cdaad6 redhat: rh_kabi: introduce RH_KABI_EXCLUDE_WITH_SIZE +https://gitlab.com/cki-project/kernel-ark/-/commit/8378c41fcd8c0fadf4d4e3d046870c570855dd5f + 8378c41fcd8c0fadf4d4e3d046870c570855dd5f Add efi_status_to_str() and rework efi_status_to_err(). -https://gitlab.com/cki-project/kernel-ark/-/commit/3eef142590c81d3756bbb78133002252e43fda24 - 3eef142590c81d3756bbb78133002252e43fda24 redhat: rh_kabi: move semicolon inside __RH_KABI_CHECK_SIZE +https://gitlab.com/cki-project/kernel-ark/-/commit/1d98b5d2ef6e9b3bcb2e71e0b89a7777d28b87cb + 1d98b5d2ef6e9b3bcb2e71e0b89a7777d28b87cb arm: aarch64: Drop the EXPERT setting from ARM64_FORCE_52BIT -https://gitlab.com/cki-project/kernel-ark/-/commit/f332651ae449dde7ef713a3af6ff2112d68adbc3 - f332651ae449dde7ef713a3af6ff2112d68adbc3 random: replace import_single_range() with import_ubuf() +https://gitlab.com/cki-project/kernel-ark/-/commit/0f01dc56b6690c204e534efead7f833a151668e4 + 0f01dc56b6690c204e534efead7f833a151668e4 iommu/arm-smmu: workaround DMA mode issues -https://gitlab.com/cki-project/kernel-ark/-/commit/02c431df779a3612582b60c07d073b21e307a613 - 02c431df779a3612582b60c07d073b21e307a613 ext4: Mark mounting fs-verity filesystems as tech-preview +https://gitlab.com/cki-project/kernel-ark/-/commit/f4aceb8131752369713f8eedb949c72a6ff6f65b + f4aceb8131752369713f8eedb949c72a6ff6f65b ipmi: do not configure ipmi for HPE m400 -https://gitlab.com/cki-project/kernel-ark/-/commit/1c7d1a6006848b648211902bb34b366f04288a30 - 1c7d1a6006848b648211902bb34b366f04288a30 erofs: Add tech preview markers at mount +https://gitlab.com/cki-project/kernel-ark/-/commit/8097fbfdc958f3b46fae70e593c65221b373626e + 8097fbfdc958f3b46fae70e593c65221b373626e ahci: thunderx2: Fix for errata that affects stop engine -https://gitlab.com/cki-project/kernel-ark/-/commit/bd3730207935f6fbb1e29a4e2ede2eec769b3e79 - bd3730207935f6fbb1e29a4e2ede2eec769b3e79 kernel/rh_messages.c: Mark functions as possibly unused +https://gitlab.com/cki-project/kernel-ark/-/commit/50f5d1278d3927a4fe64f52d8f098dc8fd70f1af + 50f5d1278d3927a4fe64f52d8f098dc8fd70f1af Vulcan: AHCI PCI bar fix for Broadcom Vulcan early silicon -https://gitlab.com/cki-project/kernel-ark/-/commit/03167967737351af015b35c4fd969b3059a582ba - 03167967737351af015b35c4fd969b3059a582ba crypto: rng - Override drivers/char/random in FIPS mode +https://gitlab.com/cki-project/kernel-ark/-/commit/a67c78d8f995bab09b4ba5d440610237472d2e19 + a67c78d8f995bab09b4ba5d440610237472d2e19 tags.sh: Ignore redhat/rpm -https://gitlab.com/cki-project/kernel-ark/-/commit/381550fdd51b6169a3254c36b4a0f4ead5fed835 - 381550fdd51b6169a3254c36b4a0f4ead5fed835 random: Add hook to override device reads and getrandom(2) +https://gitlab.com/cki-project/kernel-ark/-/commit/bd765dc97b11b68f772e662df0c03e5ceccdb9d0 + bd765dc97b11b68f772e662df0c03e5ceccdb9d0 aarch64: acpi scan: Fix regression related to X-Gene UARTs -https://gitlab.com/cki-project/kernel-ark/-/commit/53889d92471c360bed2107dec29ffa6321f5532c - 53889d92471c360bed2107dec29ffa6321f5532c [redhat] kernel/rh_messages.c: move hardware tables to rh_messages.h +https://gitlab.com/cki-project/kernel-ark/-/commit/1b14c142506526498b6839daffedb5318e9331d3 + 1b14c142506526498b6839daffedb5318e9331d3 ACPI / irq: Workaround firmware issue on X-Gene based m400 -https://gitlab.com/cki-project/kernel-ark/-/commit/1feeeb123b43284d736bbab01145234a9f30b53e - 1feeeb123b43284d736bbab01145234a9f30b53e [redhat] kernel/rh_messages.c: Wire up new calls +https://gitlab.com/cki-project/kernel-ark/-/commit/ceadcd821a820a3d4f93125393d6b853f5f8c789 + ceadcd821a820a3d4f93125393d6b853f5f8c789 ACPI: APEI: arm64: Ignore broken HPE moonshot APEI support -https://gitlab.com/cki-project/kernel-ark/-/commit/cc004b560a61d1ad214c37e1886584630ac5af47 - cc004b560a61d1ad214c37e1886584630ac5af47 [redhat] drivers/pci: Update rh_messages.c +https://gitlab.com/cki-project/kernel-ark/-/commit/a61ca8bd4bc11f602e04a0263b4a54098f84ceda + a61ca8bd4bc11f602e04a0263b4a54098f84ceda Pull the RHEL version defines out of the Makefile -https://gitlab.com/cki-project/kernel-ark/-/commit/ca2d817f82aef988c7e44d1419f27291c7fa0154 - ca2d817f82aef988c7e44d1419f27291c7fa0154 [redhat] drivers/message/fusion/mptspi.c: Remove extra disabled warning - -https://gitlab.com/cki-project/kernel-ark/-/commit/bf5033ee71a5dd338c391ebd30a4a0e02ce2078f - bf5033ee71a5dd338c391ebd30a4a0e02ce2078f [redhat] mptsas: Remove add_taint() - -https://gitlab.com/cki-project/kernel-ark/-/commit/0f4a6e957dedd8b530306670c04a4ca3cef604f8 - 0f4a6e957dedd8b530306670c04a4ca3cef604f8 [redhat] drivers/pci: Remove RHEL-only pci_hw_*() functions - -https://gitlab.com/cki-project/kernel-ark/-/commit/53dc07e90a25f430591b387115d2dc2d8e82b1ae - 53dc07e90a25f430591b387115d2dc2d8e82b1ae scsi: sd: Add "probe_type" module parameter to allow synchronous probing - -https://gitlab.com/cki-project/kernel-ark/-/commit/1a98f44cdb4c60efe941aed94c245706ee12e0b4 - 1a98f44cdb4c60efe941aed94c245706ee12e0b4 Revert "Remove EXPERT from ARCH_FORCE_MAX_ORDER for aarch64" - -https://gitlab.com/cki-project/kernel-ark/-/commit/a8088cac553d40c338581a157c81d2511d1cdbb0 - a8088cac553d40c338581a157c81d2511d1cdbb0 kernel/rh_messages.c: Another gcc12 warning on redundant NULL test - -https://gitlab.com/cki-project/kernel-ark/-/commit/3507a07c14a420df6b731f3de8cabf6879afc89d - 3507a07c14a420df6b731f3de8cabf6879afc89d Enable IO_URING for RHEL - -https://gitlab.com/cki-project/kernel-ark/-/commit/295c82a35a0d8c093e8b4f7ac7fecf8b74a18ba2 - 295c82a35a0d8c093e8b4f7ac7fecf8b74a18ba2 Remove EXPERT from ARCH_FORCE_MAX_ORDER for aarch64 - -https://gitlab.com/cki-project/kernel-ark/-/commit/101a818a6ff5a5a876c2a1ffb313b28c1aba1c92 - 101a818a6ff5a5a876c2a1ffb313b28c1aba1c92 redhat: version two of Makefile.rhelver tweaks - -https://gitlab.com/cki-project/kernel-ark/-/commit/04e16e6d356cc15a19728b5701b7913ac401b848 - 04e16e6d356cc15a19728b5701b7913ac401b848 redhat: adapt to upstream Makefile change - -https://gitlab.com/cki-project/kernel-ark/-/commit/860d12ce801ce7351121fa7193d8dd22d421fd09 - 860d12ce801ce7351121fa7193d8dd22d421fd09 kernel/rh_messages.c: gcc12 warning on redundant NULL test - -https://gitlab.com/cki-project/kernel-ark/-/commit/fc12efd33e8faab4cc0d761722c9e32025e969d6 - fc12efd33e8faab4cc0d761722c9e32025e969d6 Change acpi_bus_get_acpi_device to acpi_get_acpi_dev - -https://gitlab.com/cki-project/kernel-ark/-/commit/aa2eb0684a5f5d4868974d47946086b12563a572 - aa2eb0684a5f5d4868974d47946086b12563a572 ARK: Remove code marking devices unmaintained - -https://gitlab.com/cki-project/kernel-ark/-/commit/ae449ae283f3c375a1abe974194234df52afe979 - ae449ae283f3c375a1abe974194234df52afe979 rh_message: Fix function name - -https://gitlab.com/cki-project/kernel-ark/-/commit/beb6037be7c79ce0cd095023b5bf838a95d24403 - beb6037be7c79ce0cd095023b5bf838a95d24403 Add Partner Supported taint flag to kAFS - -https://gitlab.com/cki-project/kernel-ark/-/commit/167f33904cce0aa46c2ecaea673ee96e4f23aa13 - 167f33904cce0aa46c2ecaea673ee96e4f23aa13 Add Partner Supported taint flag - -https://gitlab.com/cki-project/kernel-ark/-/commit/194f657bbd039a4565a3561dbb5f4d7f739f3446 - 194f657bbd039a4565a3561dbb5f4d7f739f3446 kabi: Add kABI macros for enum type - -https://gitlab.com/cki-project/kernel-ark/-/commit/07e38e5a006a36f21355d55e3e1d00669941e6d7 - 07e38e5a006a36f21355d55e3e1d00669941e6d7 kabi: expand and clarify documentation of aux structs - -https://gitlab.com/cki-project/kernel-ark/-/commit/126854602f366a6fa1be19671b774e62b91aa199 - 126854602f366a6fa1be19671b774e62b91aa199 kabi: introduce RH_KABI_USE_AUX_PTR - -https://gitlab.com/cki-project/kernel-ark/-/commit/ffc00f86daa6948d1b5d1ba9400c93dde668e6bb - ffc00f86daa6948d1b5d1ba9400c93dde668e6bb kabi: rename RH_KABI_SIZE_AND_EXTEND to AUX - -https://gitlab.com/cki-project/kernel-ark/-/commit/3c210b281e11ad2e7af0c9e282e0e990bd9017b7 - 3c210b281e11ad2e7af0c9e282e0e990bd9017b7 kabi: more consistent _RH_KABI_SIZE_AND_EXTEND - -https://gitlab.com/cki-project/kernel-ark/-/commit/ab09b6b4b2e15a32868f5e2d18dce4f0663fd03c - ab09b6b4b2e15a32868f5e2d18dce4f0663fd03c kabi: use fixed field name for extended part - -https://gitlab.com/cki-project/kernel-ark/-/commit/9c96a259e4c6786c85b87591c15570b1c75f8f15 - 9c96a259e4c6786c85b87591c15570b1c75f8f15 kabi: fix dereference in RH_KABI_CHECK_EXT - -https://gitlab.com/cki-project/kernel-ark/-/commit/822eb1759bfa8745f653a03ffc7a835f10bab8b1 - 822eb1759bfa8745f653a03ffc7a835f10bab8b1 kabi: fix RH_KABI_SET_SIZE macro - -https://gitlab.com/cki-project/kernel-ark/-/commit/6b1ee1192e73019c4b4754d9afef05a1b8fb2436 - 6b1ee1192e73019c4b4754d9afef05a1b8fb2436 kabi: expand and clarify documentation - -https://gitlab.com/cki-project/kernel-ark/-/commit/90b0593b26429afeb7dafab0487497cc444f9554 - 90b0593b26429afeb7dafab0487497cc444f9554 kabi: make RH_KABI_USE replace any number of reserved fields - -https://gitlab.com/cki-project/kernel-ark/-/commit/d791a7abb593b9da3737189db75d2ed65b1e39de - d791a7abb593b9da3737189db75d2ed65b1e39de kabi: rename RH_KABI_USE2 to RH_KABI_USE_SPLIT - -https://gitlab.com/cki-project/kernel-ark/-/commit/7db0743b1797c99ed45875efcfb4fa90d33bb72f - 7db0743b1797c99ed45875efcfb4fa90d33bb72f kabi: change RH_KABI_REPLACE2 to RH_KABI_REPLACE_SPLIT - -https://gitlab.com/cki-project/kernel-ark/-/commit/0162134f3604b0c134781c505a35512cae75910a - 0162134f3604b0c134781c505a35512cae75910a kabi: change RH_KABI_REPLACE_UNSAFE to RH_KABI_BROKEN_REPLACE - -https://gitlab.com/cki-project/kernel-ark/-/commit/a2fae0f8ce6145b3062a07407e64351a7660120c - a2fae0f8ce6145b3062a07407e64351a7660120c kabi: introduce RH_KABI_ADD_MODIFIER - -https://gitlab.com/cki-project/kernel-ark/-/commit/6ac632094de0db6309e4a43c54e5b0405bcadb1b - 6ac632094de0db6309e4a43c54e5b0405bcadb1b kabi: Include kconfig.h - -https://gitlab.com/cki-project/kernel-ark/-/commit/a4248d5c41665d7a193ba5debf1a928c61232c0f - a4248d5c41665d7a193ba5debf1a928c61232c0f kabi: macros for intentional kABI breakage - -https://gitlab.com/cki-project/kernel-ark/-/commit/4887efffad2ddbf5b8609b997a5b8fcf9e1d365f - 4887efffad2ddbf5b8609b997a5b8fcf9e1d365f kabi: fix the note about terminating semicolon - -https://gitlab.com/cki-project/kernel-ark/-/commit/fbcb1e4008cf923902b89e2e0139723007fca1fb - fbcb1e4008cf923902b89e2e0139723007fca1fb kabi: introduce RH_KABI_HIDE_INCLUDE and RH_KABI_FAKE_INCLUDE - -https://gitlab.com/cki-project/kernel-ark/-/commit/f97ebc29f73891b2d6f99f2ced1b261f676f6cf9 - f97ebc29f73891b2d6f99f2ced1b261f676f6cf9 pci.h: Fix static include - -https://gitlab.com/cki-project/kernel-ark/-/commit/887a1c3dd0e03ad0fd890cb96d91a16ab0637192 - 887a1c3dd0e03ad0fd890cb96d91a16ab0637192 drivers/pci/pci-driver.c: Fix if/ifdef typo - -https://gitlab.com/cki-project/kernel-ark/-/commit/1371f2c2807951043baa7bc181764c0b2e3acfb6 - 1371f2c2807951043baa7bc181764c0b2e3acfb6 kernel/rh_taint.c: Update to new messaging - -https://gitlab.com/cki-project/kernel-ark/-/commit/e7cf668aa148c0e5f6e81f6fde9ea9d93a29af52 - e7cf668aa148c0e5f6e81f6fde9ea9d93a29af52 redhat: Add mark_driver_deprecated() - -https://gitlab.com/cki-project/kernel-ark/-/commit/81704dfde206c0ca62a37626227a14418259ba73 - 81704dfde206c0ca62a37626227a14418259ba73 [scsi] megaraid_sas: re-add certain pci-ids - -https://gitlab.com/cki-project/kernel-ark/-/commit/2cb0ca8132ef63aed4c7b00b63c79dd97e262cef - 2cb0ca8132ef63aed4c7b00b63c79dd97e262cef RHEL: disable io_uring support - -https://gitlab.com/cki-project/kernel-ark/-/commit/9a1b6530d2b6c2d783ecba7c9a560ed9e4c2e7f2 - 9a1b6530d2b6c2d783ecba7c9a560ed9e4c2e7f2 bpf: Fix unprivileged_bpf_disabled setup - -https://gitlab.com/cki-project/kernel-ark/-/commit/cc288cbc2e9f3b272759e57816dbb4f14118f0e9 - cc288cbc2e9f3b272759e57816dbb4f14118f0e9 nvme: nvme_mpath_init remove multipath check - -https://gitlab.com/cki-project/kernel-ark/-/commit/871ff0082ebb1a82fc5dead8562ae5f261754f16 - 871ff0082ebb1a82fc5dead8562ae5f261754f16 wireguard: disable in FIPS mode - -https://gitlab.com/cki-project/kernel-ark/-/commit/723d67a6ba1479f87d1ef4b913455a6aadd5df0d - 723d67a6ba1479f87d1ef4b913455a6aadd5df0d nvme: decouple basic ANA log page re-read support from native multipathing - -https://gitlab.com/cki-project/kernel-ark/-/commit/0e26d367b97b6de7112d0d6a02d62139c60c38b5 - 0e26d367b97b6de7112d0d6a02d62139c60c38b5 nvme: allow local retry and proper failover for REQ_FAILFAST_TRANSPORT - -https://gitlab.com/cki-project/kernel-ark/-/commit/10dca6476e62f098b6c63aa902ef2434369d2d23 - 10dca6476e62f098b6c63aa902ef2434369d2d23 nvme: Return BLK_STS_TARGET if the DNR bit is set - -https://gitlab.com/cki-project/kernel-ark/-/commit/496f9afd435027631dad9ae552e18b79819cff19 - 496f9afd435027631dad9ae552e18b79819cff19 REDHAT: coresight: etm4x: Disable coresight on HPE Apollo 70 - -https://gitlab.com/cki-project/kernel-ark/-/commit/9480b57ee00697b9ab1b2bde521f0e1105e373cc - 9480b57ee00697b9ab1b2bde521f0e1105e373cc redhat: remove remaining references of CONFIG_RH_DISABLE_DEPRECATED - -https://gitlab.com/cki-project/kernel-ark/-/commit/fc766278350e91971b82fd139f92b2ff389ff6d8 - fc766278350e91971b82fd139f92b2ff389ff6d8 arch/x86: Remove vendor specific CPU ID checks - -https://gitlab.com/cki-project/kernel-ark/-/commit/d919e35ebf8f3e096b2cbe316a21d4116491fbe3 - d919e35ebf8f3e096b2cbe316a21d4116491fbe3 redhat: Replace hardware.redhat.com link in Unsupported message - -https://gitlab.com/cki-project/kernel-ark/-/commit/f05f4f7dfdce1c1e42bcc2e52b59ce88f7003383 - f05f4f7dfdce1c1e42bcc2e52b59ce88f7003383 x86: Fix compile issues with rh_check_supported() - -https://gitlab.com/cki-project/kernel-ark/-/commit/b3118483a28ae9c9d7d7843d9ecff6dcc6e94e04 - b3118483a28ae9c9d7d7843d9ecff6dcc6e94e04 KEYS: Make use of platform keyring for module signature verify - -https://gitlab.com/cki-project/kernel-ark/-/commit/ffc82733dd3eb42690e7f3fe2e5e5d3e676d66eb - ffc82733dd3eb42690e7f3fe2e5e5d3e676d66eb Input: rmi4 - remove the need for artificial IRQ in case of HID - -https://gitlab.com/cki-project/kernel-ark/-/commit/dfc42424e9feffeefbae72eeffacb98e9880a756 - dfc42424e9feffeefbae72eeffacb98e9880a756 ARM: tegra: usb no reset - -https://gitlab.com/cki-project/kernel-ark/-/commit/150dbf19fd562441b2563e3c6af71182986e4615 - 150dbf19fd562441b2563e3c6af71182986e4615 arm: make CONFIG_HIGHPTE optional without CONFIG_EXPERT - -https://gitlab.com/cki-project/kernel-ark/-/commit/5c3e5648a6c84ef51f8c5844d43c2095e1abb089 - 5c3e5648a6c84ef51f8c5844d43c2095e1abb089 redhat: rh_kabi: deduplication friendly structs - -https://gitlab.com/cki-project/kernel-ark/-/commit/8b17f91c49774e81362db902023aedbc06ab1708 - 8b17f91c49774e81362db902023aedbc06ab1708 redhat: rh_kabi add a comment with warning about RH_KABI_EXCLUDE usage - -https://gitlab.com/cki-project/kernel-ark/-/commit/385d1bea3f52fa42b26d621b335da995964b202a - 385d1bea3f52fa42b26d621b335da995964b202a redhat: rh_kabi: introduce RH_KABI_EXTEND_WITH_SIZE - -https://gitlab.com/cki-project/kernel-ark/-/commit/e42a306ef6558f02c1bf506109d6ccb4e12e4549 - e42a306ef6558f02c1bf506109d6ccb4e12e4549 redhat: rh_kabi: Indirect EXTEND macros so nesting of other macros will resolve. - -https://gitlab.com/cki-project/kernel-ark/-/commit/f679eb0a8d537dce96b6eb50ed5c67356c08b798 - f679eb0a8d537dce96b6eb50ed5c67356c08b798 redhat: rh_kabi: Fix RH_KABI_SET_SIZE to use dereference operator - -https://gitlab.com/cki-project/kernel-ark/-/commit/2220337d5c666bed3f26cf9de5515daf96f3d215 - 2220337d5c666bed3f26cf9de5515daf96f3d215 redhat: rh_kabi: Add macros to size and extend structs - -https://gitlab.com/cki-project/kernel-ark/-/commit/ceda0d704694b831dd352bd68b76d2d8f18b38c4 - ceda0d704694b831dd352bd68b76d2d8f18b38c4 Removing Obsolete hba pci-ids from rhel8 - -https://gitlab.com/cki-project/kernel-ark/-/commit/21ec07cacb9d3a8c3f78d12da3ed7ee4b4e5e4c7 - 21ec07cacb9d3a8c3f78d12da3ed7ee4b4e5e4c7 mptsas: pci-id table changes - -https://gitlab.com/cki-project/kernel-ark/-/commit/224889c499c1f6927c2a3be723619d4988d7bb96 - 224889c499c1f6927c2a3be723619d4988d7bb96 mptsas: Taint kernel if mptsas is loaded - -https://gitlab.com/cki-project/kernel-ark/-/commit/27ea7ab1849c0451c46421d87bb6f03906386459 - 27ea7ab1849c0451c46421d87bb6f03906386459 mptspi: pci-id table changes - -https://gitlab.com/cki-project/kernel-ark/-/commit/6c2db391d56712e2ef3da1579756f843bbb93233 - 6c2db391d56712e2ef3da1579756f843bbb93233 qla2xxx: Remove PCI IDs of deprecated adapter - -https://gitlab.com/cki-project/kernel-ark/-/commit/cbc0565e6945ce351bb4f4818a90a470e09947b7 - cbc0565e6945ce351bb4f4818a90a470e09947b7 be2iscsi: remove unsupported device IDs - -https://gitlab.com/cki-project/kernel-ark/-/commit/9a7bf7901f552159e164e4dc4683cf9f5a7ef011 - 9a7bf7901f552159e164e4dc4683cf9f5a7ef011 mptspi: Taint kernel if mptspi is loaded - -https://gitlab.com/cki-project/kernel-ark/-/commit/6689f5d8a7ed502defc89b71ba82e7671f2dc18f - 6689f5d8a7ed502defc89b71ba82e7671f2dc18f hpsa: remove old cciss-based smartarray pci ids - -https://gitlab.com/cki-project/kernel-ark/-/commit/b6126b58631f0f6e2dbf85d55e48d653731f5aa0 - b6126b58631f0f6e2dbf85d55e48d653731f5aa0 qla4xxx: Remove deprecated PCI IDs from RHEL 8 - -https://gitlab.com/cki-project/kernel-ark/-/commit/82b882f7dab483d328e1c70f456eba72fb9baa4a - 82b882f7dab483d328e1c70f456eba72fb9baa4a aacraid: Remove depreciated device and vendor PCI id's - -https://gitlab.com/cki-project/kernel-ark/-/commit/7a5c406a81e4d01d8d75c9ceb8d59f5d00118a52 - 7a5c406a81e4d01d8d75c9ceb8d59f5d00118a52 megaraid_sas: remove deprecated pci-ids - -https://gitlab.com/cki-project/kernel-ark/-/commit/4bffe5fc437a8fccb2e3aca77fbe63f1173e3682 - 4bffe5fc437a8fccb2e3aca77fbe63f1173e3682 mpt*: remove certain deprecated pci-ids - -https://gitlab.com/cki-project/kernel-ark/-/commit/c609e98be7d86d7c3c45e5a6e7868638279489d8 - c609e98be7d86d7c3c45e5a6e7868638279489d8 kernel: add SUPPORT_REMOVED kernel taint - -https://gitlab.com/cki-project/kernel-ark/-/commit/50238d7256f0a6c650e262246847a2d1fa78b1be - 50238d7256f0a6c650e262246847a2d1fa78b1be Rename RH_DISABLE_DEPRECATED to RHEL_DIFFERENCES - -https://gitlab.com/cki-project/kernel-ark/-/commit/60d5a725435703e5be0111c524b99436bd686739 - 60d5a725435703e5be0111c524b99436bd686739 s390: Lock down the kernel when the IPL secure flag is set - -https://gitlab.com/cki-project/kernel-ark/-/commit/3709ed415f13588fced967784e891aea09c79fb8 - 3709ed415f13588fced967784e891aea09c79fb8 efi: Lock down the kernel if booted in secure boot mode - -https://gitlab.com/cki-project/kernel-ark/-/commit/704188e79bace05e38f5cff10b243d8e57aa770b - 704188e79bace05e38f5cff10b243d8e57aa770b efi: Add an EFI_SECURE_BOOT flag to indicate secure boot mode - -https://gitlab.com/cki-project/kernel-ark/-/commit/c313116ecd1fe48cbd5e440ef007e64b4aea72d9 - c313116ecd1fe48cbd5e440ef007e64b4aea72d9 security: lockdown: expose a hook to lock the kernel down - -https://gitlab.com/cki-project/kernel-ark/-/commit/12557da3607a689bf58d869a5d8a41ba313a08bf - 12557da3607a689bf58d869a5d8a41ba313a08bf Make get_cert_list() use efi_status_to_str() to print error messages. - -https://gitlab.com/cki-project/kernel-ark/-/commit/f96730b403a570b0334c441103ab7e929c4c7a38 - f96730b403a570b0334c441103ab7e929c4c7a38 Add efi_status_to_str() and rework efi_status_to_err(). - -https://gitlab.com/cki-project/kernel-ark/-/commit/1b554591d814f2990d024a06d61ca29ea01fae03 - 1b554591d814f2990d024a06d61ca29ea01fae03 Add support for deprecating processors - -https://gitlab.com/cki-project/kernel-ark/-/commit/96fc8f0e1c0c636a3be37f01f2f27e215bd35de8 - 96fc8f0e1c0c636a3be37f01f2f27e215bd35de8 arm: aarch64: Drop the EXPERT setting from ARM64_FORCE_52BIT - -https://gitlab.com/cki-project/kernel-ark/-/commit/b0d4254506a25f52bc2bf23d4ff6643d3f37f1eb - b0d4254506a25f52bc2bf23d4ff6643d3f37f1eb iommu/arm-smmu: workaround DMA mode issues - -https://gitlab.com/cki-project/kernel-ark/-/commit/9d757226a801a9a3b88d2aa25226b503f3dfeba4 - 9d757226a801a9a3b88d2aa25226b503f3dfeba4 rh_kabi: introduce RH_KABI_EXCLUDE - -https://gitlab.com/cki-project/kernel-ark/-/commit/f3e9ed1800fb9caff75232c68c8fad030d365eca - f3e9ed1800fb9caff75232c68c8fad030d365eca ipmi: do not configure ipmi for HPE m400 - -https://gitlab.com/cki-project/kernel-ark/-/commit/bdb4f547d28e0159c3ee30724e539fdb68fd3cff - bdb4f547d28e0159c3ee30724e539fdb68fd3cff kABI: Add generic kABI macros to use for kABI workarounds - -https://gitlab.com/cki-project/kernel-ark/-/commit/cef8fcacaddd12171953f54efda0641d17d0c136 - cef8fcacaddd12171953f54efda0641d17d0c136 add pci_hw_vendor_status() - -https://gitlab.com/cki-project/kernel-ark/-/commit/25d8e8de0641714b328e0d77247b0ea0c83e86f6 - 25d8e8de0641714b328e0d77247b0ea0c83e86f6 ahci: thunderx2: Fix for errata that affects stop engine - -https://gitlab.com/cki-project/kernel-ark/-/commit/47bbd25edb0292fd232d3410b132d3f6d62b0c35 - 47bbd25edb0292fd232d3410b132d3f6d62b0c35 Vulcan: AHCI PCI bar fix for Broadcom Vulcan early silicon - -https://gitlab.com/cki-project/kernel-ark/-/commit/9baeaef4a453af2837a4c574fa508f760c1232f4 - 9baeaef4a453af2837a4c574fa508f760c1232f4 bpf: set unprivileged_bpf_disabled to 1 by default, add a boot parameter - -https://gitlab.com/cki-project/kernel-ark/-/commit/64e29f2adf5c00c4f18e5d8fbe537dbc1217f668 - 64e29f2adf5c00c4f18e5d8fbe537dbc1217f668 add Red Hat-specific taint flags - -https://gitlab.com/cki-project/kernel-ark/-/commit/04152e9d3017bc1a839eee2b9b8b8e8c3fa25bab - 04152e9d3017bc1a839eee2b9b8b8e8c3fa25bab tags.sh: Ignore redhat/rpm - -https://gitlab.com/cki-project/kernel-ark/-/commit/5b41320501a543e4d3a6ed45a7727583f8e37085 - 5b41320501a543e4d3a6ed45a7727583f8e37085 put RHEL info into generated headers - -https://gitlab.com/cki-project/kernel-ark/-/commit/8fc319ec0dbda18f58f5118db9bea04918c9aaaf - 8fc319ec0dbda18f58f5118db9bea04918c9aaaf aarch64: acpi scan: Fix regression related to X-Gene UARTs - -https://gitlab.com/cki-project/kernel-ark/-/commit/c42bd78f8a6c8dd572a3fbf155ba98ebe3df0508 - c42bd78f8a6c8dd572a3fbf155ba98ebe3df0508 ACPI / irq: Workaround firmware issue on X-Gene based m400 - -https://gitlab.com/cki-project/kernel-ark/-/commit/f87cc03ce15b9306627554cd107ca59e65d9e0c4 - f87cc03ce15b9306627554cd107ca59e65d9e0c4 modules: add rhelversion MODULE_INFO tag - -https://gitlab.com/cki-project/kernel-ark/-/commit/29f20768879ce39d6cfcf3d62090a77138716a61 - 29f20768879ce39d6cfcf3d62090a77138716a61 ACPI: APEI: arm64: Ignore broken HPE moonshot APEI support - -https://gitlab.com/cki-project/kernel-ark/-/commit/6e6d29bf5b2a1bda369e0d50a3189ef37719d5a6 - 6e6d29bf5b2a1bda369e0d50a3189ef37719d5a6 Add Red Hat tainting - -https://gitlab.com/cki-project/kernel-ark/-/commit/04c3f390a57195b196e5586bdb71c8eeef3c16e1 - 04c3f390a57195b196e5586bdb71c8eeef3c16e1 Introduce CONFIG_RH_DISABLE_DEPRECATED - -https://gitlab.com/cki-project/kernel-ark/-/commit/9c3c3b074c576933be673f718aa7444273317ab5 - 9c3c3b074c576933be673f718aa7444273317ab5 Pull the RHEL version defines out of the Makefile - -https://gitlab.com/cki-project/kernel-ark/-/commit/030267e59ba8d0219857aceb6e41fb9ced3b386f - 030267e59ba8d0219857aceb6e41fb9ced3b386f [initial commit] Add Red Hat variables in the top level makefile +https://gitlab.com/cki-project/kernel-ark/-/commit/70cf1cf208f8aa5ef855bda2a5ff8feecee2292c + 70cf1cf208f8aa5ef855bda2a5ff8feecee2292c [initial commit] Add Red Hat variables in the top level makefile diff --git a/kernel-aarch64-16k-debug-fedora.config b/kernel-aarch64-16k-debug-fedora.config index 680b35980..49bbff989 100644 --- a/kernel-aarch64-16k-debug-fedora.config +++ b/kernel-aarch64-16k-debug-fedora.config @@ -6733,6 +6733,7 @@ CONFIG_RFKILL_GPIO=m CONFIG_RFKILL_INPUT=y CONFIG_RFKILL=m CONFIG_RFS_ACCEL=y +# CONFIG_RH_DISABLE_DEPRECATED is not set # CONFIG_RHEL_DIFFERENCES is not set CONFIG_RICHTEK_RTQ6056=m CONFIG_RING_BUFFER_BENCHMARK=m diff --git a/kernel-aarch64-16k-fedora.config b/kernel-aarch64-16k-fedora.config index 4eba1eb9c..7ee21f8a1 100644 --- a/kernel-aarch64-16k-fedora.config +++ b/kernel-aarch64-16k-fedora.config @@ -6706,6 +6706,7 @@ CONFIG_RFKILL_GPIO=m CONFIG_RFKILL_INPUT=y CONFIG_RFKILL=m CONFIG_RFS_ACCEL=y +# CONFIG_RH_DISABLE_DEPRECATED is not set # CONFIG_RHEL_DIFFERENCES is not set CONFIG_RICHTEK_RTQ6056=m CONFIG_RING_BUFFER_BENCHMARK=m diff --git a/kernel-aarch64-64k-debug-rhel.config b/kernel-aarch64-64k-debug-rhel.config index 917d86dd1..459369cde 100644 --- a/kernel-aarch64-64k-debug-rhel.config +++ b/kernel-aarch64-64k-debug-rhel.config @@ -5424,7 +5424,6 @@ CONFIG_RFKILL_INPUT=y CONFIG_RFKILL=m CONFIG_RFS_ACCEL=y CONFIG_RHEL_DIFFERENCES=y -# CONFIG_RH_KABI_SIZE_ALIGN_CHECKS is not set # CONFIG_RICHTEK_RTQ6056 is not set CONFIG_RING_BUFFER_BENCHMARK=m # CONFIG_RING_BUFFER_STARTUP_TEST is not set diff --git a/kernel-aarch64-64k-rhel.config b/kernel-aarch64-64k-rhel.config index 857264463..fd8aae946 100644 --- a/kernel-aarch64-64k-rhel.config +++ b/kernel-aarch64-64k-rhel.config @@ -5401,7 +5401,6 @@ CONFIG_RFKILL_INPUT=y CONFIG_RFKILL=m CONFIG_RFS_ACCEL=y CONFIG_RHEL_DIFFERENCES=y -CONFIG_RH_KABI_SIZE_ALIGN_CHECKS=y # CONFIG_RICHTEK_RTQ6056 is not set CONFIG_RING_BUFFER_BENCHMARK=m # CONFIG_RING_BUFFER_STARTUP_TEST is not set diff --git a/kernel-aarch64-debug-fedora.config b/kernel-aarch64-debug-fedora.config index 8078ae0ed..542e963d6 100644 --- a/kernel-aarch64-debug-fedora.config +++ b/kernel-aarch64-debug-fedora.config @@ -6732,6 +6732,7 @@ CONFIG_RFKILL_GPIO=m CONFIG_RFKILL_INPUT=y CONFIG_RFKILL=m CONFIG_RFS_ACCEL=y +# CONFIG_RH_DISABLE_DEPRECATED is not set # CONFIG_RHEL_DIFFERENCES is not set CONFIG_RICHTEK_RTQ6056=m CONFIG_RING_BUFFER_BENCHMARK=m diff --git a/kernel-aarch64-debug-rhel.config b/kernel-aarch64-debug-rhel.config index c592ff788..540f79541 100644 --- a/kernel-aarch64-debug-rhel.config +++ b/kernel-aarch64-debug-rhel.config @@ -5420,7 +5420,6 @@ CONFIG_RFKILL_INPUT=y CONFIG_RFKILL=m CONFIG_RFS_ACCEL=y CONFIG_RHEL_DIFFERENCES=y -# CONFIG_RH_KABI_SIZE_ALIGN_CHECKS is not set # CONFIG_RICHTEK_RTQ6056 is not set CONFIG_RING_BUFFER_BENCHMARK=m # CONFIG_RING_BUFFER_STARTUP_TEST is not set diff --git a/kernel-aarch64-fedora.config b/kernel-aarch64-fedora.config index 1751ea29d..12d824bb2 100644 --- a/kernel-aarch64-fedora.config +++ b/kernel-aarch64-fedora.config @@ -6705,6 +6705,7 @@ CONFIG_RFKILL_GPIO=m CONFIG_RFKILL_INPUT=y CONFIG_RFKILL=m CONFIG_RFS_ACCEL=y +# CONFIG_RH_DISABLE_DEPRECATED is not set # CONFIG_RHEL_DIFFERENCES is not set CONFIG_RICHTEK_RTQ6056=m CONFIG_RING_BUFFER_BENCHMARK=m diff --git a/kernel-aarch64-rhel.config b/kernel-aarch64-rhel.config index 7e94ce576..86d301ab9 100644 --- a/kernel-aarch64-rhel.config +++ b/kernel-aarch64-rhel.config @@ -5397,7 +5397,6 @@ CONFIG_RFKILL_INPUT=y CONFIG_RFKILL=m CONFIG_RFS_ACCEL=y CONFIG_RHEL_DIFFERENCES=y -CONFIG_RH_KABI_SIZE_ALIGN_CHECKS=y # CONFIG_RICHTEK_RTQ6056 is not set CONFIG_RING_BUFFER_BENCHMARK=m # CONFIG_RING_BUFFER_STARTUP_TEST is not set diff --git a/kernel-aarch64-rt-debug-rhel.config b/kernel-aarch64-rt-debug-rhel.config index d5a41be5d..87ae67f71 100644 --- a/kernel-aarch64-rt-debug-rhel.config +++ b/kernel-aarch64-rt-debug-rhel.config @@ -5467,7 +5467,6 @@ CONFIG_RFKILL_INPUT=y CONFIG_RFKILL=m CONFIG_RFS_ACCEL=y CONFIG_RHEL_DIFFERENCES=y -# CONFIG_RH_KABI_SIZE_ALIGN_CHECKS is not set # CONFIG_RICHTEK_RTQ6056 is not set CONFIG_RING_BUFFER_BENCHMARK=m # CONFIG_RING_BUFFER_STARTUP_TEST is not set diff --git a/kernel-aarch64-rt-rhel.config b/kernel-aarch64-rt-rhel.config index 3a277260f..c8417ca6b 100644 --- a/kernel-aarch64-rt-rhel.config +++ b/kernel-aarch64-rt-rhel.config @@ -5444,7 +5444,6 @@ CONFIG_RFKILL_INPUT=y CONFIG_RFKILL=m CONFIG_RFS_ACCEL=y CONFIG_RHEL_DIFFERENCES=y -# CONFIG_RH_KABI_SIZE_ALIGN_CHECKS is not set # CONFIG_RICHTEK_RTQ6056 is not set CONFIG_RING_BUFFER_BENCHMARK=m # CONFIG_RING_BUFFER_STARTUP_TEST is not set diff --git a/kernel-ppc64le-debug-fedora.config b/kernel-ppc64le-debug-fedora.config index 93b0187c5..a26462ee1 100644 --- a/kernel-ppc64le-debug-fedora.config +++ b/kernel-ppc64le-debug-fedora.config @@ -5448,6 +5448,7 @@ CONFIG_RFKILL_GPIO=m CONFIG_RFKILL_INPUT=y CONFIG_RFKILL=m CONFIG_RFS_ACCEL=y +# CONFIG_RH_DISABLE_DEPRECATED is not set # CONFIG_RHEL_DIFFERENCES is not set CONFIG_RICHTEK_RTQ6056=m CONFIG_RING_BUFFER_BENCHMARK=m diff --git a/kernel-ppc64le-debug-rhel.config b/kernel-ppc64le-debug-rhel.config index ce2a7ec81..ee4c7df0c 100644 --- a/kernel-ppc64le-debug-rhel.config +++ b/kernel-ppc64le-debug-rhel.config @@ -4963,7 +4963,6 @@ CONFIG_RFKILL_INPUT=y CONFIG_RFKILL=m CONFIG_RFS_ACCEL=y CONFIG_RHEL_DIFFERENCES=y -# CONFIG_RH_KABI_SIZE_ALIGN_CHECKS is not set # CONFIG_RICHTEK_RTQ6056 is not set CONFIG_RING_BUFFER_BENCHMARK=m # CONFIG_RING_BUFFER_STARTUP_TEST is not set diff --git a/kernel-ppc64le-fedora.config b/kernel-ppc64le-fedora.config index 08f092549..694ca22e2 100644 --- a/kernel-ppc64le-fedora.config +++ b/kernel-ppc64le-fedora.config @@ -5419,6 +5419,7 @@ CONFIG_RFKILL_GPIO=m CONFIG_RFKILL_INPUT=y CONFIG_RFKILL=m CONFIG_RFS_ACCEL=y +# CONFIG_RH_DISABLE_DEPRECATED is not set # CONFIG_RHEL_DIFFERENCES is not set CONFIG_RICHTEK_RTQ6056=m CONFIG_RING_BUFFER_BENCHMARK=m diff --git a/kernel-ppc64le-rhel.config b/kernel-ppc64le-rhel.config index fef6002d6..8039e10ac 100644 --- a/kernel-ppc64le-rhel.config +++ b/kernel-ppc64le-rhel.config @@ -4942,7 +4942,6 @@ CONFIG_RFKILL_INPUT=y CONFIG_RFKILL=m CONFIG_RFS_ACCEL=y CONFIG_RHEL_DIFFERENCES=y -CONFIG_RH_KABI_SIZE_ALIGN_CHECKS=y # CONFIG_RICHTEK_RTQ6056 is not set CONFIG_RING_BUFFER_BENCHMARK=m # CONFIG_RING_BUFFER_STARTUP_TEST is not set diff --git a/kernel-riscv64-debug-fedora.config b/kernel-riscv64-debug-fedora.config index 86dd045ad..78b9e5faa 100644 --- a/kernel-riscv64-debug-fedora.config +++ b/kernel-riscv64-debug-fedora.config @@ -5458,6 +5458,7 @@ CONFIG_RFKILL_GPIO=m CONFIG_RFKILL_INPUT=y CONFIG_RFKILL=m CONFIG_RFS_ACCEL=y +# CONFIG_RH_DISABLE_DEPRECATED is not set # CONFIG_RHEL_DIFFERENCES is not set CONFIG_RICHTEK_RTQ6056=m CONFIG_RING_BUFFER_BENCHMARK=m diff --git a/kernel-riscv64-fedora.config b/kernel-riscv64-fedora.config index aefe96555..a9bc1aaec 100644 --- a/kernel-riscv64-fedora.config +++ b/kernel-riscv64-fedora.config @@ -5429,6 +5429,7 @@ CONFIG_RFKILL_GPIO=m CONFIG_RFKILL_INPUT=y CONFIG_RFKILL=m CONFIG_RFS_ACCEL=y +# CONFIG_RH_DISABLE_DEPRECATED is not set # CONFIG_RHEL_DIFFERENCES is not set CONFIG_RICHTEK_RTQ6056=m CONFIG_RING_BUFFER_BENCHMARK=m diff --git a/kernel-s390x-debug-fedora.config b/kernel-s390x-debug-fedora.config index 9e0e637c0..bbeff81e8 100644 --- a/kernel-s390x-debug-fedora.config +++ b/kernel-s390x-debug-fedora.config @@ -5369,6 +5369,7 @@ CONFIG_RFKILL_GPIO=m CONFIG_RFKILL_INPUT=y # CONFIG_RFKILL is not set CONFIG_RFS_ACCEL=y +# CONFIG_RH_DISABLE_DEPRECATED is not set # CONFIG_RHEL_DIFFERENCES is not set CONFIG_RICHTEK_RTQ6056=m CONFIG_RING_BUFFER_BENCHMARK=m diff --git a/kernel-s390x-debug-rhel.config b/kernel-s390x-debug-rhel.config index acb73803f..cf3d35595 100644 --- a/kernel-s390x-debug-rhel.config +++ b/kernel-s390x-debug-rhel.config @@ -4896,7 +4896,6 @@ CONFIG_RFKILL_INPUT=y CONFIG_RFKILL=m CONFIG_RFS_ACCEL=y CONFIG_RHEL_DIFFERENCES=y -# CONFIG_RH_KABI_SIZE_ALIGN_CHECKS is not set # CONFIG_RICHTEK_RTQ6056 is not set CONFIG_RING_BUFFER_BENCHMARK=m # CONFIG_RING_BUFFER_STARTUP_TEST is not set diff --git a/kernel-s390x-fedora.config b/kernel-s390x-fedora.config index 3fd89a70a..70fb0a537 100644 --- a/kernel-s390x-fedora.config +++ b/kernel-s390x-fedora.config @@ -5340,6 +5340,7 @@ CONFIG_RFKILL_GPIO=m CONFIG_RFKILL_INPUT=y # CONFIG_RFKILL is not set CONFIG_RFS_ACCEL=y +# CONFIG_RH_DISABLE_DEPRECATED is not set # CONFIG_RHEL_DIFFERENCES is not set CONFIG_RICHTEK_RTQ6056=m CONFIG_RING_BUFFER_BENCHMARK=m diff --git a/kernel-s390x-rhel.config b/kernel-s390x-rhel.config index 1de2401cc..f4de33629 100644 --- a/kernel-s390x-rhel.config +++ b/kernel-s390x-rhel.config @@ -4875,7 +4875,6 @@ CONFIG_RFKILL_INPUT=y CONFIG_RFKILL=m CONFIG_RFS_ACCEL=y CONFIG_RHEL_DIFFERENCES=y -CONFIG_RH_KABI_SIZE_ALIGN_CHECKS=y # CONFIG_RICHTEK_RTQ6056 is not set CONFIG_RING_BUFFER_BENCHMARK=m # CONFIG_RING_BUFFER_STARTUP_TEST is not set diff --git a/kernel-s390x-zfcpdump-rhel.config b/kernel-s390x-zfcpdump-rhel.config index 8861c2e5e..46e04f20a 100644 --- a/kernel-s390x-zfcpdump-rhel.config +++ b/kernel-s390x-zfcpdump-rhel.config @@ -4887,7 +4887,6 @@ CONFIG_RFKILL_INPUT=y # CONFIG_RFKILL is not set CONFIG_RFS_ACCEL=y CONFIG_RHEL_DIFFERENCES=y -# CONFIG_RH_KABI_SIZE_ALIGN_CHECKS is not set # CONFIG_RICHTEK_RTQ6056 is not set CONFIG_RING_BUFFER_BENCHMARK=m # CONFIG_RING_BUFFER_STARTUP_TEST is not set diff --git a/kernel-x86_64-debug-fedora.config b/kernel-x86_64-debug-fedora.config index c9e23596c..f2674a12f 100644 --- a/kernel-x86_64-debug-fedora.config +++ b/kernel-x86_64-debug-fedora.config @@ -5872,6 +5872,7 @@ CONFIG_RFKILL_GPIO=m CONFIG_RFKILL_INPUT=y CONFIG_RFKILL=m CONFIG_RFS_ACCEL=y +# CONFIG_RH_DISABLE_DEPRECATED is not set # CONFIG_RHEL_DIFFERENCES is not set CONFIG_RICHTEK_RTQ6056=m CONFIG_RING_BUFFER_BENCHMARK=m diff --git a/kernel-x86_64-debug-rhel.config b/kernel-x86_64-debug-rhel.config index be6cd7818..1acb69868 100644 --- a/kernel-x86_64-debug-rhel.config +++ b/kernel-x86_64-debug-rhel.config @@ -5183,7 +5183,6 @@ CONFIG_RFKILL_INPUT=y CONFIG_RFKILL=m CONFIG_RFS_ACCEL=y CONFIG_RHEL_DIFFERENCES=y -# CONFIG_RH_KABI_SIZE_ALIGN_CHECKS is not set # CONFIG_RICHTEK_RTQ6056 is not set CONFIG_RING_BUFFER_BENCHMARK=m # CONFIG_RING_BUFFER_STARTUP_TEST is not set diff --git a/kernel-x86_64-fedora.config b/kernel-x86_64-fedora.config index 46f862585..ae53beae3 100644 --- a/kernel-x86_64-fedora.config +++ b/kernel-x86_64-fedora.config @@ -5844,6 +5844,7 @@ CONFIG_RFKILL_GPIO=m CONFIG_RFKILL_INPUT=y CONFIG_RFKILL=m CONFIG_RFS_ACCEL=y +# CONFIG_RH_DISABLE_DEPRECATED is not set # CONFIG_RHEL_DIFFERENCES is not set CONFIG_RICHTEK_RTQ6056=m CONFIG_RING_BUFFER_BENCHMARK=m diff --git a/kernel-x86_64-rhel.config b/kernel-x86_64-rhel.config index a3aa3a45d..43752570b 100644 --- a/kernel-x86_64-rhel.config +++ b/kernel-x86_64-rhel.config @@ -5161,7 +5161,6 @@ CONFIG_RFKILL_INPUT=y CONFIG_RFKILL=m CONFIG_RFS_ACCEL=y CONFIG_RHEL_DIFFERENCES=y -CONFIG_RH_KABI_SIZE_ALIGN_CHECKS=y # CONFIG_RICHTEK_RTQ6056 is not set CONFIG_RING_BUFFER_BENCHMARK=m # CONFIG_RING_BUFFER_STARTUP_TEST is not set diff --git a/kernel-x86_64-rt-debug-rhel.config b/kernel-x86_64-rt-debug-rhel.config index 27dbaacf6..fd71a39e4 100644 --- a/kernel-x86_64-rt-debug-rhel.config +++ b/kernel-x86_64-rt-debug-rhel.config @@ -5230,7 +5230,6 @@ CONFIG_RFKILL_INPUT=y CONFIG_RFKILL=m CONFIG_RFS_ACCEL=y CONFIG_RHEL_DIFFERENCES=y -# CONFIG_RH_KABI_SIZE_ALIGN_CHECKS is not set # CONFIG_RICHTEK_RTQ6056 is not set CONFIG_RING_BUFFER_BENCHMARK=m # CONFIG_RING_BUFFER_STARTUP_TEST is not set diff --git a/kernel-x86_64-rt-rhel.config b/kernel-x86_64-rt-rhel.config index 8752836ef..6e5d852f8 100644 --- a/kernel-x86_64-rt-rhel.config +++ b/kernel-x86_64-rt-rhel.config @@ -5208,7 +5208,6 @@ CONFIG_RFKILL_INPUT=y CONFIG_RFKILL=m CONFIG_RFS_ACCEL=y CONFIG_RHEL_DIFFERENCES=y -# CONFIG_RH_KABI_SIZE_ALIGN_CHECKS is not set # CONFIG_RICHTEK_RTQ6056 is not set CONFIG_RING_BUFFER_BENCHMARK=m # CONFIG_RING_BUFFER_STARTUP_TEST is not set diff --git a/kernel.changelog b/kernel.changelog index a7772b247..f16925b8c 100644 --- a/kernel.changelog +++ b/kernel.changelog @@ -1,3 +1,19 @@ +* Mon Sep 30 2024 Justin M. Forbes [6.11.1-0] +- media: qcom: camss: Fix ordering of pm_runtime_enable (Bryan O'Donoghue) +- media: qcom: camss: Remove use_count guard in stop_streaming (Bryan O'Donoghue) +- arm64: dts: allwinner: a64: Add GPU thermal trips to the SoC dtsi (Dragan Simic) +- arm64: dts: rockchip: Raise Pinebook Pro's panel backlight PWM frequency (Dragan Simic) +- arm64: dts: qcom: sc8280xp-x13s: Enable RGB sensor (Bryan O'Donoghue) +- ARM: dts: bcm2837/bcm2712: adjust local intc node names (Stefan Wahren) +- arm64: dts: broadcom: Add minimal support for Raspberry Pi 5 (Andrea della Porta) +- Linux v6.11.1 +Resolves: + +* Tue Sep 24 2024 Justin M. Forbes [6.11.0-0] +- Initial set up for stable Fedora branch (Justin M. Forbes) +- Reset RHEL_RELEASE for 6.12 (Justin M. Forbes) +Resolves: + * Sun Sep 15 2024 Fedora Kernel Team [6.11.0-63] - Linux v6.11.0 Resolves: diff --git a/kernel.spec b/kernel.spec index efc8aa7b4..ee4aabbfe 100644 --- a/kernel.spec +++ b/kernel.spec @@ -151,7 +151,7 @@ Summary: The Linux kernel # kernel release. (This includes prepatch or "rc" releases.) # Set released_kernel to 0 when the upstream source tarball contains an # unreleased kernel development snapshot. -%global released_kernel 0 +%global released_kernel 1 # Set debugbuildsenabled to 1 to build separate base and debug kernels # (on supported architectures). The kernel-debug-* subpackages will # contain the debug kernel. @@ -160,18 +160,18 @@ Summary: The Linux kernel # the --with-release option overrides this setting.) %define debugbuildsenabled 1 # define buildid .local -%define specrpmversion 6.11.0 -%define specversion 6.11.0 +%define specrpmversion 6.11.1 +%define specversion 6.11.1 %define patchversion 6.11 -%define pkgrelease 63 +%define pkgrelease 300 %define kversion 6 -%define tarfile_release 6.11 +%define tarfile_release 6.11.1 # This is needed to do merge window version magic %define patchlevel 11 # This allows pkg_release to have configurable %%{?dist} tag -%define specrelease 63%{?buildid}%{?dist} +%define specrelease 300%{?buildid}%{?dist} # This defines the kabi tarball version -%define kabiversion 6.11.0 +%define kabiversion 6.11.1 # If this variable is set to 1, a bpf selftests build failure will cause a # fatal kernel package build error @@ -1990,15 +1990,6 @@ for i in *.config; do done %endif -# Adjust FIPS module name for RHEL -%if 0%{?rhel} -%{log_msg "Adjust FIPS module name for RHEL"} -for i in *.config; do - sed -i 's/CONFIG_CRYPTO_FIPS_NAME=.*/CONFIG_CRYPTO_FIPS_NAME="Red Hat Enterprise Linux %{rhel} - Kernel Cryptographic API"/' $i -done -%endif - -%{log_msg "Set process_configs.sh $OPTS"} cp %{SOURCE81} . OPTS="" %if %{with_configchecks} @@ -4137,6 +4128,20 @@ fi\ # # %changelog +* Mon Sep 30 2024 Justin M. Forbes [6.11.1-0] +- media: qcom: camss: Fix ordering of pm_runtime_enable (Bryan O'Donoghue) +- media: qcom: camss: Remove use_count guard in stop_streaming (Bryan O'Donoghue) +- arm64: dts: allwinner: a64: Add GPU thermal trips to the SoC dtsi (Dragan Simic) +- arm64: dts: rockchip: Raise Pinebook Pro's panel backlight PWM frequency (Dragan Simic) +- arm64: dts: qcom: sc8280xp-x13s: Enable RGB sensor (Bryan O'Donoghue) +- ARM: dts: bcm2837/bcm2712: adjust local intc node names (Stefan Wahren) +- arm64: dts: broadcom: Add minimal support for Raspberry Pi 5 (Andrea della Porta) +- Linux v6.11.1 + +* Tue Sep 24 2024 Justin M. Forbes [6.11.0-0] +- Initial set up for stable Fedora branch (Justin M. Forbes) +- Reset RHEL_RELEASE for 6.12 (Justin M. Forbes) + * Sun Sep 15 2024 Fedora Kernel Team [6.11.0-63] - Linux v6.11.0 diff --git a/patch-6.11-redhat.patch b/patch-6.11-redhat.patch index d5f6a167b..ce7ea2053 100644 --- a/patch-6.11-redhat.patch +++ b/patch-6.11-redhat.patch @@ -1,199 +1,55 @@ - Documentation/admin-guide/kernel-parameters.txt | 20 + - Documentation/admin-guide/rh-waived-features.rst | 21 + - Kconfig | 2 + - Kconfig.redhat | 26 + - Makefile | 48 +- - arch/arm/Kconfig | 4 +- + Makefile | 40 +++ + arch/arm/boot/dts/broadcom/bcm2837.dtsi | 2 +- arch/arm64/Kconfig | 2 +- + arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi | 16 ++ + arch/arm64/boot/dts/broadcom/Makefile | 1 + + arch/arm64/boot/dts/broadcom/bcm2712-rpi-5-b.dts | 64 +++++ + arch/arm64/boot/dts/broadcom/bcm2712.dtsi | 283 +++++++++++++++++++++ + .../dts/qcom/sc8280xp-lenovo-thinkpad-x13s.dts | 67 +++++ + .../boot/dts/rockchip/rk3399-pinebook-pro.dts | 2 +- arch/s390/include/asm/ipl.h | 1 + arch/s390/kernel/ipl.c | 5 + arch/s390/kernel/setup.c | 4 + - arch/x86/kernel/cpu/common.c | 1 + - arch/x86/kernel/setup.c | 98 +++- + arch/x86/kernel/setup.c | 22 +- certs/extract-cert.c | 25 +- crypto/akcipher.c | 6 +- - crypto/dh.c | 25 + - crypto/drbg.c | 18 +- - crypto/rng.c | 149 +++++- + crypto/dh.c | 25 ++ crypto/seqiv.c | 15 +- crypto/testmgr.c | 4 +- drivers/acpi/apei/hest.c | 8 + drivers/acpi/irq.c | 17 +- drivers/acpi/scan.c | 9 + - drivers/ata/libahci.c | 18 + - drivers/char/ipmi/ipmi_dmi.c | 15 + + drivers/ata/libahci.c | 18 ++ + drivers/char/ipmi/ipmi_dmi.c | 15 ++ drivers/char/ipmi/ipmi_msghandler.c | 16 +- - drivers/char/random.c | 126 ++++- drivers/firmware/efi/Makefile | 1 + - drivers/firmware/efi/efi.c | 124 +++-- - drivers/firmware/efi/secureboot.c | 38 ++ - drivers/hid/hid-rmi.c | 66 --- - drivers/hwtracing/coresight/coresight-etm4x-core.c | 19 + - drivers/input/rmi4/rmi_driver.c | 124 +++-- - drivers/iommu/iommu.c | 22 + - drivers/message/fusion/mptsas.c | 5 + - drivers/message/fusion/mptspi.c | 6 + - drivers/net/wireguard/main.c | 6 + - drivers/nvme/host/core.c | 22 +- - drivers/nvme/host/multipath.c | 19 +- - drivers/nvme/host/nvme.h | 4 + - drivers/pci/pci-driver.c | 9 + - drivers/pci/quirks.c | 24 + - drivers/scsi/aacraid/linit.c | 2 + - drivers/scsi/be2iscsi/be_main.c | 2 + - drivers/scsi/hpsa.c | 4 + - drivers/scsi/lpfc/lpfc_ids.h | 12 + - drivers/scsi/megaraid/megaraid_sas_base.c | 4 + - drivers/scsi/mpt3sas/mpt3sas_scsih.c | 4 + - drivers/scsi/qla2xxx/qla_os.c | 6 + - drivers/scsi/qla4xxx/ql4_os.c | 2 + - drivers/scsi/sd.c | 13 + + drivers/firmware/efi/efi.c | 124 ++++++--- + drivers/firmware/efi/secureboot.c | 38 +++ + drivers/hid/hid-rmi.c | 66 ----- + drivers/hwtracing/coresight/coresight-etm4x-core.c | 19 ++ + drivers/input/rmi4/rmi_driver.c | 124 +++++---- + drivers/iommu/iommu.c | 22 ++ + drivers/media/platform/qcom/camss/camss-video.c | 6 - + drivers/media/platform/qcom/camss/camss.c | 5 +- + drivers/pci/quirks.c | 24 ++ + drivers/scsi/sd.c | 10 + drivers/usb/core/hub.c | 7 + - fs/afs/main.c | 3 + - fs/erofs/super.c | 9 + - fs/ext4/super.c | 11 + - include/linux/crypto.h | 3 + + include/linux/crypto.h | 2 + include/linux/efi.h | 22 +- - include/linux/kernel.h | 16 + include/linux/lsm_hook_defs.h | 2 + - include/linux/module.h | 5 + - include/linux/panic.h | 18 +- - include/linux/pci.h | 5 + - include/linux/random.h | 10 + - include/linux/rh_flags.h | 34 ++ - include/linux/rh_kabi.h | 541 +++++++++++++++++++++ - include/linux/rh_waived.h | 19 + include/linux/rmi.h | 1 + include/linux/security.h | 5 + - init/main.c | 3 + - kernel/Makefile | 1 + - kernel/bpf/core.c | 5 + - kernel/bpf/syscall.c | 23 + - kernel/module/main.c | 13 + kernel/module/signing.c | 9 +- - kernel/panic.c | 13 + - kernel/rh_flags.c | 115 +++++ - kernel/rh_messages.c | 414 ++++++++++++++++ - kernel/rh_messages.h | 325 +++++++++++++ - kernel/rh_waived.c | 104 ++++ - scripts/mod/modpost.c | 8 + - scripts/sign-file.c | 29 +- + scripts/sign-file.c | 29 +-- scripts/tags.sh | 2 + security/integrity/platform_certs/load_uefi.c | 6 +- security/lockdown/Kconfig | 13 + security/lockdown/lockdown.c | 1 + security/security.c | 12 + - 85 files changed, 2762 insertions(+), 266 deletions(-) + 48 files changed, 975 insertions(+), 242 deletions(-) -diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt -index 09126bb8cc9f..ee2984e46c06 100644 ---- a/Documentation/admin-guide/kernel-parameters.txt -+++ b/Documentation/admin-guide/kernel-parameters.txt -@@ -5790,6 +5790,17 @@ - 2 The "airplane mode" button toggles between everything - blocked and everything unblocked. - -+ rh_waived= -+ Enable waived features in RHEL. -+ -+ Waived features are disabled by default in RHEL, this parameter -+ provides support to enable such features, as needed. -+ -+ Format: ,... -+ -+ Use 'rh_waived' to enable all waived features listed at -+ Documentation/admin-guide/rh-waived-features.rst -+ - ring3mwait=disable - [KNL] Disable ring 3 MONITOR/MWAIT feature on supported - CPUs. -@@ -6965,6 +6976,15 @@ - unknown_nmi_panic - [X86] Cause panic on unknown NMI. - -+ unprivileged_bpf_disabled= -+ Format: { "0" | "1" | "2" } -+ Sets the initial value of -+ kernel.unprivileged_bpf_disabled sysctl knob. -+ 0 - unprivileged bpf() syscall access is enabled. -+ 1 - unprivileged bpf() syscall access is disabled permanently. -+ 2 - unprivileged bpf() syscall access is disabled. -+ Default value is 2. -+ - unwind_debug [X86-64,EARLY] - Enable unwinder debug output. This can be - useful for debugging certain unwinder error -diff --git a/Documentation/admin-guide/rh-waived-features.rst b/Documentation/admin-guide/rh-waived-features.rst -new file mode 100644 -index 000000000000..45caec7fbae6 ---- /dev/null -+++ b/Documentation/admin-guide/rh-waived-features.rst -@@ -0,0 +1,21 @@ -+.. _rh_waived_features: -+ -+======================= -+Red Hat Waived Features -+======================= -+ -+Red Hat waived features are features considered unmaintained, insecure, rudimentary, or -+deprecated and are shipped in RHEL only for customer convenience. These features are disabled -+by default but can be enabled on demand via the ``rh_waived`` kernel boot parameter. To allow -+a set of waived features, append ``rh_waived=,...,`` to the kernel -+cmdline. Appending only ``rh_waived`` (with no arguments) will enable all waived features -+listed below. -+ -+The waived features listed in the next session follow the pattern below: -+ -+- feature name -+ feature description -+ -+List of Red Hat Waived Features -+=============================== -+ -diff --git a/Kconfig b/Kconfig -index 745bc773f567..f57ff40109d7 100644 ---- a/Kconfig -+++ b/Kconfig -@@ -30,3 +30,5 @@ source "lib/Kconfig" - source "lib/Kconfig.debug" - - source "Documentation/Kconfig" -+ -+source "Kconfig.redhat" -diff --git a/Kconfig.redhat b/Kconfig.redhat -new file mode 100644 -index 000000000000..7465c78a90e6 ---- /dev/null -+++ b/Kconfig.redhat -@@ -0,0 +1,26 @@ -+# SPDX-License-Identifier: GPL-2.0-only -+# -+# Red Hat specific options -+# -+ -+menu "Red Hat options" -+ -+config RHEL_DIFFERENCES -+ bool "Remove support for deprecated features" -+ help -+ Red Hat may choose to deprecate certain features in its kernels. -+ Enable this option to remove support for hardware that is no -+ longer supported. -+ -+ Unless you want a restricted kernel, say N here. -+ -+config RH_KABI_SIZE_ALIGN_CHECKS -+ bool "Enables more stringent kabi checks in the macros" -+ depends on RHEL_DIFFERENCES -+ default y -+ help -+ This option enables more stringent kabi checks. Those must -+ be disabled in case of a debug build, because debug builds -+ allow to change struct sizes. -+ -+endmenu diff --git a/Makefile b/Makefile -index 34bd1d5f9672..73b3389da4d0 100644 +index df9c90cdd1c5..5dc83cc389bf 100644 --- a/Makefile +++ b/Makefile @@ -22,6 +22,18 @@ $(if $(filter __%, $(MAKECMDGOALS)), \ @@ -233,22 +89,7 @@ index 34bd1d5f9672..73b3389da4d0 100644 ifdef mixed-build # =========================================================================== # We're called with mixed targets (*config and build targets). -@@ -1242,7 +1265,13 @@ define filechk_version.h - ((c) > 255 ? 255 : (c)))'; \ - echo \#define LINUX_VERSION_MAJOR $(VERSION); \ - echo \#define LINUX_VERSION_PATCHLEVEL $(PATCHLEVEL); \ -- echo \#define LINUX_VERSION_SUBLEVEL $(SUBLEVEL) -+ echo \#define LINUX_VERSION_SUBLEVEL $(SUBLEVEL); \ -+ echo '#define RHEL_MAJOR $(RHEL_MAJOR)'; \ -+ echo '#define RHEL_MINOR $(RHEL_MINOR)'; \ -+ echo '#define RHEL_RELEASE_VERSION(a,b) (((a) << 8) + (b))'; \ -+ echo '#define RHEL_RELEASE_CODE \ -+ $(shell expr $(RHEL_MAJOR) \* 256 + $(RHEL_MINOR))'; \ -+ echo '#define RHEL_RELEASE "$(RHEL_RELEASE)"' - endef - - $(version_h): private PATCHLEVEL := $(or $(PATCHLEVEL), 0) -@@ -1849,6 +1878,23 @@ endif +@@ -1849,6 +1872,23 @@ endif ifdef CONFIG_MODULES @@ -272,22 +113,19 @@ index 34bd1d5f9672..73b3389da4d0 100644 $(MODORDER): $(build-dir) @: -diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig -index 173159e93c99..5074a7e9f9b8 100644 ---- a/arch/arm/Kconfig -+++ b/arch/arm/Kconfig -@@ -1227,9 +1227,9 @@ config HIGHMEM - If unsure, say n. +diff --git a/arch/arm/boot/dts/broadcom/bcm2837.dtsi b/arch/arm/boot/dts/broadcom/bcm2837.dtsi +index 84c08b46519d..c281697142b1 100644 +--- a/arch/arm/boot/dts/broadcom/bcm2837.dtsi ++++ b/arch/arm/boot/dts/broadcom/bcm2837.dtsi +@@ -9,7 +9,7 @@ soc { + <0x40000000 0x40000000 0x00001000>; + dma-ranges = <0xc0000000 0x00000000 0x3f000000>; - config HIGHPTE -- bool "Allocate 2nd-level pagetables from highmem" if EXPERT -+ bool "Allocate 2nd-level pagetables from highmem" - depends on HIGHMEM -- default y -+ default n - help - The VM uses one page of physical memory for each page table. - For systems with a lot of processes, this can use a lot of +- local_intc: local_intc@40000000 { ++ local_intc: interrupt-controller@40000000 { + compatible = "brcm,bcm2836-l1-intc"; + reg = <0x40000000 0x100>; + interrupt-controller; diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig index a2f8ff354ca6..e185f3e75a5c 100644 --- a/arch/arm64/Kconfig @@ -301,6 +139,509 @@ index a2f8ff354ca6..e185f3e75a5c 100644 help For systems with 52-bit userspace VAs enabled, the kernel will attempt to maintain compatibility with older software by providing 48-bit VAs +diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi b/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi +index e868ca5ae753..a5c3920e0f04 100644 +--- a/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi ++++ b/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi +@@ -263,6 +263,14 @@ gpu0_thermal: gpu0-thermal { + polling-delay-passive = <0>; + polling-delay = <0>; + thermal-sensors = <&ths 1>; ++ ++ trips { ++ gpu0_crit: gpu0-crit { ++ temperature = <110000>; ++ hysteresis = <2000>; ++ type = "critical"; ++ }; ++ }; + }; + + gpu1_thermal: gpu1-thermal { +@@ -270,6 +278,14 @@ gpu1_thermal: gpu1-thermal { + polling-delay-passive = <0>; + polling-delay = <0>; + thermal-sensors = <&ths 2>; ++ ++ trips { ++ gpu1_crit: gpu1-crit { ++ temperature = <110000>; ++ hysteresis = <2000>; ++ type = "critical"; ++ }; ++ }; + }; + }; + +diff --git a/arch/arm64/boot/dts/broadcom/Makefile b/arch/arm64/boot/dts/broadcom/Makefile +index 8b4591ddd27c..92565e9781ad 100644 +--- a/arch/arm64/boot/dts/broadcom/Makefile ++++ b/arch/arm64/boot/dts/broadcom/Makefile +@@ -6,6 +6,7 @@ DTC_FLAGS := -@ + dtb-$(CONFIG_ARCH_BCM2835) += bcm2711-rpi-400.dtb \ + bcm2711-rpi-4-b.dtb \ + bcm2711-rpi-cm4-io.dtb \ ++ bcm2712-rpi-5-b.dtb \ + bcm2837-rpi-3-a-plus.dtb \ + bcm2837-rpi-3-b.dtb \ + bcm2837-rpi-3-b-plus.dtb \ +diff --git a/arch/arm64/boot/dts/broadcom/bcm2712-rpi-5-b.dts b/arch/arm64/boot/dts/broadcom/bcm2712-rpi-5-b.dts +new file mode 100644 +index 000000000000..2bdbb6780242 +--- /dev/null ++++ b/arch/arm64/boot/dts/broadcom/bcm2712-rpi-5-b.dts +@@ -0,0 +1,64 @@ ++// SPDX-License-Identifier: (GPL-2.0 OR MIT) ++/dts-v1/; ++ ++#include ++#include "bcm2712.dtsi" ++ ++/ { ++ compatible = "raspberrypi,5-model-b", "brcm,bcm2712"; ++ model = "Raspberry Pi 5"; ++ ++ aliases { ++ serial10 = &uart10; ++ }; ++ ++ chosen: chosen { ++ stdout-path = "serial10:115200n8"; ++ }; ++ ++ /* Will be filled by the bootloader */ ++ memory@0 { ++ device_type = "memory"; ++ reg = <0 0 0 0x28000000>; ++ }; ++ ++ sd_io_1v8_reg: sd-io-1v8-reg { ++ compatible = "regulator-gpio"; ++ regulator-name = "vdd-sd-io"; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-boot-on; ++ regulator-always-on; ++ regulator-settling-time-us = <5000>; ++ gpios = <&gio_aon 3 GPIO_ACTIVE_HIGH>; ++ states = <1800000 1>, ++ <3300000 0>; ++ }; ++ ++ sd_vcc_reg: sd-vcc-reg { ++ compatible = "regulator-fixed"; ++ regulator-name = "vcc-sd"; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-boot-on; ++ enable-active-high; ++ gpios = <&gio_aon 4 GPIO_ACTIVE_HIGH>; ++ }; ++}; ++ ++/* The Debug UART, on Rpi5 it's on JST-SH 1.0mm 3-pin connector ++ * labeled "UART", i.e. the interface with the system console. ++ */ ++&uart10 { ++ status = "okay"; ++}; ++ ++/* SDIO1 is used to drive the SD card */ ++&sdio1 { ++ vqmmc-supply = <&sd_io_1v8_reg>; ++ vmmc-supply = <&sd_vcc_reg>; ++ bus-width = <4>; ++ sd-uhs-sdr50; ++ sd-uhs-ddr50; ++ sd-uhs-sdr104; ++}; +diff --git a/arch/arm64/boot/dts/broadcom/bcm2712.dtsi b/arch/arm64/boot/dts/broadcom/bcm2712.dtsi +new file mode 100644 +index 000000000000..6e5a984c1d4e +--- /dev/null ++++ b/arch/arm64/boot/dts/broadcom/bcm2712.dtsi +@@ -0,0 +1,283 @@ ++// SPDX-License-Identifier: (GPL-2.0 OR MIT) ++#include ++ ++/ { ++ compatible = "brcm,bcm2712"; ++ ++ #address-cells = <2>; ++ #size-cells = <2>; ++ ++ interrupt-parent = <&gicv2>; ++ ++ clocks { ++ /* The oscillator is the root of the clock tree. */ ++ clk_osc: clk-osc { ++ compatible = "fixed-clock"; ++ #clock-cells = <0>; ++ clock-output-names = "osc"; ++ clock-frequency = <54000000>; ++ }; ++ ++ clk_vpu: clk-vpu { ++ compatible = "fixed-clock"; ++ #clock-cells = <0>; ++ clock-frequency = <750000000>; ++ clock-output-names = "vpu-clock"; ++ }; ++ ++ clk_uart: clk-uart { ++ compatible = "fixed-clock"; ++ #clock-cells = <0>; ++ clock-frequency = <9216000>; ++ clock-output-names = "uart-clock"; ++ }; ++ ++ clk_emmc2: clk-emmc2 { ++ compatible = "fixed-clock"; ++ #clock-cells = <0>; ++ clock-frequency = <200000000>; ++ clock-output-names = "emmc2-clock"; ++ }; ++ }; ++ ++ cpus: cpus { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ ++ /* Source for L1 d/i cache-line-size, cache-sets, cache-size ++ * https://developer.arm.com/documentation/100798/0401/L1-memory-system/About-the-L1-memory-system?lang=en ++ * Source for L2 cache-line-size and cache-sets: ++ * https://developer.arm.com/documentation/100798/0401/L2-memory-system/About-the-L2-memory-system?lang=en ++ * and for cache-size: ++ * https://www.raspberrypi.com/documentation/computers/processors.html#bcm2712 ++ */ ++ cpu0: cpu@0 { ++ device_type = "cpu"; ++ compatible = "arm,cortex-a76"; ++ reg = <0x000>; ++ enable-method = "psci"; ++ d-cache-size = <0x10000>; ++ d-cache-line-size = <64>; ++ d-cache-sets = <256>; // 64KiB(size)/64(line-size)=1024ways/4-way set ++ i-cache-size = <0x10000>; ++ i-cache-line-size = <64>; ++ i-cache-sets = <256>; // 64KiB(size)/64(line-size)=1024ways/4-way set ++ next-level-cache = <&l2_cache_l0>; ++ ++ l2_cache_l0: l2-cache-l0 { ++ compatible = "cache"; ++ cache-size = <0x80000>; ++ cache-line-size = <128>; ++ cache-sets = <1024>; //512KiB(size)/64(line-size)=8192ways/8-way set ++ cache-level = <2>; ++ cache-unified; ++ next-level-cache = <&l3_cache>; ++ }; ++ }; ++ ++ cpu1: cpu@1 { ++ device_type = "cpu"; ++ compatible = "arm,cortex-a76"; ++ reg = <0x100>; ++ enable-method = "psci"; ++ d-cache-size = <0x10000>; ++ d-cache-line-size = <64>; ++ d-cache-sets = <256>; // 64KiB(size)/64(line-size)=1024ways/4-way set ++ i-cache-size = <0x10000>; ++ i-cache-line-size = <64>; ++ i-cache-sets = <256>; // 64KiB(size)/64(line-size)=1024ways/4-way set ++ next-level-cache = <&l2_cache_l1>; ++ ++ l2_cache_l1: l2-cache-l1 { ++ compatible = "cache"; ++ cache-size = <0x80000>; ++ cache-line-size = <128>; ++ cache-sets = <1024>; //512KiB(size)/64(line-size)=8192ways/8-way set ++ cache-level = <2>; ++ cache-unified; ++ next-level-cache = <&l3_cache>; ++ }; ++ }; ++ ++ cpu2: cpu@2 { ++ device_type = "cpu"; ++ compatible = "arm,cortex-a76"; ++ reg = <0x200>; ++ enable-method = "psci"; ++ d-cache-size = <0x10000>; ++ d-cache-line-size = <64>; ++ d-cache-sets = <256>; // 64KiB(size)/64(line-size)=1024ways/4-way set ++ i-cache-size = <0x10000>; ++ i-cache-line-size = <64>; ++ i-cache-sets = <256>; // 64KiB(size)/64(line-size)=1024ways/4-way set ++ next-level-cache = <&l2_cache_l2>; ++ ++ l2_cache_l2: l2-cache-l2 { ++ compatible = "cache"; ++ cache-size = <0x80000>; ++ cache-line-size = <128>; ++ cache-sets = <1024>; //512KiB(size)/64(line-size)=8192ways/8-way set ++ cache-level = <2>; ++ cache-unified; ++ next-level-cache = <&l3_cache>; ++ }; ++ }; ++ ++ cpu3: cpu@3 { ++ device_type = "cpu"; ++ compatible = "arm,cortex-a76"; ++ reg = <0x300>; ++ enable-method = "psci"; ++ d-cache-size = <0x10000>; ++ d-cache-line-size = <64>; ++ d-cache-sets = <256>; // 64KiB(size)/64(line-size)=1024ways/4-way set ++ i-cache-size = <0x10000>; ++ i-cache-line-size = <64>; ++ i-cache-sets = <256>; // 64KiB(size)/64(line-size)=1024ways/4-way set ++ next-level-cache = <&l2_cache_l3>; ++ ++ l2_cache_l3: l2-cache-l3 { ++ compatible = "cache"; ++ cache-size = <0x80000>; ++ cache-line-size = <128>; ++ cache-sets = <1024>; //512KiB(size)/64(line-size)=8192ways/8-way set ++ cache-level = <2>; ++ cache-unified; ++ next-level-cache = <&l3_cache>; ++ }; ++ }; ++ ++ /* Source for cache-line-size and cache-sets: ++ * https://developer.arm.com/documentation/100453/0401/L3-cache?lang=en ++ * Source for cache-size: ++ * https://www.raspberrypi.com/documentation/computers/processors.html#bcm2712 ++ */ ++ l3_cache: l3-cache { ++ compatible = "cache"; ++ cache-size = <0x200000>; ++ cache-line-size = <64>; ++ cache-sets = <2048>; // 2MiB(size)/64(line-size)=32768ways/16-way set ++ cache-level = <3>; ++ cache-unified; ++ }; ++ }; ++ ++ psci { ++ method = "smc"; ++ compatible = "arm,psci-1.0", "arm,psci-0.2"; ++ }; ++ ++ rmem: reserved-memory { ++ ranges; ++ #address-cells = <2>; ++ #size-cells = <2>; ++ ++ atf@0 { ++ reg = <0x0 0x0 0x0 0x80000>; ++ no-map; ++ }; ++ ++ cma: linux,cma { ++ compatible = "shared-dma-pool"; ++ size = <0x0 0x4000000>; /* 64MB */ ++ reusable; ++ linux,cma-default; ++ alloc-ranges = <0x0 0x00000000 0x0 0x40000000>; ++ }; ++ }; ++ ++ soc: soc@107c000000 { ++ compatible = "simple-bus"; ++ ranges = <0x00000000 0x10 0x00000000 0x80000000>; ++ #address-cells = <1>; ++ #size-cells = <1>; ++ ++ sdio1: mmc@fff000 { ++ compatible = "brcm,bcm2712-sdhci", ++ "brcm,sdhci-brcmstb"; ++ reg = <0x00fff000 0x260>, ++ <0x00fff400 0x200>; ++ reg-names = "host", "cfg"; ++ interrupts = ; ++ clocks = <&clk_emmc2>; ++ clock-names = "sw_sdio"; ++ mmc-ddr-3_3v; ++ }; ++ ++ system_timer: timer@7c003000 { ++ compatible = "brcm,bcm2835-system-timer"; ++ reg = <0x7c003000 0x1000>; ++ interrupts = , ++ , ++ , ++ ; ++ clock-frequency = <1000000>; ++ }; ++ ++ mailbox: mailbox@7c013880 { ++ compatible = "brcm,bcm2835-mbox"; ++ reg = <0x7c013880 0x40>; ++ interrupts = ; ++ #mbox-cells = <0>; ++ }; ++ ++ local_intc: interrupt-controller@7cd00000 { ++ compatible = "brcm,bcm2836-l1-intc"; ++ reg = <0x7cd00000 0x100>; ++ }; ++ ++ uart10: serial@7d001000 { ++ compatible = "arm,pl011", "arm,primecell"; ++ reg = <0x7d001000 0x200>; ++ interrupts = ; ++ clocks = <&clk_uart>, <&clk_vpu>; ++ clock-names = "uartclk", "apb_pclk"; ++ arm,primecell-periphid = <0x00241011>; ++ status = "disabled"; ++ }; ++ ++ interrupt-controller@7d517000 { ++ compatible = "brcm,bcm7271-l2-intc"; ++ reg = <0x7d517000 0x10>; ++ interrupts = ; ++ interrupt-controller; ++ #interrupt-cells = <1>; ++ }; ++ ++ gio_aon: gpio@7d517c00 { ++ compatible = "brcm,bcm7445-gpio", "brcm,brcmstb-gpio"; ++ reg = <0x7d517c00 0x40>; ++ gpio-controller; ++ #gpio-cells = <2>; ++ brcm,gpio-bank-widths = <17 6>; ++ /* The lack of 'interrupt-controller' property here is intended: ++ * don't use GIO_AON as an interrupt controller because it will ++ * clash with the firmware monitoring the PMIC interrupt via the VPU. ++ */ ++ }; ++ ++ gicv2: interrupt-controller@7fff9000 { ++ compatible = "arm,gic-400"; ++ reg = <0x7fff9000 0x1000>, ++ <0x7fffa000 0x2000>, ++ <0x7fffc000 0x2000>, ++ <0x7fffe000 0x2000>; ++ interrupt-controller; ++ #interrupt-cells = <3>; ++ }; ++ }; ++ ++ timer { ++ compatible = "arm,armv8-timer"; ++ interrupts = , ++ , ++ , ++ , ++ ; ++ }; ++}; +diff --git a/arch/arm64/boot/dts/qcom/sc8280xp-lenovo-thinkpad-x13s.dts b/arch/arm64/boot/dts/qcom/sc8280xp-lenovo-thinkpad-x13s.dts +index b27143f81867..320706c88cdd 100644 +--- a/arch/arm64/boot/dts/qcom/sc8280xp-lenovo-thinkpad-x13s.dts ++++ b/arch/arm64/boot/dts/qcom/sc8280xp-lenovo-thinkpad-x13s.dts +@@ -592,6 +592,57 @@ vreg_l10d: ldo10 { + }; + }; + ++&camss { ++ vdda-phy-supply = <&vreg_l6d>; ++ vdda-pll-supply = <&vreg_l4d>; ++ ++ status = "okay"; ++ ++ ports { ++ port@0 { ++ csiphy0_lanes01_ep: endpoint@0 { ++ reg = <0>; ++ clock-lanes = <7>; ++ data-lanes = <0 1>; ++ remote-endpoint = <&ov5675_ep>; ++ }; ++ }; ++ }; ++}; ++ ++&cci2 { ++ status = "okay"; ++}; ++ ++&cci2_i2c1 { ++ camera@10 { ++ compatible = "ovti,ov5675"; ++ reg = <0x10>; ++ ++ reset-gpios = <&tlmm 15 GPIO_ACTIVE_LOW>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&cam_rgb_default>; ++ ++ clocks = <&camcc CAMCC_MCLK3_CLK>; ++ ++ orientation = <0>; /* Front facing */ ++ ++ avdd-supply = <&vreg_l6q>; ++ dvdd-supply = <&vreg_l2q>; ++ dovdd-supply = <&vreg_l7q>; ++ ++ port { ++ ov5675_ep: endpoint { ++ clock-lanes = <0>; ++ data-lanes = <1 2>; ++ link-frequencies = /bits/ 64 <450000000>; ++ remote-endpoint = <&csiphy0_lanes01_ep>; ++ }; ++ }; ++ ++ }; ++}; ++ + &dispcc0 { + status = "okay"; + }; +@@ -1436,6 +1487,22 @@ cam_indicator_en: cam-indicator-en-state { + bias-disable; + }; + ++ cam_rgb_default: cam-rgb-default-state { ++ mclk-pins { ++ pins = "gpio17"; ++ function = "cam_mclk"; ++ drive-strength = <16>; ++ bias-disable; ++ }; ++ ++ sc-rgb-xshut-n-pins { ++ pins = "gpio15"; ++ function = "gpio"; ++ drive-strength = <2>; ++ bias-disable; ++ }; ++ }; ++ + edp_reg_en: edp-reg-en-state { + pins = "gpio25"; + function = "gpio"; +diff --git a/arch/arm64/boot/dts/rockchip/rk3399-pinebook-pro.dts b/arch/arm64/boot/dts/rockchip/rk3399-pinebook-pro.dts +index 294eb2de263d..b3f76cc2d6e1 100644 +--- a/arch/arm64/boot/dts/rockchip/rk3399-pinebook-pro.dts ++++ b/arch/arm64/boot/dts/rockchip/rk3399-pinebook-pro.dts +@@ -32,7 +32,7 @@ chosen { + backlight: edp-backlight { + compatible = "pwm-backlight"; + power-supply = <&vcc_12v>; +- pwms = <&pwm0 0 740740 0>; ++ pwms = <&pwm0 0 125000 0>; + }; + + bat: battery { diff --git a/arch/s390/include/asm/ipl.h b/arch/s390/include/asm/ipl.h index b0d00032479d..afb9544fb007 100644 --- a/arch/s390/include/asm/ipl.h @@ -348,20 +689,8 @@ index a3fea683b227..a3162d93f437 100644 /* Have one command line that is parsed and saved in /proc/cmdline */ /* boot_command_line has been already set up in early.c */ *cmdline_p = boot_command_line; -diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c -index d4e539d4e158..ed3a7b089b87 100644 ---- a/arch/x86/kernel/cpu/common.c -+++ b/arch/x86/kernel/cpu/common.c -@@ -1591,6 +1591,7 @@ static void __init early_identify_cpu(struct cpuinfo_x86 *c) - get_cpu_vendor(c); - intel_unlock_cpuid_leafs(c); - get_cpu_cap(c); -+ get_model_name(c); /* RHEL: get model name for unsupported check */ - setup_force_cpu_cap(X86_FEATURE_CPUID); - get_cpu_address_sizes(c); - cpu_parse_early_param(); diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c -index 6129dc2ba784..070aa96cfadd 100644 +index 6129dc2ba784..feaf5fd3f37d 100644 --- a/arch/x86/kernel/setup.c +++ b/arch/x86/kernel/setup.c @@ -21,6 +21,7 @@ @@ -372,95 +701,7 @@ index 6129dc2ba784..070aa96cfadd 100644 #include #include #include -@@ -56,6 +57,7 @@ - #include - #include - #include -+#include - - /* - * max_low_pfn_mapped: highest directly mapped pfn < 4 GB -@@ -670,6 +672,79 @@ static void __init early_reserve_memory(void) - trim_snb_memory(); - } - -+#ifdef CONFIG_RHEL_DIFFERENCES -+ -+static void rh_check_supported(void) -+{ -+ bool guest; -+ -+ guest = (x86_hyper_type != X86_HYPER_NATIVE || boot_cpu_has(X86_FEATURE_HYPERVISOR)); -+ -+ /* RHEL supports single cpu on guests only */ -+ if (((topology_num_threads_per_package() * __max_threads_per_core) == 1) && -+ !guest && is_kdump_kernel()) { -+ pr_crit("Detected single cpu native boot.\n"); -+ pr_crit("Important: In this kernel, single threaded, single CPU 64-bit physical systems are unsupported."); -+ } -+ -+ /* -+ * If the RHEL kernel does not support this hardware, the kernel will -+ * attempt to boot, but no support is provided for this hardware -+ */ -+ switch (boot_cpu_data.x86_vendor) { -+ case X86_VENDOR_AMD: -+ case X86_VENDOR_INTEL: -+ break; -+ default: -+ pr_crit("Detected processor %s %s\n", -+ boot_cpu_data.x86_vendor_id, -+ boot_cpu_data.x86_model_id); -+ break; -+ } -+ -+ /* -+ * Due to the complexity of x86 lapic & ioapic enumeration, and PCI IRQ -+ * routing, ACPI is required for x86. acpi=off is a valid debug kernel -+ * parameter, so just print out a loud warning in case something -+ * goes wrong (which is most of the time). -+ */ -+ if (acpi_disabled && !guest) -+ pr_crit("ACPI has been disabled or is not available on this hardware. This may result in a single cpu boot, incorrect PCI IRQ routing, or boot failure.\n"); -+ -+ /* -+ * x86_64 microarchitecture levels: -+ * https://en.wikipedia.org/wiki/X86-64#Microarchitecture_levels -+ * -+ * RHEL9 has a minimum of the x86_64-v2 microarchitecture -+ * RHEL10 has a minimum of the x86_64-v3 microarchitecture -+ */ -+ -+ if (!boot_cpu_has(X86_FEATURE_CX16) || /* CMPXCHG16B */ -+ !boot_cpu_has(X86_FEATURE_LAHF_LM) || /* LAHF-SAHF */ -+ !boot_cpu_has(X86_FEATURE_POPCNT) || -+ !boot_cpu_has(X86_FEATURE_XMM3) || /* SSE-3 */ -+ !boot_cpu_has(X86_FEATURE_XMM4_1) || /* SSE4_1 */ -+ !boot_cpu_has(X86_FEATURE_XMM4_2) || /* SSE4_2 */ -+ !boot_cpu_has(X86_FEATURE_SSSE3)) { -+ mark_hardware_deprecated("x86_64-v1", "%s:%s", -+ boot_cpu_data.x86_vendor_id, boot_cpu_data.x86_model_id); -+ } else if (!boot_cpu_has(X86_FEATURE_AVX) || -+ !boot_cpu_has(X86_FEATURE_AVX2) || -+ !boot_cpu_has(X86_FEATURE_BMI1) || -+ !boot_cpu_has(X86_FEATURE_BMI2) || -+ !boot_cpu_has(X86_FEATURE_F16C) || -+ !boot_cpu_has(X86_FEATURE_FMA) || -+ /* LZCNT is not explicitly listed, but appears to be paired with BMI2 */ -+ !boot_cpu_has(X86_FEATURE_MOVBE) || -+ !boot_cpu_has(X86_FEATURE_XSAVE)) { -+ mark_hardware_deprecated("x86_64-v2", "%s:%s", -+ boot_cpu_data.x86_vendor_id, boot_cpu_data.x86_model_id); -+ } -+} -+#else -+#define rh_check_supported() -+#endif -+ - /* - * Dump out kernel offset information on panic. - */ -@@ -904,6 +979,13 @@ void __init setup_arch(char **cmdline_p) +@@ -904,6 +905,13 @@ void __init setup_arch(char **cmdline_p) if (efi_enabled(EFI_BOOT)) efi_init(); @@ -474,7 +715,7 @@ index 6129dc2ba784..070aa96cfadd 100644 reserve_ibft_region(); x86_init.resources.dmi_setup(); -@@ -1065,19 +1147,7 @@ void __init setup_arch(char **cmdline_p) +@@ -1065,19 +1073,7 @@ void __init setup_arch(char **cmdline_p) /* Allocate bigger log buffer */ setup_log_buf(1); @@ -495,15 +736,6 @@ index 6129dc2ba784..070aa96cfadd 100644 reserve_initrd(); -@@ -1187,6 +1257,8 @@ void __init setup_arch(char **cmdline_p) - efi_apply_memmap_quirks(); - #endif - -+ rh_check_supported(); -+ - unwind_init(); - } - diff --git a/certs/extract-cert.c b/certs/extract-cert.c index 70e9ec89d87d..f5fb74916cee 100644 --- a/certs/extract-cert.c @@ -608,280 +840,6 @@ index 68d11d66c0b5..6e3e515b2452 100644 } } -diff --git a/crypto/drbg.c b/crypto/drbg.c -index 3addce90930c..730b03de596a 100644 ---- a/crypto/drbg.c -+++ b/crypto/drbg.c -@@ -1494,13 +1494,14 @@ static int drbg_generate(struct drbg_state *drbg, - * Wrapper around drbg_generate which can pull arbitrary long strings - * from the DRBG without hitting the maximum request limitation. - * -- * Parameters: see drbg_generate -+ * Parameters: see drbg_generate, except @reseed, which triggers reseeding - * Return codes: see drbg_generate -- if one drbg_generate request fails, - * the entire drbg_generate_long request fails - */ - static int drbg_generate_long(struct drbg_state *drbg, - unsigned char *buf, unsigned int buflen, -- struct drbg_string *addtl) -+ struct drbg_string *addtl, -+ bool reseed) - { - unsigned int len = 0; - unsigned int slice = 0; -@@ -1510,6 +1511,8 @@ static int drbg_generate_long(struct drbg_state *drbg, - slice = ((buflen - len) / drbg_max_request_bytes(drbg)); - chunk = slice ? drbg_max_request_bytes(drbg) : (buflen - len); - mutex_lock(&drbg->drbg_mutex); -+ if (reseed) -+ drbg->seeded = DRBG_SEED_STATE_UNSEEDED; - err = drbg_generate(drbg, buf + len, chunk, addtl); - mutex_unlock(&drbg->drbg_mutex); - if (0 > err) -@@ -1936,6 +1939,7 @@ static int drbg_kcapi_random(struct crypto_rng *tfm, - struct drbg_state *drbg = crypto_rng_ctx(tfm); - struct drbg_string *addtl = NULL; - struct drbg_string string; -+ int err; - - if (slen) { - /* linked list variable is now local to allow modification */ -@@ -1943,7 +1947,15 @@ static int drbg_kcapi_random(struct crypto_rng *tfm, - addtl = &string; - } - -- return drbg_generate_long(drbg, dst, dlen, addtl); -+ err = drbg_generate_long(drbg, dst, dlen, addtl, -+ (crypto_tfm_get_flags(crypto_rng_tfm(tfm)) & -+ CRYPTO_TFM_REQ_NEED_RESEED) == -+ CRYPTO_TFM_REQ_NEED_RESEED); -+ -+ crypto_tfm_clear_flags(crypto_rng_tfm(tfm), -+ CRYPTO_TFM_REQ_NEED_RESEED); -+ -+ return err; - } - - /* -diff --git a/crypto/rng.c b/crypto/rng.c -index 9d8804e46422..5ccb0485ff4b 100644 ---- a/crypto/rng.c -+++ b/crypto/rng.c -@@ -12,10 +12,13 @@ - #include - #include - #include -+#include - #include - #include - #include - #include -+#include -+#include - #include - #include - #include -@@ -23,7 +26,9 @@ - - #include "internal.h" - --static DEFINE_MUTEX(crypto_default_rng_lock); -+static ____cacheline_aligned_in_smp DEFINE_MUTEX(crypto_reseed_rng_lock); -+static struct crypto_rng *crypto_reseed_rng; -+static ____cacheline_aligned_in_smp DEFINE_MUTEX(crypto_default_rng_lock); - struct crypto_rng *crypto_default_rng; - EXPORT_SYMBOL_GPL(crypto_default_rng); - static int crypto_default_rng_refcnt; -@@ -106,31 +111,37 @@ struct crypto_rng *crypto_alloc_rng(const char *alg_name, u32 type, u32 mask) - } - EXPORT_SYMBOL_GPL(crypto_alloc_rng); - --int crypto_get_default_rng(void) -+static int crypto_get_rng(struct crypto_rng **rngp) - { - struct crypto_rng *rng; - int err; - -- mutex_lock(&crypto_default_rng_lock); -- if (!crypto_default_rng) { -+ if (!*rngp) { - rng = crypto_alloc_rng("stdrng", 0, 0); - err = PTR_ERR(rng); - if (IS_ERR(rng)) -- goto unlock; -+ return err; - - err = crypto_rng_reset(rng, NULL, crypto_rng_seedsize(rng)); - if (err) { - crypto_free_rng(rng); -- goto unlock; -+ return err; - } - -- crypto_default_rng = rng; -+ *rngp = rng; - } - -- crypto_default_rng_refcnt++; -- err = 0; -+ return 0; -+} -+ -+int crypto_get_default_rng(void) -+{ -+ int err; - --unlock: -+ mutex_lock(&crypto_default_rng_lock); -+ err = crypto_get_rng(&crypto_default_rng); -+ if (!err) -+ crypto_default_rng_refcnt++; - mutex_unlock(&crypto_default_rng_lock); - - return err; -@@ -146,24 +157,33 @@ void crypto_put_default_rng(void) - EXPORT_SYMBOL_GPL(crypto_put_default_rng); - - #if defined(CONFIG_CRYPTO_RNG) || defined(CONFIG_CRYPTO_RNG_MODULE) --int crypto_del_default_rng(void) -+static int crypto_del_rng(struct crypto_rng **rngp, int *refcntp, -+ struct mutex *lock) - { - int err = -EBUSY; - -- mutex_lock(&crypto_default_rng_lock); -- if (crypto_default_rng_refcnt) -+ mutex_lock(lock); -+ if (refcntp && *refcntp) - goto out; - -- crypto_free_rng(crypto_default_rng); -- crypto_default_rng = NULL; -+ crypto_free_rng(*rngp); -+ *rngp = NULL; - - err = 0; - - out: -- mutex_unlock(&crypto_default_rng_lock); -+ mutex_unlock(lock); - - return err; - } -+ -+int crypto_del_default_rng(void) -+{ -+ return crypto_del_rng(&crypto_default_rng, &crypto_default_rng_refcnt, -+ &crypto_default_rng_lock) ?: -+ crypto_del_rng(&crypto_reseed_rng, NULL, -+ &crypto_reseed_rng_lock); -+} - EXPORT_SYMBOL_GPL(crypto_del_default_rng); - #endif - -@@ -217,5 +237,102 @@ void crypto_unregister_rngs(struct rng_alg *algs, int count) - } - EXPORT_SYMBOL_GPL(crypto_unregister_rngs); - -+static ssize_t crypto_devrandom_read_iter(struct iov_iter *iter, bool reseed) -+{ -+ struct crypto_rng *rng; -+ u8 tmp[256]; -+ ssize_t ret; -+ -+ if (unlikely(!iov_iter_count(iter))) -+ return 0; -+ -+ if (reseed) { -+ u32 flags = 0; -+ -+ /* If reseeding is requested, acquire a lock on -+ * crypto_reseed_rng so it is not swapped out until -+ * the initial random bytes are generated. -+ * -+ * The algorithm implementation is also protected with -+ * a separate mutex (drbg->drbg_mutex) around the -+ * reseed-and-generate operation. -+ */ -+ mutex_lock(&crypto_reseed_rng_lock); -+ -+ /* If crypto_default_rng is not set, it will be seeded -+ * at creation in __crypto_get_default_rng and thus no -+ * reseeding is needed. -+ */ -+ if (crypto_reseed_rng) -+ flags |= CRYPTO_TFM_REQ_NEED_RESEED; -+ -+ ret = crypto_get_rng(&crypto_reseed_rng); -+ if (ret) { -+ mutex_unlock(&crypto_reseed_rng_lock); -+ return ret; -+ } -+ -+ rng = crypto_reseed_rng; -+ crypto_tfm_set_flags(crypto_rng_tfm(rng), flags); -+ } else { -+ ret = crypto_get_default_rng(); -+ if (ret) -+ return ret; -+ rng = crypto_default_rng; -+ } -+ -+ for (;;) { -+ size_t i, copied; -+ int err; -+ -+ i = min_t(size_t, iov_iter_count(iter), sizeof(tmp)); -+ err = crypto_rng_get_bytes(rng, tmp, i); -+ if (err) { -+ ret = err; -+ break; -+ } -+ -+ copied = copy_to_iter(tmp, i, iter); -+ ret += copied; -+ -+ if (!iov_iter_count(iter)) -+ break; -+ -+ if (need_resched()) { -+ if (signal_pending(current)) -+ break; -+ schedule(); -+ } -+ } -+ -+ if (reseed) -+ mutex_unlock(&crypto_reseed_rng_lock); -+ else -+ crypto_put_default_rng(); -+ memzero_explicit(tmp, sizeof(tmp)); -+ -+ return ret; -+} -+ -+static const struct random_extrng crypto_devrandom_rng = { -+ .extrng_read_iter = crypto_devrandom_read_iter, -+ .owner = THIS_MODULE, -+}; -+ -+static int __init crypto_rng_init(void) -+{ -+ if (fips_enabled) -+ random_register_extrng(&crypto_devrandom_rng); -+ return 0; -+} -+ -+static void __exit crypto_rng_exit(void) -+{ -+ random_unregister_extrng(); -+} -+ -+late_initcall(crypto_rng_init); -+module_exit(crypto_rng_exit); -+ - MODULE_LICENSE("GPL"); - MODULE_DESCRIPTION("Random Number Generator"); diff --git a/crypto/seqiv.c b/crypto/seqiv.c index 17e11d51ddc3..9c136a3b6267 100644 --- a/crypto/seqiv.c @@ -1115,217 +1073,6 @@ index e12b531f5c2f..082707f8dff8 100644 mutex_lock(&ipmi_interfaces_mutex); rv = ipmi_register_driver(); mutex_unlock(&ipmi_interfaces_mutex); -diff --git a/drivers/char/random.c b/drivers/char/random.c -index 87fe61295ea1..bc84784b9ecb 100644 ---- a/drivers/char/random.c -+++ b/drivers/char/random.c -@@ -51,9 +51,11 @@ - #include - #include - #include -+#include - #include - #include - #include -+#include - #include - #include - #ifdef CONFIG_VDSO_GETRANDOM -@@ -322,6 +324,11 @@ static void crng_fast_key_erasure(u8 key[CHACHA_KEY_SIZE], - memzero_explicit(first_block, sizeof(first_block)); - } - -+/* -+ * Hook for external RNG. -+ */ -+static const struct random_extrng __rcu *extrng; -+ - /* - * This function returns a ChaCha state that you may use for generating - * random data. It also returns up to 32 bytes on its own of random data -@@ -735,7 +742,8 @@ static void __cold _credit_init_bits(size_t bits) - queue_work(system_unbound_wq, &set_ready); - atomic_notifier_call_chain(&random_ready_notifier, 0, NULL); - #ifdef CONFIG_VDSO_GETRANDOM -- WRITE_ONCE(_vdso_rng_data.is_ready, true); -+ if (!fips_enabled) -+ WRITE_ONCE(_vdso_rng_data.is_ready, true); - #endif - wake_up_interruptible(&crng_init_wait); - kill_fasync(&fasync, SIGIO, POLL_IN); -@@ -755,6 +763,9 @@ static void __cold _credit_init_bits(size_t bits) - } - - -+static const struct file_operations extrng_random_fops; -+static const struct file_operations extrng_urandom_fops; -+ - /********************************************************************** - * - * Entropy collection routines. -@@ -972,6 +983,19 @@ void __init add_bootloader_randomness(const void *buf, size_t len) - credit_init_bits(len * 8); - } - -+void random_register_extrng(const struct random_extrng *rng) -+{ -+ rcu_assign_pointer(extrng, rng); -+} -+EXPORT_SYMBOL_GPL(random_register_extrng); -+ -+void random_unregister_extrng(void) -+{ -+ RCU_INIT_POINTER(extrng, NULL); -+ synchronize_rcu(); -+} -+EXPORT_SYMBOL_GPL(random_unregister_extrng); -+ - #if IS_ENABLED(CONFIG_VMGENID) - static BLOCKING_NOTIFIER_HEAD(vmfork_chain); - -@@ -1381,6 +1405,7 @@ SYSCALL_DEFINE3(getrandom, char __user *, ubuf, size_t, len, unsigned int, flags - { - struct iov_iter iter; - int ret; -+ const struct random_extrng *rng; - - if (flags & ~(GRND_NONBLOCK | GRND_RANDOM | GRND_INSECURE)) - return -EINVAL; -@@ -1392,6 +1417,21 @@ SYSCALL_DEFINE3(getrandom, char __user *, ubuf, size_t, len, unsigned int, flags - if ((flags & (GRND_INSECURE | GRND_RANDOM)) == (GRND_INSECURE | GRND_RANDOM)) - return -EINVAL; - -+ rcu_read_lock(); -+ rng = rcu_dereference(extrng); -+ if (rng && !try_module_get(rng->owner)) -+ rng = NULL; -+ rcu_read_unlock(); -+ -+ if (rng) { -+ ret = import_ubuf(ITER_DEST, ubuf, len, &iter); -+ if (unlikely(ret)) -+ return ret; -+ ret = rng->extrng_read_iter(&iter, !!(flags & GRND_RANDOM)); -+ module_put(rng->owner); -+ return ret; -+ } -+ - if (!crng_ready() && !(flags & GRND_INSECURE)) { - if (flags & GRND_NONBLOCK) - return -EAGAIN; -@@ -1412,6 +1452,12 @@ static __poll_t random_poll(struct file *file, poll_table *wait) - return crng_ready() ? EPOLLIN | EPOLLRDNORM : EPOLLOUT | EPOLLWRNORM; - } - -+static __poll_t extrng_poll(struct file *file, poll_table * wait) -+{ -+ /* extrng pool is always full, always read, no writes */ -+ return EPOLLIN | EPOLLRDNORM; -+} -+ - static ssize_t write_pool_user(struct iov_iter *iter) - { - u8 block[BLAKE2S_BLOCK_SIZE]; -@@ -1552,7 +1598,58 @@ static int random_fasync(int fd, struct file *filp, int on) - return fasync_helper(fd, filp, on, &fasync); - } - -+static int random_open(struct inode *inode, struct file *filp) -+{ -+ const struct random_extrng *rng; -+ -+ rcu_read_lock(); -+ rng = rcu_dereference(extrng); -+ if (rng && !try_module_get(rng->owner)) -+ rng = NULL; -+ rcu_read_unlock(); -+ -+ if (!rng) -+ return 0; -+ -+ filp->f_op = &extrng_random_fops; -+ filp->private_data = rng->owner; -+ -+ return 0; -+} -+ -+static int urandom_open(struct inode *inode, struct file *filp) -+{ -+ const struct random_extrng *rng; -+ -+ rcu_read_lock(); -+ rng = rcu_dereference(extrng); -+ if (rng && !try_module_get(rng->owner)) -+ rng = NULL; -+ rcu_read_unlock(); -+ -+ if (!rng) -+ return 0; -+ -+ filp->f_op = &extrng_urandom_fops; -+ filp->private_data = rng->owner; -+ -+ return 0; -+} -+ -+static int extrng_release(struct inode *inode, struct file *filp) -+{ -+ module_put(filp->private_data); -+ return 0; -+} -+ -+static ssize_t -+extrng_read_iter(struct kiocb *kiocb, struct iov_iter *iter) -+{ -+ return rcu_dereference_raw(extrng)->extrng_read_iter(iter, false); -+} -+ - const struct file_operations random_fops = { -+ .open = random_open, - .read_iter = random_read_iter, - .write_iter = random_write_iter, - .poll = random_poll, -@@ -1565,6 +1662,7 @@ const struct file_operations random_fops = { - }; - - const struct file_operations urandom_fops = { -+ .open = urandom_open, - .read_iter = urandom_read_iter, - .write_iter = random_write_iter, - .unlocked_ioctl = random_ioctl, -@@ -1575,6 +1673,32 @@ const struct file_operations urandom_fops = { - .splice_write = iter_file_splice_write, - }; - -+static const struct file_operations extrng_random_fops = { -+ .open = random_open, -+ .read_iter = extrng_read_iter, -+ .write_iter = random_write_iter, -+ .poll = extrng_poll, -+ .unlocked_ioctl = random_ioctl, -+ .compat_ioctl = compat_ptr_ioctl, -+ .fasync = random_fasync, -+ .llseek = noop_llseek, -+ .release = extrng_release, -+ .splice_read = copy_splice_read, -+ .splice_write = iter_file_splice_write, -+}; -+ -+static const struct file_operations extrng_urandom_fops = { -+ .open = urandom_open, -+ .read_iter = extrng_read_iter, -+ .write_iter = random_write_iter, -+ .unlocked_ioctl = random_ioctl, -+ .compat_ioctl = compat_ptr_ioctl, -+ .fasync = random_fasync, -+ .llseek = noop_llseek, -+ .release = extrng_release, -+ .splice_read = copy_splice_read, -+ .splice_write = iter_file_splice_write, -+}; - - /******************************************************************** - * diff --git a/drivers/firmware/efi/Makefile b/drivers/firmware/efi/Makefile index a2d0009560d0..4f3486e6a84b 100644 --- a/drivers/firmware/efi/Makefile @@ -1912,250 +1659,53 @@ index ed6c5cb60c5a..70cb770b78bb 100644 /** * iommu_setup_default_domain - Set the default_domain for the group * @group: Group to change -diff --git a/drivers/message/fusion/mptsas.c b/drivers/message/fusion/mptsas.c -index a0bcb0864ecd..d5f52a1283f3 100644 ---- a/drivers/message/fusion/mptsas.c -+++ b/drivers/message/fusion/mptsas.c -@@ -5380,6 +5380,10 @@ static void mptsas_remove(struct pci_dev *pdev) - } +diff --git a/drivers/media/platform/qcom/camss/camss-video.c b/drivers/media/platform/qcom/camss/camss-video.c +index cd72feca618c..3b8fc31d957c 100644 +--- a/drivers/media/platform/qcom/camss/camss-video.c ++++ b/drivers/media/platform/qcom/camss/camss-video.c +@@ -297,12 +297,6 @@ static void video_stop_streaming(struct vb2_queue *q) - static struct pci_device_id mptsas_pci_table[] = { -+#ifdef CONFIG_RHEL_DIFFERENCES -+ { PCI_VENDOR_ID_LSI_LOGIC, MPI_MANUFACTPAGE_DEVID_SAS1068, -+ PCI_VENDOR_ID_VMWARE, PCI_ANY_ID }, -+#else - { PCI_VENDOR_ID_LSI_LOGIC, MPI_MANUFACTPAGE_DEVID_SAS1064, - PCI_ANY_ID, PCI_ANY_ID }, - { PCI_VENDOR_ID_LSI_LOGIC, MPI_MANUFACTPAGE_DEVID_SAS1068, -@@ -5392,6 +5396,7 @@ static struct pci_device_id mptsas_pci_table[] = { - PCI_ANY_ID, PCI_ANY_ID }, - { PCI_VENDOR_ID_LSI_LOGIC, MPI_MANUFACTPAGE_DEVID_SAS1068_820XELP, - PCI_ANY_ID, PCI_ANY_ID }, -+#endif - {0} /* Terminating entry */ - }; - MODULE_DEVICE_TABLE(pci, mptsas_pci_table); -diff --git a/drivers/message/fusion/mptspi.c b/drivers/message/fusion/mptspi.c -index 574b882c9a85..5a8b2ea7365a 100644 ---- a/drivers/message/fusion/mptspi.c -+++ b/drivers/message/fusion/mptspi.c -@@ -1239,12 +1239,17 @@ static struct spi_function_template mptspi_transport_functions = { - */ + ret = v4l2_subdev_call(subdev, video, s_stream, 0); - static struct pci_device_id mptspi_pci_table[] = { -+#ifdef CONFIG_RHEL_DIFFERENCES -+ { PCI_VENDOR_ID_LSI_LOGIC, MPI_MANUFACTPAGE_DEVID_53C1030, -+ PCI_VENDOR_ID_VMWARE, PCI_ANY_ID }, -+#else - { PCI_VENDOR_ID_LSI_LOGIC, MPI_MANUFACTPAGE_DEVID_53C1030, - PCI_ANY_ID, PCI_ANY_ID }, - { PCI_VENDOR_ID_ATTO, MPI_MANUFACTPAGE_DEVID_53C1030, - PCI_ANY_ID, PCI_ANY_ID }, - { PCI_VENDOR_ID_LSI_LOGIC, MPI_MANUFACTPAGE_DEVID_53C1035, - PCI_ANY_ID, PCI_ANY_ID }, -+#endif - {0} /* Terminating entry */ - }; - MODULE_DEVICE_TABLE(pci, mptspi_pci_table); -@@ -1535,6 +1540,7 @@ mptspi_probe(struct pci_dev *pdev, const struct pci_device_id *id) - 0, 0, 0, 0, 5); +- if (entity->use_count > 1) { +- /* Don't stop if other instances of the pipeline are still running */ +- dev_dbg(video->camss->dev, "Video pipeline still used, don't stop streaming.\n"); +- return; +- } +- + if (ret) { + dev_err(video->camss->dev, "Video pipeline stop failed: %d\n", ret); + return; +diff --git a/drivers/media/platform/qcom/camss/camss.c b/drivers/media/platform/qcom/camss/camss.c +index 51b1d3550421..d64985ca6e88 100644 +--- a/drivers/media/platform/qcom/camss/camss.c ++++ b/drivers/media/platform/qcom/camss/camss.c +@@ -2283,6 +2283,8 @@ static int camss_probe(struct platform_device *pdev) - scsi_scan_host(sh); + v4l2_async_nf_init(&camss->notifier, &camss->v4l2_dev); + ++ pm_runtime_enable(dev); + + num_subdevs = camss_of_parse_ports(camss); + if (num_subdevs < 0) { + ret = num_subdevs; +@@ -2323,8 +2325,6 @@ static int camss_probe(struct platform_device *pdev) + } + } + +- pm_runtime_enable(dev); +- return 0; - out_mptspi_probe: -diff --git a/drivers/net/wireguard/main.c b/drivers/net/wireguard/main.c -index a00671b58701..eeef2766b8b3 100644 ---- a/drivers/net/wireguard/main.c -+++ b/drivers/net/wireguard/main.c -@@ -12,6 +12,7 @@ + err_register_subdevs: +@@ -2332,6 +2332,7 @@ static int camss_probe(struct platform_device *pdev) + err_v4l2_device_unregister: + v4l2_device_unregister(&camss->v4l2_dev); + v4l2_async_nf_cleanup(&camss->notifier); ++ pm_runtime_disable(dev); + err_genpd_cleanup: + camss_genpd_cleanup(camss); - #include - -+#include - #include - #include - #include -@@ -21,6 +22,11 @@ static int __init wg_mod_init(void) - { - int ret; - -+#ifdef CONFIG_RHEL_DIFFERENCES -+ if (fips_enabled) -+ return -EOPNOTSUPP; -+#endif -+ - ret = wg_allowedips_slab_init(); - if (ret < 0) - goto err_allowedips; -diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c -index 983909a600ad..28e59054b7c6 100644 ---- a/drivers/nvme/host/core.c -+++ b/drivers/nvme/host/core.c -@@ -262,6 +262,9 @@ void nvme_delete_ctrl_sync(struct nvme_ctrl *ctrl) - - static blk_status_t nvme_error_status(u16 status) - { -+ if (unlikely(status & NVME_STATUS_DNR)) -+ return BLK_STS_TARGET; -+ - switch (status & NVME_SCT_SC_MASK) { - case NVME_SC_SUCCESS: - return BLK_STS_OK; -@@ -376,6 +379,7 @@ enum nvme_disposition { - COMPLETE, - RETRY, - FAILOVER, -+ FAILUP, - AUTHENTICATE, - }; - -@@ -384,7 +388,7 @@ static inline enum nvme_disposition nvme_decide_disposition(struct request *req) - if (likely(nvme_req(req)->status == 0)) - return COMPLETE; - -- if (blk_noretry_request(req) || -+ if ((req->cmd_flags & (REQ_FAILFAST_DEV | REQ_FAILFAST_DRIVER)) || - (nvme_req(req)->status & NVME_STATUS_DNR) || - nvme_req(req)->retries >= nvme_max_retries) - return COMPLETE; -@@ -392,10 +396,11 @@ static inline enum nvme_disposition nvme_decide_disposition(struct request *req) - if ((nvme_req(req)->status & NVME_SCT_SC_MASK) == NVME_SC_AUTH_REQUIRED) - return AUTHENTICATE; - -- if (req->cmd_flags & REQ_NVME_MPATH) { -+ if (req->cmd_flags & (REQ_NVME_MPATH | REQ_FAILFAST_TRANSPORT)) { - if (nvme_is_path_error(nvme_req(req)->status) || - blk_queue_dying(req->q)) -- return FAILOVER; -+ return (req->cmd_flags & REQ_NVME_MPATH) ? -+ FAILOVER : FAILUP; - } else { - if (blk_queue_dying(req->q)) - return COMPLETE; -@@ -437,6 +442,14 @@ void nvme_end_req(struct request *req) - blk_mq_end_request(req, status); - } - -+static inline void nvme_failup_req(struct request *req) -+{ -+ nvme_update_ana(req); -+ -+ nvme_req(req)->status = NVME_SC_HOST_PATH_ERROR; -+ nvme_end_req(req); -+} -+ - void nvme_complete_rq(struct request *req) - { - struct nvme_ctrl *ctrl = nvme_req(req)->ctrl; -@@ -466,6 +479,9 @@ void nvme_complete_rq(struct request *req) - case FAILOVER: - nvme_failover_req(req); - return; -+ case FAILUP: -+ nvme_failup_req(req); -+ return; - case AUTHENTICATE: - #ifdef CONFIG_NVME_HOST_AUTH - queue_work(nvme_wq, &ctrl->dhchap_auth_work); -diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c -index 518e22dd4f9b..af7d1591e9c6 100644 ---- a/drivers/nvme/host/multipath.c -+++ b/drivers/nvme/host/multipath.c -@@ -83,14 +83,10 @@ void nvme_mpath_start_freeze(struct nvme_subsystem *subsys) - blk_freeze_queue_start(h->disk->queue); - } - --void nvme_failover_req(struct request *req) -+void nvme_update_ana(struct request *req) - { - struct nvme_ns *ns = req->q->queuedata; - u16 status = nvme_req(req)->status & NVME_SCT_SC_MASK; -- unsigned long flags; -- struct bio *bio; -- -- nvme_mpath_clear_current_path(ns); - - /* - * If we got back an ANA error, we know the controller is alive but not -@@ -101,6 +97,16 @@ void nvme_failover_req(struct request *req) - set_bit(NVME_NS_ANA_PENDING, &ns->flags); - queue_work(nvme_wq, &ns->ctrl->ana_work); - } -+} -+ -+void nvme_failover_req(struct request *req) -+{ -+ struct nvme_ns *ns = req->q->queuedata; -+ unsigned long flags; -+ struct bio *bio; -+ -+ nvme_mpath_clear_current_path(ns); -+ nvme_update_ana(req); - - spin_lock_irqsave(&ns->head->requeue_lock, flags); - for (bio = req->bio; bio; bio = bio->bi_next) { -@@ -1000,8 +1006,7 @@ int nvme_mpath_init_identify(struct nvme_ctrl *ctrl, struct nvme_id_ctrl *id) - int error = 0; - - /* check if multipath is enabled and we have the capability */ -- if (!multipath || !ctrl->subsys || -- !(ctrl->subsys->cmic & NVME_CTRL_CMIC_ANA)) -+ if (!ctrl->subsys || !(ctrl->subsys->cmic & NVME_CTRL_CMIC_ANA)) - return 0; - - /* initialize this in the identify path to cover controller resets */ -diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h -index da57947130cc..beef00ccfb26 100644 ---- a/drivers/nvme/host/nvme.h -+++ b/drivers/nvme/host/nvme.h -@@ -941,6 +941,7 @@ void nvme_mpath_wait_freeze(struct nvme_subsystem *subsys); - void nvme_mpath_start_freeze(struct nvme_subsystem *subsys); - void nvme_mpath_default_iopolicy(struct nvme_subsystem *subsys); - void nvme_failover_req(struct request *req); -+void nvme_update_ana(struct request *req); - void nvme_kick_requeue_lists(struct nvme_ctrl *ctrl); - int nvme_mpath_alloc_disk(struct nvme_ctrl *ctrl,struct nvme_ns_head *head); - void nvme_mpath_add_disk(struct nvme_ns *ns, __le32 anagrpid); -@@ -983,6 +984,9 @@ static inline bool nvme_ctrl_use_ana(struct nvme_ctrl *ctrl) - static inline void nvme_failover_req(struct request *req) - { - } -+static inline void nvme_update_ana(struct request *req) -+{ -+} - static inline void nvme_kick_requeue_lists(struct nvme_ctrl *ctrl) - { - } -diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c -index f412ef73a6e4..e1d9079483ea 100644 ---- a/drivers/pci/pci-driver.c -+++ b/drivers/pci/pci-driver.c -@@ -19,6 +19,7 @@ - #include - #include - #include -+#include - #include - #include - #include "pci.h" -@@ -321,7 +322,15 @@ static long local_pci_probe(void *_ddi) - */ - pm_runtime_get_sync(dev); - pci_dev->driver = pci_drv; -+ -+#ifdef CONFIG_RHEL_DIFFERENCES -+ rc = -EACCES; -+ if (!pci_rh_check_status(pci_dev)) -+ rc = pci_drv->probe(pci_dev, ddi->id); -+#else - rc = pci_drv->probe(pci_dev, ddi->id); -+#endif -+ - if (!rc) - return rc; - if (rc < 0) { diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index a2ce4e08edf5..07dd75b1f580 100644 --- a/drivers/pci/quirks.c @@ -2191,288 +1741,31 @@ index a2ce4e08edf5..07dd75b1f580 100644 /* * Intersil/Techwell TW686[4589]-based video capture cards have an empty (zero) * class code. Fix it. -diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c -index 68f4dbcfff49..90a6070a1332 100644 ---- a/drivers/scsi/aacraid/linit.c -+++ b/drivers/scsi/aacraid/linit.c -@@ -77,6 +77,7 @@ char aac_driver_version[] = AAC_DRIVER_FULL_VERSION; - * Note: The last field is used to index into aac_drivers below. - */ - static const struct pci_device_id aac_pci_tbl[] = { -+#ifndef CONFIG_RHEL_DIFFERENCES - { 0x1028, 0x0001, 0x1028, 0x0001, 0, 0, 0 }, /* PERC 2/Si (Iguana/PERC2Si) */ - { 0x1028, 0x0002, 0x1028, 0x0002, 0, 0, 1 }, /* PERC 3/Di (Opal/PERC3Di) */ - { 0x1028, 0x0003, 0x1028, 0x0003, 0, 0, 2 }, /* PERC 3/Si (SlimFast/PERC3Si */ -@@ -144,6 +145,7 @@ static const struct pci_device_id aac_pci_tbl[] = { - { 0x9005, 0x0285, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 59 }, /* Adaptec Catch All */ - { 0x9005, 0x0286, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 60 }, /* Adaptec Rocket Catch All */ - { 0x9005, 0x0288, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 61 }, /* Adaptec NEMER/ARK Catch All */ -+#endif - { 0x9005, 0x028b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 62 }, /* Adaptec PMC Series 6 (Tupelo) */ - { 0x9005, 0x028c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 63 }, /* Adaptec PMC Series 7 (Denali) */ - { 0x9005, 0x028d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 64 }, /* Adaptec PMC Series 8 */ -diff --git a/drivers/scsi/be2iscsi/be_main.c b/drivers/scsi/be2iscsi/be_main.c -index 06acb5ff609e..a54ea7cf7d6e 100644 ---- a/drivers/scsi/be2iscsi/be_main.c -+++ b/drivers/scsi/be2iscsi/be_main.c -@@ -387,11 +387,13 @@ static int beiscsi_eh_device_reset(struct scsi_cmnd *sc) - - /*------------------- PCI Driver operations and data ----------------- */ - static const struct pci_device_id beiscsi_pci_id_table[] = { -+#ifndef CONFIG_RHEL_DIFFERENCES - { PCI_DEVICE(BE_VENDOR_ID, BE_DEVICE_ID1) }, - { PCI_DEVICE(BE_VENDOR_ID, BE_DEVICE_ID2) }, - { PCI_DEVICE(BE_VENDOR_ID, OC_DEVICE_ID1) }, - { PCI_DEVICE(BE_VENDOR_ID, OC_DEVICE_ID2) }, - { PCI_DEVICE(BE_VENDOR_ID, OC_DEVICE_ID3) }, -+#endif - { PCI_DEVICE(ELX_VENDOR_ID, OC_SKH_ID1) }, - { 0 } - }; -diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c -index e044ed09d7e0..aa5f9c19d222 100644 ---- a/drivers/scsi/hpsa.c -+++ b/drivers/scsi/hpsa.c -@@ -82,7 +82,9 @@ MODULE_DESCRIPTION("Driver for HP Smart Array Controller version " \ - HPSA_DRIVER_VERSION); - MODULE_VERSION(HPSA_DRIVER_VERSION); - MODULE_LICENSE("GPL"); -+#ifndef CONFIG_RHEL_DIFFERENCES - MODULE_ALIAS("cciss"); -+#endif - - static int hpsa_simple_mode; - module_param(hpsa_simple_mode, int, S_IRUGO|S_IWUSR); -@@ -144,10 +146,12 @@ static const struct pci_device_id hpsa_pci_device_id[] = { - {PCI_VENDOR_ID_HP_3PAR, 0x0075, 0x1590, 0x007D}, - {PCI_VENDOR_ID_HP_3PAR, 0x0075, 0x1590, 0x0088}, - {PCI_VENDOR_ID_HP, 0x333f, 0x103c, 0x333f}, -+#ifndef CONFIG_RHEL_DIFFERENCES - {PCI_VENDOR_ID_HP, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, - PCI_CLASS_STORAGE_RAID << 8, 0xffff << 8, 0}, - {PCI_VENDOR_ID_COMPAQ, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, - PCI_CLASS_STORAGE_RAID << 8, 0xffff << 8, 0}, -+#endif - {0,} - }; - -diff --git a/drivers/scsi/lpfc/lpfc_ids.h b/drivers/scsi/lpfc/lpfc_ids.h -index 0b1616e93cf4..85fc52038a82 100644 ---- a/drivers/scsi/lpfc/lpfc_ids.h -+++ b/drivers/scsi/lpfc/lpfc_ids.h -@@ -24,6 +24,7 @@ - #include - - const struct pci_device_id lpfc_id_table[] = { -+#ifndef CONFIG_RHEL_DIFFERENCES - {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_VIPER, - PCI_ANY_ID, PCI_ANY_ID, }, - {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_FIREFLY, -@@ -54,10 +55,13 @@ const struct pci_device_id lpfc_id_table[] = { - PCI_ANY_ID, PCI_ANY_ID, }, - {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_HELIOS_DCSP, - PCI_ANY_ID, PCI_ANY_ID, }, -+#endif - {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_BMID, - PCI_ANY_ID, PCI_ANY_ID, }, -+#ifndef CONFIG_RHEL_DIFFERENCES - {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_BSMB, - PCI_ANY_ID, PCI_ANY_ID, }, -+#endif - {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_ZEPHYR, - PCI_ANY_ID, PCI_ANY_ID, }, - {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_ZEPHYR_SCSP, -@@ -68,6 +72,7 @@ const struct pci_device_id lpfc_id_table[] = { - PCI_ANY_ID, PCI_ANY_ID, }, - {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_ZSMB, - PCI_ANY_ID, PCI_ANY_ID, }, -+#ifndef CONFIG_RHEL_DIFFERENCES - {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_TFLY, - PCI_ANY_ID, PCI_ANY_ID, }, - {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_LP101, -@@ -78,6 +83,7 @@ const struct pci_device_id lpfc_id_table[] = { - PCI_ANY_ID, PCI_ANY_ID, }, - {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_LPE11000S, - PCI_ANY_ID, PCI_ANY_ID, }, -+#endif - {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_SAT, - PCI_ANY_ID, PCI_ANY_ID, }, - {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_SAT_MID, -@@ -90,6 +96,7 @@ const struct pci_device_id lpfc_id_table[] = { - PCI_ANY_ID, PCI_ANY_ID, }, - {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_SAT_S, - PCI_ANY_ID, PCI_ANY_ID, }, -+#ifndef CONFIG_RHEL_DIFFERENCES - {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_PROTEUS_VF, - PCI_ANY_ID, PCI_ANY_ID, }, - {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_PROTEUS_PF, -@@ -100,18 +107,23 @@ const struct pci_device_id lpfc_id_table[] = { - PCI_ANY_ID, PCI_ANY_ID, }, - {PCI_VENDOR_ID_SERVERENGINE, PCI_DEVICE_ID_TOMCAT, - PCI_ANY_ID, PCI_ANY_ID, }, -+#endif - {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_FALCON, - PCI_ANY_ID, PCI_ANY_ID, }, -+#ifndef CONFIG_RHEL_DIFFERENCES - {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_BALIUS, - PCI_ANY_ID, PCI_ANY_ID, }, -+#endif - {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_LANCER_FC, - PCI_ANY_ID, PCI_ANY_ID, }, -+#ifndef CONFIG_RHEL_DIFFERENCES - {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_LANCER_FCOE, - PCI_ANY_ID, PCI_ANY_ID, }, - {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_LANCER_FC_VF, - PCI_ANY_ID, PCI_ANY_ID, }, - {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_LANCER_FCOE_VF, - PCI_ANY_ID, PCI_ANY_ID, }, -+#endif - {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_LANCER_G6_FC, - PCI_ANY_ID, PCI_ANY_ID, }, - {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_LANCER_G7_FC, -diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c -index 6c79c350a4d5..27012eec4822 100644 ---- a/drivers/scsi/megaraid/megaraid_sas_base.c -+++ b/drivers/scsi/megaraid/megaraid_sas_base.c -@@ -149,6 +149,7 @@ megasas_set_ld_removed_by_fw(struct megasas_instance *instance); - */ - static struct pci_device_id megasas_pci_table[] = { - -+#ifndef CONFIG_RHEL_DIFFERENCES - {PCI_DEVICE(PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_SAS1064R)}, - /* xscale IOP */ - {PCI_DEVICE(PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_SAS1078R)}, -@@ -157,16 +158,19 @@ static struct pci_device_id megasas_pci_table[] = { - /* ppc IOP */ - {PCI_DEVICE(PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_SAS1078GEN2)}, - /* gen2*/ -+#endif - {PCI_DEVICE(PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_SAS0079GEN2)}, - /* gen2*/ - {PCI_DEVICE(PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_SAS0073SKINNY)}, - /* skinny*/ - {PCI_DEVICE(PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_SAS0071SKINNY)}, - /* skinny*/ -+#ifndef CONFIG_RHEL_DIFFERENCES - {PCI_DEVICE(PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_VERDE_ZCR)}, - /* xscale IOP, vega */ - {PCI_DEVICE(PCI_VENDOR_ID_DELL, PCI_DEVICE_ID_DELL_PERC5)}, - /* xscale IOP */ -+#endif - {PCI_DEVICE(PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_FUSION)}, - /* Fusion */ - {PCI_DEVICE(PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_PLASMA)}, -diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c -index 97c2472cd434..fedba599ae00 100644 ---- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c -+++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c -@@ -12569,6 +12569,7 @@ scsih_pci_mmio_enabled(struct pci_dev *pdev) - * The pci device ids are defined in mpi/mpi2_cnfg.h. - */ - static const struct pci_device_id mpt3sas_pci_table[] = { -+#ifndef CONFIG_RHEL_DIFFERENCES - /* Spitfire ~ 2004 */ - { MPI2_MFGPAGE_VENDORID_LSI, MPI2_MFGPAGE_DEVID_SAS2004, - PCI_ANY_ID, PCI_ANY_ID }, -@@ -12587,6 +12588,7 @@ static const struct pci_device_id mpt3sas_pci_table[] = { - PCI_ANY_ID, PCI_ANY_ID }, - { MPI2_MFGPAGE_VENDORID_LSI, MPI2_MFGPAGE_DEVID_SAS2116_2, - PCI_ANY_ID, PCI_ANY_ID }, -+#endif - /* Thunderbolt ~ 2208 */ - { MPI2_MFGPAGE_VENDORID_LSI, MPI2_MFGPAGE_DEVID_SAS2208_1, - PCI_ANY_ID, PCI_ANY_ID }, -@@ -12611,9 +12613,11 @@ static const struct pci_device_id mpt3sas_pci_table[] = { - PCI_ANY_ID, PCI_ANY_ID }, - { MPI2_MFGPAGE_VENDORID_LSI, MPI2_MFGPAGE_DEVID_SWITCH_MPI_EP_1, - PCI_ANY_ID, PCI_ANY_ID }, -+#ifndef CONFIG_RHEL_DIFFERENCES - /* SSS6200 */ - { MPI2_MFGPAGE_VENDORID_LSI, MPI2_MFGPAGE_DEVID_SSS6200, - PCI_ANY_ID, PCI_ANY_ID }, -+#endif - /* Fury ~ 3004 and 3008 */ - { MPI2_MFGPAGE_VENDORID_LSI, MPI25_MFGPAGE_DEVID_SAS3004, - PCI_ANY_ID, PCI_ANY_ID }, -diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c -index bc3b2aea3f8b..8d47d61c9920 100644 ---- a/drivers/scsi/qla2xxx/qla_os.c -+++ b/drivers/scsi/qla2xxx/qla_os.c -@@ -8114,6 +8114,7 @@ static const struct pci_error_handlers qla2xxx_err_handler = { - }; - - static struct pci_device_id qla2xxx_pci_tbl[] = { -+#ifndef CONFIG_RHEL_DIFFERENCES - { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2100) }, - { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2200) }, - { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2300) }, -@@ -8126,13 +8127,18 @@ static struct pci_device_id qla2xxx_pci_tbl[] = { - { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP8432) }, - { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP5422) }, - { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP5432) }, -+#endif - { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2532) }, - { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2031) }, -+#ifndef CONFIG_RHEL_DIFFERENCES - { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP8001) }, - { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP8021) }, -+#endif - { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP8031) }, -+#ifndef CONFIG_RHEL_DIFFERENCES - { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISPF001) }, - { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP8044) }, -+#endif - { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2071) }, - { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2271) }, - { PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2261) }, -diff --git a/drivers/scsi/qla4xxx/ql4_os.c b/drivers/scsi/qla4xxx/ql4_os.c -index 17cccd14765f..7f0cef737224 100644 ---- a/drivers/scsi/qla4xxx/ql4_os.c -+++ b/drivers/scsi/qla4xxx/ql4_os.c -@@ -9865,6 +9865,7 @@ static struct pci_device_id qla4xxx_pci_tbl[] = { - .subvendor = PCI_ANY_ID, - .subdevice = PCI_ANY_ID, - }, -+#ifndef CONFIG_RHEL_DIFFERENCES - { - .vendor = PCI_VENDOR_ID_QLOGIC, - .device = PCI_DEVICE_ID_QLOGIC_ISP8022, -@@ -9883,6 +9884,7 @@ static struct pci_device_id qla4xxx_pci_tbl[] = { - .subvendor = PCI_ANY_ID, - .subdevice = PCI_ANY_ID, - }, -+#endif - {0, 0}, - }; - MODULE_DEVICE_TABLE(pci, qla4xxx_pci_tbl); diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c -index 9db86943d04c..515142544669 100644 +index 9db86943d04c..6e03290a7a07 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c @@ -122,6 +122,14 @@ static const char *sd_cache_types[] = { "write back, no read (daft)" }; -+#ifdef CONFIG_RHEL_DIFFERENCES ++static const char *sd_probe_types[] = { "async", "sync" }; ++ +static char sd_probe_type[6] = "async"; +module_param_string(probe, sd_probe_type, sizeof(sd_probe_type), + S_IRUGO|S_IWUSR); +MODULE_PARM_DESC(probe, "async or sync. Setting to 'sync' disables asynchronous " + "device number assignments (sda, sdb, ...)."); -+#endif + static void sd_set_flush_flag(struct scsi_disk *sdkp, struct queue_limits *lim) { -@@ -4349,6 +4357,11 @@ static int __init init_sd(void) +@@ -4349,6 +4357,8 @@ static int __init init_sd(void) goto err_out_class; } -+#ifdef CONFIG_RHEL_DIFFERENCES + if (!strcmp(sd_probe_type, "sync")) + sd_template.gendrv.probe_type = PROBE_FORCE_SYNCHRONOUS; -+#endif -+ err = scsi_register_driver(&sd_template.gendrv); if (err) goto err_out_driver; @@ -2494,83 +1787,19 @@ index 4b93c0bd1d4b..b98906237306 100644 /* Lock the device, then check to see if we were * disconnected while waiting for the lock to succeed. */ usb_lock_device(hdev); -diff --git a/fs/afs/main.c b/fs/afs/main.c -index a14f6013e316..6c20453fdf76 100644 ---- a/fs/afs/main.c -+++ b/fs/afs/main.c -@@ -199,6 +199,9 @@ static int __init afs_init(void) - goto error_proc; - } - -+#ifdef CONFIG_RHEL_DIFFERENCES -+ mark_partner_supported(KBUILD_MODNAME, THIS_MODULE); -+#endif - return ret; - - error_proc: -diff --git a/fs/erofs/super.c b/fs/erofs/super.c -index 6cb5c8916174..34b899ab37bb 100644 ---- a/fs/erofs/super.c -+++ b/fs/erofs/super.c -@@ -581,6 +581,9 @@ static int erofs_fc_fill_super(struct super_block *sb, struct fs_context *fc) - { - struct inode *inode; - struct erofs_sb_info *sbi = EROFS_SB(sb); -+#ifdef CONFIG_RHEL_DIFFERENCES -+ static bool printed = false; -+#endif - int err; - - sb->s_magic = EROFS_SUPER_MAGIC; -@@ -687,6 +690,12 @@ static int erofs_fc_fill_super(struct super_block *sb, struct fs_context *fc) - return err; - - erofs_info(sb, "mounted with root inode @ nid %llu.", sbi->root_nid); -+#ifdef CONFIG_RHEL_DIFFERENCES -+ if (!printed) { -+ mark_tech_preview("EROFS filesystem", NULL); -+ printed = true; -+ } -+#endif - return 0; - } - -diff --git a/fs/ext4/super.c b/fs/ext4/super.c -index e72145c4ae5a..7522b976a836 100644 ---- a/fs/ext4/super.c -+++ b/fs/ext4/super.c -@@ -5569,6 +5569,17 @@ static int __ext4_fill_super(struct fs_context *fc, struct super_block *sb) - atomic_set(&sbi->s_warning_count, 0); - atomic_set(&sbi->s_msg_count, 0); - -+#ifdef CONFIG_RHEL_DIFFERENCES -+ if (ext4_has_feature_verity(sb)) { -+ static bool printed = false; -+ -+ if (!printed) { -+ mark_tech_preview("fs-verity on ext4", NULL); -+ printed = true; -+ } -+ } -+#endif -+ - /* Register sysfs after all initializations are complete. */ - err = ext4_register_sysfs(sb); - if (err) diff --git a/include/linux/crypto.h b/include/linux/crypto.h -index b164da5e129e..cd78d16ee5d6 100644 +index b164da5e129e..72bfb79b491d 100644 --- a/include/linux/crypto.h +++ b/include/linux/crypto.h -@@ -133,6 +133,9 @@ - #define CRYPTO_TFM_REQ_FORBID_WEAK_KEYS 0x00000100 +@@ -134,6 +134,8 @@ #define CRYPTO_TFM_REQ_MAY_SLEEP 0x00000200 #define CRYPTO_TFM_REQ_MAY_BACKLOG 0x00000400 -+#define CRYPTO_TFM_REQ_NEED_RESEED 0x00000800 -+ -+#define CRYPTO_TFM_FIPS_COMPLIANCE 0x80000000 ++#define CRYPTO_TFM_FIPS_COMPLIANCE 0x80000000 ++ /* * Miscellaneous stuff. + */ diff --git a/include/linux/efi.h b/include/linux/efi.h index 6bf3c4fe8511..67e5400f7644 100644 --- a/include/linux/efi.h @@ -2639,31 +1868,6 @@ index 6bf3c4fe8511..67e5400f7644 100644 static inline enum efi_secureboot_mode efi_get_secureboot_mode(efi_get_variable_t *get_var) { -diff --git a/include/linux/kernel.h b/include/linux/kernel.h -index be2e8c0a187e..114e213c89e2 100644 ---- a/include/linux/kernel.h -+++ b/include/linux/kernel.h -@@ -402,4 +402,20 @@ static inline void ftrace_dump(enum ftrace_dump_mode oops_dump_mode) { } - /* OTHER_WRITABLE? Generally considered a bad idea. */ \ - BUILD_BUG_ON_ZERO((perms) & 2) + \ - (perms)) -+ -+struct module; -+ -+#ifdef CONFIG_RHEL_DIFFERENCES -+void mark_hardware_unmaintained(const char *driver_name, char *fmt, ...); -+void mark_hardware_deprecated(const char *driver_name, char *fmt, ...); -+void mark_tech_preview(const char *msg, struct module *mod); -+void mark_partner_supported(const char *msg, struct module *mod); -+void init_rh_check_status(char *fn_name); -+#else -+static inline void mark_hardware_unmaintained(const char *driver_name, char *fmt, ...) { } -+static inline void mark_hardware_deprecated(const char *driver_name, char *fmt, ...) { } -+static inline void mark_tech_preview(const char *msg, struct module *mod) { } -+static inline void mark_partner_supported(const char *msg, struct module *mod) { } -+#endif -+ - #endif diff --git a/include/linux/lsm_hook_defs.h b/include/linux/lsm_hook_defs.h index 855db460e08b..7a8c28cd7510 100644 --- a/include/linux/lsm_hook_defs.h @@ -2677,719 +1881,6 @@ index 855db460e08b..7a8c28cd7510 100644 #ifdef CONFIG_PERF_EVENTS LSM_HOOK(int, 0, perf_event_open, struct perf_event_attr *attr, int type) -diff --git a/include/linux/module.h b/include/linux/module.h -index 88ecc5e9f523..bcc0377c716a 100644 ---- a/include/linux/module.h -+++ b/include/linux/module.h -@@ -424,6 +424,7 @@ struct module { - struct module_attribute *modinfo_attrs; - const char *version; - const char *srcversion; -+ const char *rhelversion; - struct kobject *holders_dir; - - /* Exported symbols */ -@@ -1007,4 +1008,8 @@ static inline unsigned long find_kallsyms_symbol_value(struct module *mod, - - #endif /* CONFIG_MODULES && CONFIG_KALLSYMS */ - -+#ifdef CONFIG_RHEL_DIFFERENCES -+void module_rh_check_status(const char * module_name); -+#endif -+ - #endif /* _LINUX_MODULE_H */ -diff --git a/include/linux/panic.h b/include/linux/panic.h -index 54d90b6c5f47..cc5def6f2b2e 100644 ---- a/include/linux/panic.h -+++ b/include/linux/panic.h -@@ -74,7 +74,23 @@ static inline void set_arch_panic_timeout(int timeout, int arch_default_timeout) - #define TAINT_AUX 16 - #define TAINT_RANDSTRUCT 17 - #define TAINT_TEST 18 --#define TAINT_FLAGS_COUNT 19 -+/* Start of Red Hat-specific taint flags */ -+#define TAINT_19 19 -+#define TAINT_20 20 -+#define TAINT_21 21 -+#define TAINT_22 22 -+#define TAINT_23 23 -+#define TAINT_24 24 -+#define TAINT_25 25 -+#define TAINT_PARTNER_SUPPORTED 26 -+#define TAINT_SUPPORT_REMOVED 27 -+/* Bits 28 - 31 are reserved for Red Hat use only */ -+#define TAINT_RESERVED28 28 -+#define TAINT_RESERVED29 29 -+#define TAINT_RESERVED30 30 -+#define TAINT_UNPRIVILEGED_BPF 31 -+/* End of Red Hat-specific taint flags */ -+#define TAINT_FLAGS_COUNT 32 - #define TAINT_FLAGS_MAX ((1UL << TAINT_FLAGS_COUNT) - 1) - - struct taint_flag { -diff --git a/include/linux/pci.h b/include/linux/pci.h -index 4cf89a4b4cbc..5133f3570000 100644 ---- a/include/linux/pci.h -+++ b/include/linux/pci.h -@@ -1614,6 +1614,7 @@ int pci_add_dynid(struct pci_driver *drv, - unsigned long driver_data); - const struct pci_device_id *pci_match_id(const struct pci_device_id *ids, - struct pci_dev *dev); -+ - int pci_scan_bridge(struct pci_bus *bus, struct pci_dev *dev, int max, - int pass); - -@@ -2662,6 +2663,10 @@ static inline bool pci_is_thunderbolt_attached(struct pci_dev *pdev) - return false; - } - -+#ifdef CONFIG_RHEL_DIFFERENCES -+bool pci_rh_check_status(struct pci_dev *pci_dev); -+#endif -+ - #if defined(CONFIG_PCIEPORTBUS) || defined(CONFIG_EEH) - void pci_uevent_ers(struct pci_dev *pdev, enum pci_ers_result err_type); - #endif -diff --git a/include/linux/random.h b/include/linux/random.h -index b0a940af4fff..8a52424fd0d5 100644 ---- a/include/linux/random.h -+++ b/include/linux/random.h -@@ -9,6 +9,13 @@ - - #include - -+struct iov_iter; -+ -+struct random_extrng { -+ ssize_t (*extrng_read_iter)(struct iov_iter *iter, bool reseed); -+ struct module *owner; -+}; -+ - struct notifier_block; - - void add_device_randomness(const void *buf, size_t len); -@@ -157,6 +164,9 @@ int random_prepare_cpu(unsigned int cpu); - int random_online_cpu(unsigned int cpu); - #endif - -+void random_register_extrng(const struct random_extrng *rng); -+void random_unregister_extrng(void); -+ - #ifndef MODULE - extern const struct file_operations random_fops, urandom_fops; - #endif -diff --git a/include/linux/rh_flags.h b/include/linux/rh_flags.h -new file mode 100644 -index 000000000000..d498d319ace3 ---- /dev/null -+++ b/include/linux/rh_flags.h -@@ -0,0 +1,34 @@ -+/* SPDX-License-Identifier: GPL-2.0 */ -+/* -+ * rh_flags.h -- Red Hat flags tracking -+ * -+ * Copyright (c) 2018 Red Hat, Inc. -- Jiri Benc -+ * -+ * The intent of the flag tracking is to provide better and more focused -+ * support. Only those flags that are of a special interest for customer -+ * support should be tracked. -+ * -+ * THE FLAGS DO NOT EXPRESS ANY SUPPORT POLICIES. -+ */ -+ -+#ifndef _LINUX_RH_FLAGS_H -+#define _LINUX_RH_FLAGS_H -+ -+#if defined CONFIG_RHEL_DIFFERENCES -+bool __rh_add_flag(const char *flag_name); -+void rh_print_flags(void); -+ -+#define rh_add_flag(flag_name) \ -+({ \ -+ static bool __mark_once __read_mostly; \ -+ bool __ret_mark_once = !__mark_once; \ -+ \ -+ if (!__mark_once) \ -+ __mark_once = __rh_add_flag(flag_name); \ -+ unlikely(__ret_mark_once); \ -+}) -+#else -+static void rh_print_flags(void) { } -+static void rh_add_flag(const char *flag_name) { } -+#endif -+#endif -diff --git a/include/linux/rh_kabi.h b/include/linux/rh_kabi.h -new file mode 100644 -index 000000000000..5139cb2cabdc ---- /dev/null -+++ b/include/linux/rh_kabi.h -@@ -0,0 +1,541 @@ -+/* -+ * rh_kabi.h - Red Hat kABI abstraction header -+ * -+ * Copyright (c) 2014 Don Zickus -+ * Copyright (c) 2015-2020 Jiri Benc -+ * Copyright (c) 2015 Sabrina Dubroca, Hannes Frederic Sowa -+ * Copyright (c) 2016-2018 Prarit Bhargava -+ * Copyright (c) 2017 Paolo Abeni, Larry Woodman -+ * -+ * This file is released under the GPLv2. -+ * See the file COPYING for more details. -+ * -+ * These kabi macros hide the changes from the kabi checker and from the -+ * process that computes the exported symbols' checksums. -+ * They have 2 variants: one (defined under __GENKSYMS__) used when -+ * generating the checksums, and the other used when building the kernel's -+ * binaries. -+ * -+ * The use of these macros does not guarantee that the usage and modification -+ * of code is correct. As with all Red Hat only changes, an engineer must -+ * explain why the use of the macro is valid in the patch containing the -+ * changes. -+ * -+ */ -+ -+#ifndef _LINUX_RH_KABI_H -+#define _LINUX_RH_KABI_H -+ -+#include -+#include -+#include -+ -+/* -+ * NOTE -+ * Unless indicated otherwise, don't use ';' after these macros as it -+ * messes up the kABI checker by changing what the resulting token string -+ * looks like. Instead let the macros add the ';' so it can be properly -+ * hidden from the kABI checker (mainly for RH_KABI_EXTEND, but applied to -+ * most macros for uniformity). -+ * -+ * -+ * RH_KABI_CONST -+ * Adds a new const modifier to a function parameter preserving the old -+ * checksum. -+ * -+ * RH_KABI_ADD_MODIFIER -+ * Adds a new modifier to a function parameter or a typedef, preserving -+ * the old checksum. Useful e.g. for adding rcu annotations or changing -+ * int to unsigned. Beware that this may change the semantics; if you're -+ * sure this is safe, always explain why binary compatibility with 3rd -+ * party modules is retained. -+ * -+ * RH_KABI_DEPRECATE -+ * Marks the element as deprecated and make it unusable by modules while -+ * keeping a hole in its place to preserve binary compatibility. -+ * -+ * RH_KABI_DEPRECATE_FN -+ * Marks the function pointer as deprecated and make it unusable by modules -+ * while keeping a hole in its place to preserve binary compatibility. -+ * -+ * RH_KABI_EXTEND -+ * Adds a new field to a struct. This must always be added to the end of -+ * the struct. Before using this macro, make sure this is actually safe -+ * to do - there is a number of conditions under which it is *not* safe. -+ * In particular (but not limited to), this macro cannot be used: -+ * - if the struct in question is embedded in another struct, or -+ * - if the struct is allocated by drivers either statically or -+ * dynamically, or -+ * - if the struct is allocated together with driver data (an example of -+ * such behavior is struct net_device or struct request). -+ * -+ * RH_KABI_EXTEND_WITH_SIZE -+ * Adds a new element (usually a struct) to a struct and reserves extra -+ * space for the new element. The provided 'size' is the total space to -+ * be added in longs (i.e. it's 8 * 'size' bytes), including the size of -+ * the added element. It is automatically checked that the new element -+ * does not overflow the reserved space, now nor in the future. However, -+ * no attempt is done to check the content of the added element (struct) -+ * for kABI conformance - kABI checking inside the added element is -+ * effectively switched off. -+ * For any struct being added by RH_KABI_EXTEND_WITH_SIZE, it is -+ * recommended its content to be documented as not covered by kABI -+ * guarantee. -+ * -+ * RH_KABI_FILL_HOLE -+ * Fills a hole in a struct. -+ * -+ * Warning: only use if a hole exists for _all_ arches. Use pahole to verify. -+ * -+ * RH_KABI_RENAME -+ * Renames an element without changing its type. This macro can be used in -+ * bitfields, for example. -+ * -+ * NOTE: this macro does not add the final ';' -+ * -+ * RH_KABI_REPLACE -+ * Replaces the _orig field by the _new field. The size of the occupied -+ * space is preserved, it's fine if the _new field is smaller than the -+ * _orig field. If a _new field is larger or has a different alignment, -+ * compilation will abort. -+ * -+ * RH_KABI_REPLACE_SPLIT -+ * Works the same as RH_KABI_REPLACE but replaces a single _orig field by -+ * multiple new fields. The checks for size and alignment done by -+ * RH_KABI_REPLACE are still applied. -+ * -+ * RH_KABI_HIDE_INCLUDE -+ * Hides the given include file from kABI checksum computations. This is -+ * used when a newly added #include makes a previously opaque struct -+ * visible. -+ * -+ * Example usage: -+ * #include RH_KABI_HIDE_INCLUDE() -+ * -+ * RH_KABI_FAKE_INCLUDE -+ * Pretends inclusion of the given file for kABI checksum computations. -+ * This is used when upstream removed a particular #include but that made -+ * some structures opaque that were previously visible and is causing kABI -+ * checker failures. -+ * -+ * Example usage: -+ * #include RH_KABI_FAKE_INCLUDE() -+ * -+ * RH_KABI_RESERVE -+ * Adds a reserved field to a struct. This is done prior to kABI freeze -+ * for structs that cannot be expanded later using RH_KABI_EXTEND (for -+ * example because they are embedded in another struct or because they are -+ * allocated by drivers or because they use unusual memory layout). The -+ * size of the reserved field is 'unsigned long' and is assumed to be -+ * 8 bytes. -+ * -+ * The argument is a number unique for the given struct; usually, multiple -+ * RH_KABI_RESERVE macros are added to a struct with numbers starting from -+ * one. -+ * -+ * Example usage: -+ * struct foo { -+ * int a; -+ * RH_KABI_RESERVE(1) -+ * RH_KABI_RESERVE(2) -+ * RH_KABI_RESERVE(3) -+ * RH_KABI_RESERVE(4) -+ * }; -+ * -+ * RH_KABI_USE -+ * Uses a previously reserved field or multiple fields. The arguments are -+ * one or more numbers assigned to RH_KABI_RESERVE, followed by a field to -+ * be put in their place. The compiler ensures that the new field is not -+ * larger than the reserved area. -+ * -+ * Example usage: -+ * struct foo { -+ * int a; -+ * RH_KABI_USE(1, int b) -+ * RH_KABI_USE(2, 3, int c[3]) -+ * RH_KABI_RESERVE(4) -+ * }; -+ * -+ * RH_KABI_USE_SPLIT -+ * Works the same as RH_KABI_USE but replaces a single reserved field by -+ * multiple new fields. -+ * -+ * RH_KABI_AUX_EMBED -+ * RH_KABI_AUX_PTR -+ * Adds an extenstion of a struct in the form of "auxiliary structure". -+ * This is done prior to kABI freeze for structs that cannot be expanded -+ * later using RH_KABI_EXTEND. See also RH_KABI_RESERVED, these two -+ * approaches can (and often are) combined. -+ * -+ * To use this for 'struct foo' (the "base structure"), define a new -+ * structure called 'struct foo_rh'; this new struct is called "auxiliary -+ * structure". Then add RH_KABI_AUX_EMBED or RH_KABI_AUX_PTR to the end -+ * of the base structure. The argument is the name of the base structure, -+ * without the 'struct' keyword. -+ * -+ * RH_KABI_AUX_PTR stores a pointer to the aux structure in the base -+ * struct. The lifecycle of the aux struct needs to be properly taken -+ * care of. -+ * -+ * RH_KABI_AUX_EMBED embeds the aux struct into the base struct. This -+ * cannot be used when the base struct is itself embedded into another -+ * struct, allocated in an array, etc. -+ * -+ * Both approaches (ptr and embed) work correctly even when the aux struct -+ * is allocated by modules. To ensure this, the code responsible for -+ * allocation/assignment of the aux struct has to properly set the size of -+ * the aux struct; see the RH_KABI_AUX_SET_SIZE and RH_KABI_AUX_INIT_SIZE -+ * macros. -+ * -+ * New fields can be later added to the auxiliary structure, always to its -+ * end. Note the auxiliary structure cannot be shrunk in size later (i.e., -+ * fields cannot be removed, only deprecated). Any code accessing fields -+ * from the aux struct must guard the access using the RH_KABI_AUX macro. -+ * The access itself is then done via a '_rh' field in the base struct. -+ * -+ * The auxiliary structure is not guaranteed for access by modules unless -+ * explicitly commented as such in the declaration of the aux struct -+ * itself or some of its elements. -+ * -+ * Example: -+ * -+ * struct foo_rh { -+ * int newly_added; -+ * }; -+ * -+ * struct foo { -+ * bool big_hammer; -+ * RH_KABI_AUX_PTR(foo) -+ * }; -+ * -+ * void use(struct foo *f) -+ * { -+ * if (RH_KABI_AUX(f, foo, newly_added)) -+ * f->_rh->newly_added = 123; -+ * else -+ * // the field 'newly_added' is not present in the passed -+ * // struct, fall back to old behavior -+ * f->big_hammer = true; -+ * } -+ * -+ * static struct foo_rh my_foo_rh { -+ * .newly_added = 0; -+ * } -+ * -+ * static struct foo my_foo = { -+ * .big_hammer = false, -+ * ._rh = &my_foo_rh, -+ * RH_KABI_AUX_INIT_SIZE(foo) -+ * }; -+ * -+ * RH_KABI_USE_AUX_PTR -+ * Creates an auxiliary structure post kABI freeze. This works by using -+ * two reserved fields (thus there has to be two reserved fields still -+ * available) and converting them to RH_KABI_AUX_PTR. -+ * -+ * Example: -+ * -+ * struct foo_rh { -+ * }; -+ * -+ * struct foo { -+ * int a; -+ * RH_KABI_RESERVE(1) -+ * RH_KABI_USE_AUX_PTR(2, 3, foo) -+ * }; -+ * -+ * RH_KABI_AUX_SET_SIZE -+ * RH_KABI_AUX_INIT_SIZE -+ * Calculates and stores the size of the auxiliary structure. -+ * -+ * RH_KABI_AUX_SET_SIZE is for dynamically allocated base structs, -+ * RH_KABI_AUX_INIT_SIZE is for statically allocated case structs. -+ * -+ * These macros must be called from the allocation (RH_KABI_AUX_SET_SIZE) -+ * or declaration (RH_KABI_AUX_INIT_SIZE) site, regardless of whether -+ * that happens in the kernel or in a module. Without calling one of -+ * these macros, the aux struct will appear to have no fields to the -+ * kernel. -+ * -+ * Note: since RH_KABI_AUX_SET_SIZE is intended to be invoked outside of -+ * a struct definition, it does not add the semicolon and must be -+ * terminated by semicolon by the caller. -+ * -+ * RH_KABI_AUX -+ * Verifies that the given field exists in the given auxiliary structure. -+ * This MUST be called prior to accessing that field; failing to do that -+ * may lead to invalid memory access. -+ * -+ * The first argument is a pointer to the base struct, the second argument -+ * is the name of the base struct (without the 'struct' keyword), the -+ * third argument is the field name. -+ * -+ * This macro works for structs extended by either of RH_KABI_AUX_EMBED, -+ * RH_KABI_AUX_PTR and RH_KABI_USE_AUX_PTR. -+ * -+ * RH_KABI_FORCE_CHANGE -+ * Force change of the symbol checksum. The argument of the macro is a -+ * version for cases we need to do this more than once. -+ * -+ * This macro does the opposite: it changes the symbol checksum without -+ * actually changing anything about the exported symbol. It is useful for -+ * symbols that are not whitelisted, we're changing them in an -+ * incompatible way and want to prevent 3rd party modules to silently -+ * corrupt memory. Instead, by changing the symbol checksum, such modules -+ * won't be loaded by the kernel. This macro should only be used as a -+ * last resort when all other KABI workarounds have failed. -+ * -+ * RH_KABI_EXCLUDE -+ * !!! WARNING: DANGEROUS, DO NOT USE unless you are aware of all the !!! -+ * !!! implications. This should be used ONLY EXCEPTIONALLY and only !!! -+ * !!! under specific circumstances. Very likely, this macro does not !!! -+ * !!! do what you expect it to do. Note that any usage of this macro !!! -+ * !!! MUST be paired with a RH_KABI_FORCE_CHANGE annotation of !!! -+ * !!! a suitable symbol (or an equivalent safeguard) and the commit !!! -+ * !!! log MUST explain why the chosen solution is appropriate. !!! -+ * -+ * Exclude the element from checksum generation. Any such element is -+ * considered not to be part of the kABI whitelist and may be changed at -+ * will. Note however that it's the responsibility of the developer -+ * changing the element to ensure 3rd party drivers using this element -+ * won't panic, for example by not allowing them to be loaded. That can -+ * be achieved by changing another, non-whitelisted symbol they use, -+ * either by nature of the change or by using RH_KABI_FORCE_CHANGE. -+ * -+ * Also note that any change to the element must preserve its size. Change -+ * of the size is not allowed and would constitute a silent kABI breakage. -+ * Beware that the RH_KABI_EXCLUDE macro does not do any size checks. -+ * -+ * RH_KABI_EXCLUDE_WITH_SIZE -+ * Like RH_KABI_EXCLUDE, this macro excludes the element from -+ * checksum generation. The same warnings as for RH_KABI_EXCLUDE -+ * apply: use RH_KABI_FORCE_CHANGE. -+ * -+ * This macro is intended to be used for elements embedded inside -+ * kABI-protected structures (struct, array). In contrast with -+ * RH_KABI_EXCLUDE, this macro reserves extra space, so that the -+ * embedded element can grow without changing the offsets of the -+ * fields that follow. The provided 'size' is the total space to be -+ * added in longs (i.e. it's 8 * 'size' bytes), including the size -+ * of the added element. It is automatically checked that the new -+ * element does not overflow the reserved space, now nor in the -+ * future. The size is also included in the checksum via the -+ * reserved space, to ensure that we don't accidentally change it, -+ * which would change the offsets of the fields that follow. -+ * -+ * RH_KABI_BROKEN_INSERT -+ * RH_KABI_BROKEN_REMOVE -+ * Insert a field to the middle of a struct / delete a field from a struct. -+ * Note that this breaks kABI! It can be done only when it's certain that -+ * no 3rd party driver can validly reach into the struct. A typical -+ * example is a struct that is: both (a) referenced only through a long -+ * chain of pointers from another struct that is part of a whitelisted -+ * symbol and (b) kernel internal only, it should have never been visible -+ * to genksyms in the first place. -+ * -+ * Another example are structs that are explicitly exempt from kABI -+ * guarantee but we did not have enough foresight to use RH_KABI_EXCLUDE. -+ * In this case, the warning for RH_KABI_EXCLUDE applies. -+ * -+ * A detailed explanation of correctness of every RH_KABI_BROKEN_* macro -+ * use is especially important. -+ * -+ * RH_KABI_BROKEN_INSERT_BLOCK -+ * RH_KABI_BROKEN_REMOVE_BLOCK -+ * A version of RH_KABI_BROKEN_INSERT / REMOVE that allows multiple fields -+ * to be inserted or removed together. All fields need to be terminated -+ * by ';' inside(!) the macro parameter. The macro itself must not be -+ * terminated by ';'. -+ * -+ * RH_KABI_BROKEN_REPLACE -+ * Replace a field by a different one without doing any checking. This -+ * allows replacing a field by another with a different size. Similarly -+ * to other RH_KABI_BROKEN macros, use of this indicates a kABI breakage. -+ * -+ * RH_KABI_BROKEN_INSERT_ENUM -+ * RH_KABI_BROKEN_REMOVE_ENUM -+ * Insert a field to the middle of an enumaration type / delete a field from -+ * an enumaration type. Note that this can break kABI especially if the -+ * number of enum fields is used in an array within a structure. It can be -+ * done only when it is certain that no 3rd party driver will use the -+ * enumeration type or a structure that embeds an array with size determined -+ * by an enumeration type. -+ * -+ * RH_KABI_EXTEND_ENUM -+ * Adds a new field to an enumeration type. This must always be added to -+ * the end of the enum. Before using this macro, make sure this is actually -+ * safe to do. -+ */ -+ -+#undef linux -+#define linux linux -+ -+#ifdef __GENKSYMS__ -+ -+# define RH_KABI_CONST -+# define RH_KABI_ADD_MODIFIER(_new) -+# define RH_KABI_EXTEND(_new) -+# define RH_KABI_FILL_HOLE(_new) -+# define RH_KABI_FORCE_CHANGE(ver) __attribute__((rh_kabi_change ## ver)) -+# define RH_KABI_RENAME(_orig, _new) _orig -+# define RH_KABI_HIDE_INCLUDE(_file) -+# define RH_KABI_FAKE_INCLUDE(_file) _file -+# define RH_KABI_BROKEN_INSERT(_new) -+# define RH_KABI_BROKEN_REMOVE(_orig) _orig; -+# define RH_KABI_BROKEN_INSERT_BLOCK(_new) -+# define RH_KABI_BROKEN_REMOVE_BLOCK(_orig) _orig -+# define RH_KABI_BROKEN_REPLACE(_orig, _new) _orig; -+# define RH_KABI_BROKEN_INSERT_ENUM(_new) -+# define RH_KABI_BROKEN_REMOVE_ENUM(_orig) _orig, -+# define RH_KABI_EXTEND_ENUM(_new) -+ -+# define _RH_KABI_DEPRECATE(_type, _orig) _type _orig -+# define _RH_KABI_DEPRECATE_FN(_type, _orig, _args...) _type (*_orig)(_args) -+# define _RH_KABI_REPLACE(_orig, _new) _orig -+# define _RH_KABI_EXCLUDE(_elem) -+ -+# define __RH_KABI_CHECK_SIZE(_item, _size) -+ -+#else -+ -+# define RH_KABI_ALIGN_WARNING ". Disable CONFIG_RH_KABI_SIZE_ALIGN_CHECKS if debugging." -+ -+# define RH_KABI_CONST const -+# define RH_KABI_ADD_MODIFIER(_new) _new -+# define RH_KABI_EXTEND(_new) _new; -+# define RH_KABI_FILL_HOLE(_new) _new; -+# define RH_KABI_FORCE_CHANGE(ver) -+# define RH_KABI_RENAME(_orig, _new) _new -+# define RH_KABI_HIDE_INCLUDE(_file) _file -+# define RH_KABI_FAKE_INCLUDE(_file) -+# define RH_KABI_BROKEN_INSERT(_new) _new; -+# define RH_KABI_BROKEN_REMOVE(_orig) -+# define RH_KABI_BROKEN_INSERT_BLOCK(_new) _new -+# define RH_KABI_BROKEN_REMOVE_BLOCK(_orig) -+# define RH_KABI_BROKEN_REPLACE(_orig, _new) _new; -+# define RH_KABI_BROKEN_INSERT_ENUM(_new) _new, -+# define RH_KABI_BROKEN_REMOVE_ENUM(_orig) -+# define RH_KABI_EXTEND_ENUM(_new) _new, -+ -+#if IS_BUILTIN(CONFIG_RH_KABI_SIZE_ALIGN_CHECKS) -+# define __RH_KABI_CHECK_SIZE_ALIGN(_orig, _new) \ -+ union { \ -+ _Static_assert(sizeof(struct{_new;}) <= sizeof(struct{_orig;}), \ -+ __FILE__ ":" __stringify(__LINE__) ": " __stringify(_new) " is larger than " __stringify(_orig) RH_KABI_ALIGN_WARNING); \ -+ _Static_assert(__alignof__(struct{_new;}) <= __alignof__(struct{_orig;}), \ -+ __FILE__ ":" __stringify(__LINE__) ": " __stringify(_orig) " is not aligned the same as " __stringify(_new) RH_KABI_ALIGN_WARNING); \ -+ } -+# define __RH_KABI_CHECK_SIZE(_item, _size) \ -+ _Static_assert(sizeof(struct{_item;}) <= _size, \ -+ __FILE__ ":" __stringify(__LINE__) ": " __stringify(_item) " is larger than the reserved size (" __stringify(_size) " bytes)" RH_KABI_ALIGN_WARNING); -+#else -+# define __RH_KABI_CHECK_SIZE_ALIGN(_orig, _new) -+# define __RH_KABI_CHECK_SIZE(_item, _size) -+#endif -+ -+#define RH_KABI_UNIQUE_ID __PASTE(rh_kabi_hidden_, __LINE__) -+ -+# define _RH_KABI_DEPRECATE(_type, _orig) _type rh_reserved_##_orig -+# define _RH_KABI_DEPRECATE_FN(_type, _orig, _args...) \ -+ _type (* rh_reserved_##_orig)(_args) -+# define _RH_KABI_REPLACE(_orig, _new) \ -+ union { \ -+ _new; \ -+ struct { \ -+ _orig; \ -+ } RH_KABI_UNIQUE_ID; \ -+ __RH_KABI_CHECK_SIZE_ALIGN(_orig, _new); \ -+ } -+ -+# define _RH_KABI_EXCLUDE(_elem) _elem -+ -+#endif /* __GENKSYMS__ */ -+ -+# define RH_KABI_DEPRECATE(_type, _orig) _RH_KABI_DEPRECATE(_type, _orig); -+# define RH_KABI_DEPRECATE_FN(_type, _orig, _args...) \ -+ _RH_KABI_DEPRECATE_FN(_type, _orig, _args); -+# define RH_KABI_REPLACE(_orig, _new) _RH_KABI_REPLACE(_orig, _new); -+ -+#define _RH_KABI_REPLACE1(_new) _new; -+#define _RH_KABI_REPLACE2(_new, ...) _new; _RH_KABI_REPLACE1(__VA_ARGS__) -+#define _RH_KABI_REPLACE3(_new, ...) _new; _RH_KABI_REPLACE2(__VA_ARGS__) -+#define _RH_KABI_REPLACE4(_new, ...) _new; _RH_KABI_REPLACE3(__VA_ARGS__) -+#define _RH_KABI_REPLACE5(_new, ...) _new; _RH_KABI_REPLACE4(__VA_ARGS__) -+#define _RH_KABI_REPLACE6(_new, ...) _new; _RH_KABI_REPLACE5(__VA_ARGS__) -+#define _RH_KABI_REPLACE7(_new, ...) _new; _RH_KABI_REPLACE6(__VA_ARGS__) -+#define _RH_KABI_REPLACE8(_new, ...) _new; _RH_KABI_REPLACE7(__VA_ARGS__) -+#define _RH_KABI_REPLACE9(_new, ...) _new; _RH_KABI_REPLACE8(__VA_ARGS__) -+#define _RH_KABI_REPLACE10(_new, ...) _new; _RH_KABI_REPLACE9(__VA_ARGS__) -+#define _RH_KABI_REPLACE11(_new, ...) _new; _RH_KABI_REPLACE10(__VA_ARGS__) -+#define _RH_KABI_REPLACE12(_new, ...) _new; _RH_KABI_REPLACE11(__VA_ARGS__) -+ -+#define RH_KABI_REPLACE_SPLIT(_orig, ...) _RH_KABI_REPLACE(_orig, \ -+ struct { __PASTE(_RH_KABI_REPLACE, COUNT_ARGS(__VA_ARGS__))(__VA_ARGS__) }); -+ -+# define RH_KABI_RESERVE(n) _RH_KABI_RESERVE(n); -+ -+#define _RH_KABI_USE1(n, _new) _RH_KABI_RESERVE(n), _new -+#define _RH_KABI_USE2(n, ...) _RH_KABI_RESERVE(n); _RH_KABI_USE1(__VA_ARGS__) -+#define _RH_KABI_USE3(n, ...) _RH_KABI_RESERVE(n); _RH_KABI_USE2(__VA_ARGS__) -+#define _RH_KABI_USE4(n, ...) _RH_KABI_RESERVE(n); _RH_KABI_USE3(__VA_ARGS__) -+#define _RH_KABI_USE5(n, ...) _RH_KABI_RESERVE(n); _RH_KABI_USE4(__VA_ARGS__) -+#define _RH_KABI_USE6(n, ...) _RH_KABI_RESERVE(n); _RH_KABI_USE5(__VA_ARGS__) -+#define _RH_KABI_USE7(n, ...) _RH_KABI_RESERVE(n); _RH_KABI_USE6(__VA_ARGS__) -+#define _RH_KABI_USE8(n, ...) _RH_KABI_RESERVE(n); _RH_KABI_USE7(__VA_ARGS__) -+#define _RH_KABI_USE9(n, ...) _RH_KABI_RESERVE(n); _RH_KABI_USE8(__VA_ARGS__) -+#define _RH_KABI_USE10(n, ...) _RH_KABI_RESERVE(n); _RH_KABI_USE9(__VA_ARGS__) -+#define _RH_KABI_USE11(n, ...) _RH_KABI_RESERVE(n); _RH_KABI_USE10(__VA_ARGS__) -+#define _RH_KABI_USE12(n, ...) _RH_KABI_RESERVE(n); _RH_KABI_USE11(__VA_ARGS__) -+ -+#define _RH_KABI_USE(...) _RH_KABI_REPLACE(__VA_ARGS__) -+#define RH_KABI_USE(n, ...) _RH_KABI_USE(__PASTE(_RH_KABI_USE, COUNT_ARGS(__VA_ARGS__))(n, __VA_ARGS__)); -+ -+# define RH_KABI_USE_SPLIT(n, ...) RH_KABI_REPLACE_SPLIT(_RH_KABI_RESERVE(n), __VA_ARGS__) -+ -+# define _RH_KABI_RESERVE(n) unsigned long rh_reserved##n -+ -+#define RH_KABI_EXCLUDE(_elem) _RH_KABI_EXCLUDE(_elem); -+ -+#define RH_KABI_EXCLUDE_WITH_SIZE(_new, _size) \ -+ union { \ -+ RH_KABI_EXCLUDE(_new) \ -+ unsigned long RH_KABI_UNIQUE_ID[_size]; \ -+ __RH_KABI_CHECK_SIZE(_new, 8 * (_size)) \ -+ }; -+ -+#define RH_KABI_EXTEND_WITH_SIZE(_new, _size) \ -+ RH_KABI_EXTEND(union { \ -+ _new; \ -+ unsigned long RH_KABI_UNIQUE_ID[_size]; \ -+ __RH_KABI_CHECK_SIZE(_new, 8 * (_size)) \ -+ }) -+ -+#define _RH_KABI_AUX_PTR(_struct) \ -+ size_t _struct##_size_rh; \ -+ _RH_KABI_EXCLUDE(struct _struct##_rh *_rh) -+#define RH_KABI_AUX_PTR(_struct) \ -+ _RH_KABI_AUX_PTR(_struct); -+ -+#define _RH_KABI_AUX_EMBED(_struct) \ -+ size_t _struct##_size_rh; \ -+ _RH_KABI_EXCLUDE(struct _struct##_rh _rh) -+#define RH_KABI_AUX_EMBED(_struct) \ -+ _RH_KABI_AUX_EMBED(_struct); -+ -+#define RH_KABI_USE_AUX_PTR(n1, n2, _struct) \ -+ RH_KABI_USE(n1, n2, \ -+ struct { RH_KABI_AUX_PTR(_struct) }) -+ -+#define RH_KABI_AUX_SET_SIZE(_name, _struct) ({ \ -+ (_name)->_struct##_size_rh = sizeof(struct _struct##_rh); \ -+}) -+ -+#define RH_KABI_AUX_INIT_SIZE(_struct) \ -+ ._struct##_size_rh = sizeof(struct _struct##_rh), -+ -+#define RH_KABI_AUX(_ptr, _struct, _field) ({ \ -+ size_t __off = offsetof(struct _struct##_rh, _field); \ -+ (_ptr)->_struct##_size_rh > __off ? true : false; \ -+}) -+ -+#endif /* _LINUX_RH_KABI_H */ -diff --git a/include/linux/rh_waived.h b/include/linux/rh_waived.h -new file mode 100644 -index 000000000000..945dd71cc082 ---- /dev/null -+++ b/include/linux/rh_waived.h -@@ -0,0 +1,19 @@ -+/* SPDX-License-Identifier: GPL-2.0 */ -+/* -+ * include/linux/rh_waived.h -+ * -+ * rh_waived cmdline parameter interface. -+ * -+ * Copyright (C) 2024, Red Hat, Inc. Ricardo Robaina -+ */ -+#ifndef _RH_WAIVED_H -+#define _RH_WAIVED_H -+ -+enum rh_waived_feat { -+ /* RH_WAIVED_FEAT_ITEMS must always be the last item in the enum */ -+ RH_WAIVED_FEAT_ITEMS, -+}; -+ -+bool is_rh_waived(enum rh_waived_feat feat); -+ -+#endif /* _RH_WAIVED_H */ diff --git a/include/linux/rmi.h b/include/linux/rmi.h index ab7eea01ab42..fff7c5f737fc 100644 --- a/include/linux/rmi.h @@ -3425,149 +1916,6 @@ index 1390f1efb4f0..b9a8ccb1dbdc 100644 static inline int lsm_fill_user_ctx(struct lsm_ctx __user *uctx, u32 *uctx_len, void *val, size_t val_len, u64 id, u64 flags) -diff --git a/init/main.c b/init/main.c -index 206acdde51f5..2296734522f7 100644 ---- a/init/main.c -+++ b/init/main.c -@@ -1182,6 +1182,9 @@ static bool __init_or_module initcall_blacklisted(initcall_t fn) - */ - strreplace(fn_name, ' ', '\0'); - -+#ifdef CONFIG_RHEL_DIFFERENCES -+ init_rh_check_status(fn_name); -+#endif - list_for_each_entry(entry, &blacklisted_initcalls, next) { - if (!strcmp(fn_name, entry->buf)) { - pr_debug("initcall %s blacklisted\n", fn_name); -diff --git a/kernel/Makefile b/kernel/Makefile -index 3c13240dfc9f..dc6723d84302 100644 ---- a/kernel/Makefile -+++ b/kernel/Makefile -@@ -12,6 +12,7 @@ obj-y = fork.o exec_domain.o panic.o \ - notifier.o ksysfs.o cred.o reboot.o \ - async.o range.o smpboot.o ucount.o regset.o ksyms_common.o - -+obj-$(CONFIG_RHEL_DIFFERENCES) += rh_messages.o rh_flags.o rh_waived.o - obj-$(CONFIG_USERMODE_DRIVER) += usermode_driver.o - obj-$(CONFIG_MULTIUSER) += groups.o - obj-$(CONFIG_VHOST_TASK) += vhost_task.o -diff --git a/kernel/bpf/core.c b/kernel/bpf/core.c -index 7ee62e38faf0..63817aceb71f 100644 ---- a/kernel/bpf/core.c -+++ b/kernel/bpf/core.c -@@ -566,7 +566,12 @@ void bpf_prog_kallsyms_del_all(struct bpf_prog *fp) - /* All BPF JIT sysctl knobs here. */ - int bpf_jit_enable __read_mostly = IS_BUILTIN(CONFIG_BPF_JIT_DEFAULT_ON); - int bpf_jit_kallsyms __read_mostly = IS_BUILTIN(CONFIG_BPF_JIT_DEFAULT_ON); -+#ifdef CONFIG_RHEL_DIFFERENCES -+/* RHEL-only: set it to 1 by default */ -+int bpf_jit_harden __read_mostly = 1; -+#else - int bpf_jit_harden __read_mostly; -+#endif /* CONFIG_RHEL_DIFFERENCES */ - long bpf_jit_limit __read_mostly; - long bpf_jit_limit_max __read_mostly; - -diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c -index bf6c5f685ea2..649f2fccaddd 100644 ---- a/kernel/bpf/syscall.c -+++ b/kernel/bpf/syscall.c -@@ -26,6 +26,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -58,6 +59,23 @@ static DEFINE_SPINLOCK(map_idr_lock); - static DEFINE_IDR(link_idr); - static DEFINE_SPINLOCK(link_idr_lock); - -+static int __init unprivileged_bpf_setup(char *str) -+{ -+ unsigned long disabled; -+ if (!kstrtoul(str, 0, &disabled)) -+ sysctl_unprivileged_bpf_disabled = !!disabled; -+ -+ if (!sysctl_unprivileged_bpf_disabled) { -+ pr_warn("Unprivileged BPF has been enabled " -+ "(unprivileged_bpf_disabled=0 has been supplied " -+ "in boot parameters), tainting the kernel"); -+ add_taint(TAINT_UNPRIVILEGED_BPF, LOCKDEP_STILL_OK); -+ } -+ -+ return 1; -+} -+__setup("unprivileged_bpf_disabled=", unprivileged_bpf_setup); -+ - int sysctl_unprivileged_bpf_disabled __read_mostly = - IS_BUILTIN(CONFIG_BPF_UNPRIV_DEFAULT_OFF) ? 2 : 0; - -@@ -6033,6 +6051,11 @@ static int bpf_unpriv_handler(const struct ctl_table *table, int write, - if (write && !ret) { - if (locked_state && unpriv_enable != 1) - return -EPERM; -+ if (!unpriv_enable) { -+ pr_warn("Unprivileged BPF has been enabled, " -+ "tainting the kernel"); -+ add_taint(TAINT_UNPRIVILEGED_BPF, LOCKDEP_STILL_OK); -+ } - *(int *)table->data = unpriv_enable; - } - -diff --git a/kernel/module/main.c b/kernel/module/main.c -index 71396e297499..29e469418075 100644 ---- a/kernel/module/main.c -+++ b/kernel/module/main.c -@@ -65,6 +65,8 @@ - #define CREATE_TRACE_POINTS - #include - -+#include -+ - /* - * Mutex protects: - * 1) List of modules (also safely readable with preempt_disable), -@@ -530,6 +532,7 @@ static struct module_attribute modinfo_##field = { \ - - MODINFO_ATTR(version); - MODINFO_ATTR(srcversion); -+MODINFO_ATTR(rhelversion); - - static struct { - char name[MODULE_NAME_LEN + 1]; -@@ -982,6 +985,7 @@ struct module_attribute *modinfo_attrs[] = { - &module_uevent, - &modinfo_version, - &modinfo_srcversion, -+ &modinfo_rhelversion, - &modinfo_initstate, - &modinfo_coresize, - #ifdef CONFIG_ARCH_WANTS_MODULES_DATA_IN_VMALLOC -@@ -2828,6 +2832,11 @@ static int early_mod_check(struct load_info *info, int flags) - return -EPERM; - } - -+#ifdef CONFIG_RHEL_DIFFERENCES -+ if (get_modinfo(info, "intree")) -+ module_rh_check_status(info->name); -+#endif -+ - err = rewrite_section_headers(info, flags); - if (err) - return err; -@@ -3403,6 +3412,10 @@ void print_modules(void) - pr_cont(" [last unloaded: %s%s]", last_unloaded_module.name, - last_unloaded_module.taints); - pr_cont("\n"); -+ -+#ifdef CONFIG_RHEL_DIFFERENCES -+ rh_print_flags(); -+#endif - } - - #ifdef CONFIG_MODULE_DEBUGFS diff --git a/kernel/module/signing.c b/kernel/module/signing.c index a2ff4242e623..f0d2be1ee4f1 100644 --- a/kernel/module/signing.c @@ -3591,1045 +1939,6 @@ index a2ff4242e623..f0d2be1ee4f1 100644 } int module_sig_check(struct load_info *info, int flags) -diff --git a/kernel/panic.c b/kernel/panic.c -index 2a0449144f82..a8feef83d920 100644 ---- a/kernel/panic.c -+++ b/kernel/panic.c -@@ -508,6 +508,19 @@ const struct taint_flag taint_flags[TAINT_FLAGS_COUNT] = { - TAINT_FLAG(AUX, 'X', ' ', true), - TAINT_FLAG(RANDSTRUCT, 'T', ' ', true), - TAINT_FLAG(TEST, 'N', ' ', true), -+ TAINT_FLAG(19, '?', '-', false ), -+ TAINT_FLAG(20, '?', '-', false ), -+ TAINT_FLAG(21, '?', '-', false ), -+ TAINT_FLAG(22, '?', '-', false ), -+ TAINT_FLAG(23, '?', '-', false ), -+ TAINT_FLAG(24, '?', '-', false ), -+ TAINT_FLAG(25, '?', '-', false ), -+ TAINT_FLAG(PARTNER_SUPPORTED, 'p', ' ', true ), -+ TAINT_FLAG(SUPPORT_REMOVED, 'h', ' ', false ), -+ TAINT_FLAG(RESERVED28, '?', '-', false ), -+ TAINT_FLAG(RESERVED29, '?', '-', false ), -+ TAINT_FLAG(RESERVED30, '?', '-', false ), -+ TAINT_FLAG(UNPRIVILEGED_BPF, 'u', ' ', false ), - }; - - #undef TAINT_FLAG -diff --git a/kernel/rh_flags.c b/kernel/rh_flags.c -new file mode 100644 -index 000000000000..10d26958f840 ---- /dev/null -+++ b/kernel/rh_flags.c -@@ -0,0 +1,115 @@ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#define RH_FLAG_NAME_LEN 32 -+#define MAX_RH_FLAGS 128 -+#define MAX_RH_FLAG_NAME_LEN (MAX_RH_FLAGS * RH_FLAG_NAME_LEN) -+ -+struct rh_flag { -+ struct list_head list; -+ char name[RH_FLAG_NAME_LEN]; -+}; -+ -+static LIST_HEAD(rh_flag_list); -+static DEFINE_SPINLOCK(rh_flag_lock); -+ -+bool __rh_add_flag(const char *flag_name) -+{ -+ struct rh_flag *feat, *iter; -+ -+ BUG_ON(in_interrupt()); -+ feat = kzalloc(sizeof(*feat), GFP_ATOMIC); -+ if (WARN(!feat, "Adding Red Hat flag %s.\n", flag_name)) -+ return false; -+ strscpy(feat->name, flag_name, RH_FLAG_NAME_LEN); -+ -+ spin_lock(&rh_flag_lock); -+ list_for_each_entry_rcu(iter, &rh_flag_list, list) { -+ if (!strcmp(iter->name, flag_name)) { -+ kfree(feat); -+ feat = NULL; -+ break; -+ } -+ } -+ if (feat) -+ list_add_rcu(&feat->list, &rh_flag_list); -+ spin_unlock(&rh_flag_lock); -+ -+ if (feat) -+ pr_info("Adding Red Hat flag %s.\n", flag_name); -+ return true; -+} -+EXPORT_SYMBOL(__rh_add_flag); -+ -+void rh_print_flags(void) -+{ -+ struct rh_flag *feat; -+ -+ /* -+ * This function cannot do any locking, we're oopsing. Traversing -+ * rh_flag_list is okay, though, even without the rcu_read_lock -+ * taken: we never delete from that list and thus don't need the -+ * delayed free. All we need are the smp barriers invoked by the rcu -+ * list manipulation routines. -+ */ -+ if (list_empty(&rh_flag_list)) -+ return; -+ printk(KERN_DEFAULT "Red Hat flags:"); -+ list_for_each_entry_lockless(feat, &rh_flag_list, list) { -+ pr_cont(" %s", feat->name); -+ } -+ pr_cont("\n"); -+} -+EXPORT_SYMBOL(rh_print_flags); -+ -+#ifdef CONFIG_SYSCTL -+static int rh_flags_show(const struct ctl_table *ctl, int write, -+ void __user *buffer, size_t *lenp, -+ loff_t *ppos) -+{ -+ struct ctl_table tbl = { .maxlen = MAX_RH_FLAG_NAME_LEN, }; -+ struct rh_flag *feat; -+ size_t offs = 0; -+ int ret; -+ -+ tbl.data = kmalloc(tbl.maxlen, GFP_KERNEL); -+ if (!tbl.data) -+ return -ENOMEM; -+ ((char *)tbl.data)[0] = '\0'; -+ -+ rcu_read_lock(); -+ list_for_each_entry_rcu(feat, &rh_flag_list, list) { -+ offs += scnprintf(tbl.data + offs, tbl.maxlen - offs, "%s%s", -+ offs == 0 ? "" : " ", feat->name); -+ } -+ rcu_read_unlock(); -+ -+ ret = proc_dostring(&tbl, write, buffer, lenp, ppos); -+ kfree(tbl.data); -+ return ret; -+} -+ -+static struct ctl_table rh_flags_table[] = { -+ { -+ .procname = "rh_flags", -+ .data = &rh_flag_list, -+ .maxlen = MAX_RH_FLAG_NAME_LEN, -+ .mode = 0444, -+ .proc_handler = rh_flags_show, -+ }, -+}; -+#endif -+ -+static __init int rh_flags_init(void) -+{ -+#ifdef CONFIG_SYSCTL -+ register_sysctl_init("kernel", rh_flags_table); -+#endif -+ return 0; -+} -+subsys_initcall(rh_flags_init); -diff --git a/kernel/rh_messages.c b/kernel/rh_messages.c -new file mode 100644 -index 000000000000..bb69e8965748 ---- /dev/null -+++ b/kernel/rh_messages.c -@@ -0,0 +1,414 @@ -+/* -+ * The following functions are used by Red Hat to indicate to users that -+ * hardware and drivers are unsupported, or have limited support in RHEL major -+ * and minor releases. These functions output loud warning messages to the end -+ * user and should be USED WITH CAUTION. -+ * -+ * Any use of these functions _MUST_ be documented in the RHEL Release Notes, -+ * and have approval of management. -+ * -+ * Generally, the process of disabling a driver or device in RHEL requires the -+ * driver or device to be marked as 'deprecated' in all existing releases, and -+ * then either 'unmaintained' or 'disabled' in a future release. -+ * -+ * In general, deprecated and unmaintained drivers continue to receive security -+ * related fixes until they are disabled. -+ */ -+ -+#include -+#include -+#include -+#include "rh_messages.h" -+ -+/** -+ * mark_hardware_unmaintained() - Mark hardware as unmaintained. -+ * @driver_name: driver name -+ * @fmt: format for device description -+ * @...: args for device description -+ * -+ * Called to notify users that the device will no longer be tested on a routine -+ * basis and driver code associated with this device is no longer being updated. -+ * Red Hat may, at their own discretion, fix security-related and critical -+ * issues. Support for this device will be disabled in a future major release -+ * and users deploying this device should plan to replace the device in -+ * production systems. -+ * -+ * This function should be used when the driver's usage can be tied to a -+ * specific hardware device. For example, a network device driver loading on a -+ * specific device that is no longer maintained by the manufacturer. -+ * -+ * Reserved for Internal Red Hat use only. -+ */ -+void __maybe_unused mark_hardware_unmaintained(const char *driver_name, char *fmt, ...) -+{ -+ char device_description[DEV_DESC_LEN]; -+ va_list args; -+ -+ va_start(args, fmt); -+ vsnprintf(device_description, DEV_DESC_LEN, fmt, args); -+ pr_crit(RH_UNMAINT_HW, -+ driver_name, device_description); -+ va_end(args); -+} -+EXPORT_SYMBOL(mark_hardware_unmaintained); -+ -+/** -+ * mark_hardware_deprecated() - Mark hardware as deprecated. -+ * @driver_name: driver name -+ * @fmt: format for device description -+ * @...: args for device description -+ * -+ * Called to notify users that support for the device is planned to be -+ * unmaintained in a future major release, and will eventually be disabled in a -+ * future major release. This device should not be used in new production -+ * environments and users should replace the device in production systems. -+ * -+ * This function should be used when the driver's usage can be tied to a -+ * specific hardware device. For example, a network device driver loading on a -+ * specific device that is no longer maintained by the manufacturer. -+ * -+ * Reserved for Internal Red Hat use only. -+ */ -+void __maybe_unused mark_hardware_deprecated(const char *driver_name, char *fmt, ...) -+{ -+ char device_description[DEV_DESC_LEN]; -+ va_list args; -+ -+ va_start(args, fmt); -+ vsnprintf(device_description, DEV_DESC_LEN, fmt, args); -+ pr_crit(RH_DEPRECATED_HW, -+ driver_name, device_description); -+ va_end(args); -+} -+ -+/** -+ * mark_hardware_disabled() - Mark a driver as removed. -+ * @driver_name: driver name -+ * @fmt: format for device description -+ * @...: args for device description -+ * -+ * Called to notify users that a device's support has been completely disabled -+ * and no future support updates will occur. This device cannot be used in new -+ * production environments, and users must replace the device in production -+ * systems. -+ * -+ * This function should be used when the driver's usage can be tied to a -+ * specific hardware device. For example, a network device driver loading on a -+ * specific device that is no longer maintained by the manufacturer. -+ * -+ * Reserved for Internal Red Hat use only. -+ */ -+static void __maybe_unused mark_hardware_disabled(const char *driver_name, char *fmt, ...) -+{ -+ char device_description[DEV_DESC_LEN]; -+ va_list args; -+ -+ va_start(args, fmt); -+ vsnprintf(device_description, DEV_DESC_LEN, fmt, args); -+ pr_crit(RH_DISABLED_HW, -+ driver_name, device_description); -+ va_end(args); -+} -+ -+#ifdef CONFIG_PCI -+/** -+ * pci_hw_deprecated() - Mark a PCI device deprecated. -+ * @dev: the PCI device structure to match against -+ * -+ * Called to check if this @dev is in the list of deprecated devices. -+ * -+ * Reserved for Internal Red Hat use only. -+ */ -+static void __maybe_unused pci_hw_deprecated(struct pci_dev *dev) -+{ -+ const struct pci_device_id *ret = pci_match_id(rh_deprecated_pci_devices, dev); -+ -+ if (!ret) -+ return; -+ -+ mark_hardware_deprecated(dev_driver_string(&dev->dev), "%04X:%04X @ %s", -+ dev->device, dev->vendor, pci_name(dev)); -+} -+ -+/** -+ * pci_hw_unmaintained() - Mark a PCI device unmaintained. -+ * @dev: the PCI device structure to match against -+ * -+ * Called to check if this @dev is in the list of unmaintained devices. -+ * -+ * Reserved for Internal Red Hat use only. -+ */ -+static void pci_hw_unmaintained(struct pci_dev *dev) -+{ -+ const struct pci_device_id *ret = pci_match_id(rh_unmaintained_pci_devices, dev); -+ -+ if (!ret) -+ return; -+ -+ mark_hardware_unmaintained(dev_driver_string(&dev->dev), "%04X:%04X @ %s", -+ dev->device, dev->vendor, pci_name(dev)); -+} -+ -+/** -+ * pci_hw_disabled() - Mark a PCI device disabled. -+ * @dev: the PCI device structure to match against -+ * -+ * Called to check if this @dev is in the list of disabled devices. -+ * -+ * Reserved for Internal Red Hat use only. -+ */ -+static bool __maybe_unused pci_hw_disabled(struct pci_dev *dev) -+{ -+ const struct pci_device_id *ret = pci_match_id(rh_disabled_pci_devices, dev); -+ -+ if (!ret) -+ return false; -+ -+ mark_hardware_disabled(dev_driver_string(&dev->dev), "%04X:%04X @ %s", -+ dev->device, dev->vendor, pci_name(dev)); -+ return true; -+} -+#endif -+ -+/** -+ * driver_unmaintained() - check to see if a driver is unmaintained -+ * @module_name: module name -+ * -+ * Called to notify users that a driver will no longer be tested on a routine -+ * basis and the driver code is no longer being updated. Red Hat may fix -+ * security-related and critical issues. Support for this driver will be -+ * disabled in a future major release, and users should replace any affected -+ * devices in production systems. -+ * -+ * This function should be used when a driver's usage cannot be tied to a -+ * specific hardware device. For example, a network bonding driver or a higher -+ * level storage layer driver that is no longer maintained upstream. -+ * -+ * Reserved for Internal Red Hat use only. -+ */ -+static void __maybe_unused driver_unmaintained(const char* module_name) -+{ -+ int i = 0; -+ -+ while (rh_unmaintained_drivers[i]) { -+ if (strcmp(rh_unmaintained_drivers[i], module_name) == 0) { -+ pr_crit(RH_UNMAINT_DR, module_name); -+ return; -+ } -+ i++; -+ } -+} -+ -+/** -+ * driver_deprecated() - check to see if a driver is deprecated -+ * @driver_name: module name -+ * -+ * Called to notify users that support for this driver is planned to be -+ * unmaintained in a future major release, and will eventually be disabled in a -+ * future major release. This driver should not be used in new production -+ * environments and users should replace any affected devices in production -+ * systems. -+ * -+ * This function should be used when a driver's usage cannot be tied to a -+ * specific hardware device. For example, a network bonding driver or a higher -+ * level storage layer driver that is no longer maintained upstream. -+ * -+ * Reserved for Internal Red Hat use only. -+ */ -+static void __maybe_unused driver_deprecated(const char* module_name) -+{ -+ int i = 0; -+ -+ while (rh_deprecated_drivers[i]) { -+ if (strcmp(rh_deprecated_drivers[i], module_name) == 0) { -+ pr_crit(RH_DEPRECATED_DR, module_name); -+ return; -+ } -+ i++; -+ } -+} -+ -+/* There is no driver_disabled() function. Disabled drivers are configured off ;). */ -+ -+/** -+ * init_fn_unmaintained - check to see if a built-in driver is unmaintained. -+ * @fn_name: module's module_init function name -+ * -+ * Called to notify users that a built-in driver will no longer be tested on a routine -+ * basis and the built-in driver code is no longer being updated. Red Hat may fix -+ * security-related and critical issues. Support for this built-in driver will be -+ * disabled in a future major release, and users should replace any affected -+ * devices in production systems. -+ * -+ * This function should be used when a built-in driver's usage cannot be tied to a -+ * specific hardware device. For example, a network bonding driver or a higher -+ * level storage layer driver that is no longer maintained upstream. -+ * -+ * Reserved for Internal Red Hat use only. -+ */ -+ -+static void __maybe_unused init_fn_unmaintained(char* fn_name) -+{ -+ int i = 0; -+ -+ while (rh_unmaintained_init_fns[i]) { -+ if (strcmp(rh_unmaintained_init_fns[i], fn_name) == 0) { -+ pr_crit(RH_UNMAINT_DR, fn_name); -+ return; -+ } -+ i++; -+ } -+} -+ -+/** -+ * init_fn_deprecated() - check to see if a built-in driver is deprecated -+ * @fn_name: module's module_init function name -+ * -+ * Called to notify users that support for this built-in driver is planned to be -+ * unmaintained in a future major release, and will eventually be disabled in a -+ * future major release. This driver should not be used in new production -+ * environments and users should replace any affected devices in production -+ * systems. -+ * -+ * This function should be used when a built-in driver's usage cannot be tied to a -+ * specific hardware device. For example, a network bonding driver or a higher -+ * level storage layer driver that is no longer maintained upstream. -+ * -+ * Reserved for Internal Red Hat use only. -+ */ -+static void __maybe_unused init_fn_deprecated(char* fn_name) -+{ -+ int i = 0; -+ -+ while (rh_deprecated_init_fns[i]) { -+ if (strcmp(rh_deprecated_init_fns[i], fn_name) == 0) { -+ pr_crit(RH_DEPRECATED_DR, fn_name); -+ return; -+ } -+ i++; -+ } -+} -+ -+/** -+ * mark_tech_preview() - Mark driver or kernel subsystem as 'Tech Preview' -+ * @msg: Driver or kernel subsystem name -+ * -+ * Called to minimize the support status of a new driver. This does TAINT the -+ * kernel. Calling this function indicates that the driver or subsystem has -+ * had limited testing and is not marked for full support within this RHEL -+ * minor release. The next RHEL minor release may contain full support for -+ * this driver. Red Hat does not guarantee that bugs reported against this -+ * driver or subsystem will be resolved. -+ * -+ * Reserved for Internal Red Hat use only. -+ */ -+void __maybe_unused mark_tech_preview(const char *msg, struct module *mod) -+{ -+ const char *str = NULL; -+ -+ if (msg) -+ str = msg; -+#ifdef CONFIG_MODULES -+ else if (mod) -+ str = mod->name; -+#endif -+ -+ pr_warn(RH_TECH_PREVIEW, (str ? str : "kernel")); -+ add_taint(TAINT_AUX, LOCKDEP_STILL_OK); -+#ifdef CONFIG_MODULES -+ if (mod) -+ mod->taints |= (1U << TAINT_AUX); -+#endif -+} -+EXPORT_SYMBOL(mark_tech_preview); -+ -+/** -+ * mark_partner_supported() - Mark driver or kernel subsystem as 'Partner Supported' -+ * @msg: Driver or kernel subsystem name -+ * -+ * Called to minimize the support status of a new driver. This does TAINT the -+ * kernel. Calling this function indicates that the driver or subsystem -+ * is not supported directly by Red Hat but by a partner engineer. -+ * -+ * Reserved for Internal Red Hat use only. -+ */ -+void __maybe_unused mark_partner_supported(const char *msg, struct module *mod) -+{ -+ const char *str = NULL; -+ -+ if (msg) -+ str = msg; -+#ifdef CONFIG_MODULES -+ else if (mod) -+ str = mod->name; -+#endif -+ -+ pr_warn(RH_PARTNER_SUPPORTED, (str ? str : "kernel")); -+ add_taint(TAINT_PARTNER_SUPPORTED, LOCKDEP_STILL_OK); -+#ifdef CONFIG_MODULES -+ if (mod) -+ mod->taints |= (1U << TAINT_PARTNER_SUPPORTED); -+#endif -+} -+EXPORT_SYMBOL(mark_partner_supported); -+ -+/* -+ * -+ * Functions called by 'main' kernel code. -+ * -+ */ -+ -+#ifdef CONFIG_PCI -+/** -+ * pci_rh_check_status - checks the status of a PCI device. -+ * @pci_dev: PCI device to be examined -+ * -+ * This function is called by the PCI driver subsystem to check the status of a -+ * PCI device. -+ * -+ * This function returns true if the PCI device is disabled, and false otherwise. -+ * -+ * Reserved for Internal Red Hat use only. -+ */ -+bool __maybe_unused pci_rh_check_status(struct pci_dev *pci_dev) -+{ -+ if (pci_dev->driver->driver.owner != NULL) { -+ if (!test_bit(TAINT_OOT_MODULE, &pci_dev->driver->driver.owner->taints)) { -+ pci_hw_unmaintained(pci_dev); -+ pci_hw_deprecated(pci_dev); -+ return pci_hw_disabled(pci_dev); -+ } -+ } -+ return false; -+} -+#endif -+ -+/** module_rh_check_status - checks the status of a module. -+ * @module_name: Name of module to be examined -+ * -+ * This function is called by the module loading code to check the status of a -+ * module. -+ * -+ * Reserved for Internal Red Hat use only. -+ */ -+void __maybe_unused module_rh_check_status(const char * module_name) -+{ -+ driver_unmaintained(module_name); -+ driver_deprecated(module_name); -+} -+ -+/** -+ * init_rh_check_status - checks the status of a built-in module. -+ * @fn_name: init function of module to be examined -+ * -+ * This function is called by the init code to check the status of a built-in module. -+ * When a module is built-in, the module_init() function is converted into an initcall. -+ * The initcall is the called during boot with the other system initcalls. -+ * -+ * Reserved for Internal Red Hat use only. -+ */ -+void __maybe_unused init_rh_check_status(char *fn_name) -+{ -+ init_fn_deprecated(fn_name); -+ init_fn_unmaintained(fn_name); -+} -diff --git a/kernel/rh_messages.h b/kernel/rh_messages.h -new file mode 100644 -index 000000000000..3ac7e00e0def ---- /dev/null -+++ b/kernel/rh_messages.h -@@ -0,0 +1,325 @@ -+/* -+ * WARNING: This file is auto-generated by an internal Red Hat script and, -+ * in general, should not be modified by hand. -+ * See: https://gitlab.com/redhat/rhel/src/kernel/hardware-removal-support -+ */ -+ -+/* -+ * The following tables are used by Red Hat to define what hardware and drivers -+ * are unsupported, or have limited support in RHEL major and minor releases. -+ * -+ * Generally, the process of disabling a driver or device in RHEL requires the -+ * driver or device to be marked as 'deprecated' in all existing releases, and -+ * then either 'unmaintained' or 'disabled' in a future release. -+ * -+ * In general, deprecated and unmaintained drivers continue to receive security -+ * related fixes until they are disabled. -+ */ -+ -+#ifndef __RH_MESSAGES_H -+#define __RH_MESSAGES_H -+ -+#include -+#include -+ -+#define DEV_DESC_LEN 256 -+ -+#define RH_UNMAINT_HW "Warning: Unmaintained Hardware is detected: %s:%s\n" -+ -+#define RH_UNMAINT_DR "Warning: Unmaintained driver is detected: %s\n" -+ -+#define RH_DEPRECATED_HW "Warning: Deprecated Hardware is detected: %s:%s " \ -+ "will not be maintained in a future major release " \ -+ "and may be disabled\n" -+ -+#define RH_DEPRECATED_DR "Warning: Deprecated Driver is detected: %s will " \ -+ "not be maintained in a future major release and " \ -+ "may be disabled\n" -+ -+#define RH_DISABLED_HW "Warning: Disabled Hardware is detected: %s:%s is " \ -+ "no longer enabled in this release.\n" -+ -+#define RH_TECH_PREVIEW "TECH PREVIEW: %s may not be fully supported.\n" \ -+ "Please review provided documentation for " \ -+ "limitations.\n" -+ -+#define RH_PARTNER_SUPPORTED "Warning: %s is a Partner supported GPL " \ -+ "module and not supported directly by Red Hat.\n" -+ -+static const char *rh_deprecated_drivers[] = { -+ 0 /* Terminating entry */ -+}; -+ -+static const char *rh_deprecated_init_fns[] = { -+ 0 /* Terminating entry */ -+}; -+ -+static const char *rh_unmaintained_drivers[] = { -+ "aacraid", -+ "af_key", -+ "arp_tables", -+ "bnx2", -+ "bnx2fc", -+ "bnx2i", -+ "bnx2x", -+ "cnic", -+ "dl2k", -+ "e1000", -+ "ebtables", -+ "hdlc_fr", -+ "hpsa", -+ "ip6_tables", -+ "ip_set", -+ "ip_tables", -+ "mptbase", -+ "mptsas", -+ "mptscsih", -+ "mptspi", -+ "myri10ge", -+ "netxen_nic", -+ "nft_compat", -+ "nicpf", -+ "nicvf", -+ "nvmet-fc", -+ "nvmet-tcp", -+ "team", -+ 0 /* Terminating entry */ -+}; -+ -+static const char *rh_unmaintained_init_fns[] = { -+ "bnx2_pci_driver_init", -+ "e1000_init_module", -+ "rio_driver_init", -+ "hpsa_init", -+ "fusion_init", -+ "mptsas_init", -+ "fusion_init", -+ "mptspi_init", -+ "myri10ge_init_module", -+ "netxen_init_module", -+ "hdlc_fr_init", -+ "nvmet_fc_init_module", -+ "nvmet_tcp_init", -+ "team_module_init", -+ "ebtables_init", -+ "arp_tables_init", -+ "ip_tables_init", -+ "ip6_tables_init", -+ "ip_set_init", -+ "nft_compat_module_init", -+ "nicvf_init_module", -+ "nic_init_module", -+ "ipsec_pfkey_init", -+ "aac_init", -+ "cnic_init", -+ "bnx2x_init", -+ "bnx2fc_mod_init", -+ "bnx2i_mod_init", -+ 0 /* Terminating entry */ -+}; -+ -+static const struct pci_device_id rh_deprecated_pci_devices[] = { -+ {0} /* Terminating entry */ -+}; -+ -+static const struct pci_device_id rh_disabled_pci_devices[] = { -+ { 0x1011, 0x0046, 0x103c, 0x10c2 }, -+ { 0x1011, 0x0046, 0x9005, 0x0364 }, -+ { 0x1011, 0x0046, 0x9005, 0x0365 }, -+ { 0x1011, 0x0046, 0x9005, 0x1364 }, -+ { 0x1028, 0x0001, 0x1028, 0x0001 }, -+ { 0x1028, 0x0002, 0x1028, 0x0002 }, -+ { 0x1028, 0x0002, 0x1028, 0x00d1 }, -+ { 0x1028, 0x0002, 0x1028, 0x00d9 }, -+ { 0x1028, 0x0003, 0x1028, 0x0003 }, -+ { 0x1028, 0x0004, 0x1028, 0x00d0 }, -+ { 0x1028, 0x000a, 0x1028, 0x0106 }, -+ { 0x1028, 0x000a, 0x1028, 0x011b }, -+ { 0x1028, 0x000a, 0x1028, 0x0121 }, -+ { 0x9005, 0x0200, 0x9005, 0x0200 }, -+ { 0x9005, 0x0283, 0x9005, 0x0283 }, -+ { 0x9005, 0x0284, 0x9005, 0x0284 }, -+ { 0x9005, 0x0285, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x9005, 0x0285, 0x1014, 0x02F2 }, -+ { 0x9005, 0x0285, 0x1014, 0x0312 }, -+ { 0x9005, 0x0285, 0x1028, PCI_ANY_ID }, -+ { 0x9005, 0x0285, 0x1028, 0x0287 }, -+ { 0x9005, 0x0285, 0x103C, 0x3227 }, -+ { 0x9005, 0x0285, 0x17aa, PCI_ANY_ID }, -+ { 0x9005, 0x0285, 0x17aa, 0x0286 }, -+ { 0x9005, 0x0285, 0x17aa, 0x0287 }, -+ { 0x9005, 0x0285, 0x9005, 0x0285 }, -+ { 0x9005, 0x0285, 0x9005, 0x0286 }, -+ { 0x9005, 0x0285, 0x9005, 0x0287 }, -+ { 0x9005, 0x0285, 0x9005, 0x0288 }, -+ { 0x9005, 0x0285, 0x9005, 0x0289 }, -+ { 0x9005, 0x0285, 0x9005, 0x028a }, -+ { 0x9005, 0x0285, 0x9005, 0x028b }, -+ { 0x9005, 0x0285, 0x9005, 0x028e }, -+ { 0x9005, 0x0285, 0x9005, 0x028f }, -+ { 0x9005, 0x0285, 0x9005, 0x0290 }, -+ { 0x9005, 0x0285, 0x9005, 0x0291 }, -+ { 0x9005, 0x0285, 0x9005, 0x0292 }, -+ { 0x9005, 0x0285, 0x9005, 0x0293 }, -+ { 0x9005, 0x0285, 0x9005, 0x0294 }, -+ { 0x9005, 0x0285, 0x9005, 0x0296 }, -+ { 0x9005, 0x0285, 0x9005, 0x0297 }, -+ { 0x9005, 0x0285, 0x9005, 0x0298 }, -+ { 0x9005, 0x0285, 0x9005, 0x0299 }, -+ { 0x9005, 0x0285, 0x9005, 0x029a }, -+ { 0x9005, 0x0285, 0x9005, 0x02a4 }, -+ { 0x9005, 0x0285, 0x9005, 0x02a5 }, -+ { 0x9005, 0x0286, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x9005, 0x0286, 0x1014, 0x9540 }, -+ { 0x9005, 0x0286, 0x1014, 0x9580 }, -+ { 0x9005, 0x0286, 0x9005, 0x028c }, -+ { 0x9005, 0x0286, 0x9005, 0x028d }, -+ { 0x9005, 0x0286, 0x9005, 0x029b }, -+ { 0x9005, 0x0286, 0x9005, 0x029c }, -+ { 0x9005, 0x0286, 0x9005, 0x029d }, -+ { 0x9005, 0x0286, 0x9005, 0x029e }, -+ { 0x9005, 0x0286, 0x9005, 0x029f }, -+ { 0x9005, 0x0286, 0x9005, 0x02a0 }, -+ { 0x9005, 0x0286, 0x9005, 0x02a1 }, -+ { 0x9005, 0x0286, 0x9005, 0x02a2 }, -+ { 0x9005, 0x0286, 0x9005, 0x02a3 }, -+ { 0x9005, 0x0286, 0x9005, 0x02a6 }, -+ { 0x9005, 0x0286, 0x9005, 0x0800 }, -+ { 0x9005, 0x0287, 0x9005, 0x0800 }, -+ { 0x9005, 0x0288, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x19a2, 0x0222, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x19a2, 0x0712, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x19a2, 0x212, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x19a2, 0x702, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x19a2, 0x703, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x19a2, 0x0700, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x19a2, 0x0211, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x19a2, 0x0710, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x19a2, 0x0221, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x19a2, 0xe220, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x10df, 0x1ae5, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x10df, 0xe100, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x10df, 0xe131, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x10df, 0xe180, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x10df, 0xe260, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x10df, 0xf095, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x10df, 0xf098, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x10df, 0xf0a1, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x10df, 0xf0a5, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x10df, 0xf0d1, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x10df, 0xf0d5, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x10df, 0xf0e1, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x10df, 0xf0e5, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x10df, 0xf0f5, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x10df, 0xf0f6, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x10df, 0xf0f7, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x10df, 0xf180, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x10df, 0xf700, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x10df, 0xf800, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x10df, 0xf900, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x10df, 0xf980, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x10df, 0xfa00, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x10df, 0xfb00, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x10df, 0xfc00, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x10df, 0xfc10, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x10df, 0xfc20, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x10df, 0xfc50, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x10df, 0xfd00, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x10df, 0xfd11, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x10df, 0xfd12, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x10df, 0xfe00, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x10df, 0xfe05, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x10df, 0xfe11, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x10df, 0xfe12, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x19a2, 0x0704, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x19a2, 0x0714, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x1000, 0x0060, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x1000, 0x0078, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x1000, 0x007C, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x1000, 0x0411, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x1000, 0x0413, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x1028, 0x0015, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x15B3, 0x1002, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x15B3, 0x6340, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x15B3, 0x634A, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x15B3, 0x6354, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x15B3, 0x6368, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x15B3, 0x6372, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x15B3, 0x6732, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x15B3, 0x673C, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x15B3, 0x6746, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x15B3, 0x6750, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x15B3, 0x675A, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x15B3, 0x6764, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x15B3, 0x676E, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x15B3, 0x1003, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x15B3, 0x1004, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x15B3, 0x1005, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x15B3, 0x1006, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x15B3, 0x1007, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x15B3, 0x1008, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x15B3, 0x1009, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x15B3, 0x100a, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x15B3, 0x100b, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x15B3, 0x100c, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x15B3, 0x100d, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x15B3, 0x100e, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x15B3, 0x100f, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x15B3, 0x1010, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x1000, 0x0064, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x1000, 0x0065, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x1000, 0x0070, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x1000, 0x0072, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x1000, 0x0074, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x1000, 0x0076, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x1000, 0x0077, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x1000, 0x007E, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x1077, 0x2422, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x1077, 0x2432, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x1077, 0x5422, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x1077, 0x5432, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x1077, 0x8001, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x1077, 0x8021, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x1077, 0x8044, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x1077, 0x8432, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x1077, 0xF000, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x1077, 0x8022, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x1077, 0x8032, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x1077, 0x8042, PCI_ANY_ID, PCI_ANY_ID }, -+ {0} /* Terminating entry */ -+}; -+ -+static const struct pci_device_id rh_unmaintained_pci_devices[] = { -+ { 0x10df, 0xe220, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x10df, 0x0724, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x10df, 0xe200, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x10df, 0xf011, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x10df, 0xf015, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x10df, 0xf100, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x10df, 0xfc40, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x1000, 0x005b, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x1000, 0x0071, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x1000, 0x0073, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x1000, 0x0079, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x15B3, 0xA2DC, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x1000, 0x006E, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x1000, 0x0080, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x1000, 0x0081, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x1000, 0x0082, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x1000, 0x0083, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x1000, 0x0084, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x1000, 0x0085, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x1000, 0x0086, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x1000, 0x0087, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x177d, 0xa01e, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x177d, 0xa034, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x177d, 0x0011, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x1077, 0x2031, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x1077, 0x2532, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x1077, 0x8031, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x1924, 0x0803, PCI_ANY_ID, PCI_ANY_ID }, -+ { 0x1924, 0x0813, PCI_ANY_ID, PCI_ANY_ID }, -+ {0} /* Terminating entry */ -+}; -+ -+#endif /* __RH_MESSAGES_H */ -diff --git a/kernel/rh_waived.c b/kernel/rh_waived.c -new file mode 100644 -index 000000000000..84e22b1730cc ---- /dev/null -+++ b/kernel/rh_waived.c -@@ -0,0 +1,104 @@ -+/* SPDX-License-Identifier: GPL-2.0 */ -+/* -+ * kernel/rh_waived.c -+ * -+ * rh_waived cmdline parameter support. -+ * -+ * Copyright (C) 2024, Red Hat, Inc. Ricardo Robaina -+ */ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+/* -+ * RH_INSERT_WAIVED_FEAT -+ * This macro is intended to be used to insert items into the -+ * rh_waived_feat_list array. It expects to get an item from -+ * enum rh_waived_feat as its first argument, and a string -+ * holding the feature name as its second argument. -+ * -+ * The feature name is also utilized as the token for the -+ * boot parameter parser. -+ * -+ * Example usage: -+ * struct rh_waived_feat_item foo[RH_WAIVED_FEAT_ITEMS] = { -+ * RH_INSERT_WAIVED_FEAT(FOO_FEAT, "foo_feat_short_str"), -+ * }; -+ */ -+#define RH_INSERT_WAIVED_FEAT(enum_item, name) \ -+ [(enum_item)] = {.feat_name = (name), .enabled = 0,} -+ -+/* Indicates if the rh_flag 'rh_waived' should be added. */ -+bool __initdata add_rh_flag = false; -+ -+struct rh_waived_feat_item { -+ char *feat_name; -+ unsigned int enabled; -+}; -+ -+/* Always use the marco RH_INSERT_WAIVED_FEAT to insert items to this array. */ -+struct rh_waived_feat_item rh_waived_feat_list[RH_WAIVED_FEAT_ITEMS] = { -+}; -+ -+/* -+ * is_rh_waived() - Checks if a given waived feature has been enabled. -+ * -+ * @feat: waived feature. -+ */ -+__inline__ bool is_rh_waived(enum rh_waived_feat feat) -+{ -+ return !!rh_waived_feat_list[feat].enabled; -+} -+EXPORT_SYMBOL(is_rh_waived); -+ -+static int __init rh_waived_setup(char *s) -+{ -+ int i; -+ char *token; -+ -+ pr_info(KERN_CONT "rh_waived: "); -+ -+ if (!s) { -+ for (i = 0; i < RH_WAIVED_FEAT_ITEMS; i++) { -+ rh_waived_feat_list[i].enabled = 1; -+ pr_info(KERN_CONT "%s%s", rh_waived_feat_list[i].feat_name, -+ i < RH_WAIVED_FEAT_ITEMS - 1 ? " " : "\n"); -+ } -+ } -+ -+ while ((token = strsep(&s, ",")) != NULL) { -+ for (i = 0; i < RH_WAIVED_FEAT_ITEMS; i++) { -+ if (!strcmp(token, rh_waived_feat_list[i].feat_name)) { -+ rh_waived_feat_list[i].enabled = 1; -+ pr_info(KERN_CONT "%s%s", rh_waived_feat_list[i].feat_name, -+ i < RH_WAIVED_FEAT_ITEMS - 1 ? " " : "\n"); -+ } -+ } -+ } -+ -+ add_rh_flag = true; -+ -+ return 0; -+} -+early_param("rh_waived", rh_waived_setup); -+ -+/* -+ * rh_flags is initialized at subsys_initcall, calling rh_add_flag() -+ * from rh_waived_setup() would result in a can't boot situation. -+ * Deffering the inclusion 'rh_waived' rh_flag to late_initcall to -+ * avoid this issue. -+ */ -+static int __init __add_rh_flag(void) -+{ -+ if (add_rh_flag) -+ rh_add_flag("rh_waived"); -+ -+ return 0; -+} -+late_initcall(__add_rh_flag); -diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c -index d16d0ace2775..e0aab60d74c4 100644 ---- a/scripts/mod/modpost.c -+++ b/scripts/mod/modpost.c -@@ -25,6 +25,7 @@ - #include - #include "modpost.h" - #include "../../include/linux/license.h" -+#include "../../include/generated/uapi/linux/version.h" - - static bool module_enabled; - /* Are we using CONFIG_MODVERSIONS? */ -@@ -1931,6 +1932,12 @@ static void write_buf(struct buffer *b, const char *fname) - } - } - -+static void add_rhelversion(struct buffer *b, struct module *mod) -+{ -+ buf_printf(b, "MODULE_INFO(rhelversion, \"%d.%d\");\n", RHEL_MAJOR, -+ RHEL_MINOR); -+} -+ - static void write_if_changed(struct buffer *b, const char *fname) - { - char *tmp; -@@ -1991,6 +1998,7 @@ static void write_mod_c_file(struct module *mod) - add_depends(&buf, mod); - add_moddevtable(&buf, mod); - add_srcversion(&buf, mod); -+ add_rhelversion(&buf, mod); - - ret = snprintf(fname, sizeof(fname), "%s.mod.c", mod->name); - if (ret >= sizeof(fname)) { diff --git a/scripts/sign-file.c b/scripts/sign-file.c index 3edb156ae52c..0114ae1dbf7f 100644 --- a/scripts/sign-file.c diff --git a/sources b/sources index 66a2253c7..770f0687f 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ -SHA512 (linux-6.11.tar.xz) = bb8a228ff8fba36e3e2c2f24dbe2b5926af0daa8a472872fbc9ac4e81599bab46b399cf4a34022db3aa47a5476ab81bf9ecae1725bf11e7f0b01b0e2c91bc0ee -SHA512 (kernel-abi-stablelists-6.11.0.tar.xz) = 3aa0be89a71ee2f41b38fe56830bf63fab0b82ae0ab9fb296355ec04dbc9d8e8d5ab5847d34854fcf7ea5c21c120fe98c33729cd4ae1ccb25bfdd9f3fc340d6f -SHA512 (kernel-kabi-dw-6.11.0.tar.xz) = b9a43771e958d7b7460667bd0e2b300d43f2bc95d776ca1a6ce18214addcdf4aba24526421ac6b8ab031f5cf56ca0d152203beb1c42f786782cfcef7d39a6616 +SHA512 (linux-6.11.1.tar.xz) = cfd9fed68178fb3f3869e451513894af90237747f64cf0c68444d38d5ee569585676e4d6ca96c837d2fedc5a1f03e2499397d75e4cc010000e9cbd2f648dfd5b +SHA512 (kernel-abi-stablelists-6.11.1.tar.xz) = 47058c04ad42b4092e5e7e33bff84a4ea36ba0310184a3ea4762feca85b5ba3f7d5c6e21b114ace8cbb5ecc2ffa94a03fd0166eb9a51fb5fc6a7c9d7a64cbcef +SHA512 (kernel-kabi-dw-6.11.1.tar.xz) = b2ba72216748d9efa2de69484a367c2f9f0d151b7d4810141753f87f4ef35c8f7cdea7099390bccd105cb212a2c8791c346a547f1faeefd55c0c352a19253978