From 1a3ddfac15d87df05c22ebb605ac02c2079fe032 Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Tue, 9 Nov 2021 09:22:40 -0600 Subject: kernel-5.15-200 * Tue Nov 09 2021 Justin M. Forbes [5.15-200] - Input: i8042 - Add quirk for Fujitsu Lifebook T725 (Takashi Iwai) Resolves: rhbz# Signed-off-by: Justin M. Forbes --- Makefile.rhelver | 2 +- Patchlist.changelog | 209 +- filter-aarch64.sh.fedora | 2 +- filter-modules.sh.fedora | 3 +- filter-modules.sh.rhel | 3 +- gating.yaml | 9 + generate_crashkernel_default.sh | 25 + kernel-aarch64-debug-fedora.config | 497 +++- kernel-aarch64-debug-rhel.config | 612 ++++- kernel-aarch64-fedora.config | 482 +++- kernel-aarch64-rhel.config | 605 ++++- kernel-armv7hl-debug-fedora.config | 485 +++- kernel-armv7hl-fedora.config | 470 +++- kernel-armv7hl-lpae-debug-fedora.config | 481 +++- kernel-armv7hl-lpae-fedora.config | 466 +++- kernel-i686-debug-fedora.config | 422 ++- kernel-i686-fedora.config | 405 ++- kernel-ppc64le-debug-fedora.config | 531 +++- kernel-ppc64le-debug-rhel.config | 594 +++- kernel-ppc64le-fedora.config | 516 +++- kernel-ppc64le-rhel.config | 585 +++- kernel-s390x-debug-fedora.config | 574 +++- kernel-s390x-debug-rhel.config | 596 +++- kernel-s390x-fedora.config | 559 +++- kernel-s390x-rhel.config | 587 +++- kernel-s390x-zfcpdump-rhel.config | 577 +++- kernel-x86_64-debug-fedora.config | 428 ++- kernel-x86_64-debug-rhel.config | 520 +++- kernel-x86_64-fedora.config | 413 ++- kernel-x86_64-rhel.config | 509 +++- kernel.spec | 1378 +++------- mod-internal.list | 24 + partial-kgcov-snip.config | 4 + patch-5.13-redhat.patch | 4504 ------------------------------- patch-5.15-redhat.patch | 1965 ++++++++++++++ process_configs.sh | 33 +- rpminspect.yaml | 3 + sources | 5 +- 38 files changed, 12093 insertions(+), 7990 deletions(-) create mode 100644 gating.yaml create mode 100755 generate_crashkernel_default.sh create mode 100644 partial-kgcov-snip.config delete mode 100644 patch-5.13-redhat.patch create mode 100644 patch-5.15-redhat.patch diff --git a/Makefile.rhelver b/Makefile.rhelver index 8fceabade..8e6ba0821 100644 --- a/Makefile.rhelver +++ b/Makefile.rhelver @@ -1,4 +1,4 @@ -RHEL_MAJOR = 8 +RHEL_MAJOR = 9 RHEL_MINOR = 99 # diff --git a/Patchlist.changelog b/Patchlist.changelog index 5e75d84ab..72516ca7a 100644 --- a/Patchlist.changelog +++ b/Patchlist.changelog @@ -1,168 +1,123 @@ -https://gitlab.com/cki-project/kernel-ark/-/commit/93766a4c0701e9f633071beb75237e11413dcebd - 93766a4c0701e9f633071beb75237e11413dcebd platform/x86: amd-pmc: Fix missing unlock on error in amd_pmc_send_cmd() +https://gitlab.com/cki-project/kernel-ark/-/commit/69487df85dc22a202aa7276e2c47ea11ec52eb19 + 69487df85dc22a202aa7276e2c47ea11ec52eb19 Input: i8042 - Add quirk for Fujitsu Lifebook T725 -https://gitlab.com/cki-project/kernel-ark/-/commit/21449ddd0db578d5dbf6eebe54e61e8f34254852 - 21449ddd0db578d5dbf6eebe54e61e8f34254852 platform/x86: amd-pmc: Use return code on suspend +https://gitlab.com/cki-project/kernel-ark/-/commit/ec55d007db7cb83475be6c49f25aed92aa1034db + ec55d007db7cb83475be6c49f25aed92aa1034db btrfs: fix memory ordering between normal and ordered work functions -https://gitlab.com/cki-project/kernel-ark/-/commit/4619b73bd9e896fd14ffff3ff6752691ca49178f - 4619b73bd9e896fd14ffff3ff6752691ca49178f ACPI: PM: Only mark EC GPE for wakeup on Intel systems +https://gitlab.com/cki-project/kernel-ark/-/commit/ad98d0f25e3df5484dbb9dce3783c5371fba4323 + ad98d0f25e3df5484dbb9dce3783c5371fba4323 arm64: use common CONFIG_MAX_ZONEORDER for arm kernel -https://gitlab.com/cki-project/kernel-ark/-/commit/f5c0a0b90aa95f4bcd4fabfef12c858ce6cd2838 - f5c0a0b90aa95f4bcd4fabfef12c858ce6cd2838 platform/x86: amd-pmc: Add new acpi id for future PMC controllers +https://gitlab.com/cki-project/kernel-ark/-/commit/b6389968a10491832f0d62b5e8816dde3c766ceb + b6389968a10491832f0d62b5e8816dde3c766ceb [fs] dax: mark tech preview -https://gitlab.com/cki-project/kernel-ark/-/commit/e3161dd5dc44260f7b92bb9ad86feaef5b4bced3 - e3161dd5dc44260f7b92bb9ad86feaef5b4bced3 platform/x86: amd-pmc: Add support for ACPI ID AMDI0006 +https://gitlab.com/cki-project/kernel-ark/-/commit/e3e9737865cd704e300f35c651d4e5fa1a84ab09 + e3e9737865cd704e300f35c651d4e5fa1a84ab09 arm64: dts: rockchip: Disable CDN DP on Pinebook Pro -https://gitlab.com/cki-project/kernel-ark/-/commit/916af868cb51f5b4beb69bc89e1c7ae5fedcd2c8 - 916af868cb51f5b4beb69bc89e1c7ae5fedcd2c8 amd-pmc: Add support for logging s0ix counters +https://gitlab.com/cki-project/kernel-ark/-/commit/5dab5e4c4cf4bc8bfd13119767481c427b009852 + 5dab5e4c4cf4bc8bfd13119767481c427b009852 arm64: dts: rockchip: Setup USB typec port as datarole on -https://gitlab.com/cki-project/kernel-ark/-/commit/69469b9d5e3946ebc32641d839a259adfb102bd5 - 69469b9d5e3946ebc32641d839a259adfb102bd5 platform/x86: amd-pmc: Add support for logging SMU metrics +https://gitlab.com/cki-project/kernel-ark/-/commit/d0b1a0a409781f6a7b4d2c8e4bb5e53b3ddccaf9 + d0b1a0a409781f6a7b4d2c8e4bb5e53b3ddccaf9 [scsi] megaraid_sas: re-add certain pci-ids -https://gitlab.com/cki-project/kernel-ark/-/commit/f247ee06dca20a0077f9ba40e45de203244076d1 - f247ee06dca20a0077f9ba40e45de203244076d1 platform/x86: amd-pmc: call dump registers only once +https://gitlab.com/cki-project/kernel-ark/-/commit/51582d26690960efa956b2b543eda733ae9485aa + 51582d26690960efa956b2b543eda733ae9485aa crypto: rng - Override drivers/char/random in FIPS mode -https://gitlab.com/cki-project/kernel-ark/-/commit/4461aa443d6fdb8fe144e1c833f1f8041b04b4b0 - 4461aa443d6fdb8fe144e1c833f1f8041b04b4b0 platform/x86: amd-pmc: Fix SMU firmware reporting mechanism +https://gitlab.com/cki-project/kernel-ark/-/commit/cf22dfe2f75a7ecc77a4053234389d28ae765d91 + cf22dfe2f75a7ecc77a4053234389d28ae765d91 random: Add hook to override device reads and getrandom(2) -https://gitlab.com/cki-project/kernel-ark/-/commit/ef4982bb5ef41c72037729525325eb7afaaf5a59 - ef4982bb5ef41c72037729525325eb7afaaf5a59 platform/x86: amd-pmc: Fix command completion code +https://gitlab.com/cki-project/kernel-ark/-/commit/2d123caf19a5dc7ed5af79c4c8c78d6f78010b20 + 2d123caf19a5dc7ed5af79c4c8c78d6f78010b20 RHEL: disable io_uring support -https://gitlab.com/cki-project/kernel-ark/-/commit/3764cadafee393f09d9c10d5201de82de183183e - 3764cadafee393f09d9c10d5201de82de183183e ACPI: PM: Adjust behavior for field problems on AMD systems +https://gitlab.com/cki-project/kernel-ark/-/commit/00a022572b2560a1bdd92dbd1b3bda6d7e91f619 + 00a022572b2560a1bdd92dbd1b3bda6d7e91f619 nvme: nvme_mpath_init remove multipath check -https://gitlab.com/cki-project/kernel-ark/-/commit/7ea3b2567dae3b32f62308051094e9cf54bdb8fa - 7ea3b2567dae3b32f62308051094e9cf54bdb8fa ACPI: PM: s2idle: Add support for new Microsoft UUID +https://gitlab.com/cki-project/kernel-ark/-/commit/89e7c979adf354bc4e7668cc693df306eb39e3b6 + 89e7c979adf354bc4e7668cc693df306eb39e3b6 wireguard: disable in FIPS mode -https://gitlab.com/cki-project/kernel-ark/-/commit/89872477be26440180dd7cc30c7c7cbdfda175db - 89872477be26440180dd7cc30c7c7cbdfda175db ACPI: PM: s2idle: Add support for multiple func mask +https://gitlab.com/cki-project/kernel-ark/-/commit/d8a00d60a5b0647ff277653202e3b49f1e9f1c83 + d8a00d60a5b0647ff277653202e3b49f1e9f1c83 nvme: decouple basic ANA log page re-read support from native multipathing -https://gitlab.com/cki-project/kernel-ark/-/commit/f231bad21add99d33483a17e28fde17b6b66f116 - f231bad21add99d33483a17e28fde17b6b66f116 ACPI: PM: s2idle: Refactor common code +https://gitlab.com/cki-project/kernel-ark/-/commit/f904b60b4c23cef0eac4ebb2ffe82ba74a9490c9 + f904b60b4c23cef0eac4ebb2ffe82ba74a9490c9 nvme: allow local retry and proper failover for REQ_FAILFAST_TRANSPORT -https://gitlab.com/cki-project/kernel-ark/-/commit/9c6dce4a57b9f141c3b3c0f2a16db0ffc08b0f76 - 9c6dce4a57b9f141c3b3c0f2a16db0ffc08b0f76 ACPI: PM: s2idle: Use correct revision id +https://gitlab.com/cki-project/kernel-ark/-/commit/c0e1a06b73019c0940aea87f3e4d378875b6ed97 + c0e1a06b73019c0940aea87f3e4d378875b6ed97 nvme: Return BLK_STS_TARGET if the DNR bit is set -https://gitlab.com/cki-project/kernel-ark/-/commit/639c93bf40a55f2b2a2fd330854db91c00a68215 - 639c93bf40a55f2b2a2fd330854db91c00a68215 ACPI: PM: s2idle: Add missing LPS0 functions for AMD +https://gitlab.com/cki-project/kernel-ark/-/commit/d973a8fc7dd38d75ca7be5f4e9319076ec48c5b1 + d973a8fc7dd38d75ca7be5f4e9319076ec48c5b1 wireguard: mark as Tech Preview -https://gitlab.com/cki-project/kernel-ark/-/commit/ce265e8b0015f8283d5a80d5238e83daded344a6 - ce265e8b0015f8283d5a80d5238e83daded344a6 ACPI: Add quirks for AMD Renoir/Lucienne CPUs to force the D3 hint +https://gitlab.com/cki-project/kernel-ark/-/commit/94a3927f9572e6f8734dd29a978de8fc0d6b897d + 94a3927f9572e6f8734dd29a978de8fc0d6b897d REDHAT: coresight: etm4x: Disable coresight on HPE Apollo 70 -https://gitlab.com/cki-project/kernel-ark/-/commit/87350d62d6fd0ec4c73a864f6528cbba973d7bc8 - 87350d62d6fd0ec4c73a864f6528cbba973d7bc8 ACPI: Check StorageD3Enable _DSD property in ACPI code +https://gitlab.com/cki-project/kernel-ark/-/commit/44a99ce019589dd51627aab7fdfb6efb1481057f + 44a99ce019589dd51627aab7fdfb6efb1481057f KEYS: Make use of platform keyring for module signature verify -https://gitlab.com/cki-project/kernel-ark/-/commit/78f3f35f89ac19ff2f336a0ece7ef3d3ff71ac22 - 78f3f35f89ac19ff2f336a0ece7ef3d3ff71ac22 nvme-pci: look for StorageD3Enable on companion ACPI device instead +https://gitlab.com/cki-project/kernel-ark/-/commit/a542b3b414a916496ae856825439951dfc27a544 + a542b3b414a916496ae856825439951dfc27a544 Input: rmi4 - remove the need for artificial IRQ in case of HID -https://gitlab.com/cki-project/kernel-ark/-/commit/0a243d877fd0326498ac0030543d64b390986eb2 - 0a243d877fd0326498ac0030543d64b390986eb2 ACPI: processor idle: Fix up C-state latency if not ordered +https://gitlab.com/cki-project/kernel-ark/-/commit/36cf4f744bae496e8a2f5f1789169d1ee9e109cf + 36cf4f744bae496e8a2f5f1789169d1ee9e109cf ARM: tegra: usb no reset -https://gitlab.com/cki-project/kernel-ark/-/commit/e5bd8b07661bdad460ab096bb87095d9318ea119 - e5bd8b07661bdad460ab096bb87095d9318ea119 Revert "drm/rockchip: remove existing generic drivers to take over the device" +https://gitlab.com/cki-project/kernel-ark/-/commit/3668c10324f29bace47c092ea1bc6846bdca8cb2 + 3668c10324f29bace47c092ea1bc6846bdca8cb2 arm: make CONFIG_HIGHPTE optional without CONFIG_EXPERT -https://gitlab.com/cki-project/kernel-ark/-/commit/51ceb5f3efa65385feb712687c5749f9ce8b283c - 51ceb5f3efa65385feb712687c5749f9ce8b283c tpm_tis_spi: add missing SPI device ID entries +https://gitlab.com/cki-project/kernel-ark/-/commit/288c6720afc6f7712b2066977b89a1eca0c5a21a + 288c6720afc6f7712b2066977b89a1eca0c5a21a Add option of 13 for FORCE_MAX_ZONEORDER -https://gitlab.com/cki-project/kernel-ark/-/commit/d1b159f0d298977cb2feac785c4274022f5ce960 - d1b159f0d298977cb2feac785c4274022f5ce960 drm/rockchip: remove existing generic drivers to take over the device +https://gitlab.com/cki-project/kernel-ark/-/commit/85f19dfc9712ed809cf3154100f8139bf6e9d4de + 85f19dfc9712ed809cf3154100f8139bf6e9d4de s390: Lock down the kernel when the IPL secure flag is set -https://gitlab.com/cki-project/kernel-ark/-/commit/4db44a6a812dcde9dc3fe981402019aa4785b5b7 - 4db44a6a812dcde9dc3fe981402019aa4785b5b7 arm64: dts: rockchip: disable USB type-c DisplayPort +https://gitlab.com/cki-project/kernel-ark/-/commit/733a0da5535fe60cf1bac73a07e8107ac4bf299d + 733a0da5535fe60cf1bac73a07e8107ac4bf299d efi: Lock down the kernel if booted in secure boot mode -https://gitlab.com/cki-project/kernel-ark/-/commit/9e2ed248fc44ab379a97547ae9dfa1592add81f2 - 9e2ed248fc44ab379a97547ae9dfa1592add81f2 can: bcm: delay release of struct bcm_op after synchronize_rcu +https://gitlab.com/cki-project/kernel-ark/-/commit/5cd6fe00f5e0a02a5dc4d1abf9f335c2877aa6c9 + 5cd6fe00f5e0a02a5dc4d1abf9f335c2877aa6c9 efi: Add an EFI_SECURE_BOOT flag to indicate secure boot mode -https://gitlab.com/cki-project/kernel-ark/-/commit/6c2cf04cbec9cd04d595c2467b6c9f5d3b408667 - 6c2cf04cbec9cd04d595c2467b6c9f5d3b408667 bpf, selftests: Disable tests that need clang13 +https://gitlab.com/cki-project/kernel-ark/-/commit/edccd4be7971310a859e00de0868d54c729695f9 + edccd4be7971310a859e00de0868d54c729695f9 security: lockdown: expose a hook to lock the kernel down -https://gitlab.com/cki-project/kernel-ark/-/commit/25268f11b4a9b70af9cdbfd9dbadd2be1981deee - 25268f11b4a9b70af9cdbfd9dbadd2be1981deee PCI: rockchip: Register IRQs just before pci_host_probe() +https://gitlab.com/cki-project/kernel-ark/-/commit/539e9d5a95a1547f51ba066ea898182df5c30d6c + 539e9d5a95a1547f51ba066ea898182df5c30d6c Make get_cert_list() use efi_status_to_str() to print error messages. -https://gitlab.com/cki-project/kernel-ark/-/commit/4459c104a420e90ce5830764bb1ebe0f061c348f - 4459c104a420e90ce5830764bb1ebe0f061c348f arm64: dts: rockchip: Update PCI host bridge window to 32-bit address memory +https://gitlab.com/cki-project/kernel-ark/-/commit/83e49272faea68f7ce01cb9dc63f9c550903a75d + 83e49272faea68f7ce01cb9dc63f9c550903a75d Add efi_status_to_str() and rework efi_status_to_err(). -https://gitlab.com/cki-project/kernel-ark/-/commit/4eac47a15e63ac5aa17d6438cb614b9b151c28d8 - 4eac47a15e63ac5aa17d6438cb614b9b151c28d8 RHEL: disable io_uring support +https://gitlab.com/cki-project/kernel-ark/-/commit/eb9f5f1c8ecddf9291b06e5ded858064d9ace8c5 + eb9f5f1c8ecddf9291b06e5ded858064d9ace8c5 arm: aarch64: Drop the EXPERT setting from ARM64_FORCE_52BIT -https://gitlab.com/cki-project/kernel-ark/-/commit/2a2804fbd89e7a9096987e4c4df49d322b504f15 - 2a2804fbd89e7a9096987e4c4df49d322b504f15 wireguard: disable in FIPS mode +https://gitlab.com/cki-project/kernel-ark/-/commit/75a010f21e9df6549ebe2041c562bf61ab3ea7ae + 75a010f21e9df6549ebe2041c562bf61ab3ea7ae iommu/arm-smmu: workaround DMA mode issues -https://gitlab.com/cki-project/kernel-ark/-/commit/254ea054f1b3896cec62bf148ca31bca2378d59c - 254ea054f1b3896cec62bf148ca31bca2378d59c REDHAT: coresight: etm4x: Disable coresight on HPE Apollo 70 +https://gitlab.com/cki-project/kernel-ark/-/commit/4acf659b77957a7a406687f80469c2d8c9eb7991 + 4acf659b77957a7a406687f80469c2d8c9eb7991 ipmi: do not configure ipmi for HPE m400 -https://gitlab.com/cki-project/kernel-ark/-/commit/fd2602262903ec85eec757248d0a5181a03fc2a1 - fd2602262903ec85eec757248d0a5181a03fc2a1 KEYS: Make use of platform keyring for module signature verify +https://gitlab.com/cki-project/kernel-ark/-/commit/80d5f0db72a989cd3eedd4eba089afe8ac89c38a + 80d5f0db72a989cd3eedd4eba089afe8ac89c38a add pci_hw_vendor_status() -https://gitlab.com/cki-project/kernel-ark/-/commit/1ae9177fff905308e0c41d65445272a9a09931aa - 1ae9177fff905308e0c41d65445272a9a09931aa Drop that for now +https://gitlab.com/cki-project/kernel-ark/-/commit/c7b85bdbc4156095c29df5bf403c7210779b7f4f + c7b85bdbc4156095c29df5bf403c7210779b7f4f ahci: thunderx2: Fix for errata that affects stop engine -https://gitlab.com/cki-project/kernel-ark/-/commit/c5d0ff5d210f809b02f5f2593e9e16e4c52f96e1 - c5d0ff5d210f809b02f5f2593e9e16e4c52f96e1 Input: rmi4 - remove the need for artificial IRQ in case of HID +https://gitlab.com/cki-project/kernel-ark/-/commit/efd31cf4932a26014ed1481384826ed3e6e10539 + efd31cf4932a26014ed1481384826ed3e6e10539 Vulcan: AHCI PCI bar fix for Broadcom Vulcan early silicon -https://gitlab.com/cki-project/kernel-ark/-/commit/3e69ddc10334d4910a1b73df0765132f28e09a77 - 3e69ddc10334d4910a1b73df0765132f28e09a77 ARM: tegra: usb no reset +https://gitlab.com/cki-project/kernel-ark/-/commit/5a76c52ea79d1ee7a0d07136bab0869fb0dcd59d + 5a76c52ea79d1ee7a0d07136bab0869fb0dcd59d tags.sh: Ignore redhat/rpm -https://gitlab.com/cki-project/kernel-ark/-/commit/3e1f44dac6eef9272a151aea18aa8072da086742 - 3e1f44dac6eef9272a151aea18aa8072da086742 arm: make CONFIG_HIGHPTE optional without CONFIG_EXPERT +https://gitlab.com/cki-project/kernel-ark/-/commit/e73b49e13f131f3ce70be851b578e6e4dcc6cd39 + e73b49e13f131f3ce70be851b578e6e4dcc6cd39 acpi: prefer booting with ACPI over DTS -https://gitlab.com/cki-project/kernel-ark/-/commit/0b7eeb857f54f99d45a20dd219591c8063c81270 - 0b7eeb857f54f99d45a20dd219591c8063c81270 Add option of 13 for FORCE_MAX_ZONEORDER +https://gitlab.com/cki-project/kernel-ark/-/commit/df5533677109dd1d8232a9852b8e089cf6accd9c + df5533677109dd1d8232a9852b8e089cf6accd9c aarch64: acpi scan: Fix regression related to X-Gene UARTs -https://gitlab.com/cki-project/kernel-ark/-/commit/84a4a54060ae4fe0a8df0520f86e6526576669ef - 84a4a54060ae4fe0a8df0520f86e6526576669ef s390: Lock down the kernel when the IPL secure flag is set +https://gitlab.com/cki-project/kernel-ark/-/commit/a741b5a56f241c3ba758b8efae2e73bde3cf77b3 + a741b5a56f241c3ba758b8efae2e73bde3cf77b3 ACPI / irq: Workaround firmware issue on X-Gene based m400 -https://gitlab.com/cki-project/kernel-ark/-/commit/b2facd60ebdf0ffb2ed47aa325b3c89093ae2a09 - b2facd60ebdf0ffb2ed47aa325b3c89093ae2a09 efi: Lock down the kernel if booted in secure boot mode +https://gitlab.com/cki-project/kernel-ark/-/commit/91069002cfaedbb95e91c15797c5ec0e501ab58f + 91069002cfaedbb95e91c15797c5ec0e501ab58f ACPI: APEI: arm64: Ignore broken HPE moonshot APEI support -https://gitlab.com/cki-project/kernel-ark/-/commit/1dc8229364e421869daf5067ee863a65b9f71c99 - 1dc8229364e421869daf5067ee863a65b9f71c99 efi: Add an EFI_SECURE_BOOT flag to indicate secure boot mode +https://gitlab.com/cki-project/kernel-ark/-/commit/6959f66ee95bd0ab11eca0b6eca89a5a73471c98 + 6959f66ee95bd0ab11eca0b6eca89a5a73471c98 Pull the RHEL version defines out of the Makefile -https://gitlab.com/cki-project/kernel-ark/-/commit/ce3c1b5ee206b3653ddd52901dbe0d6f2284fec8 - ce3c1b5ee206b3653ddd52901dbe0d6f2284fec8 security: lockdown: expose a hook to lock the kernel down - -https://gitlab.com/cki-project/kernel-ark/-/commit/a4500a47c895224ec910265c522ff67611831cd4 - a4500a47c895224ec910265c522ff67611831cd4 Make get_cert_list() use efi_status_to_str() to print error messages. - -https://gitlab.com/cki-project/kernel-ark/-/commit/25b0ae193be5842dfa2f812a1780b6e9a0760881 - 25b0ae193be5842dfa2f812a1780b6e9a0760881 Add efi_status_to_str() and rework efi_status_to_err(). - -https://gitlab.com/cki-project/kernel-ark/-/commit/e27c905120008d525598bf4cd7951710afc94be5 - e27c905120008d525598bf4cd7951710afc94be5 arm: aarch64: Drop the EXPERT setting from ARM64_FORCE_52BIT - -https://gitlab.com/cki-project/kernel-ark/-/commit/508ea6d529b15c94a237521be42d0aad3dcd2e1e - 508ea6d529b15c94a237521be42d0aad3dcd2e1e iommu/arm-smmu: workaround DMA mode issues - -https://gitlab.com/cki-project/kernel-ark/-/commit/ef2a570b8247197efb80ce736399609a79a87242 - ef2a570b8247197efb80ce736399609a79a87242 ipmi: do not configure ipmi for HPE m400 - -https://gitlab.com/cki-project/kernel-ark/-/commit/7afef574e664fcba8a056eb920ae67b1c1138a22 - 7afef574e664fcba8a056eb920ae67b1c1138a22 scsi: smartpqi: add inspur advantech ids - -https://gitlab.com/cki-project/kernel-ark/-/commit/0e3607a1bf46d0973580a8e2ae73983125b2ad6d - 0e3607a1bf46d0973580a8e2ae73983125b2ad6d ahci: thunderx2: Fix for errata that affects stop engine - -https://gitlab.com/cki-project/kernel-ark/-/commit/27c7926aef2579ffec2d225e268aa20044d40929 - 27c7926aef2579ffec2d225e268aa20044d40929 Vulcan: AHCI PCI bar fix for Broadcom Vulcan early silicon - -https://gitlab.com/cki-project/kernel-ark/-/commit/864c036fe1aecbe34d956f8fad483fc58e0219b7 - 864c036fe1aecbe34d956f8fad483fc58e0219b7 kdump: fix a grammar issue in a kernel message - -https://gitlab.com/cki-project/kernel-ark/-/commit/0ec4aea2b0f7ad2ebfb74e4e39b474f59bc89df8 - 0ec4aea2b0f7ad2ebfb74e4e39b474f59bc89df8 kdump: add support for crashkernel=auto - -https://gitlab.com/cki-project/kernel-ark/-/commit/a351d29c16d5c506f81c7b91b1d40cbceabc7565 - a351d29c16d5c506f81c7b91b1d40cbceabc7565 kdump: round up the total memory size to 128M for crashkernel reservation - -https://gitlab.com/cki-project/kernel-ark/-/commit/0888c9ec5ea986623d7cd5c8d1f75f979d105382 - 0888c9ec5ea986623d7cd5c8d1f75f979d105382 acpi: prefer booting with ACPI over DTS - -https://gitlab.com/cki-project/kernel-ark/-/commit/ea01d1e6172c5e3fcc02079e7d3a01baeef8eb94 - ea01d1e6172c5e3fcc02079e7d3a01baeef8eb94 aarch64: acpi scan: Fix regression related to X-Gene UARTs - -https://gitlab.com/cki-project/kernel-ark/-/commit/11e6c1a188324220e51c70ef162847a3809f3a4c - 11e6c1a188324220e51c70ef162847a3809f3a4c ACPI / irq: Workaround firmware issue on X-Gene based m400 - -https://gitlab.com/cki-project/kernel-ark/-/commit/e21f02d4e317a221a806abf84436cc0bc5a6c927 - e21f02d4e317a221a806abf84436cc0bc5a6c927 ACPI: APEI: arm64: Ignore broken HPE moonshot APEI support +https://gitlab.com/cki-project/kernel-ark/-/commit/ee0a802c0f6149e7bdb202bb2b616bd8fd3c41e5 + ee0a802c0f6149e7bdb202bb2b616bd8fd3c41e5 [initial commit] Add Red Hat variables in the top level makefile diff --git a/filter-aarch64.sh.fedora b/filter-aarch64.sh.fedora index 0bbc568b4..6a5065c14 100644 --- a/filter-aarch64.sh.fedora +++ b/filter-aarch64.sh.fedora @@ -15,4 +15,4 @@ ethdrvs="3com adaptec arc alteon atheros broadcom cadence calxeda chelsio cisco drmdrvs="amd arm bridge ast exynos hisilicon i2c imx mgag200 meson msm nouveau panel pl111 radeon rockchip tegra sun4i tiny vc4" -singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qedi qla1280 9pnet_rdma rpcrdma nvmet-rdma nvme-rdma hid-picolcd hid-prodikeys hwpoison-inject target_core_user sbp_target cxgbit chcr rnbd-client rnbd-server mlx5_vdpa dfl-emif octeontx2-cpt octeontx2-cptvf spi-altera-dfl" +singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qedi qla1280 9pnet_rdma rpcrdma nvmet-rdma nvme-rdma hid-picolcd hid-prodikeys hwpoison-inject target_core_user sbp_target cxgbit chcr rnbd-client rnbd-server mlx5_vdpa dfl-emif octeontx2-cpt octeontx2-cptvf spi-altera-dfl rvu_cptpf rvu_cptvf regmap-sdw regmap-sdw-mbq" diff --git a/filter-modules.sh.fedora b/filter-modules.sh.fedora index 78244ce83..678825bfa 100755 --- a/filter-modules.sh.fedora +++ b/filter-modules.sh.fedora @@ -39,7 +39,7 @@ netprots="6lowpan appletalk atm ax25 batman-adv bluetooth can dsa ieee802154 l2t drmdrvs="amd ast bridge gma500 i2c i915 mgag200 nouveau panel radeon" -singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qedi qla1280 9pnet_rdma rpcrdma nvmet-rdma nvme-rdma hid-picolcd hid-prodikeys hwpoison-inject target_core_user sbp_target cxgbit chcr parport_serial regmap-sdw hid-asus iTCO_wdt rnbd-client rnbd-server mlx5_vdpa spi-altera-dfl" +singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qedi qla1280 9pnet_rdma rpcrdma nvmet-rdma nvme-rdma hid-picolcd hid-prodikeys hwpoison-inject target_core_user sbp_target cxgbit chcr parport_serial regmap-sdw regmap-sdw-mbq arizona-micsupp hid-asus iTCO_wdt rnbd-client rnbd-server mlx5_vdpa spi-altera-dfl" # Grab the arch-specific filter list overrides source ./filter-$2.sh @@ -146,6 +146,7 @@ done # Just kill sound. filter_dir $1 kernel/sound +filter_dir $1 kernel/drivers/soundwire # Now go through and filter any single .ko files that might have deps on the # things we filtered above diff --git a/filter-modules.sh.rhel b/filter-modules.sh.rhel index 63e501d67..c4a8e594e 100755 --- a/filter-modules.sh.rhel +++ b/filter-modules.sh.rhel @@ -37,7 +37,7 @@ netprots="6lowpan appletalk atm ax25 batman-adv bluetooth can dccp dsa ieee80215 drmdrvs="amd ast gma500 i2c i915 mgag200 nouveau radeon via " -singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qedi qla1280 9pnet_rdma rpcrdma nvmet-rdma nvme-rdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject hid-sensor-hub target_core_user sbp_target cxgbit iw_cxgb3 iw_cxgb4 cxgb3i cxgb3i cxgb3i_ddp cxgb4i chcr chtls parport_serial ism hid-asus" +singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qedi qla1280 9pnet_rdma rpcrdma nvmet-rdma nvme-rdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject hid-sensor-hub target_core_user sbp_target cxgbit iw_cxgb3 iw_cxgb4 cxgb3i cxgb3i cxgb3i_ddp cxgb4i chcr chtls parport_serial ism regmap-sdw regmap-sdw-mbq arizona-micsupp hid-asus" # Grab the arch-specific filter list overrides source ./filter-$2.sh @@ -138,6 +138,7 @@ done # Just kill sound. filter_dir $1 kernel/sound +filter_dir $1 kernel/drivers/soundwire # Now go through and filter any single .ko files that might have deps on the # things we filtered above diff --git a/gating.yaml b/gating.yaml new file mode 100644 index 000000000..87a09ed52 --- /dev/null +++ b/gating.yaml @@ -0,0 +1,9 @@ +--- !Policy +product_versions: + - rhel-9 +decision_context: osci_compose_gate +rules: + - !PassingTestCaseRule {test_case_name: cki.tier1-aarch64.functional} + - !PassingTestCaseRule {test_case_name: cki.tier1-ppc64le.functional} + - !PassingTestCaseRule {test_case_name: cki.tier1-s390x.functional} + - !PassingTestCaseRule {test_case_name: cki.tier1-x86_64.functional} diff --git a/generate_crashkernel_default.sh b/generate_crashkernel_default.sh new file mode 100755 index 000000000..46d454607 --- /dev/null +++ b/generate_crashkernel_default.sh @@ -0,0 +1,25 @@ +#!/bin/bash +kernelver=$1 && shift +arch=$1 && shift +rootfs=$1 && shift + +output="${rootfs}/lib/modules/${kernelver}/crashkernel.default" + +case $arch in +x86_64|s390*) + ck_cmdline="crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M" + ;; +arm64|aarch64) + ck_cmdline="crashkernel=2G-:448M" + ;; +powerpc|ppc64*) + ck_cmdline="crashkernel=2G-4G:384M,4G-16G:512M,16G-64G:1G,64G-128G:2G,128G-:4G" + ;; +*) + ck_cmdline="" + ;; +esac + +cat > "$output" <-devel-matched package that +# requires both the core and devel packages locked on the same version. +# %%kernel_devel_matched_package [-m] +# +%define kernel_devel_matched_package(m) \ +%package %{?1:%{1}-}devel-matched\ +Summary: Meta package to install matching core and devel packages for a given %{?2:%{2} }kernel\ +Requires: kernel%{?1:-%{1}}-devel = %{version}-%{release}\ +Requires: kernel%{?1:-%{1}}-core = %{version}-%{release}\ +%description %{?1:%{1}-}devel-matched\ +This meta package is used to install matching core and devel packages for a given %{?2:%{2} }kernel.\ +%{nil} + # # kernel--ipaclones-internal package # @@ -1203,6 +1261,7 @@ Requires: kernel-core-uname-r = %{KVERREL}\ %{expand:%%kernel_meta_package %{?1:%{1}}}\ %endif\ %{expand:%%kernel_devel_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ +%{expand:%%kernel_devel_matched_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ %{expand:%%kernel_modules_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ %{expand:%%kernel_modules_extra_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ %if %{-m:0}%{!-m:1}\ @@ -1315,15 +1374,15 @@ ApplyOptionalPatch() fi } -%setup -q -n kernel-5.13.3 -c -mv linux-5.13.3 linux-%{KVERREL} +%setup -q -n kernel-5.15.1 -c +mv linux-5.15.1 linux-%{KVERREL} cd linux-%{KVERREL} cp -a %{SOURCE1} . %if !%{nopatches} -ApplyOptionalPatch patch-%{stableversion}-redhat.patch +ApplyOptionalPatch patch-%{patchversion}-redhat.patch %endif ApplyOptionalPatch linux-kernel-test.patch @@ -1367,7 +1426,7 @@ cd configs # Drop some necessary files from the source dir into the buildroot cp $RPM_SOURCE_DIR/kernel-*.config . -cp %{SOURCE51} . +cp %{SOURCE80} . # merge.pl cp %{SOURCE3000} . # kernel-local @@ -1380,15 +1439,20 @@ for i in %{all_arch_configs} do mv $i $i.tmp ./merge.pl %{SOURCE3001} $i.tmp > $i +%if %{with_gcov} + echo "Merging with gcov options" + cat %{SOURCE75} + mv $i $i.tmp + ./merge.pl %{SOURCE75} $i.tmp > $i +%endif rm $i.tmp done %endif -# enable GCOV kernel config options if gcov is on -%if %{with_gcov} -for i in *.config -do - sed -i 's/# CONFIG_GCOV_KERNEL is not set/CONFIG_GCOV_KERNEL=y\nCONFIG_GCOV_PROFILE_ALL=y\n/' $i +%if %{with clang_lto} +for i in *aarch64*.config *x86_64*.config; do + sed -i 's/# CONFIG_LTO_CLANG_THIN is not set/CONFIG_LTO_CLANG_THIN=y/' $i + sed -i 's/CONFIG_LTO_NONE=y/# CONFIG_LTO_NONE is not set/' $i done %endif @@ -1398,20 +1462,29 @@ done openssl x509 -inform der -in %{SOURCE100} -out rheldup3.pem openssl x509 -inform der -in %{SOURCE101} -out rhelkpatch1.pem cat rheldup3.pem rhelkpatch1.pem > ../certs/rhel.pem +%ifarch s390x ppc64le +openssl x509 -inform der -in %{secureboot_ca_0} -out secureboot.pem +cat secureboot.pem >> ../certs/rhel.pem +%endif for i in *.config; do sed -i 's@CONFIG_SYSTEM_TRUSTED_KEYS=""@CONFIG_SYSTEM_TRUSTED_KEYS="certs/rhel.pem"@' $i done %endif %endif -cp %{SOURCE52} . +cp %{SOURCE81} . OPTS="" %if %{with_configchecks} OPTS="$OPTS -w -n -c" %endif +%if %{with clang_lto} +for opt in %{clang_make_opts}; do + OPTS="$OPTS -m $opt" +done +%endif ./process_configs.sh $OPTS kernel %{rpmversion} -cp %{SOURCE56} . +cp %{SOURCE82} . RPM_SOURCE_DIR=$RPM_SOURCE_DIR ./update_scripts.sh %{primary_target} # end of kernel config @@ -1705,13 +1778,13 @@ BuildKernel() { mkdir -p $RPM_BUILD_ROOT/kabi-dwarf tar xjvf %{SOURCE301} -C $RPM_BUILD_ROOT/kabi-dwarf - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf/whitelists - tar xjvf %{SOURCE300} -C $RPM_BUILD_ROOT/kabi-dwarf/whitelists + mkdir -p $RPM_BUILD_ROOT/kabi-dwarf/stablelists + tar xjvf %{SOURCE300} -C $RPM_BUILD_ROOT/kabi-dwarf/stablelists echo "**** GENERATING DWARF-based kABI baseline dataset ****" chmod 0755 $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh generate \ - "$RPM_BUILD_ROOT/kabi-dwarf/whitelists/kabi-current/kabi_whitelist_%{_target_cpu}" \ + "$RPM_BUILD_ROOT/kabi-dwarf/stablelists/kabi-current/kabi_stablelist_%{_target_cpu}" \ "$(pwd)" \ "$RPM_BUILD_ROOT/kabidw-base/%{_target_cpu}${Variant:+.${Variant}}" || : @@ -1724,13 +1797,13 @@ BuildKernel() { mkdir -p $RPM_BUILD_ROOT/kabi-dwarf tar xjvf %{SOURCE301} -C $RPM_BUILD_ROOT/kabi-dwarf if [ -d "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf/whitelists - tar xjvf %{SOURCE300} -C $RPM_BUILD_ROOT/kabi-dwarf/whitelists + mkdir -p $RPM_BUILD_ROOT/kabi-dwarf/stablelists + tar xjvf %{SOURCE300} -C $RPM_BUILD_ROOT/kabi-dwarf/stablelists echo "**** GENERATING DWARF-based kABI dataset ****" chmod 0755 $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh generate \ - "$RPM_BUILD_ROOT/kabi-dwarf/whitelists/kabi-current/kabi_whitelist_%{_target_cpu}" \ + "$RPM_BUILD_ROOT/kabi-dwarf/stablelists/kabi-current/kabi_stablelist_%{_target_cpu}" \ "$(pwd)" \ "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}.tmp" || : @@ -1832,8 +1905,6 @@ BuildKernel() { %ifarch i686 x86_64 # files for 'make prepare' to succeed with kernel-devel cp -a --parents arch/x86/entry/syscalls/syscall_32.tbl $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/entry/syscalls/syscalltbl.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/entry/syscalls/syscallhdr.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ cp -a --parents arch/x86/entry/syscalls/syscall_64.tbl $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ cp -a --parents arch/x86/tools/relocs_32.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ cp -a --parents arch/x86/tools/relocs_64.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ @@ -1848,6 +1919,9 @@ BuildKernel() { cp -a --parents arch/x86/boot/string.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ cp -a --parents arch/x86/boot/ctype.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ + cp -a --parents scripts/syscalltbl.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ + cp -a --parents scripts/syscallhdr.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ + cp -a --parents tools/arch/x86/include/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build cp -a --parents tools/arch/x86/include/uapi/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build cp -a --parents tools/objtool/arch/x86/lib $RPM_BUILD_ROOT/lib/modules/$KernelVer/build @@ -1919,15 +1993,21 @@ BuildKernel() { ( find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name '*.ko' | xargs /sbin/modinfo -l | \ grep -E -v 'GPL( v2)?$|Dual BSD/GPL$|Dual MPL/GPL$|GPL and additional rights$' ) && exit 1 - # remove files that will be auto generated by depmod at rpm -i time - pushd $RPM_BUILD_ROOT/lib/modules/$KernelVer/ - rm -f modules.{alias*,builtin.bin,dep*,*map,symbols*,devname,softdep} - popd + remove_depmod_files() + { + # remove files that will be auto generated by depmod at rpm -i time + pushd $RPM_BUILD_ROOT/lib/modules/$KernelVer/ + rm -f modules.{alias,alias.bin,builtin.alias.bin,builtin.bin} \ + modules.{dep,dep.bin,devname,softdep,symbols,symbols.bin} + popd + } + + remove_depmod_files # Identify modules in the kernel-modules-extras package - %{SOURCE17} $RPM_BUILD_ROOT lib/modules/$KernelVer $RPM_SOURCE_DIR/mod-extra.list + %{SOURCE20} $RPM_BUILD_ROOT lib/modules/$KernelVer $RPM_SOURCE_DIR/mod-extra.list # Identify modules in the kernel-modules-extras package - %{SOURCE17} $RPM_BUILD_ROOT lib/modules/$KernelVer %{SOURCE54} internal + %{SOURCE20} $RPM_BUILD_ROOT lib/modules/$KernelVer %{SOURCE84} internal # # Generate the kernel-core and kernel-modules files lists @@ -1974,10 +2054,7 @@ BuildKernel() { touch lib/modules/$KernelVer/modules.builtin fi - # remove files that will be auto generated by depmod at rpm -i time - pushd $RPM_BUILD_ROOT/lib/modules/$KernelVer/ - rm -f modules.{alias*,builtin.bin,dep*,*map,symbols*,devname,softdep} - popd + remove_depmod_files # Go back and find all of the various directories in the tree. We use this # for the dir lists in kernel-core @@ -2024,12 +2101,15 @@ BuildKernel() { %ifnarch armv7hl # Generate vmlinux.h and put it to kernel-devel path - # bpftool btf dump file vmlinux format c > $RPM_BUILD_ROOT/$DevelDir/vmlinux.h + bpftool btf dump file vmlinux format c > $RPM_BUILD_ROOT/$DevelDir/vmlinux.h %endif # prune junk from kernel-devel find $RPM_BUILD_ROOT/usr/src/kernels -name ".*.cmd" -delete + # Generate crashkernel default config + %{SOURCE83} "$KernelVer" "$Arch" "$RPM_BUILD_ROOT" + # Red Hat UEFI Secure Boot CA cert, which can be used to authenticate the kernel mkdir -p $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer %ifarch x86_64 aarch64 @@ -2142,12 +2222,10 @@ pushd tools/thermal/tmon/ %{tools_make} popd pushd tools/iio/ -# Needs to be fixed to pick up CFLAGS -%{__make} +%{tools_make} popd pushd tools/gpio/ -# Needs to be fixed to pick up CFLAGS -%{__make} +%{tools_make} popd # build VM tools pushd tools/vm/ @@ -2172,7 +2250,7 @@ popd # in the source tree. We installed them previously to $RPM_BUILD_ROOT/usr # but there's no way to tell the Makefile to take them from there. %{make} %{?_smp_mflags} headers_install -%{make} %{?_smp_mflags} ARCH=$Arch V=1 samples/bpf/ +%{make} %{?_smp_mflags} ARCH=$Arch V=1 M=samples/bpf/ || true # Prevent bpf selftests to build bpftool repeatedly: export BPFTOOL=$(pwd)/tools/bpf/bpftool/bpftool @@ -2288,7 +2366,7 @@ find Documentation -type d | xargs chmod u+w cd linux-%{KVERREL} %if %{with_doc} -docdir=$RPM_BUILD_ROOT%{_datadir}/doc/kernel-doc-%{rpmversion} +docdir=$RPM_BUILD_ROOT%{_datadir}/doc/kernel-doc-%{rpmversion}-%{pkgrelease} # copy the source over mkdir -p $docdir @@ -2337,14 +2415,14 @@ done rm -rf $RPM_BUILD_ROOT/usr/tmp-headers %endif -%if %{with_kernel_abi_whitelists} +%if %{with_kernel_abi_stablelists} # kabi directory INSTALL_KABI_PATH=$RPM_BUILD_ROOT/lib/modules/ mkdir -p $INSTALL_KABI_PATH # install kabi releases directories tar xjvf %{SOURCE300} -C $INSTALL_KABI_PATH -# with_kernel_abi_whitelists +# with_kernel_abi_stablelists %endif %if %{with_perf} @@ -2367,6 +2445,12 @@ rm -rf %{buildroot}/usr/lib/perf/include # perf man pages (note: implicit rpm magic compresses them later) mkdir -p %{buildroot}/%{_mandir}/man1 %{perf_make} DESTDIR=$RPM_BUILD_ROOT install-man + +# remove any tracevent files, eg. its plugins still gets built and installed, +# even if we build against system's libtracevent during perf build (by setting +# LIBTRACEEVENT_DYNAMIC=1 above in perf_make macro). Those files should already +# ship with libtraceevent package. +rm -rf %{buildroot}%{_libdir}/traceevent %endif %if %{with_tools} @@ -2402,10 +2486,10 @@ pushd tools/thermal/tmon %{tools_make} INSTALL_ROOT=%{buildroot} install popd pushd tools/iio -%{__make} DESTDIR=%{buildroot} install +%{tools_make} DESTDIR=%{buildroot} install popd pushd tools/gpio -%{__make} DESTDIR=%{buildroot} install +%{tools_make} DESTDIR=%{buildroot} install popd install -m644 -D %{SOURCE2002} %{buildroot}%{_sysconfdir}/logrotate.d/kvm_stat pushd tools/kvm/kvm_stat @@ -2528,7 +2612,7 @@ if [ "$HARDLINK" != "no" -a -x /usr/bin/hardlink -a ! -e /run/ostree-booted ] \ then\ (cd /usr/src/kernels/%{KVERREL}%{?1:+%{1}} &&\ /usr/bin/find . -type f | while read f; do\ - hardlink -c /usr/src/kernels/*%{?dist}.*/$f $f\ + hardlink -c /usr/src/kernels/*%{?dist}.*/$f $f > /dev/null\ done)\ fi\ %{nil} @@ -2656,8 +2740,8 @@ fi /usr/*-linux-gnu/include/* %endif -%if %{with_kernel_abi_whitelists} -%files -n kernel-abi-whitelists +%if %{with_kernel_abi_stablelists} +%files -n kernel-abi-stablelists /lib/modules/kabi-* %endif @@ -2673,16 +2757,15 @@ fi %if %{with_doc} %files doc %defattr(-,root,root) -%{_datadir}/doc/kernel-doc-%{rpmversion}/Documentation/* -%dir %{_datadir}/doc/kernel-doc-%{rpmversion}/Documentation -%dir %{_datadir}/doc/kernel-doc-%{rpmversion} +%{_datadir}/doc/kernel-doc-%{rpmversion}-%{pkgrelease}/Documentation/* +%dir %{_datadir}/doc/kernel-doc-%{rpmversion}-%{pkgrelease}/Documentation +%dir %{_datadir}/doc/kernel-doc-%{rpmversion}-%{pkgrelease} %endif %if %{with_perf} %files -n perf %{_bindir}/perf %{_libdir}/libperf-jvmti.so -%exclude %{_libdir}/traceevent %dir %{_libexecdir}/perf-core %{_libexecdir}/perf-core/* %{_datadir}/perf-core/* @@ -2791,7 +2874,7 @@ fi %endif %if %{with_gcov} -%ifarch x86_64 s390x ppc64le aarch64 +%ifnarch %nobuildarches noarch %files gcov %{_builddir} %endif @@ -2819,13 +2902,13 @@ fi /lib/modules/%{KVERREL}%{?3:+%{3}}/dtb \ %ghost /%{image_install_path}/dtb-%{KVERREL}%{?3:+%{3}} \ %endif\ -%attr(600,root,root) /lib/modules/%{KVERREL}%{?3:+%{3}}/System.map\ -%ghost /boot/System.map-%{KVERREL}%{?3:+%{3}}\ +%attr(0600, root, root) /lib/modules/%{KVERREL}%{?3:+%{3}}/System.map\ +%ghost %attr(0600, root, root) /boot/System.map-%{KVERREL}%{?3:+%{3}}\ /lib/modules/%{KVERREL}%{?3:+%{3}}/symvers.gz\ /lib/modules/%{KVERREL}%{?3:+%{3}}/config\ -%ghost /boot/symvers-%{KVERREL}%{?3:+%{3}}.gz\ -%ghost /boot/config-%{KVERREL}%{?3:+%{3}}\ -%ghost /boot/initramfs-%{KVERREL}%{?3:+%{3}}.img\ +%ghost %attr(0600, root, root) /boot/symvers-%{KVERREL}%{?3:+%{3}}.gz\ +%ghost %attr(0600, root, root) /boot/initramfs-%{KVERREL}%{?3:+%{3}}.img\ +%ghost %attr(0644, root, root) /boot/config-%{KVERREL}%{?3:+%{3}}\ %dir /lib/modules\ %dir /lib/modules/%{KVERREL}%{?3:+%{3}}\ %dir /lib/modules/%{KVERREL}%{?3:+%{3}}/kernel\ @@ -2833,6 +2916,7 @@ fi /lib/modules/%{KVERREL}%{?3:+%{3}}/source\ /lib/modules/%{KVERREL}%{?3:+%{3}}/updates\ /lib/modules/%{KVERREL}%{?3:+%{3}}/weak-updates\ +/lib/modules/%{KVERREL}%{?3:+%{3}}/crashkernel.default\ %{_datadir}/doc/kernel-keys/%{KVERREL}%{?3:+%{3}}\ %if %{1}\ /lib/modules/%{KVERREL}%{?3:+%{3}}/vdso\ @@ -2842,6 +2926,7 @@ fi %{expand:%%files %{?3:%{3}-}devel}\ %defverify(not mtime)\ /usr/src/kernels/%{KVERREL}%{?3:+%{3}}\ +%{expand:%%files %{?3:%{3}-}devel-matched}\ %{expand:%%files -f kernel-%{?3:%{3}-}modules-extra.list %{?3:%{3}-}modules-extra}\ %config(noreplace) /etc/modprobe.d/*-blacklist.conf\ %{expand:%%files -f kernel-%{?3:%{3}-}modules-internal.list %{?3:%{3}-}modules-internal}\ @@ -2858,10 +2943,11 @@ fi %kernel_variant_files %{_use_vdso} %{with_up} %kernel_variant_files %{_use_vdso} %{with_debug} debug -%if !%{debugbuildsenabled} +%if %{with_debug_meta} %files debug %files debug-core %files debug-devel +%files debug-devel-matched %files debug-modules %files debug-modules-extra %endif @@ -2886,910 +2972,116 @@ fi # # %changelog -* Mon Jul 19 2021 Justin M. Forbes [5.13.3-300] -- kernel-5.13.3-0 (Justin M. Forbes) -- Don't tag a release as [redhat] (Justin M. Forbes) -- platform/x86: amd-pmc: Fix missing unlock on error in amd_pmc_send_cmd() (Yang Yingliang) - -* Mon Jul 19 2021 Justin M. Forbes [5.13.3-0] -- Don't tag a release as [redhat] (Justin M. Forbes) -- platform/x86: amd-pmc: Fix missing unlock on error in amd_pmc_send_cmd() (Yang Yingliang) - -* Wed Jul 14 2021 Justin M. Forbes [5.13.2-0] -- platform/x86: amd-pmc: Use return code on suspend (Mario Limonciello) -- ACPI: PM: Only mark EC GPE for wakeup on Intel systems (Mario Limonciello) -- platform/x86: amd-pmc: Add new acpi id for future PMC controllers (Shyam Sundar S K) -- platform/x86: amd-pmc: Add support for ACPI ID AMDI0006 (Shyam Sundar S K) -- amd-pmc: Add support for logging s0ix counters (Shyam Sundar S K) -- platform/x86: amd-pmc: Add support for logging SMU metrics (Shyam Sundar S K) -- platform/x86: amd-pmc: call dump registers only once (Shyam Sundar S K) -- platform/x86: amd-pmc: Fix SMU firmware reporting mechanism (Shyam Sundar S K) -- platform/x86: amd-pmc: Fix command completion code (Shyam Sundar S K) -- ACPI: PM: Adjust behavior for field problems on AMD systems (Mario Limonciello) -- ACPI: PM: s2idle: Add support for new Microsoft UUID (Pratik Vishwakarma) -- ACPI: PM: s2idle: Add support for multiple func mask (Pratik Vishwakarma) -- ACPI: PM: s2idle: Refactor common code (Pratik Vishwakarma) -- ACPI: PM: s2idle: Use correct revision id (Pratik Vishwakarma) -- ACPI: PM: s2idle: Add missing LPS0 functions for AMD (Alex Deucher) -- ACPI: Add quirks for AMD Renoir/Lucienne CPUs to force the D3 hint (Mario Limonciello) -- ACPI: Check StorageD3Enable _DSD property in ACPI code (Mario Limonciello) -- nvme-pci: look for StorageD3Enable on companion ACPI device instead (Mario Limonciello) -- ACPI: processor idle: Fix up C-state latency if not ordered (Mario Limonciello) -- Revert "drm/rockchip: remove existing generic drivers to take over the device" (Justin M. Forbes) -- all: unify and cleanup i2c TPM2 modules (Peter Robinson) -- tpm_tis_spi: add missing SPI device ID entries (Javier Martinez Canillas) -- drm/rockchip: remove existing generic drivers to take over the device (Javier Martinez Canillas) -- arm64: dts: rockchip: disable USB type-c DisplayPort (Jian-Hong Pan) - -* Wed Jul 07 2021 Justin M. Forbes [5.13.1-0] -- Don't build bpftool as part of kernel (Justin M. Forbes) -- fedora: arm: Enable some i.MX8 options (Peter Robinson) -- Enable Landlock for Fedora (Justin M. Forbes) -- can: bcm: delay release of struct bcm_op after synchronize_rcu (Thadeu Lima de Souza Cascardo) -- Fix typos in fedora filters (Justin M. Forbes) -- More filtering for Fedora (Justin M. Forbes) -- Fix Fedora module filtering for spi-altera-dfl (Justin M. Forbes) -- Changes for building stable Fedora (Justin M. Forbes) -- Fedora 5.13 config updates (Justin M. Forbes) -- fedora: cleanup TCG_TIS_I2C_CR50 (Peter Robinson) -- fedora: drop duplicate configs (Peter Robinson) -- More Fedora config updates for 5.13 (Justin M. Forbes) -- redhat/configs: Enable needed drivers for BlueField SoC on aarch64 (Alaa Hleihel) [1858592 1858594 1858596] -- redhat: Rename mod-blacklist.sh to mod-denylist.sh (Prarit Bhargava) -- redhat/configs: enable CONFIG_NET_ACT_MPLS (Marcelo Ricardo Leitner) -- configs: Enable CONFIG_DEBUG_KERNEL for zfcpdump (Jiri Olsa) -- kernel.spec: Add support to use vmlinux.h (Don Zickus) -- spec: Add vmlinux.h to kernel-devel package (Jiri Olsa) -- Turn off DRM_XEN_FRONTEND for Fedora as we had DRM_XEN off already (Justin M. Forbes) -- Fedora 5.13 config updates pt 3 (Justin M. Forbes) -- all: enable ath11k wireless modules (Peter Robinson) -- all: Enable WWAN and associated MHI bus pieces (Peter Robinson) -- spec: Enable sefltests rpm build (Jiri Olsa) -- spec: Allow bpf selftest/samples to fail (Jiri Olsa) -- bpf, selftests: Disable tests that need clang13 (Toke Høiland-Jørgensen) -- kvm: Add kvm_stat.service file and kvm_stat logrotate config to the tools (Jiri Benc) -- kernel.spec: Add missing source files to kernel-selftests-internal (Jiri Benc) -- kernel.spec: selftests: add net/forwarding to TARGETS list (Jiri Benc) -- kernel.spec: selftests: add build requirement on libmnl-devel (Jiri Benc) -- kernel.spec: add action.o to kernel-selftests-internal (Jiri Benc) -- kernel.spec: avoid building bpftool repeatedly (Jiri Benc) -- kernel.spec: selftests require python3 (Jiri Benc) -- kernel.spec: skip selftests that failed to build (Jiri Benc) -- kernel.spec: fix installation of bpf selftests (Jiri Benc) -- redhat: fix samples and selftests make options (Jiri Benc) -- kernel.spec: enable mptcp selftests for kernel-selftests-internal (Jiri Benc) -- kernel.spec: Do not export shared objects from libexecdir to RPM Provides (Jiri Benc) -- kernel.spec: add missing dependency for the which package (Jiri Benc) -- kernel.spec: add netfilter selftests to kernel-selftests-internal (Jiri Benc) -- kernel.spec: move slabinfo and page_owner_sort debuginfo to tools-debuginfo (Jiri Benc) -- kernel.spec: package and ship VM tools (Jiri Benc) -- configs: enable CONFIG_PAGE_OWNER (Jiri Benc) -- kernel.spec: add coreutils (Jiri Benc) -- kernel.spec: add netdevsim driver selftests to kernel-selftests-internal (Jiri Benc) -- redhat/Makefile: Clean out the --without flags from the baseonly rule (Jiri Benc) -- kernel.spec: Stop building unnecessary rpms for baseonly builds (Jiri Benc) -- kernel.spec: disable more kabi switches for gcov build (Jiri Benc) -- kernel.spec: Rename kabi-dw base (Jiri Benc) -- kernel.spec: Fix error messages during build of zfcpdump kernel (Jiri Benc) -- kernel.spec: perf: remove bpf examples (Jiri Benc) -- kernel.spec: selftests should not depend on modules-internal (Jiri Benc) -- kernel.spec: build samples (Jiri Benc) -- kernel.spec: tools: sync missing options with RHEL 8 (Jiri Benc) -- redhat/configs: nftables: Enable extra flowtable symbols (Phil Sutter) -- redhat/configs: Sync netfilter options with RHEL8 (Phil Sutter) -- Fedora 5.13 config updates pt 2 (Justin M. Forbes) -- Move CONFIG_ARCH_INTEL_SOCFPGA up a level for Fedora (Justin M. Forbes) -- fedora: enable the Rockchip rk3399 pcie drivers (Peter Robinson) -- PCI: rockchip: Register IRQs just before pci_host_probe() (Javier Martinez Canillas) -- arm64: dts: rockchip: Update PCI host bridge window to 32-bit address memory (Punit Agrawal) -- Fedora 5.13 config updates pt 1 (Justin M. Forbes) -- Fix version requirement from opencsd-devel buildreq (Justin M. Forbes) -- configs/ark/s390: set CONFIG_MARCH_Z14 and CONFIG_TUNE_Z15 (Philipp Rudo) [1876435] -- configs/common/s390: Clean up CONFIG_{MARCH,TUNE}_Z* (Philipp Rudo) -- configs/process_configs.sh: make use of dummy-tools (Philipp Rudo) -- configs/common: disable CONFIG_INIT_STACK_ALL_{PATTERN,ZERO} (Philipp Rudo) -- configs/common/aarch64: disable CONFIG_RELR (Philipp Rudo) -- redhat/config: enable STMICRO nic for RHEL (Mark Salter) -- redhat/configs: Enable ARCH_TEGRA on RHEL (Mark Salter) -- redhat/configs: enable IMA_KEXEC for supported arches (Bruno Meneguele) -- redhat/configs: enable INTEGRITY_SIGNATURE to all arches (Bruno Meneguele) -- configs: enable CONFIG_LEDS_BRIGHTNESS_HW_CHANGED (Benjamin Tissoires) -- RHEL: disable io_uring support (Jeff Moyer) -- all: Changing CONFIG_UV_SYSFS to build uv_sysfs.ko as a loadable module. (Frank Ramsay) -- Enable NITRO_ENCLAVES on RHEL (Vitaly Kuznetsov) -- Update the Quick Start documentation (David Ward) -- redhat/configs: Set PVPANIC_MMIO for x86 and PVPANIC_PCI for aarch64 (Eric Auger) [1961178] -- Enable CONFIG_BPF_UNPRIV_DEFAULT_OFF (Jiri Olsa) -- configs/common/s390: disable CONFIG_QETH_{OSN,OSX} (Philipp Rudo) [1903201] -- Make CRYPTO_EC also builtin (Simo Sorce) [1947240] -- Do not hard-code a default value for DIST (David Ward) -- Override %%{debugbuildsenabled} if the --with-release option is used (David Ward) -- Improve comments in SPEC file, and move some option tests and macros (David Ward) -- configs: enable CONFIG_EXFAT_FS (Pavel Reichl) [1943423] -- Revert s390x/zfcpdump part of a9d179c40281 and ecbfddd98621 (Vladis Dronov) -- Embed crypto algos, modes and templates needed in the FIPS mode (Vladis Dronov) [1947240] -- configs: Add and enable CONFIG_HYPERV_TESTING for debug kernels (Mohammed Gamal) -- configs: enable CONFIG_CMA on x86_64 in ARK (David Hildenbrand) [1945002] -- rpmspec: build debug-* meta-packages if debug builds are disabled (Herton R. Krzesinski) -- UIO: disable unused config options (Aristeu Rozanski) [1957819] -- ARK-config: Make amd_pinctrl module builtin (Hans de Goede) -- rpmspec: revert/drop content hash for kernel-headers (Herton R. Krzesinski) -- rpmspec: fix check that calls InitBuildVars (Herton R. Krzesinski) -- fedora: enable zonefs (Damien Le Moal) -- redhat: load specific ARCH keys to INTEGRITY_PLATFORM_KEYRING (Bruno Meneguele) -- redhat: enable INTEGRITY_TRUSTED_KEYRING across all variants (Bruno Meneguele) -- redhat: enable SYSTEM_BLACKLIST_KEYRING across all variants (Bruno Meneguele) -- redhat: enable INTEGRITY_ASYMMETRIC_KEYS across all variants (Bruno Meneguele) -- Remove unused boot loader specification files (David Ward) -- redhat/configs: Enable mlx5 IPsec and TLS offloads (Alaa Hleihel) [1869674 1957636] -- Force DWARF4 because crash does not support DWARF5 yet (Justin M. Forbes) -- common: disable Apple Silicon generally (Peter Robinson) -- cleanup Intel's FPGA configs (Peter Robinson) -- common: move PTP KVM support from ark to common (Peter Robinson) -- Enable CONFIG_DRM_AMDGPU_USERPTR for everyone (Justin M. Forbes) -- redhat: add initial rpminspect configuration (Herton R. Krzesinski) -- fedora: arm updates for 5.13 (Peter Robinson) -- fedora: Enable WWAN and associated MHI bits (Peter Robinson) -- Update CONFIG_MODPROBE_PATH to /usr/sbin (Justin Forbes) -- Fedora set modprobe path (Justin M. Forbes) -- Keep sctp and l2tp modules in modules-extra (Don Zickus) -- Fix ppc64le cross build packaging (Don Zickus) -- Fedora: Make amd_pinctrl module builtin (Hans de Goede) -- Keep CONFIG_KASAN_HW_TAGS off for aarch64 debug configs (Justin M. Forbes) -- New configs in drivers/bus (Fedora Kernel Team) -- RHEL: Don't build KVM PR module on ppc64 (David Gibson) [1930649] -- Flip CONFIG_USB_ROLE_SWITCH from m to y (Justin M. Forbes) -- Set valid options for CONFIG_FW_LOADER_USER_HELPER (Justin M. Forbes) -- Clean up CONFIG_FB_MODE_HELPERS (Justin M. Forbes) -- Turn off CONFIG_VFIO for the s390x zfcpdump kernel (Justin M. Forbes) -- Delete unused CONFIG_SND_SOC_MAX98390 pending-common (Justin M. Forbes) -- Update pending-common configs, preparing to set correctly (Justin M. Forbes) -- Update fedora filters for surface (Justin M. Forbes) -- Build CONFIG_CRYPTO_ECDSA inline for s390x zfcpdump (Justin M. Forbes) -- Replace "flavour" where "variant" is meant instead (David Ward) -- Drop the %%{variant} macro and fix --with-vanilla (David Ward) -- Fix syntax of %%kernel_variant_files (David Ward) -- Change description of --without-vdso-install to fix typo (David Ward) -- Config updates to work around mismatches (Justin M. Forbes) -- CONFIG_SND_SOC_FSL_ASOC_CARD selects CONFIG_MFD_WM8994 now (Justin M. Forbes) -- wireguard: disable in FIPS mode (Hangbin Liu) [1940794] -- Enable mtdram for fedora (rhbz 1955916) (Justin M. Forbes) -- Remove reference to bpf-helpers man page (Justin M. Forbes) -- Fedora: enable more modules for surface devices (Dave Olsthoorn) -- Fix Fedora config mismatch for CONFIG_FSL_ENETC_IERB (Justin M. Forbes) -- hardlink is in /usr/bin/ now (Justin M. Forbes) -- Ensure CONFIG_KVM_BOOK3S_64_PR stays on in Fedora, even if it is turned off in RHEL (Justin M. Forbes) -- Set date in package release from repository commit, not system clock (David Ward) -- Use a better upstream tarball filename for snapshots (David Ward) -- Don't create empty pending-common files on pending-fedora commits (Don Zickus) -- Add redhat/configs/pending-common/generic/s390x/zfcpdump/CONFIG_NETFS_SUPPORT (Justin M. Forbes) -- Create ark-latest branch last for CI scripts (Don Zickus) -- Replace /usr/libexec/platform-python with /usr/bin/python3 (David Ward) -- Turn off ADI_AXI_ADC and AD9467 which now require CONFIG_OF (Justin M. Forbes) -- Export ark infrastructure files (Don Zickus) -- docs: Update docs to reflect newer workflow. (Don Zickus) -- Use upstream/master for merge-base with fallback to master (Don Zickus) -- Fedora: Turn off the SND_INTEL_BYT_PREFER_SOF option (Hans de Goede) -- filter-modules.sh.fedora: clean up "netprots" (Paul Bolle) -- filter-modules.sh.fedora: clean up "scsidrvs" (Paul Bolle) -- filter-*.sh.fedora: clean up "ethdrvs" (Paul Bolle) -- filter-*.sh.fedora: clean up "driverdirs" (Paul Bolle) -- filter-*.sh.fedora: remove incorrect entries (Paul Bolle) -- filter-*.sh.fedora: clean up "singlemods" (Paul Bolle) -- filter-modules.sh.fedora: drop unused list "iiodrvs" (Paul Bolle) -- Update mod-internal to fix depmod issue (Nico Pache) -- Turn on CONFIG_VDPA_SIM_NET (rhbz 1942343) (Justin M. Forbes) -- New configs in drivers/power (Fedora Kernel Team) -- Turn on CONFIG_NOUVEAU_DEBUG_PUSH for debug configs (Justin M. Forbes) -- Turn off KFENCE sampling by default for Fedora (Justin M. Forbes) -- Fedora config updates round 2 (Justin M. Forbes) -- New configs in drivers/soc (Jeremy Cline) -- filter-modules.sh: Fix copy/paste error 'input' (Paul Bolle) -- Update module filtering for 5.12 kernels (Justin M. Forbes) -- Fix genlog.py to ensure that comments retain "%%" characters. (Mark Mielke) -- New configs in drivers/leds (Fedora Kernel Team) -- Limit CONFIG_USB_CDNS_SUPPORT to x86_64 and arm in Fedora (David Ward) -- Fedora: Enable CHARGER_GPIO on aarch64 too (Peter Robinson) -- Fedora config updates (Justin M. Forbes) -- configs: enable CONFIG_WIREGUARD in ARK (Hangbin Liu) [1613522] -- Remove duplicate configs acroos fedora, ark and common (Don Zickus) -- Combine duplicate configs across ark and fedora into common (Don Zickus) -- common/ark: cleanup and unify the parport configs (Peter Robinson) -- iommu/vt-d: enable INTEL_IDXD_SVM for both fedora and rhel (Jerry Snitselaar) -- REDHAT: coresight: etm4x: Disable coresight on HPE Apollo 70 (Jeremy Linton) -- configs/common/generic: disable CONFIG_SLAB_MERGE_DEFAULT (Rafael Aquini) -- Remove _legacy_common_support (Justin M. Forbes) -- redhat/mod-blacklist.sh: Fix floppy blacklisting (Hans de Goede) -- New configs in fs/pstore (CKI@GitLab) -- New configs in arch/powerpc (Fedora Kernel Team) -- configs: enable BPF LSM on Fedora and ARK (Ondrej Mosnacek) -- configs: clean up LSM configs (Ondrej Mosnacek) -- New configs in drivers/platform (CKI@GitLab) -- New configs in drivers/firmware (CKI@GitLab) -- New configs in drivers/mailbox (Fedora Kernel Team) -- New configs in drivers/net/phy (Justin M. Forbes) -- Update CONFIG_DM_MULTIPATH_IOA (Augusto Caringi) -- New configs in mm/Kconfig (CKI@GitLab) -- New configs in arch/powerpc (Jeremy Cline) -- New configs in arch/powerpc (Jeremy Cline) -- New configs in drivers/input (Fedora Kernel Team) -- New configs in net/bluetooth (Justin M. Forbes) -- New configs in drivers/clk (Fedora Kernel Team) -- New configs in init/Kconfig (Jeremy Cline) -- redhat: allow running fedora-configs and rh-configs targets outside of redhat/ (Herton R. Krzesinski) -- all: unify the disable of goldfish (android emulation platform) (Peter Robinson) -- common: minor cleanup/de-dupe of dma/dmabuf debug configs (Peter Robinson) -- common/ark: these drivers/arches were removed in 5.12 (Peter Robinson) -- Correct kernel-devel make prepare build for 5.12. (Paulo E. Castro) -- redhat: add initial support for centos stream dist-git sync on Makefiles (Herton R. Krzesinski) -- redhat/configs: Enable CONFIG_SCHED_STACK_END_CHECK for Fedora and ARK (Josh Poimboeuf) [1856174] -- CONFIG_VFIO now selects IOMMU_API instead of depending on it, causing several config mismatches for the zfcpdump kernel (Justin M. Forbes) -- Turn off weak-modules for Fedora (Justin M. Forbes) -- redhat: enable CONFIG_FW_LOADER_COMPRESS for ARK (Herton R. Krzesinski) [1939095] -- Fedora: filters: update to move dfl-emif to modules (Peter Robinson) -- drop duplicate DEVFREQ_GOV_SIMPLE_ONDEMAND config (Peter Robinson) -- efi: The EFI_VARS is legacy and now x86 only (Peter Robinson) -- common: enable RTC_SYSTOHC to supplement update_persistent_clock64 (Peter Robinson) -- generic: arm: enable SCMI for all options (Peter Robinson) -- fedora: the PCH_CAN driver is x86-32 only (Peter Robinson) -- common: disable legacy CAN device support (Peter Robinson) -- common: Enable Microchip MCP251x/MCP251xFD CAN controllers (Peter Robinson) -- common: Bosch MCAN support for Intel Elkhart Lake (Peter Robinson) -- common: enable CAN_PEAK_PCIEFD PCI-E driver (Peter Robinson) -- common: disable CAN_PEAK_PCIEC PCAN-ExpressCard (Peter Robinson) -- common: enable common CAN layer 2 protocols (Peter Robinson) -- ark: disable CAN_LEDS option (Peter Robinson) -- Fedora: Turn on SND_SOC_INTEL_SKYLAKE_HDAUDIO_CODEC option (Hans de Goede) -- Fedora: enable modules for surface devices (Dave Olsthoorn) -- Turn on SND_SOC_INTEL_SOUNDWIRE_SOF_MACH for Fedora again (Justin M. Forbes) -- common: fix WM8804 codec dependencies (Peter Robinson) -- Build SERIO_SERPORT as a module (Peter Robinson) -- input: touchscreen: move ELO and Wacom serial touchscreens to x86 (Peter Robinson) -- Sync serio touchscreens for non x86 architectures to the same as ARK (Peter Robinson) -- Only enable SERIO_LIBPS2 on x86 (Peter Robinson) -- Only enable PC keyboard controller and associated keyboard on x86 (Peter Robinson) -- Generic: Mouse: Tweak generic serial mouse options (Peter Robinson) -- Only enable PS2 Mouse options on x86 (Peter Robinson) -- Disable bluetooth highspeed by default (Peter Robinson) -- Fedora: A few more general updates for 5.12 window (Peter Robinson) -- Fedora: Updates for 5.12 merge window (Peter Robinson) -- Fedora: remove dead options that were removed upstream (Peter Robinson) -- redhat: remove CONFIG_DRM_PANEL_XINGBANGDA_XBD599 (Herton R. Krzesinski) -- New configs in arch/powerpc (Fedora Kernel Team) -- Turn on CONFIG_PPC_QUEUED_SPINLOCKS as it is default upstream now (Justin M. Forbes) -- Update pending-common configs to address new upstream config deps (Justin M. Forbes) -- rpmspec: ship gpio-watch.debug in the proper debuginfo package (Herton R. Krzesinski) -- Removed description text as a comment confuses the config generation (Justin M. Forbes) -- New configs in drivers/dma-buf (Jeremy Cline) -- Fedora: ARMv7: build for 16 CPUs. (Peter Robinson) -- Fedora: only enable DEBUG_HIGHMEM on debug kernels (Peter Robinson) -- process_configs.sh: fix find/xargs data flow (Ondrej Mosnacek) -- Fedora config update (Justin M. Forbes) -- fedora: minor arm sound config updates (Peter Robinson) -- Fix trailing white space in redhat/configs/fedora/generic/CONFIG_SND_INTEL_BYT_PREFER_SOF (Justin M. Forbes) -- Add a redhat/rebase-notes.txt file (Hans de Goede) -- Turn on SND_INTEL_BYT_PREFER_SOF for Fedora (Hans de Goede) -- CI: Drop MR ID from the name variable (Veronika Kabatova) -- redhat: add DUP and kpatch certificates to system trusted keys for RHEL build (Herton R. Krzesinski) -- The comments in CONFIG_USB_RTL8153_ECM actually turn off CONFIG_USB_RTL8152 (Justin M. Forbes) -- Update CKI pipeline project (Veronika Kabatova) -- Turn off additional KASAN options for Fedora (Justin M. Forbes) -- Rename the master branch to rawhide for Fedora (Justin M. Forbes) -- Makefile targets for packit integration (Ben Crocker) -- Turn off KASAN for rawhide debug builds (Justin M. Forbes) -- New configs in arch/arm64 (Justin Forbes) -- Remove deprecated Intel MIC config options (Peter Robinson) -- redhat: replace inline awk script with genlog.py call (Herton R. Krzesinski) -- redhat: add genlog.py script (Herton R. Krzesinski) -- kernel.spec.template - fix use_vdso usage (Ben Crocker) -- Turn off vdso_install for ppc (Justin M. Forbes) -- Remove bpf-helpers.7 from bpftool package (Jiri Olsa) -- New configs in lib/Kconfig.debug (Fedora Kernel Team) -- Turn off CONFIG_VIRTIO_CONSOLE for s390x zfcpdump (Justin M. Forbes) -- New configs in drivers/clk (Justin M. Forbes) -- Keep VIRTIO_CONSOLE on s390x available. (Jakub Čajka) -- New configs in lib/Kconfig.debug (Jeremy Cline) -- Fedora 5.11 config updates part 4 (Justin M. Forbes) -- Fedora 5.11 config updates part 3 (Justin M. Forbes) -- Fedora 5.11 config updates part 2 (Justin M. Forbes) -- Update internal (test) module list from RHEL-8 (Joe Lawrence) [1915073] -- Fix USB_XHCI_PCI regression (Justin M. Forbes) -- fedora: fixes for ARMv7 build issue by disabling HIGHPTE (Peter Robinson) -- all: s390x: Increase CONFIG_PCI_NR_FUNCTIONS to 512 (#1888735) (Dan Horák) -- Fedora 5.11 configs pt 1 (Justin M. Forbes) -- redhat: avoid conflict with mod-blacklist.sh and released_kernel defined (Herton R. Krzesinski) -- redhat: handle certificate files conditionally as done for src.rpm (Herton R. Krzesinski) -- specfile: add %%{?_smp_mflags} to "make headers_install" in tools/testing/selftests (Denys Vlasenko) -- specfile: add %%{?_smp_mflags} to "make samples/bpf/" (Denys Vlasenko) -- Run MR testing in CKI pipeline (Veronika Kabatova) -- Reword comment (Nicolas Chauvet) -- Add with_cross_arm conditional (Nicolas Chauvet) -- Redefines __strip if with_cross (Nicolas Chauvet) -- fedora: only enable ACPI_CONFIGFS, ACPI_CUSTOM_METHOD in debug kernels (Peter Robinson) -- fedora: User the same EFI_CUSTOM_SSDT_OVERLAYS as ARK (Peter Robinson) -- all: all arches/kernels enable the same DMI options (Peter Robinson) -- all: move SENSORS_ACPI_POWER to common/generic (Peter Robinson) -- fedora: PCIE_HISI_ERR is already in common (Peter Robinson) -- all: all ACPI platforms enable ATA_ACPI so move it to common (Peter Robinson) -- all: x86: move shared x86 acpi config options to generic (Peter Robinson) -- All: x86: Move ACPI_VIDEO to common/x86 (Peter Robinson) -- All: x86: Enable ACPI_DPTF (Intel DPTF) (Peter Robinson) -- All: enable ACPI_BGRT for all ACPI platforms. (Peter Robinson) -- All: Only build ACPI_EC_DEBUGFS for debug kernels (Peter Robinson) -- All: Disable Intel Classmate PC ACPI_CMPC option (Peter Robinson) -- cleanup: ACPI_PROCFS_POWER was removed upstream (Peter Robinson) -- All: ACPI: De-dupe the ACPI options that are the same across ark/fedora on x86/arm (Peter Robinson) -- Enable the vkms module in Fedora (Jeremy Cline) -- Fedora: arm updates for 5.11 and general cross Fedora cleanups (Peter Robinson) -- Add gcc-c++ to BuildRequires (Justin M. Forbes) -- Update CONFIG_KASAN_HW_TAGS (Justin M. Forbes) -- fedora: arm: move generic power off/reset to all arm (Peter Robinson) -- fedora: ARMv7: build in DEVFREQ_GOV_SIMPLE_ONDEMAND until I work out why it's changed (Peter Robinson) -- fedora: cleanup joystick_adc (Peter Robinson) -- fedora: update some display options (Peter Robinson) -- fedora: arm: enable TI PRU options (Peter Robinson) -- fedora: arm: minor exynos plaform updates (Peter Robinson) -- arm: SoC: disable Toshiba Visconti SoC (Peter Robinson) -- common: disable ARCH_BCM4908 (NFC) (Peter Robinson) -- fedora: minor arm config updates (Peter Robinson) -- fedora: enable Tegra 234 SoC (Peter Robinson) -- fedora: arm: enable new Hikey 3xx options (Peter Robinson) -- Fedora: USB updates (Peter Robinson) -- fedora: enable the GNSS receiver subsystem (Peter Robinson) -- Remove POWER_AVS as no longer upstream (Peter Robinson) -- Cleanup RESET_RASPBERRYPI (Peter Robinson) -- Cleanup GPIO_CDEV_V1 options. (Peter Robinson) -- fedora: arm crypto updates (Peter Robinson) -- CONFIG_KASAN_HW_TAGS for aarch64 (Justin M. Forbes) -- Fedora: cleanup PCMCIA configs, move to x86 (Peter Robinson) -- New configs in drivers/rtc (Fedora Kernel Team) -- redhat/configs: Enable CONFIG_GCC_PLUGIN_STRUCTLEAK_BYREF_ALL (Josh Poimboeuf) [1856176] -- redhat/configs: Enable CONFIG_GCC_PLUGIN_STRUCTLEAK (Josh Poimboeuf) [1856176] -- redhat/configs: Enable CONFIG_GCC_PLUGINS on ARK (Josh Poimboeuf) [1856176] -- redhat/configs: Enable CONFIG_KASAN on Fedora (Josh Poimboeuf) [1856176] -- New configs in init/Kconfig (Fedora Kernel Team) -- build_configs.sh: Fix syntax flagged by shellcheck (Ben Crocker) -- genspec.sh: Fix syntax flagged by shellcheck (Ben Crocker) -- mod-blacklist.sh: Fix syntax flagged by shellcheck (Ben Crocker) -- Enable Speakup accessibility driver (Justin M. Forbes) -- New configs in init/Kconfig (Fedora Kernel Team) -- Fix fedora config mismatch due to dep changes (Justin M. Forbes) -- New configs in drivers/crypto (Jeremy Cline) -- Remove duplicate ENERGY_MODEL configs (Peter Robinson) -- This is selected by PCIE_QCOM so must match (Justin M. Forbes) -- drop unused BACKLIGHT_GENERIC (Peter Robinson) -- Remove cp instruction already handled in instruction below. (Paulo E. Castro) -- Add all the dependencies gleaned from running `make prepare` on a bloated devel kernel. (Paulo E. Castro) -- Add tools to path mangling script. (Paulo E. Castro) -- Remove duplicate cp statement which is also not specific to x86. (Paulo E. Castro) -- Correct orc_types failure whilst running `make prepare` https://bugzilla.redhat.com/show_bug.cgi?id=1882854 (Paulo E. Castro) -- redhat: ark: enable CONFIG_IKHEADERS (Jiri Olsa) -- Add missing '$' sign to (GIT) in redhat/Makefile (Augusto Caringi) -- Remove filterdiff and use native git instead (Don Zickus) -- New configs in net/sched (Justin M. Forbes) -- New configs in drivers/mfd (CKI@GitLab) -- New configs in drivers/mfd (Fedora Kernel Team) -- New configs in drivers/firmware (Fedora Kernel Team) -- Temporarily backout parallel xz script (Justin M. Forbes) -- redhat: explicitly disable CONFIG_IMA_APPRAISE_SIGNED_INIT (Bruno Meneguele) -- redhat: enable CONFIG_EVM_LOAD_X509 on ARK (Bruno Meneguele) -- redhat: enable CONFIG_EVM_ATTR_FSUUID on ARK (Bruno Meneguele) -- redhat: enable CONFIG_EVM in all arches and flavors (Bruno Meneguele) -- redhat: enable CONFIG_IMA_LOAD_X509 on ARK (Bruno Meneguele) -- redhat: set CONFIG_IMA_DEFAULT_HASH to SHA256 (Bruno Meneguele) -- redhat: enable CONFIG_IMA_SECURE_AND_OR_TRUSTED_BOOT (Bruno Meneguele) -- redhat: enable CONFIG_IMA_READ_POLICY on ARK (Bruno Meneguele) -- redhat: set default IMA template for all ARK arches (Bruno Meneguele) -- redhat: enable CONFIG_IMA_DEFAULT_HASH_SHA256 for all flavors (Bruno Meneguele) -- redhat: disable CONFIG_IMA_DEFAULT_HASH_SHA1 (Bruno Meneguele) -- redhat: enable CONFIG_IMA_ARCH_POLICY for ppc and x86 (Bruno Meneguele) -- redhat: enable CONFIG_IMA_APPRAISE_MODSIG (Bruno Meneguele) -- redhat: enable CONFIG_IMA_APPRAISE_BOOTPARAM (Bruno Meneguele) -- redhat: enable CONFIG_IMA_APPRAISE (Bruno Meneguele) -- redhat: enable CONFIG_INTEGRITY for aarch64 (Bruno Meneguele) -- kernel: Update some missing KASAN/KCSAN options (Jeremy Linton) -- kernel: Enable coresight on aarch64 (Jeremy Linton) -- Update CONFIG_INET6_ESPINTCP (Justin Forbes) -- New configs in net/ipv6 (Justin M. Forbes) -- fedora: move CONFIG_RTC_NVMEM options from ark to common (Peter Robinson) -- configs: Enable CONFIG_DEBUG_INFO_BTF (Don Zickus) -- fedora: some minor arm audio config tweaks (Peter Robinson) -- Ship xpad with default modules on Fedora and RHEL (Bastien Nocera) -- Fedora: Only enable legacy serial/game port joysticks on x86 (Peter Robinson) -- Fedora: Enable the options required for the Librem 5 Phone (Peter Robinson) -- Fedora config update (Justin M. Forbes) -- Fedora config change because CONFIG_FSL_DPAA2_ETH now selects CONFIG_FSL_XGMAC_MDIO (Justin M. Forbes) -- redhat: generic enable CONFIG_INET_MPTCP_DIAG (Davide Caratti) -- Fedora config update (Justin M. Forbes) -- Enable NANDSIM for Fedora (Justin M. Forbes) -- Re-enable CONFIG_ACPI_TABLE_UPGRADE for Fedora since upstream disables this if secureboot is active (Justin M. Forbes) -- Ath11k related config updates (Justin M. Forbes) -- Fedora config updates for ath11k (Justin M. Forbes) -- Turn on ATH11K for Fedora (Justin M. Forbes) -- redhat: enable CONFIG_INTEL_IOMMU_SVM (Jerry Snitselaar) -- More Fedora config fixes (Justin M. Forbes) -- Fedora 5.10 config updates (Justin M. Forbes) -- Fedora 5.10 configs round 1 (Justin M. Forbes) +* Tue Nov 09 2021 Justin M. Forbes [5.15-200] +- Input: i8042 - Add quirk for Fujitsu Lifebook T725 (Takashi Iwai) + +* Mon Nov 08 2021 Justin M. Forbes [5.15-0] +- btrfs: fix memory ordering between normal and ordered work functions (Nikolay Borisov) +- Turn on COMMON_CLK_AXG_AUDIO for Fedora rhbz 2020481 (Justin M. Forbes) +- fedora: gpio: tweak some GPIO drivers (Peter Robinson) +- Enable VMXNET3 for aarch64 (Peter Robinson) +- all: drop removed obsolete config options (Peter Robinson) +- Revert "fedora: Disable fbdev drivers and use simpledrm instead" (Justin M. Forbes) +- Enable binder for fedora (Justin M. Forbes) +- Add fedora-dist-git-test.sh and release_targets (Justin M. Forbes) +- Update Makefile.variables for 5.15 stable (Justin M. Forbes) +- Reset RHEL_RELEASE for 5.16 (Justin M. Forbes) +- redhat: configs: Update configs for vmware (Kamal Heib) +- Fedora configs for 5.15 (Justin M. Forbes) +- redhat/kernel.spec.template: don't hardcode gcov arches (Jan Stancek) +- redhat/configs: create a separate config for gcov options (Jan Stancek) +- Update documentation with FAQ and update frequency (Don Zickus) +- Document force pull option for mirroring (Don Zickus) +- Ignore the rhel9 kabi files (Don Zickus) +- Remove legacy elrdy cruft (Don Zickus) + +* Fri Oct 29 2021 Fedora Kernel Team [5.15-0.rc7.20211029gitf25a5481af12.56] +- redhat/configs/evaluate_configs: walk cfgvariants line by line (Jan Stancek) +- redhat/configs/evaluate_configs: insert EMPTY tags at correct place (Jan Stancek) +- redhat: make dist-srpm-gcov add to BUILDOPTS (Jan Stancek) + +* Thu Oct 28 2021 Fedora Kernel Team [5.15-0.rc7.20211028git1fc596a56b33.55] +- Build CONFIG_SPI_PXA2XX as a module on x86 (Justin M. Forbes) +- redhat/configs: enable CONFIG_BCMGENET as module (Joel Savitz) + +* Wed Oct 27 2021 Fedora Kernel Team [5.15-0.rc7.20211027gitd25f27432f80.54] - Fedora config updates (Justin M. Forbes) -- Allow kernel-tools to build without selftests (Don Zickus) -- Allow building of kernel-tools standalone (Don Zickus) -- redhat: ark: disable CONFIG_NET_ACT_CTINFO (Davide Caratti) -- redhat: ark: disable CONFIG_NET_SCH_TEQL (Davide Caratti) -- redhat: ark: disable CONFIG_NET_SCH_SFB (Davide Caratti) -- redhat: ark: disable CONFIG_NET_SCH_QFQ (Davide Caratti) -- redhat: ark: disable CONFIG_NET_SCH_PLUG (Davide Caratti) -- redhat: ark: disable CONFIG_NET_SCH_PIE (Davide Caratti) -- redhat: ark: disable CONFIG_NET_SCH_MULTIQ (Davide Caratti) -- redhat: ark: disable CONFIG_NET_SCH_HHF (Davide Caratti) -- redhat: ark: disable CONFIG_NET_SCH_DSMARK (Davide Caratti) -- redhat: ark: disable CONFIG_NET_SCH_DRR (Davide Caratti) -- redhat: ark: disable CONFIG_NET_SCH_CODEL (Davide Caratti) -- redhat: ark: disable CONFIG_NET_SCH_CHOKE (Davide Caratti) -- redhat: ark: disable CONFIG_NET_SCH_CBQ (Davide Caratti) -- redhat: ark: disable CONFIG_NET_SCH_ATM (Davide Caratti) -- redhat: ark: disable CONFIG_NET_EMATCH and sub-targets (Davide Caratti) -- redhat: ark: disable CONFIG_NET_CLS_TCINDEX (Davide Caratti) -- redhat: ark: disable CONFIG_NET_CLS_RSVP6 (Davide Caratti) -- redhat: ark: disable CONFIG_NET_CLS_RSVP (Davide Caratti) -- redhat: ark: disable CONFIG_NET_CLS_ROUTE4 (Davide Caratti) -- redhat: ark: disable CONFIG_NET_CLS_BASIC (Davide Caratti) -- redhat: ark: disable CONFIG_NET_ACT_SKBMOD (Davide Caratti) -- redhat: ark: disable CONFIG_NET_ACT_SIMP (Davide Caratti) -- redhat: ark: disable CONFIG_NET_ACT_NAT (Davide Caratti) -- arm64/defconfig: Enable CONFIG_KEXEC_FILE (Bhupesh Sharma) [1821565] -- redhat/configs: Cleanup CONFIG_CRYPTO_SHA512 (Prarit Bhargava) -- New configs in drivers/mfd (Fedora Kernel Team) -- Fix LTO issues with kernel-tools (Don Zickus) -- Point pathfix to the new location for gen_compile_commands.py (Justin M. Forbes) -- configs: Disable CONFIG_SECURITY_SELINUX_DISABLE (Ondrej Mosnacek) -- [Automatic] Handle config dependency changes (Don Zickus) -- configs/iommu: Add config comment to empty CONFIG_SUN50I_IOMMU file (Jerry Snitselaar) -- New configs in kernel/trace (Fedora Kernel Team) -- Fix Fedora config locations (Justin M. Forbes) -- Fedora config updates (Justin M. Forbes) -- configs: enable CONFIG_CRYPTO_CTS=y so cts(cbc(aes)) is available in FIPS mode (Vladis Dronov) [1855161] -- Partial revert: Add master merge check (Don Zickus) -- Update Maintainers doc to reflect workflow changes (Don Zickus) -- WIP: redhat/docs: Update documentation for single branch workflow (Prarit Bhargava) -- Add CONFIG_ARM64_MTE which is not picked up by the config scripts for some reason (Justin M. Forbes) -- Disable Speakup synth DECEXT (Justin M. Forbes) -- Enable Speakup for Fedora since it is out of staging (Justin M. Forbes) -- Modify patchlist changelog output (Don Zickus) -- process_configs.sh: Fix syntax flagged by shellcheck (Ben Crocker) -- generate_all_configs.sh: Fix syntax flagged by shellcheck (Ben Crocker) -- redhat/self-test: Initial commit (Ben Crocker) -- KEYS: Make use of platform keyring for module signature verify (Robert Holmes) -- Drop that for now (Laura Abbott) -- Input: rmi4 - remove the need for artificial IRQ in case of HID (Benjamin Tissoires) -- ARM: tegra: usb no reset (Peter Robinson) -- arm: make CONFIG_HIGHPTE optional without CONFIG_EXPERT (Jon Masters) -- Add option of 13 for FORCE_MAX_ZONEORDER (Peter Robinson) -- s390: Lock down the kernel when the IPL secure flag is set (Jeremy Cline) -- efi: Lock down the kernel if booted in secure boot mode (David Howells) -- efi: Add an EFI_SECURE_BOOT flag to indicate secure boot mode (David Howells) -- security: lockdown: expose a hook to lock the kernel down (Jeremy Cline) -- Make get_cert_list() use efi_status_to_str() to print error messages. (Peter Jones) -- Add efi_status_to_str() and rework efi_status_to_err(). (Peter Jones) -- arm: aarch64: Drop the EXPERT setting from ARM64_FORCE_52BIT (Jeremy Cline) -- iommu/arm-smmu: workaround DMA mode issues (Laura Abbott) -- ipmi: do not configure ipmi for HPE m400 (Laura Abbott) [1670017] -- scsi: smartpqi: add inspur advantech ids (Don Brace) -- ahci: thunderx2: Fix for errata that affects stop engine (Robert Richter) -- Vulcan: AHCI PCI bar fix for Broadcom Vulcan early silicon (Robert Richter) -- kdump: fix a grammar issue in a kernel message (Dave Young) [1507353] -- kdump: add support for crashkernel=auto (Jeremy Cline) -- kdump: round up the total memory size to 128M for crashkernel reservation (Dave Young) [1507353] -- acpi: prefer booting with ACPI over DTS (Mark Salter) [1576869] -- aarch64: acpi scan: Fix regression related to X-Gene UARTs (Mark Salter) [1519554] -- ACPI / irq: Workaround firmware issue on X-Gene based m400 (Mark Salter) [1519554] -- ACPI: APEI: arm64: Ignore broken HPE moonshot APEI support (Al Stone) [1518076] -- Stop merging ark-patches for release (Don Zickus) -- Fix path location for ark-update-configs.sh (Don Zickus) -- Combine Red Hat patches into single patch (Don Zickus) -- New configs in drivers/misc (Jeremy Cline) -- New configs in drivers/net/wireless (Justin M. Forbes) -- New configs in drivers/phy (Fedora Kernel Team) -- New configs in drivers/tty (Fedora Kernel Team) -- Set SquashFS decompression options for all flavors to match RHEL (Bohdan Khomutskyi) -- configs: Enable CONFIG_ENERGY_MODEL (Phil Auld) -- New configs in drivers/pinctrl (Fedora Kernel Team) -- Update CONFIG_THERMAL_NETLINK (Justin Forbes) -- Separate merge-upstream and release stages (Don Zickus) -- Re-enable CONFIG_IR_SERIAL on Fedora (Prarit Bhargava) -- Create Patchlist.changelog file (Don Zickus) -- Filter out upstream commits from changelog (Don Zickus) -- Merge Upstream script fixes (Don Zickus) -- kernel.spec: Remove kernel-keys directory on rpm erase (Prarit Bhargava) -- Add mlx5_vdpa to module filter for Fedora (Justin M. Forbes) -- Add python3-sphinx_rtd_theme buildreq for docs (Justin M. Forbes) -- redhat/configs/process_configs.sh: Remove *.config.orig files (Prarit Bhargava) -- redhat/configs/process_configs.sh: Add process_configs_known_broken flag (Prarit Bhargava) -- redhat/Makefile: Fix '*-configs' targets (Prarit Bhargava) -- dist-merge-upstream: Checkout known branch for ci scripts (Don Zickus) -- kernel.spec: don't override upstream compiler flags for ppc64le (Dan Horák) -- Fedora config updates (Justin M. Forbes) -- Fedora confi gupdate (Justin M. Forbes) -- mod-sign.sh: Fix syntax flagged by shellcheck (Ben Crocker) -- Swap how ark-latest is built (Don Zickus) -- Add extra version bump to os-build branch (Don Zickus) -- dist-release: Avoid needless version bump. (Don Zickus) -- Add dist-fedora-release target (Don Zickus) -- Remove redundant code in dist-release (Don Zickus) -- Makefile.common rename TAG to _TAG (Don Zickus) -- Fedora config change (Justin M. Forbes) -- Fedora filter update (Justin M. Forbes) -- Config update for Fedora (Justin M. Forbes) -- enable PROTECTED_VIRTUALIZATION_GUEST for all s390x kernels (Dan Horák) -- redhat: ark: enable CONFIG_NET_SCH_TAPRIO (Davide Caratti) -- redhat: ark: enable CONFIG_NET_SCH_ETF (Davide Caratti) -- More Fedora config updates (Justin M. Forbes) -- New config deps (Justin M. Forbes) -- Fedora config updates (Justin M. Forbes) -- First half of config updates for Fedora (Justin M. Forbes) -- Updates for Fedora arm architectures for the 5.9 window (Peter Robinson) -- Merge 5.9 config changes from Peter Robinson (Justin M. Forbes) -- Add config options that only show up when we prep on arm (Justin M. Forbes) -- Config updates for Fedora (Justin M. Forbes) -- fedora: enable enery model (Peter Robinson) -- Use the configs/generic config for SND_HDA_INTEL everywhere (Peter Robinson) -- Enable ZSTD compression algorithm on all kernels (Peter Robinson) -- Enable ARM_SMCCC_SOC_ID on all aarch64 kernels (Peter Robinson) -- iio: enable LTR-559 light and proximity sensor (Peter Robinson) -- iio: chemical: enable some popular chemical and partical sensors (Peter Robinson) -- More mismatches (Justin M. Forbes) -- Fedora config change due to deps (Justin M. Forbes) -- CONFIG_SND_SOC_MAX98390 is now selected by SND_SOC_INTEL_DA7219_MAX98357A_GENERIC (Justin M. Forbes) -- Config change required for build part 2 (Justin M. Forbes) -- Config change required for build (Justin M. Forbes) -- Fedora config update (Justin M. Forbes) -- Add ability to sync upstream through Makefile (Don Zickus) -- Add master merge check (Don Zickus) -- Replace hardcoded values 'os-build' and project id with variables (Don Zickus) -- redhat/Makefile.common: Fix MARKER (Prarit Bhargava) -- gitattributes: Remove unnecesary export restrictions (Prarit Bhargava) -- Add new certs for dual signing with boothole (Justin M. Forbes) -- Update secureboot signing for dual keys (Justin M. Forbes) -- fedora: enable LEDS_SGM3140 for arm configs (Peter Robinson) -- Enable CONFIG_DM_VERITY_VERIFY_ROOTHASH_SIG (Justin M. Forbes) -- redhat/configs: Fix common CONFIGs (Prarit Bhargava) -- redhat/configs: General CONFIG cleanups (Prarit Bhargava) -- redhat/configs: Update & generalize evaluate_configs (Prarit Bhargava) -- fedora: arm: Update some meson config options (Peter Robinson) -- redhat/docs: Add Fedora RPM tagging date (Prarit Bhargava) -- Update config for renamed panel driver. (Peter Robinson) -- Enable SERIAL_SC16IS7XX for SPI interfaces (Peter Robinson) -- s390x-zfcpdump: Handle missing Module.symvers file (Don Zickus) -- Fedora config updates (Justin M. Forbes) -- redhat/configs: Add .tmp files to .gitignore (Prarit Bhargava) -- disable uncommon TCP congestion control algorithms (Davide Caratti) -- Add new bpf man pages (Justin M. Forbes) -- Add default option for CONFIG_ARM64_BTI_KERNEL to pending-common so that eln kernels build (Justin M. Forbes) -- redhat/Makefile: Add fedora-configs and rh-configs make targets (Prarit Bhargava) -- redhat/configs: Use SHA512 for module signing (Prarit Bhargava) -- genspec.sh: 'touch' empty Patchlist file for single tarball (Don Zickus) -- Fedora config update for rc1 (Justin M. Forbes) -- Fedora config updates (Justin M. Forbes) -- Fedora config updates (Justin M. Forbes) -- redhat/Makefile.common: fix RPMKSUBLEVEL condition (Ondrej Mosnacek) -- redhat/Makefile: silence KABI tar output (Ondrej Mosnacek) -- One more Fedora config update (Justin M. Forbes) -- Fedora config updates (Justin M. Forbes) -- Fix PATCHLEVEL for merge window (Justin M. Forbes) -- Change ark CONFIG_COMMON_CLK to yes, it is selected already by other options (Justin M. Forbes) -- Fedora config updates (Justin M. Forbes) -- Fedora config updates (Justin M. Forbes) -- Fedora config updates (Justin M. Forbes) -- More module filtering for Fedora (Justin M. Forbes) -- Update filters for rnbd in Fedora (Justin M. Forbes) -- Fedora config updates (Justin M. Forbes) -- Fix up module filtering for 5.8 (Justin M. Forbes) -- Fedora config updates (Justin M. Forbes) -- More Fedora config work (Justin M. Forbes) -- RTW88BE and CE have been extracted to their own modules (Justin M. Forbes) -- Set CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK for Fedora (Justin M. Forbes) -- Fedora config updates (Justin M. Forbes) -- Arm64 Use Branch Target Identification for kernel (Justin M. Forbes) -- Change value of CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE (Justin M. Forbes) -- Fedora config updates (Justin M. Forbes) -- Fix configs for Fedora (Justin M. Forbes) -- Add zero-commit to format-patch options (Justin M. Forbes) -- Copy Makefile.rhelver as a source file rather than a patch (Jeremy Cline) -- Move the sed to clear the patch templating outside of conditionals (Justin M. Forbes) -- Match template format in kernel.spec.template (Justin M. Forbes) -- Break out the Patches into individual files for dist-git (Justin M. Forbes) -- Break the Red Hat patch into individual commits (Jeremy Cline) -- Fix update_scripts.sh unselective pattern sub (David Howells) -- Add cec to the filter overrides (Justin M. Forbes) -- Add overrides to filter-modules.sh (Justin M. Forbes) -- redhat/configs: Enable CONFIG_SMC91X and disable CONFIG_SMC911X (Prarit Bhargava) [1722136] -- Include bpftool-struct_ops man page in the bpftool package (Jeremy Cline) -- Add sharedbuffer_configuration.py to the pathfix.py script (Jeremy Cline) -- Use __make macro instead of make (Tom Stellard) -- Sign off generated configuration patches (Jeremy Cline) -- Drop the static path configuration for the Sphinx docs (Jeremy Cline) -- redhat: Add dummy-module kernel module (Prarit Bhargava) -- redhat: enable CONFIG_LWTUNNEL_BPF (Jiri Benc) -- Remove typoed config file aarch64CONFIG_SM_GCC_8150 (Justin M. Forbes) -- Add Documentation back to kernel-devel as it has Kconfig now (Justin M. Forbes) -- Copy distro files rather than moving them (Jeremy Cline) -- kernel.spec: fix 'make scripts' for kernel-devel package (Brian Masney) -- Makefile: correct help text for dist-cross--rpms (Brian Masney) -- redhat/Makefile: Fix RHEL8 python warning (Prarit Bhargava) -- redhat: Change Makefile target names to dist- (Prarit Bhargava) -- configs: Disable Serial IR driver (Prarit Bhargava) -- Fix "multiple %%files for package kernel-tools" (Pablo Greco) -- Introduce a Sphinx documentation project (Jeremy Cline) -- Build ARK against ELN (Don Zickus) -- Drop the requirement to have a remote called linus (Jeremy Cline) -- Rename 'internal' branch to 'os-build' (Don Zickus) -- Only include open merge requests with "Include in Releases" label (Jeremy Cline) -- Package gpio-watch in kernel-tools (Jeremy Cline) -- Exit non-zero if the tag already exists for a release (Jeremy Cline) -- Adjust the changelog update script to not push anything (Jeremy Cline) -- Drop --target noarch from the rh-rpms make target (Jeremy Cline) -- Add a script to generate release tags and branches (Jeremy Cline) -- Set CONFIG_VDPA for fedora (Justin M. Forbes) -- Add a README to the dist-git repository (Jeremy Cline) -- Provide defaults in ark-rebase-patches.sh (Jeremy Cline) -- Default ark-rebase-patches.sh to not report issues (Jeremy Cline) -- Drop DIST from release commits and tags (Jeremy Cline) -- Place the buildid before the dist in the release (Jeremy Cline) -- Sync up with Fedora arm configuration prior to merging (Jeremy Cline) -- Disable CONFIG_PROTECTED_VIRTUALIZATION_GUEST for zfcpdump (Jeremy Cline) -- Add RHMAINTAINERS file and supporting conf (Don Zickus) -- Add a script to test if all commits are signed off (Jeremy Cline) -- Fix make rh-configs-arch (Don Zickus) -- Sync up Fedora configs from the first week of the merge window (Jeremy Cline) -- Migrate blacklisting floppy.ko to mod-blacklist.sh (Don Zickus) -- kernel packaging: Combine mod-blacklist.sh and mod-extra-blacklist.sh (Don Zickus) -- kernel packaging: Fix extra namespace collision (Don Zickus) -- mod-extra.sh: Rename to mod-blacklist.sh (Don Zickus) -- mod-extra.sh: Make file generic (Don Zickus) -- Fix a painfully obvious YAML syntax error in .gitlab-ci.yml (Jeremy Cline) -- Add in armv7hl kernel header support (Don Zickus) -- Disable all BuildKernel commands when only building headers (Don Zickus) -- Drop any gitlab-ci patches from ark-patches (Jeremy Cline) -- Build the srpm for internal branch CI using the vanilla tree (Jeremy Cline) -- Pull in the latest ARM configurations for Fedora (Jeremy Cline) -- Fix xz memory usage issue (Neil Horman) -- Use ark-latest instead of master for update script (Jeremy Cline) -- Move the CI jobs back into the ARK repository (Jeremy Cline) -- Sync up ARK's Fedora config with the dist-git repository (Jeremy Cline) -- Pull in the latest configuration changes from Fedora (Jeremy Cline) -- configs: enable CONFIG_NET_SCH_CBS (Marcelo Ricardo Leitner) -- Drop configuration options in fedora/ that no longer exist (Jeremy Cline) -- Set RH_FEDORA for ARK and Fedora (Jeremy Cline) -- redhat/kernel.spec: Include the release in the kernel COPYING file (Jeremy Cline) -- redhat/kernel.spec: add scripts/jobserver-exec to py3_shbang_opts list (Jeremy Cline) -- redhat/kernel.spec: package bpftool-gen man page (Jeremy Cline) -- distgit-changelog: handle multiple y-stream BZ numbers (Bruno Meneguele) -- redhat/kernel.spec: remove all inline comments (Bruno Meneguele) -- redhat/genspec: awk unknown whitespace regex pattern (Bruno Meneguele) -- Improve the readability of gen_config_patches.sh (Jeremy Cline) -- Fix some awkward edge cases in gen_config_patches.sh (Jeremy Cline) -- Update the CI environment to use Fedora 31 (Jeremy Cline) -- redhat: drop whitespace from with_gcov macro (Jan Stancek) -- configs: Enable CONFIG_KEY_DH_OPERATIONS on ARK (Ondrej Mosnacek) -- configs: Adjust CONFIG_MPLS_ROUTING and CONFIG_MPLS_IPTUNNEL (Laura Abbott) -- New configs in lib/crypto (Jeremy Cline) -- New configs in drivers/char (Jeremy Cline) -- Turn on BLAKE2B for Fedora (Jeremy Cline) -- kernel.spec.template: Clean up stray *.h.s files (Laura Abbott) -- Build the SRPM in the CI job (Jeremy Cline) -- New configs in net/tls (Jeremy Cline) -- New configs in net/tipc (Jeremy Cline) -- New configs in lib/kunit (Jeremy Cline) -- Fix up released_kernel case (Laura Abbott) -- New configs in lib/Kconfig.debug (Jeremy Cline) -- New configs in drivers/ptp (Jeremy Cline) -- New configs in drivers/nvme (Jeremy Cline) -- New configs in drivers/net/phy (Jeremy Cline) -- New configs in arch/arm64 (Jeremy Cline) -- New configs in drivers/crypto (Jeremy Cline) -- New configs in crypto/Kconfig (Jeremy Cline) -- Add label so the Gitlab to email bridge ignores the changelog (Jeremy Cline) -- Temporarily switch TUNE_DEFAULT to y (Jeremy Cline) -- Run config test for merge requests and internal (Jeremy Cline) -- Add missing licensedir line (Laura Abbott) -- redhat/scripts: Remove redhat/scripts/rh_get_maintainer.pl (Prarit Bhargava) -- configs: Take CONFIG_DEFAULT_MMAP_MIN_ADDR from Fedra (Laura Abbott) -- configs: Turn off ISDN (Laura Abbott) -- Add a script to generate configuration patches (Laura Abbott) -- Introduce rh-configs-commit (Laura Abbott) -- kernel-packaging: Remove kernel files from kernel-modules-extra package (Prarit Bhargava) -- configs: Enable CONFIG_DEBUG_WX (Laura Abbott) -- configs: Disable wireless USB (Laura Abbott) -- Clean up some temporary config files (Laura Abbott) -- configs: New config in drivers/gpu for v5.4-rc1 (Jeremy Cline) -- configs: New config in arch/powerpc for v5.4-rc1 (Jeremy Cline) -- configs: New config in crypto for v5.4-rc1 (Jeremy Cline) -- configs: New config in drivers/usb for v5.4-rc1 (Jeremy Cline) -- AUTOMATIC: New configs (Jeremy Cline) -- Skip ksamples for bpf, they are broken (Jeremy Cline) -- configs: New config in fs/erofs for v5.4-rc1 (Jeremy Cline) -- configs: New config in mm for v5.4-rc1 (Jeremy Cline) -- configs: New config in drivers/md for v5.4-rc1 (Jeremy Cline) -- configs: New config in init for v5.4-rc1 (Jeremy Cline) -- configs: New config in fs/fuse for v5.4-rc1 (Jeremy Cline) -- merge.pl: Avoid comments but do not skip them (Don Zickus) -- configs: New config in drivers/net/ethernet/pensando for v5.4-rc1 (Jeremy Cline) -- Update a comment about what released kernel means (Laura Abbott) -- Provide both Fedora and RHEL files in the SRPM (Laura Abbott) -- kernel.spec.template: Trim EXTRAVERSION in the Makefile (Laura Abbott) -- kernel.spec.template: Add macros for building with nopatches (Laura Abbott) -- kernel.spec.template: Add some macros for Fedora differences (Laura Abbott) -- kernel.spec.template: Consolodate the options (Laura Abbott) -- configs: Add pending direcory to Fedora (Laura Abbott) -- kernel.spec.template: Don't run hardlink if rpm-ostree is in use (Laura Abbott) -- configs: New config in net/can for v5.4-rc1 (Jeremy Cline) -- configs: New config in drivers/net/phy for v5.4-rc1 (Jeremy Cline) -- configs: Increase x86_64 NR_UARTS to 64 (Prarit Bhargava) [1730649] -- configs: turn on ARM64_FORCE_52BIT for debug builds (Jeremy Cline) -- kernel.spec.template: Tweak the python3 mangling (Laura Abbott) -- kernel.spec.template: Add --with verbose option (Laura Abbott) -- kernel.spec.template: Switch to using %%install instead of %%__install (Laura Abbott) -- kernel.spec.template: Make the kernel.org URL https (Laura Abbott) -- kernel.spec.template: Update message about secure boot signing (Laura Abbott) -- kernel.spec.template: Move some with flags definitions up (Laura Abbott) -- kernel.spec.template: Update some BuildRequires (Laura Abbott) -- kernel.spec.template: Get rid of %%clean (Laura Abbott) -- configs: New config in drivers/char for v5.4-rc1 (Jeremy Cline) -- configs: New config in net/sched for v5.4-rc1 (Jeremy Cline) -- configs: New config in lib for v5.4-rc1 (Jeremy Cline) -- configs: New config in fs/verity for v5.4-rc1 (Jeremy Cline) -- configs: New config in arch/aarch64 for v5.4-rc4 (Jeremy Cline) -- configs: New config in arch/arm64 for v5.4-rc1 (Jeremy Cline) -- Flip off CONFIG_ARM64_VA_BITS_52 so the bundle that turns it on applies (Jeremy Cline) -- New configuration options for v5.4-rc4 (Jeremy Cline) -- Correctly name tarball for single tarball builds (Laura Abbott) -- configs: New config in drivers/pci for v5.4-rc1 (Jeremy Cline) -- Allow overriding the dist tag on the command line (Laura Abbott) -- Allow scratch branch target to be overridden (Laura Abbott) -- Remove long dead BUILD_DEFAULT_TARGET (Laura Abbott) -- Amend the changelog when rebasing (Laura Abbott) -- configs: New config in drivers/platform for v5.4-rc1 (Jeremy Cline) -- configs: New config in drivers/pinctrl for v5.4-rc1 (Jeremy Cline) -- configs: New config in drivers/net/wireless for v5.4-rc1 (Jeremy Cline) -- configs: New config in drivers/net/ethernet/mellanox for v5.4-rc1 (Jeremy Cline) -- configs: New config in drivers/net/can for v5.4-rc1 (Jeremy Cline) -- configs: New config in drivers/hid for v5.4-rc1 (Jeremy Cline) -- configs: New config in drivers/dma-buf for v5.4-rc1 (Jeremy Cline) -- configs: New config in drivers/crypto for v5.4-rc1 (Jeremy Cline) -- configs: New config in arch/s390 for v5.4-rc1 (Jeremy Cline) -- configs: New config in block for v5.4-rc1 (Jeremy Cline) -- configs: New config in drivers/cpuidle for v5.4-rc1 (Jeremy Cline) -- redhat: configs: Split CONFIG_CRYPTO_SHA512 (Laura Abbott) -- redhat: Set Fedora options (Laura Abbott) -- Set CRYPTO_SHA3_*_S390 to builtin on zfcpdump (Jeremy Cline) -- configs: New config in drivers/edac for v5.4-rc1 (Jeremy Cline) -- configs: New config in drivers/firmware for v5.4-rc1 (Jeremy Cline) -- configs: New config in drivers/hwmon for v5.4-rc1 (Jeremy Cline) -- configs: New config in drivers/iio for v5.4-rc1 (Jeremy Cline) -- configs: New config in drivers/mmc for v5.4-rc1 (Jeremy Cline) -- configs: New config in drivers/tty for v5.4-rc1 (Jeremy Cline) -- configs: New config in arch/s390 for v5.4-rc1 (Jeremy Cline) -- configs: New config in drivers/bus for v5.4-rc1 (Jeremy Cline) -- Add option to allow mismatched configs on the command line (Laura Abbott) -- configs: New config in drivers/crypto for v5.4-rc1 (Jeremy Cline) -- configs: New config in sound/pci for v5.4-rc1 (Jeremy Cline) -- configs: New config in sound/soc for v5.4-rc1 (Jeremy Cline) -- gitlab: Add CI job for packaging scripts (Major Hayden) -- Speed up CI with CKI image (Major Hayden) -- Disable e1000 driver in ARK (Neil Horman) -- configs: Fix the pending default for CONFIG_ARM64_VA_BITS_52 (Jeremy Cline) -- configs: Turn on OPTIMIZE_INLINING for everything (Jeremy Cline) -- configs: Set valid pending defaults for CRYPTO_ESSIV (Jeremy Cline) -- Add an initial CI configuration for the internal branch (Jeremy Cline) -- New drop of configuration options for v5.4-rc1 (Jeremy Cline) -- New drop of configuration options for v5.4-rc1 (Jeremy Cline) -- Sync up the ARK build scripts (Jeremy Cline) -- Sync up the Fedora Rawhide configs (Jeremy Cline) -- Sync up the ARK config files (Jeremy Cline) -- configs: Adjust CONFIG_FORCE_MAX_ZONEORDER for Fedora (Laura Abbott) -- configs: Add README for some other arches (Laura Abbott) -- configs: Sync up Fedora configs (Laura Abbott) -- [initial commit] Add structure for building with git (Laura Abbott) -- [initial commit] Red Hat gitignore and attributes (Laura Abbott) -- [initial commit] Add changelog (Laura Abbott) -- [initial commit] Add makefile (Laura Abbott) -- [initial commit] Add files for generating the kernel.spec (Laura Abbott) -- [initial commit] Add rpm directory (Laura Abbott) -- [initial commit] Add files for packaging (Laura Abbott) -- [initial commit] Add kabi files (Laura Abbott) -- [initial commit] Add scripts (Laura Abbott) -- [initial commit] Add configs (Laura Abbott) -- [initial commit] Add Makefiles (Laura Abbott) - -* Wed Oct 09 2019 Jeremy Cline [5.4.0-0.rc2.1.elrdy] -- Skip ksamples for bpf, they are broken (Jeremy Cline) -- Add a SysRq option to lift kernel lockdown (Kyle McMartin) -- efi: Lock down the kernel if booted in secure boot mode (David Howells) -- efi: Add an EFI_SECURE_BOOT flag to indicate secure boot mode (David Howells) -- security: lockdown: expose a hook to lock the kernel down (Jeremy Cline) -- Make get_cert_list() use efi_status_to_str() to print error messages. (Peter Jones) -- Add efi_status_to_str() and rework efi_status_to_err(). (Peter Jones) -- Make get_cert_list() not complain about cert lists that aren't present. (Peter Jones) -- [iommu] iommu/arm-smmu: workaround DMA mode issues (Laura Abbott) -- [kernel] rh_taint: correct loaddable module support dependencies (Philipp Rudo) [1652266] -- [kernel] rh_kabi: introduce RH_KABI_EXCLUDE (Jakub Racek) [1652256] -- [x86] mark intel knights landing and knights mill unsupported (David Arcari) [1610493] -- [x86] mark whiskey-lake processor supported (David Arcari) [1609604] -- [char] ipmi: do not configure ipmi for HPE m400 (Laura Abbott) [https://bugzilla.redhat.com/show_bug.cgi?id=1670017] -- [infiniband] IB/rxe: Mark Soft-RoCE Transport driver as tech-preview (Don Dutile) [1605216] -- [scsi] scsi: smartpqi: add inspur advantech ids (Don Brace) [1503736] -- [netdrv] ice: mark driver as tech-preview (Jonathan Toppins) [1495347] -- [scsi] be2iscsi: remove BE3 family support (Maurizio Lombardi) [1598366] -- [x86] update rh_check_supported processor list (David Arcari) [1595918] -- [kernel] kABI: Add generic kABI macros to use for kABI workarounds (Myron Stowe) [1546831] -- [pci] add pci_hw_vendor_status() (Maurizio Lombardi) [1590829] -- [ata] ahci: thunderx2: Fix for errata that affects stop engine (Robert Richter) [1563590] -- [pci] Vulcan: AHCI PCI bar fix for Broadcom Vulcan early silicon (Robert Richter) [1563590] -- [kernel] bpf: Add tech preview taint for syscall (Eugene Syromiatnikov) [1559877] -- [kernel] bpf: set unprivileged_bpf_disabled to 1 by default, add a boot parameter (Eugene Syromiatnikov) [1561171] -- [kernel] add Red Hat-specific taint flags (Eugene Syromiatnikov) [1559877] -- [kernel] kdump: fix a grammar issue in a kernel message (Dave Young) [1507353] -- [scripts] tags.sh: Ignore redhat/rpm (Jeremy Cline) -- [kernel] put RHEL info into generated headers (Laura Abbott) [https://bugzilla.redhat.com/show_bug.cgi?id=1663728] -- [kernel] kdump: add support for crashkernel=auto (Jeremy Cline) -- [kernel] kdump: round up the total memory size to 128M for crashkernel reservation (Dave Young) [1507353] -- [arm64] acpi: prefer booting with ACPI over DTS (Mark Salter) [1576869] -- [acpi] aarch64: acpi scan: Fix regression related to X-Gene UARTs (Mark Salter) [1519554] -- [acpi] ACPI / irq: Workaround firmware issue on X-Gene based m400 (Mark Salter) [1519554] -- [x86] add rh_check_supported (David Arcari) [1565717] -- [scsi] qla2xxx: Remove PCI IDs of deprecated adapter (Jeremy Cline) -- [scsi] be2iscsi: remove unsupported device IDs (Chris Leech) [1574502] -- [scsi] Removing Obsolete hba pci-ids from rhel8 (Dick Kennedy) [1572321] -- [scsi] hpsa: modify hpsa driver version (Jeremy Cline) -- [scsi] hpsa: remove old cciss-based smartarray pci ids (Joseph Szczypek) [1471185] -- [kernel] rh_taint: add support for marking driver as unsupported (Jonathan Toppins) [1565704] -- [kernel] rh_taint: add support (David Arcari) [1565704] -- [scsi] qla4xxx: Remove deprecated PCI IDs from RHEL 8 (Chad Dupuis) [1518874] -- [scsi] aacraid: Remove depreciated device and vendor PCI id's (Raghava Aditya Renukunta) [1495307] -- [scsi] megaraid_sas: remove deprecated pci-ids (Tomas Henzl) [1509329] -- [scsi] mpt*: remove certain deprecated pci-ids (Jeremy Cline) -- [kernel] modules: add rhelversion MODULE_INFO tag (Laura Abbott) -- [acpi] ACPI: APEI: arm64: Ignore broken HPE moonshot APEI support (Al Stone) [1518076] -- gitlab: Add CI job for packaging scripts (Major Hayden) -- Set CRYPTO_SHA3_*_S390 to builtin on zfcpdump (Jeremy Cline) -- configs: New config in drivers/edac for v5.4-rc1 (Jeremy Cline) -- configs: New config in drivers/firmware for v5.4-rc1 (Jeremy Cline) -- configs: New config in drivers/hwmon for v5.4-rc1 (Jeremy Cline) -- configs: New config in drivers/iio for v5.4-rc1 (Jeremy Cline) -- configs: New config in drivers/mmc for v5.4-rc1 (Jeremy Cline) -- configs: New config in drivers/tty for v5.4-rc1 (Jeremy Cline) -- configs: New config in arch/s390 for v5.4-rc1 (Jeremy Cline) -- configs: New config in drivers/bus for v5.4-rc1 (Jeremy Cline) -- Add option to allow mismatched configs on the command line (Laura Abbott) -- configs: New config in drivers/crypto for v5.4-rc1 (Jeremy Cline) -- configs: New config in sound/pci for v5.4-rc1 (Jeremy Cline) -- configs: New config in sound/soc for v5.4-rc1 (Jeremy Cline) -- Speed up CI with CKI image (Major Hayden) -- configs: Fix the pending default for CONFIG_ARM64_VA_BITS_52 (Jeremy Cline) -- configs: Turn on OPTIMIZE_INLINING for everything (Jeremy Cline) -- configs: Set valid pending defaults for CRYPTO_ESSIV (Jeremy Cline) -- Add an initial CI configuration for the internal branch (Jeremy Cline) -- New drop of configuration options for v5.4-rc1 (Jeremy Cline) -- Disable e1000 driver in ARK (Neil Horman) -- New drop of configuration options for v5.4-rc1 (Jeremy Cline) -- configs: Adjust CONFIG_FORCE_MAX_ZONEORDER for Fedora (Laura Abbott) -- configs: Add README for some other arches (Laura Abbott) -- configs: Sync up Fedora configs (Laura Abbott) -- Pull the RHEL version defines out of the Makefile (Jeremy Cline) -- Sync up the ARK build scripts (Jeremy Cline) -- Sync up the Fedora Rawhide configs (Jeremy Cline) -- Sync up the ARK config files (Jeremy Cline) -- [initial commit] Add structure for building with git (Laura Abbott) -- [initial commit] Add Red Hat variables in the top level makefile (Laura Abbott) -- [initial commit] Red Hat gitignore and attributes (Laura Abbott) -- [initial commit] Add changelog (Laura Abbott) -- [initial commit] Add makefile (Laura Abbott) -- [initial commit] Add files for generating the kernel.spec (Laura Abbott) -- [initial commit] Add rpm directory (Laura Abbott) -- [initial commit] Add files for packaging (Laura Abbott) -- [initial commit] Add kabi files (Laura Abbott) -- [initial commit] Add scripts (Laura Abbott) -- [initial commit] Add configs (Laura Abbott) -- [initial commit] Add Makefiles (Laura Abbott) + +* Tue Oct 26 2021 Fedora Kernel Team [5.15-0.rc7.53] +- Enable CONFIG_FAIL_SUNRPC for debug builds (Justin M. Forbes) +- fedora: Disable fbdev drivers and use simpledrm instead (Javier Martinez Canillas) + +* Thu Oct 21 2021 Fedora Kernel Team [5.15-0.rc6.20211021git2f111a6fd5b5.49] +- Revert "bpf, selftests: Disable tests that need clang13" (Jiri Olsa) +- spec: Don't fail spec build if ksamples fails (Jiri Olsa) +- Enable CONFIG_QCOM_SCM for arm (Justin M. Forbes) + +* Tue Oct 19 2021 Fedora Kernel Team [5.15-0.rc6.47] +- redhat: Disable clang's integrated assembler on ppc64le and s390x (Tom Stellard) +- redhat/configs: enable CONFIG_IMA_WRITE_POLICY (Bruno Meneguele) + +* Fri Oct 15 2021 Fedora Kernel Team [5.15-0.rc5.20211015gitec681c53f8d2.43] +- Fix dist-srpm-gcov (Don Zickus) +- redhat: configs: add CONFIG_NTB and related items (John W. Linville) +- Add kfence_test to mod-internal.list (Justin M. Forbes) + +* Tue Oct 12 2021 Fedora Kernel Team [5.15-0.rc5.20211012gitfa5878760579.40] +- Enable KUNIT tests for redhat kernel-modules-internal (Nico Pache) +- redhat: add *-matched meta packages to rpminspect emptyrpm config (Herton R. Krzesinski) +- Use common config for NODES_SHIFT (Mark Salter) + +* Sat Oct 09 2021 Fedora Kernel Team [5.15-0.rc4.20211009git5d6ab0bb408f.37] +- redhat: fix typo and make the output more silent for dist-git sync (Herton R. Krzesinski) + +* Thu Oct 07 2021 Fedora Kernel Team [5.15-0.rc4.20211007git5af4055fa813.35] +- Fedora NTFS config updates (Justin M. Forbes) +- Fedora 5.15 configs part 1 (Justin M. Forbes) + +* Wed Oct 06 2021 Fedora Kernel Team [5.15-0.rc4.20211006git60a9483534ed.34] +- Revert "Merge branch 'ppcbpfselftest' into 'os-build'" (Justin M. Forbes) + +* Tue Oct 05 2021 Fedora Kernel Team [5.15-0.rc4.20211005gitf6274b06e326.33] +- Fix ordering in genspec args (Justin M. Forbes) + +* Sat Oct 02 2021 Fedora Kernel Team [5.15-0.rc3.20211002git53d5fc89d66a.30] +- redhat/configs: Enable Hyper-V guests on ARM64 (Vitaly Kuznetsov) [2007430] +- redhat: configs: Enable CONFIG_THINKPAD_LMI (Hans de Goede) +- redhat/docs: update Koji link to avoid redirect (Joel Savitz) +- redhat: add support for different profiles with dist*-brew (Herton R. Krzesinski) +- Fix BPF selftests build on ppc64 (Justin M. Forbes) +- redhat: configs: Disable xtables and ipset (Phil Sutter) [1945179] +- redhat: Add mark_driver_deprecated() (Phil Sutter) [1945179] + +* Fri Oct 01 2021 Fedora Kernel Team [5.15-0.rc3.20211001git4de593fb965f.29] +- Change s390x CONFIG_NODES_SHIFT from 4 to 1 (Justin M. Forbes) +- Build CRYPTO_SHA3_*_S390 inline for s390 zfcpdump (Justin M. Forbes) +- redhat: move the DIST variable setting to Makefile.variables (Herton R. Krzesinski) +- redhat/kernel.spec.template: Cleanup source numbering (Prarit Bhargava) +- redhat/kernel.spec.template: Reorganize RHEL and Fedora specific files (Prarit Bhargava) +- redhat/kernel.spec.template: Add include_fedora and include_rhel variables (Prarit Bhargava) +- redhat/Makefile: Make kernel-local global (Prarit Bhargava) +- redhat/Makefile: Use flavors file (Prarit Bhargava) +- Turn on CONFIG_CPU_FREQ_GOV_SCHEDUTIL for x86 (Justin M. Forbes) + +* Thu Sep 30 2021 Fedora Kernel Team [5.15-0.rc3.20210930git02d5e016800d.28] +- redhat/configs: Remove CONFIG_INFINIBAND_I40IW (Kamal Heib) + +* Wed Sep 29 2021 Fedora Kernel Team [5.15-0.rc3.20210929gita4e6f95a891a.27] +- cleanup CONFIG_X86_PLATFORM_DRIVERS_INTEL (David Arcari) +- redhat: rename usage of .rhel8git.mk to .rhpkg.mk (Herton R. Krzesinski) + +* Tue Sep 28 2021 Fedora Kernel Team [5.15-0.rc3.20210928git0513e464f900.26] +- Manually add pending items that need to be set due to mismatch (Justin M. Forbes) +- Clean up pending common (Justin M. Forbes) +- redhat/configs: Enable CONFIG_BLK_CGROUP_IOLATENCY & CONFIG_BLK_CGROUP_FC_APPID (Waiman Long) [2006813] +- redhat: remove kernel.changelog-8.99 file (Herton R. Krzesinski) + +* Thu Sep 23 2021 Fedora Kernel Team [5.15-0.rc2.20210923git58e2cf5d7946.21] +- redhat/configs: enable CONFIG_SQUASHFS_ZSTD which is already enabled in Fedora 34 (Tao Liu) [1998953] + +* Sat Sep 18 2021 Fedora Kernel Team [5.15-0.rc1.20210918git4357f03d6611.16] +- redhat: bump RHEL_MAJOR and add the changelog file for it (Herton R. Krzesinski) +- redhat: add documentation about the os-build rebase process (Herton R. Krzesinski) # The following bit is important for automation so please do not remove # END OF CHANGELOG diff --git a/mod-internal.list b/mod-internal.list index 258091f8d..61cd22009 100644 --- a/mod-internal.list +++ b/mod-internal.list @@ -1,4 +1,28 @@ dmatest +kunit +kunit-test +ext4-inode-test +list-test +sysctl-test +mptcp_crypto_test +mptcp_token_test +bitfield_kunit +cmdline_kunit +property-entry-test +qos-test +resource_kunit +soc-topology-test +string-stream-test +test_linear_ranges +test_bits +test_kasan +time_test +fat_test +rational-test +test_list_sort +slub_kunit +lib_test +kfence_test locktorture mac80211_hwsim netdevsim diff --git a/partial-kgcov-snip.config b/partial-kgcov-snip.config new file mode 100644 index 000000000..fb373597e --- /dev/null +++ b/partial-kgcov-snip.config @@ -0,0 +1,4 @@ +# kgcov +CONFIG_GCOV_KERNEL=y +CONFIG_GCOV_PROFILE_ALL=y +# CONFIG_GCOV_PROFILE_FTRACE is not set diff --git a/patch-5.13-redhat.patch b/patch-5.13-redhat.patch deleted file mode 100644 index 490090ebd..000000000 --- a/patch-5.13-redhat.patch +++ /dev/null @@ -1,4504 +0,0 @@ - Documentation/admin-guide/kdump/kdump.rst | 11 + - Makefile | 1 + - arch/arm/Kconfig | 4 +- - arch/arm64/Kconfig | 3 +- - .../boot/dts/rockchip/rk3399-pinebook-pro.dts | 2 +- - arch/arm64/boot/dts/rockchip/rk3399.dtsi | 2 +- - arch/arm64/kernel/acpi.c | 2 +- - arch/s390/include/asm/ipl.h | 1 + - arch/s390/kernel/ipl.c | 5 + - arch/s390/kernel/setup.c | 4 + - arch/x86/kernel/setup.c | 22 +- - drivers/acpi/apei/hest.c | 8 + - drivers/acpi/device_pm.c | 32 ++ - drivers/acpi/internal.h | 9 + - drivers/acpi/irq.c | 17 +- - drivers/acpi/scan.c | 9 + - drivers/acpi/x86/s2idle.c | 157 ++++-- - drivers/acpi/x86/utils.c | 25 + - drivers/ata/libahci.c | 18 + - drivers/char/ipmi/ipmi_dmi.c | 15 + - drivers/char/ipmi/ipmi_msghandler.c | 16 +- - drivers/firmware/efi/Makefile | 1 + - drivers/firmware/efi/efi.c | 124 +++-- - drivers/firmware/efi/secureboot.c | 38 ++ - drivers/hid/hid-rmi.c | 64 --- - drivers/hwtracing/coresight/coresight-etm4x-core.c | 19 + - drivers/input/rmi4/rmi_driver.c | 124 +++-- - drivers/iommu/iommu.c | 22 + - drivers/net/wireguard/main.c | 6 + - drivers/nvme/host/pci.c | 28 +- - drivers/pci/controller/pcie-rockchip-host.c | 12 +- - drivers/pci/quirks.c | 24 + - drivers/platform/x86/amd-pmc.c | 248 +++++++++- - drivers/scsi/smartpqi/smartpqi_init.c | 16 + - drivers/usb/core/hub.c | 7 + - include/linux/acpi.h | 5 + - include/linux/efi.h | 22 +- - include/linux/lsm_hook_defs.h | 2 + - include/linux/lsm_hooks.h | 6 + - include/linux/rmi.h | 1 + - include/linux/security.h | 5 + - init/Kconfig | 2 +- - kernel/crash_core.c | 28 +- - kernel/module_signing.c | 9 +- - security/integrity/platform_certs/load_uefi.c | 6 +- - security/lockdown/Kconfig | 13 + - security/lockdown/lockdown.c | 1 + - security/security.c | 6 + - tools/testing/selftests/bpf/Makefile | 1 - - tools/testing/selftests/bpf/prog_tests/atomics.c | 246 ---------- - .../testing/selftests/bpf/prog_tests/bpf_tcp_ca.c | 280 ----------- - .../testing/selftests/bpf/prog_tests/kfunc_call.c | 59 --- - .../selftests/bpf/prog_tests/linked_funcs.c | 42 -- - .../testing/selftests/bpf/prog_tests/linked_maps.c | 30 -- - .../testing/selftests/bpf/prog_tests/linked_vars.c | 43 -- - .../selftests/bpf/prog_tests/static_linked.c | 40 -- - tools/testing/selftests/bpf/progs/bpf_cubic.c | 545 --------------------- - tools/testing/selftests/bpf/progs/bpf_dctcp.c | 224 --------- - .../testing/selftests/bpf/progs/kfunc_call_test.c | 47 -- - .../selftests/bpf/progs/kfunc_call_test_subprog.c | 42 -- - tools/testing/selftests/bpf/progs/linked_funcs1.c | 73 --- - tools/testing/selftests/bpf/progs/linked_funcs2.c | 73 --- - tools/testing/selftests/bpf/progs/linked_maps1.c | 82 ---- - tools/testing/selftests/bpf/progs/linked_maps2.c | 76 --- - tools/testing/selftests/bpf/progs/linked_vars1.c | 54 -- - tools/testing/selftests/bpf/progs/linked_vars2.c | 55 --- - .../selftests/bpf/progs/test_static_linked1.c | 30 -- - .../selftests/bpf/progs/test_static_linked2.c | 31 -- - 68 files changed, 915 insertions(+), 2360 deletions(-) - -diff --git a/Documentation/admin-guide/kdump/kdump.rst b/Documentation/admin-guide/kdump/kdump.rst -index 75a9dd98e76e..3ff3291551f9 100644 ---- a/Documentation/admin-guide/kdump/kdump.rst -+++ b/Documentation/admin-guide/kdump/kdump.rst -@@ -285,6 +285,17 @@ This would mean: - 2) if the RAM size is between 512M and 2G (exclusive), then reserve 64M - 3) if the RAM size is larger than 2G, then reserve 128M - -+Or you can use crashkernel=auto if you have enough memory. The threshold -+is 2G on x86_64, arm64, ppc64 and ppc64le. The threshold is 4G for s390x. -+If your system memory is less than the threshold crashkernel=auto will not -+reserve memory. -+ -+The automatically reserved memory size varies based on architecture. -+The size changes according to system memory size like below: -+ x86_64: 1G-64G:160M,64G-1T:256M,1T-:512M -+ s390x: 4G-64G:160M,64G-1T:256M,1T-:512M -+ arm64: 2G-:512M -+ ppc64: 2G-4G:384M,4G-16G:512M,16G-64G:1G,64G-128G:2G,128G-:4G - - - Boot into System Kernel -diff --git a/Makefile b/Makefile -index 83f4212e004f..91790cbefd7c 100644 ---- a/Makefile -+++ b/Makefile -@@ -503,6 +503,7 @@ KBUILD_AFLAGS := -D__ASSEMBLY__ -fno-PIE - KBUILD_CFLAGS := -Wall -Wundef -Werror=strict-prototypes -Wno-trigraphs \ - -fno-strict-aliasing -fno-common -fshort-wchar -fno-PIE \ - -Werror=implicit-function-declaration -Werror=implicit-int \ -+ -Wno-address-of-packed-member \ - -Werror=return-type -Wno-format-security \ - -std=gnu89 - KBUILD_CPPFLAGS := -D__KERNEL__ -diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig -index 24804f11302d..fd5ff3fa0d5b 100644 ---- a/arch/arm/Kconfig -+++ b/arch/arm/Kconfig -@@ -1484,9 +1484,9 @@ config HIGHMEM - If unsure, say n. - - 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 -diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig -index 9f1d8566bbf9..ebb24a713210 100644 ---- a/arch/arm64/Kconfig -+++ b/arch/arm64/Kconfig -@@ -921,7 +921,7 @@ endchoice - - config ARM64_FORCE_52BIT - bool "Force 52-bit virtual addresses for userspace" -- depends on ARM64_VA_BITS_52 && EXPERT -+ depends on ARM64_VA_BITS_52 - help - For systems with 52-bit userspace VAs enabled, the kernel will attempt - to maintain compatibility with older software by providing 48-bit VAs -@@ -1165,6 +1165,7 @@ config XEN - config FORCE_MAX_ZONEORDER - int - default "14" if ARM64_64K_PAGES -+ default "13" if (ARCH_THUNDER && !ARM64_64K_PAGES && !RHEL_DIFFERENCES) - default "12" if ARM64_16K_PAGES - default "11" - help -diff --git a/arch/arm64/boot/dts/rockchip/rk3399-pinebook-pro.dts b/arch/arm64/boot/dts/rockchip/rk3399-pinebook-pro.dts -index 2b5f001ff4a6..dcdb3cd75be7 100644 ---- a/arch/arm64/boot/dts/rockchip/rk3399-pinebook-pro.dts -+++ b/arch/arm64/boot/dts/rockchip/rk3399-pinebook-pro.dts -@@ -386,7 +386,7 @@ mains_charger: dc-charger { - }; - - &cdn_dp { -- status = "okay"; -+ status = "disabled"; - }; - - &cpu_b0 { -diff --git a/arch/arm64/boot/dts/rockchip/rk3399.dtsi b/arch/arm64/boot/dts/rockchip/rk3399.dtsi -index 634a91af8e83..4b854eb21f72 100644 ---- a/arch/arm64/boot/dts/rockchip/rk3399.dtsi -+++ b/arch/arm64/boot/dts/rockchip/rk3399.dtsi -@@ -227,7 +227,7 @@ pcie0: pcie@f8000000 { - <&pcie_phy 2>, <&pcie_phy 3>; - phy-names = "pcie-phy-0", "pcie-phy-1", - "pcie-phy-2", "pcie-phy-3"; -- ranges = <0x83000000 0x0 0xfa000000 0x0 0xfa000000 0x0 0x1e00000>, -+ ranges = <0x82000000 0x0 0xfa000000 0x0 0xfa000000 0x0 0x1e00000>, - <0x81000000 0x0 0xfbe00000 0x0 0xfbe00000 0x0 0x100000>; - resets = <&cru SRST_PCIE_CORE>, <&cru SRST_PCIE_MGMT>, - <&cru SRST_PCIE_MGMT_STICKY>, <&cru SRST_PCIE_PIPE>, -diff --git a/arch/arm64/kernel/acpi.c b/arch/arm64/kernel/acpi.c -index cada0b816c8a..0fc840d6b0fb 100644 ---- a/arch/arm64/kernel/acpi.c -+++ b/arch/arm64/kernel/acpi.c -@@ -40,7 +40,7 @@ int acpi_pci_disabled = 1; /* skip ACPI PCI scan and IRQ initialization */ - EXPORT_SYMBOL(acpi_pci_disabled); - - static bool param_acpi_off __initdata; --static bool param_acpi_on __initdata; -+static bool param_acpi_on __initdata = true; - static bool param_acpi_force __initdata; - - static int __init parse_acpi(char *arg) -diff --git a/arch/s390/include/asm/ipl.h b/arch/s390/include/asm/ipl.h -index a9e2c7295b35..6ff11f3a2d47 100644 ---- a/arch/s390/include/asm/ipl.h -+++ b/arch/s390/include/asm/ipl.h -@@ -127,6 +127,7 @@ int ipl_report_add_component(struct ipl_report *report, struct kexec_buf *kbuf, - unsigned char flags, unsigned short cert); - int ipl_report_add_certificate(struct ipl_report *report, void *key, - unsigned long addr, unsigned long len); -+bool ipl_get_secureboot(void); - - /* - * DIAG 308 support -diff --git a/arch/s390/kernel/ipl.c b/arch/s390/kernel/ipl.c -index dba04fbc37a2..f809ab6441fd 100644 ---- a/arch/s390/kernel/ipl.c -+++ b/arch/s390/kernel/ipl.c -@@ -2215,3 +2215,8 @@ int ipl_report_free(struct ipl_report *report) - } - - #endif -+ -+bool ipl_get_secureboot(void) -+{ -+ return !!ipl_secure_flag; -+} -diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c -index 382d73da134c..f5b2b127e24d 100644 ---- a/arch/s390/kernel/setup.c -+++ b/arch/s390/kernel/setup.c -@@ -49,6 +49,7 @@ - #include - #include - #include -+#include - #include - - #include -@@ -1114,6 +1115,9 @@ void __init setup_arch(char **cmdline_p) - - log_component_list(); - -+ if (ipl_get_secureboot()) -+ security_lock_kernel_down("Secure IPL mode", LOCKDOWN_INTEGRITY_MAX); -+ - /* 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/setup.c b/arch/x86/kernel/setup.c -index 1e720626069a..8419cc38a146 100644 ---- a/arch/x86/kernel/setup.c -+++ b/arch/x86/kernel/setup.c -@@ -18,6 +18,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -962,6 +963,13 @@ void __init setup_arch(char **cmdline_p) - if (efi_enabled(EFI_BOOT)) - efi_init(); - -+ efi_set_secure_boot(boot_params.secure_boot); -+ -+#ifdef CONFIG_LOCK_DOWN_IN_EFI_SECURE_BOOT -+ if (efi_enabled(EFI_SECURE_BOOT)) -+ security_lock_kernel_down("EFI Secure Boot mode", LOCKDOWN_INTEGRITY_MAX); -+#endif -+ - dmi_setup(); - - /* -@@ -1126,19 +1134,7 @@ void __init setup_arch(char **cmdline_p) - /* Allocate bigger log buffer */ - setup_log_buf(1); - -- if (efi_enabled(EFI_BOOT)) { -- switch (boot_params.secure_boot) { -- case efi_secureboot_mode_disabled: -- pr_info("Secure boot disabled\n"); -- break; -- case efi_secureboot_mode_enabled: -- pr_info("Secure boot enabled\n"); -- break; -- default: -- pr_info("Secure boot could not be determined\n"); -- break; -- } -- } -+ efi_set_secure_boot(boot_params.secure_boot); - - reserve_initrd(); - -diff --git a/drivers/acpi/apei/hest.c b/drivers/acpi/apei/hest.c -index 277f00b288d1..adbce15c273d 100644 ---- a/drivers/acpi/apei/hest.c -+++ b/drivers/acpi/apei/hest.c -@@ -94,6 +94,14 @@ int apei_hest_parse(apei_hest_func_t func, void *data) - if (hest_disable || !hest_tab) - return -EINVAL; - -+#ifdef CONFIG_ARM64 -+ /* Ignore broken firmware */ -+ if (!strncmp(hest_tab->header.oem_id, "HPE ", 6) && -+ !strncmp(hest_tab->header.oem_table_id, "ProLiant", 8) && -+ MIDR_IMPLEMENTOR(read_cpuid_id()) == ARM_CPU_IMP_APM) -+ return -EINVAL; -+#endif -+ - hest_hdr = (struct acpi_hest_header *)(hest_tab + 1); - for (i = 0; i < hest_tab->error_source_count; i++) { - len = hest_esrc_len(hest_hdr); -diff --git a/drivers/acpi/device_pm.c b/drivers/acpi/device_pm.c -index 9d2d3b9bb8b5..0cfdef2fc3ad 100644 ---- a/drivers/acpi/device_pm.c -+++ b/drivers/acpi/device_pm.c -@@ -1338,4 +1338,36 @@ int acpi_dev_pm_attach(struct device *dev, bool power_on) - return 1; - } - EXPORT_SYMBOL_GPL(acpi_dev_pm_attach); -+ -+/** -+ * acpi_storage_d3 - Check if D3 should be used in the suspend path -+ * @dev: Device to check -+ * -+ * Return %true if the platform firmware wants @dev to be programmed -+ * into D3hot or D3cold (if supported) in the suspend path, or %false -+ * when there is no specific preference. On some platforms, if this -+ * hint is ignored, @dev may remain unresponsive after suspending the -+ * platform as a whole. -+ * -+ * Although the property has storage in the name it actually is -+ * applied to the PCIe slot and plugging in a non-storage device the -+ * same platform restrictions will likely apply. -+ */ -+bool acpi_storage_d3(struct device *dev) -+{ -+ struct acpi_device *adev = ACPI_COMPANION(dev); -+ u8 val; -+ -+ if (force_storage_d3()) -+ return true; -+ -+ if (!adev) -+ return false; -+ if (fwnode_property_read_u8(acpi_fwnode_handle(adev), "StorageD3Enable", -+ &val)) -+ return false; -+ return val == 1; -+} -+EXPORT_SYMBOL_GPL(acpi_storage_d3); -+ - #endif /* CONFIG_PM */ -diff --git a/drivers/acpi/internal.h b/drivers/acpi/internal.h -index e21611c9a170..7ac01b03ba67 100644 ---- a/drivers/acpi/internal.h -+++ b/drivers/acpi/internal.h -@@ -236,6 +236,15 @@ static inline int suspend_nvs_save(void) { return 0; } - static inline void suspend_nvs_restore(void) {} - #endif - -+#ifdef CONFIG_X86 -+bool force_storage_d3(void); -+#else -+static inline bool force_storage_d3(void) -+{ -+ return false; -+} -+#endif -+ - /*-------------------------------------------------------------------------- - Device properties - -------------------------------------------------------------------------- */ -diff --git a/drivers/acpi/irq.c b/drivers/acpi/irq.c -index c68e694fca26..146cba5ae5bc 100644 ---- a/drivers/acpi/irq.c -+++ b/drivers/acpi/irq.c -@@ -130,6 +130,7 @@ struct acpi_irq_parse_one_ctx { - unsigned int index; - unsigned long *res_flags; - struct irq_fwspec *fwspec; -+ bool skip_producer_check; - }; - - /** -@@ -201,7 +202,8 @@ static acpi_status acpi_irq_parse_one_cb(struct acpi_resource *ares, - return AE_CTRL_TERMINATE; - case ACPI_RESOURCE_TYPE_EXTENDED_IRQ: - eirq = &ares->data.extended_irq; -- if (eirq->producer_consumer == ACPI_PRODUCER) -+ if (!ctx->skip_producer_check && -+ eirq->producer_consumer == ACPI_PRODUCER) - return AE_OK; - if (ctx->index >= eirq->interrupt_count) { - ctx->index -= eirq->interrupt_count; -@@ -236,8 +238,19 @@ static acpi_status acpi_irq_parse_one_cb(struct acpi_resource *ares, - static int acpi_irq_parse_one(acpi_handle handle, unsigned int index, - struct irq_fwspec *fwspec, unsigned long *flags) - { -- struct acpi_irq_parse_one_ctx ctx = { -EINVAL, index, flags, fwspec }; -+ struct acpi_irq_parse_one_ctx ctx = { -EINVAL, index, flags, fwspec, false }; - -+ /* -+ * Firmware on arm64-based HPE m400 platform incorrectly marks -+ * its UART interrupt as ACPI_PRODUCER rather than ACPI_CONSUMER. -+ * Don't do the producer/consumer check for that device. -+ */ -+ if (IS_ENABLED(CONFIG_ARM64)) { -+ struct acpi_device *adev = acpi_bus_get_acpi_device(handle); -+ -+ if (adev && !strcmp(acpi_device_hid(adev), "APMC0D08")) -+ ctx.skip_producer_check = true; -+ } - acpi_walk_resources(handle, METHOD_NAME__CRS, acpi_irq_parse_one_cb, &ctx); - return ctx.rc; - } -diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c -index 438df8da6d12..d5343c0075f8 100644 ---- a/drivers/acpi/scan.c -+++ b/drivers/acpi/scan.c -@@ -1641,6 +1641,15 @@ static bool acpi_device_enumeration_by_parent(struct acpi_device *device) - if (!acpi_match_device_ids(device, i2c_multi_instantiate_ids)) - return false; - -+ /* -+ * Firmware on some arm64 X-Gene platforms will make the UART -+ * device appear as both a UART and a slave of that UART. Just -+ * bail out here for X-Gene UARTs. -+ */ -+ if (IS_ENABLED(CONFIG_ARM64) && -+ !strcmp(acpi_device_hid(device), "APMC0D08")) -+ return false; -+ - INIT_LIST_HEAD(&resource_list); - acpi_dev_get_resources(device, &resource_list, - acpi_check_serial_bus_slave, -diff --git a/drivers/acpi/x86/s2idle.c b/drivers/acpi/x86/s2idle.c -index 2d7ddb8a8cb6..1c507804fb10 100644 ---- a/drivers/acpi/x86/s2idle.c -+++ b/drivers/acpi/x86/s2idle.c -@@ -32,6 +32,9 @@ static const struct acpi_device_id lps0_device_ids[] = { - {"", }, - }; - -+/* Microsoft platform agnostic UUID */ -+#define ACPI_LPS0_DSM_UUID_MICROSOFT "11e00d56-ce64-47ce-837b-1f898f9aa461" -+ - #define ACPI_LPS0_DSM_UUID "c4eb40a0-6cd2-11e2-bcfd-0800200c9a66" - - #define ACPI_LPS0_GET_DEVICE_CONSTRAINTS 1 -@@ -39,6 +42,8 @@ static const struct acpi_device_id lps0_device_ids[] = { - #define ACPI_LPS0_SCREEN_ON 4 - #define ACPI_LPS0_ENTRY 5 - #define ACPI_LPS0_EXIT 6 -+#define ACPI_LPS0_MS_ENTRY 7 -+#define ACPI_LPS0_MS_EXIT 8 - - /* AMD */ - #define ACPI_LPS0_DSM_UUID_AMD "e3f32452-febc-43ce-9039-932122d37721" -@@ -49,7 +54,10 @@ static const struct acpi_device_id lps0_device_ids[] = { - - static acpi_handle lps0_device_handle; - static guid_t lps0_dsm_guid; --static char lps0_dsm_func_mask; -+static int lps0_dsm_func_mask; -+ -+static guid_t lps0_dsm_guid_microsoft; -+static int lps0_dsm_func_mask_microsoft; - - /* Device constraint entry structure */ - struct lpi_device_info { -@@ -70,15 +78,7 @@ struct lpi_constraints { - int min_dstate; - }; - --/* AMD */ --/* Device constraint entry structure */ --struct lpi_device_info_amd { -- int revision; -- int count; -- union acpi_object *package; --}; -- --/* Constraint package structure */ -+/* AMD Constraint package structure */ - struct lpi_device_constraint_amd { - char *name; - int enabled; -@@ -96,15 +96,15 @@ static void lpi_device_get_constraints_amd(void) - int i, j, k; - - out_obj = acpi_evaluate_dsm_typed(lps0_device_handle, &lps0_dsm_guid, -- 1, ACPI_LPS0_GET_DEVICE_CONSTRAINTS, -+ rev_id, ACPI_LPS0_GET_DEVICE_CONSTRAINTS, - NULL, ACPI_TYPE_PACKAGE); - -- if (!out_obj) -- return; -- - acpi_handle_debug(lps0_device_handle, "_DSM function 1 eval %s\n", - out_obj ? "successful" : "failed"); - -+ if (!out_obj) -+ return; -+ - for (i = 0; i < out_obj->package.count; i++) { - union acpi_object *package = &out_obj->package.elements[i]; - -@@ -317,14 +317,15 @@ static void lpi_check_constraints(void) - } - } - --static void acpi_sleep_run_lps0_dsm(unsigned int func) -+static void acpi_sleep_run_lps0_dsm(unsigned int func, unsigned int func_mask, guid_t dsm_guid) - { - union acpi_object *out_obj; - -- if (!(lps0_dsm_func_mask & (1 << func))) -+ if (!(func_mask & (1 << func))) - return; - -- out_obj = acpi_evaluate_dsm(lps0_device_handle, &lps0_dsm_guid, rev_id, func, NULL); -+ out_obj = acpi_evaluate_dsm(lps0_device_handle, &dsm_guid, -+ rev_id, func, NULL); - ACPI_FREE(out_obj); - - acpi_handle_debug(lps0_device_handle, "_DSM function %u evaluation %s\n", -@@ -336,11 +337,33 @@ static bool acpi_s2idle_vendor_amd(void) - return boot_cpu_data.x86_vendor == X86_VENDOR_AMD; - } - -+static int validate_dsm(acpi_handle handle, const char *uuid, int rev, guid_t *dsm_guid) -+{ -+ union acpi_object *obj; -+ int ret = -EINVAL; -+ -+ guid_parse(uuid, dsm_guid); -+ obj = acpi_evaluate_dsm(handle, dsm_guid, rev, 0, NULL); -+ -+ /* Check if the _DSM is present and as expected. */ -+ if (!obj || obj->type != ACPI_TYPE_BUFFER || obj->buffer.length == 0 || -+ obj->buffer.length > sizeof(u32)) { -+ acpi_handle_debug(handle, -+ "_DSM UUID %s rev %d function 0 evaluation failed\n", uuid, rev); -+ goto out; -+ } -+ -+ ret = *(int *)obj->buffer.pointer; -+ acpi_handle_debug(handle, "_DSM UUID %s rev %d function mask: 0x%x\n", uuid, rev, ret); -+ -+out: -+ ACPI_FREE(obj); -+ return ret; -+} -+ - static int lps0_device_attach(struct acpi_device *adev, - const struct acpi_device_id *not_used) - { -- union acpi_object *out_obj; -- - if (lps0_device_handle) - return 0; - -@@ -348,28 +371,36 @@ static int lps0_device_attach(struct acpi_device *adev, - return 0; - - if (acpi_s2idle_vendor_amd()) { -- guid_parse(ACPI_LPS0_DSM_UUID_AMD, &lps0_dsm_guid); -- out_obj = acpi_evaluate_dsm(adev->handle, &lps0_dsm_guid, 0, 0, NULL); -+ /* AMD0004, AMDI0005: -+ * - Should use rev_id 0x0 -+ * - function mask > 0x3: Should use AMD method, but has off by one bug -+ * - function mask = 0x3: Should use Microsoft method -+ * AMDI0006: -+ * - should use rev_id 0x0 -+ * - function mask = 0x3: Should use Microsoft method -+ */ -+ const char *hid = acpi_device_hid(adev); - rev_id = 0; -+ lps0_dsm_func_mask = validate_dsm(adev->handle, -+ ACPI_LPS0_DSM_UUID_AMD, rev_id, &lps0_dsm_guid); -+ lps0_dsm_func_mask_microsoft = validate_dsm(adev->handle, -+ ACPI_LPS0_DSM_UUID_MICROSOFT, rev_id, -+ &lps0_dsm_guid_microsoft); -+ if (lps0_dsm_func_mask > 0x3 && (!strcmp(hid, "AMD0004") || -+ !strcmp(hid, "AMDI0005"))) { -+ lps0_dsm_func_mask = (lps0_dsm_func_mask << 1) | 0x1; -+ acpi_handle_debug(adev->handle, "_DSM UUID %s: Adjusted function mask: 0x%x\n", -+ ACPI_LPS0_DSM_UUID_AMD, lps0_dsm_func_mask); -+ } - } else { -- guid_parse(ACPI_LPS0_DSM_UUID, &lps0_dsm_guid); -- out_obj = acpi_evaluate_dsm(adev->handle, &lps0_dsm_guid, 1, 0, NULL); - rev_id = 1; -+ lps0_dsm_func_mask = validate_dsm(adev->handle, -+ ACPI_LPS0_DSM_UUID, rev_id, &lps0_dsm_guid); -+ lps0_dsm_func_mask_microsoft = -EINVAL; - } - -- /* Check if the _DSM is present and as expected. */ -- if (!out_obj || out_obj->type != ACPI_TYPE_BUFFER) { -- acpi_handle_debug(adev->handle, -- "_DSM function 0 evaluation failed\n"); -- return 0; -- } -- -- lps0_dsm_func_mask = *(char *)out_obj->buffer.pointer; -- -- ACPI_FREE(out_obj); -- -- acpi_handle_debug(adev->handle, "_DSM function mask: 0x%x\n", -- lps0_dsm_func_mask); -+ if (lps0_dsm_func_mask < 0 && lps0_dsm_func_mask_microsoft < 0) -+ return 0; //function evaluation failed - - lps0_device_handle = adev->handle; - -@@ -386,11 +417,15 @@ static int lps0_device_attach(struct acpi_device *adev, - mem_sleep_current = PM_SUSPEND_TO_IDLE; - - /* -- * Some LPS0 systems, like ASUS Zenbook UX430UNR/i7-8550U, require the -- * EC GPE to be enabled while suspended for certain wakeup devices to -- * work, so mark it as wakeup-capable. -+ * Some Intel based LPS0 systems, like ASUS Zenbook UX430UNR/i7-8550U don't -+ * use intel-hid or intel-vbtn but require the EC GPE to be enabled while -+ * suspended for certain wakeup devices to work, so mark it as wakeup-capable. -+ * -+ * Only enable on !AMD as enabling this universally causes problems for a number -+ * of AMD based systems. - */ -- acpi_ec_mark_gpe_for_wake(); -+ if (!acpi_s2idle_vendor_amd()) -+ acpi_ec_mark_gpe_for_wake(); - - return 0; - } -@@ -408,12 +443,23 @@ int acpi_s2idle_prepare_late(void) - if (pm_debug_messages_on) - lpi_check_constraints(); - -- if (acpi_s2idle_vendor_amd()) { -- acpi_sleep_run_lps0_dsm(ACPI_LPS0_SCREEN_OFF_AMD); -- acpi_sleep_run_lps0_dsm(ACPI_LPS0_ENTRY_AMD); -+ if (lps0_dsm_func_mask_microsoft > 0) { -+ acpi_sleep_run_lps0_dsm(ACPI_LPS0_SCREEN_OFF, -+ lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft); -+ acpi_sleep_run_lps0_dsm(ACPI_LPS0_MS_EXIT, -+ lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft); -+ acpi_sleep_run_lps0_dsm(ACPI_LPS0_ENTRY, -+ lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft); -+ } else if (acpi_s2idle_vendor_amd()) { -+ acpi_sleep_run_lps0_dsm(ACPI_LPS0_SCREEN_OFF_AMD, -+ lps0_dsm_func_mask, lps0_dsm_guid); -+ acpi_sleep_run_lps0_dsm(ACPI_LPS0_ENTRY_AMD, -+ lps0_dsm_func_mask, lps0_dsm_guid); - } else { -- acpi_sleep_run_lps0_dsm(ACPI_LPS0_SCREEN_OFF); -- acpi_sleep_run_lps0_dsm(ACPI_LPS0_ENTRY); -+ acpi_sleep_run_lps0_dsm(ACPI_LPS0_SCREEN_OFF, -+ lps0_dsm_func_mask, lps0_dsm_guid); -+ acpi_sleep_run_lps0_dsm(ACPI_LPS0_ENTRY, -+ lps0_dsm_func_mask, lps0_dsm_guid); - } - - return 0; -@@ -424,12 +470,23 @@ void acpi_s2idle_restore_early(void) - if (!lps0_device_handle || sleep_no_lps0) - return; - -- if (acpi_s2idle_vendor_amd()) { -- acpi_sleep_run_lps0_dsm(ACPI_LPS0_EXIT_AMD); -- acpi_sleep_run_lps0_dsm(ACPI_LPS0_SCREEN_ON_AMD); -+ if (lps0_dsm_func_mask_microsoft > 0) { -+ acpi_sleep_run_lps0_dsm(ACPI_LPS0_EXIT, -+ lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft); -+ acpi_sleep_run_lps0_dsm(ACPI_LPS0_MS_ENTRY, -+ lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft); -+ acpi_sleep_run_lps0_dsm(ACPI_LPS0_SCREEN_ON, -+ lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft); -+ } else if (acpi_s2idle_vendor_amd()) { -+ acpi_sleep_run_lps0_dsm(ACPI_LPS0_EXIT_AMD, -+ lps0_dsm_func_mask, lps0_dsm_guid); -+ acpi_sleep_run_lps0_dsm(ACPI_LPS0_SCREEN_ON_AMD, -+ lps0_dsm_func_mask, lps0_dsm_guid); - } else { -- acpi_sleep_run_lps0_dsm(ACPI_LPS0_EXIT); -- acpi_sleep_run_lps0_dsm(ACPI_LPS0_SCREEN_ON); -+ acpi_sleep_run_lps0_dsm(ACPI_LPS0_EXIT, -+ lps0_dsm_func_mask, lps0_dsm_guid); -+ acpi_sleep_run_lps0_dsm(ACPI_LPS0_SCREEN_ON, -+ lps0_dsm_func_mask, lps0_dsm_guid); - } - } - -diff --git a/drivers/acpi/x86/utils.c b/drivers/acpi/x86/utils.c -index bdc1ba00aee9..f22f23933063 100644 ---- a/drivers/acpi/x86/utils.c -+++ b/drivers/acpi/x86/utils.c -@@ -135,3 +135,28 @@ bool acpi_device_always_present(struct acpi_device *adev) - - return ret; - } -+ -+/* -+ * AMD systems from Renoir and Lucienne *require* that the NVME controller -+ * is put into D3 over a Modern Standby / suspend-to-idle cycle. -+ * -+ * This is "typically" accomplished using the `StorageD3Enable` -+ * property in the _DSD that is checked via the `acpi_storage_d3` function -+ * but this property was introduced after many of these systems launched -+ * and most OEM systems don't have it in their BIOS. -+ * -+ * The Microsoft documentation for StorageD3Enable mentioned that Windows has -+ * a hardcoded allowlist for D3 support, which was used for these platforms. -+ * -+ * This allows quirking on Linux in a similar fashion. -+ */ -+static const struct x86_cpu_id storage_d3_cpu_ids[] = { -+ X86_MATCH_VENDOR_FAM_MODEL(AMD, 23, 96, NULL), /* Renoir */ -+ X86_MATCH_VENDOR_FAM_MODEL(AMD, 23, 104, NULL), /* Lucienne */ -+ {} -+}; -+ -+bool force_storage_d3(void) -+{ -+ return x86_match_cpu(storage_d3_cpu_ids); -+} -diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c -index fec2e9754aed..bea4e2973259 100644 ---- a/drivers/ata/libahci.c -+++ b/drivers/ata/libahci.c -@@ -671,6 +671,24 @@ int ahci_stop_engine(struct ata_port *ap) - tmp &= ~PORT_CMD_START; - writel(tmp, port_mmio + PORT_CMD); - -+#ifdef CONFIG_ARM64 -+ /* Rev Ax of Cavium CN99XX needs a hack for port stop */ -+ if (dev_is_pci(ap->host->dev) && -+ to_pci_dev(ap->host->dev)->vendor == 0x14e4 && -+ to_pci_dev(ap->host->dev)->device == 0x9027 && -+ midr_is_cpu_model_range(read_cpuid_id(), -+ MIDR_CPU_MODEL(ARM_CPU_IMP_BRCM, BRCM_CPU_PART_VULCAN), -+ MIDR_CPU_VAR_REV(0, 0), -+ MIDR_CPU_VAR_REV(0, MIDR_REVISION_MASK))) { -+ tmp = readl(hpriv->mmio + 0x8000); -+ udelay(100); -+ writel(tmp | (1 << 26), hpriv->mmio + 0x8000); -+ udelay(100); -+ writel(tmp & ~(1 << 26), hpriv->mmio + 0x8000); -+ dev_warn(ap->host->dev, "CN99XX SATA reset workaround applied\n"); -+ } -+#endif -+ - /* wait for engine to stop. This could be as long as 500 msec */ - tmp = ata_wait_register(ap, port_mmio + PORT_CMD, - PORT_CMD_LIST_ON, PORT_CMD_LIST_ON, 1, 500); -diff --git a/drivers/char/ipmi/ipmi_dmi.c b/drivers/char/ipmi/ipmi_dmi.c -index bbf7029e224b..cf7faa970dd6 100644 ---- a/drivers/char/ipmi/ipmi_dmi.c -+++ b/drivers/char/ipmi/ipmi_dmi.c -@@ -215,6 +215,21 @@ static int __init scan_for_dmi_ipmi(void) - { - const struct dmi_device *dev = NULL; - -+#ifdef CONFIG_ARM64 -+ /* RHEL-only -+ * If this is ARM-based HPE m400, return now, because that platform -+ * reports the host-side ipmi address as intel port-io space, which -+ * does not exist in the ARM architecture. -+ */ -+ const char *dmistr = dmi_get_system_info(DMI_PRODUCT_NAME); -+ -+ if (dmistr && (strcmp("ProLiant m400 Server", dmistr) == 0)) { -+ pr_debug("%s does not support host ipmi\n", dmistr); -+ return 0; -+ } -+ /* END RHEL-only */ -+#endif -+ - while ((dev = dmi_find_device(DMI_DEV_TYPE_IPMI, NULL, dev))) - dmi_decode_ipmi((const struct dmi_header *) dev->device_data); - -diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_msghandler.c -index 8a0e97b33cae..32e4b183d102 100644 ---- a/drivers/char/ipmi/ipmi_msghandler.c -+++ b/drivers/char/ipmi/ipmi_msghandler.c -@@ -34,6 +34,7 @@ - #include - #include - #include -+#include - #include - - #define IPMI_DRIVER_VERSION "39.2" -@@ -5159,8 +5160,21 @@ static int __init ipmi_init_msghandler_mod(void) - { - int rv; - -- pr_info("version " IPMI_DRIVER_VERSION "\n"); -+#ifdef CONFIG_ARM64 -+ /* RHEL-only -+ * If this is ARM-based HPE m400, return now, because that platform -+ * reports the host-side ipmi address as intel port-io space, which -+ * does not exist in the ARM architecture. -+ */ -+ const char *dmistr = dmi_get_system_info(DMI_PRODUCT_NAME); - -+ if (dmistr && (strcmp("ProLiant m400 Server", dmistr) == 0)) { -+ pr_debug("%s does not support host ipmi\n", dmistr); -+ return -ENOSYS; -+ } -+ /* END RHEL-only */ -+#endif -+ pr_info("version " IPMI_DRIVER_VERSION "\n"); - mutex_lock(&ipmi_interfaces_mutex); - rv = ipmi_register_driver(); - mutex_unlock(&ipmi_interfaces_mutex); -diff --git a/drivers/firmware/efi/Makefile b/drivers/firmware/efi/Makefile -index 467e94259679..9b6f5b8e5397 100644 ---- a/drivers/firmware/efi/Makefile -+++ b/drivers/firmware/efi/Makefile -@@ -28,6 +28,7 @@ obj-$(CONFIG_EFI_FAKE_MEMMAP) += fake_map.o - obj-$(CONFIG_EFI_BOOTLOADER_CONTROL) += efibc.o - obj-$(CONFIG_EFI_TEST) += test/ - obj-$(CONFIG_EFI_DEV_PATH_PARSER) += dev-path-parser.o -+obj-$(CONFIG_EFI) += secureboot.o - obj-$(CONFIG_APPLE_PROPERTIES) += apple-properties.o - obj-$(CONFIG_EFI_RCI2_TABLE) += rci2-table.o - obj-$(CONFIG_EFI_EMBEDDED_FIRMWARE) += embedded-firmware.o -diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c -index 4b7ee3fa9224..64b31d852d20 100644 ---- a/drivers/firmware/efi/efi.c -+++ b/drivers/firmware/efi/efi.c -@@ -31,6 +31,7 @@ - #include - #include - #include -+#include - - #include - -@@ -841,40 +842,101 @@ int efi_mem_type(unsigned long phys_addr) - } - #endif - -+struct efi_error_code { -+ efi_status_t status; -+ int errno; -+ const char *description; -+}; -+ -+static const struct efi_error_code efi_error_codes[] = { -+ { EFI_SUCCESS, 0, "Success"}, -+#if 0 -+ { EFI_LOAD_ERROR, -EPICK_AN_ERRNO, "Load Error"}, -+#endif -+ { EFI_INVALID_PARAMETER, -EINVAL, "Invalid Parameter"}, -+ { EFI_UNSUPPORTED, -ENOSYS, "Unsupported"}, -+ { EFI_BAD_BUFFER_SIZE, -ENOSPC, "Bad Buffer Size"}, -+ { EFI_BUFFER_TOO_SMALL, -ENOSPC, "Buffer Too Small"}, -+ { EFI_NOT_READY, -EAGAIN, "Not Ready"}, -+ { EFI_DEVICE_ERROR, -EIO, "Device Error"}, -+ { EFI_WRITE_PROTECTED, -EROFS, "Write Protected"}, -+ { EFI_OUT_OF_RESOURCES, -ENOMEM, "Out of Resources"}, -+#if 0 -+ { EFI_VOLUME_CORRUPTED, -EPICK_AN_ERRNO, "Volume Corrupt"}, -+ { EFI_VOLUME_FULL, -EPICK_AN_ERRNO, "Volume Full"}, -+ { EFI_NO_MEDIA, -EPICK_AN_ERRNO, "No Media"}, -+ { EFI_MEDIA_CHANGED, -EPICK_AN_ERRNO, "Media changed"}, -+#endif -+ { EFI_NOT_FOUND, -ENOENT, "Not Found"}, -+#if 0 -+ { EFI_ACCESS_DENIED, -EPICK_AN_ERRNO, "Access Denied"}, -+ { EFI_NO_RESPONSE, -EPICK_AN_ERRNO, "No Response"}, -+ { EFI_NO_MAPPING, -EPICK_AN_ERRNO, "No mapping"}, -+ { EFI_TIMEOUT, -EPICK_AN_ERRNO, "Time out"}, -+ { EFI_NOT_STARTED, -EPICK_AN_ERRNO, "Not started"}, -+ { EFI_ALREADY_STARTED, -EPICK_AN_ERRNO, "Already started"}, -+#endif -+ { EFI_ABORTED, -EINTR, "Aborted"}, -+#if 0 -+ { EFI_ICMP_ERROR, -EPICK_AN_ERRNO, "ICMP Error"}, -+ { EFI_TFTP_ERROR, -EPICK_AN_ERRNO, "TFTP Error"}, -+ { EFI_PROTOCOL_ERROR, -EPICK_AN_ERRNO, "Protocol Error"}, -+ { EFI_INCOMPATIBLE_VERSION, -EPICK_AN_ERRNO, "Incompatible Version"}, -+#endif -+ { EFI_SECURITY_VIOLATION, -EACCES, "Security Policy Violation"}, -+#if 0 -+ { EFI_CRC_ERROR, -EPICK_AN_ERRNO, "CRC Error"}, -+ { EFI_END_OF_MEDIA, -EPICK_AN_ERRNO, "End of Media"}, -+ { EFI_END_OF_FILE, -EPICK_AN_ERRNO, "End of File"}, -+ { EFI_INVALID_LANGUAGE, -EPICK_AN_ERRNO, "Invalid Languages"}, -+ { EFI_COMPROMISED_DATA, -EPICK_AN_ERRNO, "Compromised Data"}, -+ -+ // warnings -+ { EFI_WARN_UNKOWN_GLYPH, -EPICK_AN_ERRNO, "Warning Unknown Glyph"}, -+ { EFI_WARN_DELETE_FAILURE, -EPICK_AN_ERRNO, "Warning Delete Failure"}, -+ { EFI_WARN_WRITE_FAILURE, -EPICK_AN_ERRNO, "Warning Write Failure"}, -+ { EFI_WARN_BUFFER_TOO_SMALL, -EPICK_AN_ERRNO, "Warning Buffer Too Small"}, -+#endif -+}; -+ -+static int -+efi_status_cmp_bsearch(const void *key, const void *item) -+{ -+ u64 status = (u64)(uintptr_t)key; -+ struct efi_error_code *code = (struct efi_error_code *)item; -+ -+ if (status < code->status) -+ return -1; -+ if (status > code->status) -+ return 1; -+ return 0; -+} -+ - int efi_status_to_err(efi_status_t status) - { -- int err; -- -- switch (status) { -- case EFI_SUCCESS: -- err = 0; -- break; -- case EFI_INVALID_PARAMETER: -- err = -EINVAL; -- break; -- case EFI_OUT_OF_RESOURCES: -- err = -ENOSPC; -- break; -- case EFI_DEVICE_ERROR: -- err = -EIO; -- break; -- case EFI_WRITE_PROTECTED: -- err = -EROFS; -- break; -- case EFI_SECURITY_VIOLATION: -- err = -EACCES; -- break; -- case EFI_NOT_FOUND: -- err = -ENOENT; -- break; -- case EFI_ABORTED: -- err = -EINTR; -- break; -- default: -- err = -EINVAL; -- } -+ struct efi_error_code *found; -+ size_t num = sizeof(efi_error_codes) / sizeof(struct efi_error_code); - -- return err; -+ found = bsearch((void *)(uintptr_t)status, efi_error_codes, -+ sizeof(struct efi_error_code), num, -+ efi_status_cmp_bsearch); -+ if (!found) -+ return -EINVAL; -+ return found->errno; -+} -+ -+const char * -+efi_status_to_str(efi_status_t status) -+{ -+ struct efi_error_code *found; -+ size_t num = sizeof(efi_error_codes) / sizeof(struct efi_error_code); -+ -+ found = bsearch((void *)(uintptr_t)status, efi_error_codes, -+ sizeof(struct efi_error_code), num, -+ efi_status_cmp_bsearch); -+ if (!found) -+ return "Unknown error code"; -+ return found->description; - } - - static DEFINE_SPINLOCK(efi_mem_reserve_persistent_lock); -diff --git a/drivers/firmware/efi/secureboot.c b/drivers/firmware/efi/secureboot.c -new file mode 100644 -index 000000000000..de0a3714a5d4 ---- /dev/null -+++ b/drivers/firmware/efi/secureboot.c -@@ -0,0 +1,38 @@ -+/* Core kernel secure boot support. -+ * -+ * Copyright (C) 2017 Red Hat, Inc. All Rights Reserved. -+ * Written by David Howells (dhowells@redhat.com) -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU General Public Licence -+ * as published by the Free Software Foundation; either version -+ * 2 of the Licence, or (at your option) any later version. -+ */ -+ -+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt -+ -+#include -+#include -+#include -+ -+/* -+ * Decide what to do when UEFI secure boot mode is enabled. -+ */ -+void __init efi_set_secure_boot(enum efi_secureboot_mode mode) -+{ -+ if (efi_enabled(EFI_BOOT)) { -+ switch (mode) { -+ case efi_secureboot_mode_disabled: -+ pr_info("Secure boot disabled\n"); -+ break; -+ case efi_secureboot_mode_enabled: -+ set_bit(EFI_SECURE_BOOT, &efi.flags); -+ pr_info("Secure boot enabled\n"); -+ break; -+ default: -+ pr_warn("Secure boot could not be determined (mode %u)\n", -+ mode); -+ break; -+ } -+ } -+} -diff --git a/drivers/hid/hid-rmi.c b/drivers/hid/hid-rmi.c -index 311eee599ce9..2460c6bd46f8 100644 ---- a/drivers/hid/hid-rmi.c -+++ b/drivers/hid/hid-rmi.c -@@ -322,19 +322,12 @@ static int rmi_input_event(struct hid_device *hdev, u8 *data, int size) - { - struct rmi_data *hdata = hid_get_drvdata(hdev); - struct rmi_device *rmi_dev = hdata->xport.rmi_dev; -- unsigned long flags; - - if (!(test_bit(RMI_STARTED, &hdata->flags))) - return 0; - -- local_irq_save(flags); -- - rmi_set_attn_data(rmi_dev, data[1], &data[2], size - 2); - -- generic_handle_irq(hdata->rmi_irq); -- -- local_irq_restore(flags); -- - return 1; - } - -@@ -591,56 +584,6 @@ static const struct rmi_transport_ops hid_rmi_ops = { - .reset = rmi_hid_reset, - }; - --static void rmi_irq_teardown(void *data) --{ -- struct rmi_data *hdata = data; -- struct irq_domain *domain = hdata->domain; -- -- if (!domain) -- return; -- -- irq_dispose_mapping(irq_find_mapping(domain, 0)); -- -- irq_domain_remove(domain); -- hdata->domain = NULL; -- hdata->rmi_irq = 0; --} -- --static int rmi_irq_map(struct irq_domain *h, unsigned int virq, -- irq_hw_number_t hw_irq_num) --{ -- irq_set_chip_and_handler(virq, &dummy_irq_chip, handle_simple_irq); -- -- return 0; --} -- --static const struct irq_domain_ops rmi_irq_ops = { -- .map = rmi_irq_map, --}; -- --static int rmi_setup_irq_domain(struct hid_device *hdev) --{ -- struct rmi_data *hdata = hid_get_drvdata(hdev); -- int ret; -- -- hdata->domain = irq_domain_create_linear(hdev->dev.fwnode, 1, -- &rmi_irq_ops, hdata); -- if (!hdata->domain) -- return -ENOMEM; -- -- ret = devm_add_action_or_reset(&hdev->dev, &rmi_irq_teardown, hdata); -- if (ret) -- return ret; -- -- hdata->rmi_irq = irq_create_mapping(hdata->domain, 0); -- if (hdata->rmi_irq <= 0) { -- hid_err(hdev, "Can't allocate an IRQ\n"); -- return hdata->rmi_irq < 0 ? hdata->rmi_irq : -ENXIO; -- } -- -- return 0; --} -- - static int rmi_probe(struct hid_device *hdev, const struct hid_device_id *id) - { - struct rmi_data *data = NULL; -@@ -713,18 +656,11 @@ static int rmi_probe(struct hid_device *hdev, const struct hid_device_id *id) - - mutex_init(&data->page_mutex); - -- ret = rmi_setup_irq_domain(hdev); -- if (ret) { -- hid_err(hdev, "failed to allocate IRQ domain\n"); -- return ret; -- } -- - if (data->device_flags & RMI_DEVICE_HAS_PHYS_BUTTONS) - rmi_hid_pdata.gpio_data.disable = true; - - data->xport.dev = hdev->dev.parent; - data->xport.pdata = rmi_hid_pdata; -- data->xport.pdata.irq = data->rmi_irq; - data->xport.proto_name = "hid"; - data->xport.ops = &hid_rmi_ops; - -diff --git a/drivers/hwtracing/coresight/coresight-etm4x-core.c b/drivers/hwtracing/coresight/coresight-etm4x-core.c -index db881993c211..92a1ebb9cea3 100644 ---- a/drivers/hwtracing/coresight/coresight-etm4x-core.c -+++ b/drivers/hwtracing/coresight/coresight-etm4x-core.c -@@ -9,6 +9,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -2076,6 +2077,16 @@ static const struct amba_id etm4_ids[] = { - {}, - }; - -+static const struct dmi_system_id broken_coresight[] = { -+ { -+ .matches = { -+ DMI_MATCH(DMI_SYS_VENDOR, "HPE"), -+ DMI_MATCH(DMI_PRODUCT_NAME, "Apollo 70"), -+ }, -+ }, -+ { } /* terminating entry */ -+}; -+ - MODULE_DEVICE_TABLE(amba, etm4_ids); - - static struct amba_driver etm4x_amba_driver = { -@@ -2109,6 +2120,11 @@ static int __init etm4x_init(void) - { - int ret; - -+ if (dmi_check_system(broken_coresight)) { -+ pr_info("ETM4 disabled due to firmware bug\n"); -+ return 0; -+ } -+ - ret = etm4_pm_setup(); - - /* etm4_pm_setup() does its own cleanup - exit on error */ -@@ -2135,6 +2151,9 @@ static int __init etm4x_init(void) - - static void __exit etm4x_exit(void) - { -+ if (dmi_check_system(broken_coresight)) -+ return; -+ - amba_driver_unregister(&etm4x_amba_driver); - platform_driver_unregister(&etm4_platform_driver); - etm4_pm_clear(); -diff --git a/drivers/input/rmi4/rmi_driver.c b/drivers/input/rmi4/rmi_driver.c -index 258d5fe3d395..f7298e3dc8f3 100644 ---- a/drivers/input/rmi4/rmi_driver.c -+++ b/drivers/input/rmi4/rmi_driver.c -@@ -182,34 +182,47 @@ void rmi_set_attn_data(struct rmi_device *rmi_dev, unsigned long irq_status, - attn_data.data = fifo_data; - - kfifo_put(&drvdata->attn_fifo, attn_data); -+ -+ schedule_work(&drvdata->attn_work); - } - EXPORT_SYMBOL_GPL(rmi_set_attn_data); - --static irqreturn_t rmi_irq_fn(int irq, void *dev_id) -+static void attn_callback(struct work_struct *work) - { -- struct rmi_device *rmi_dev = dev_id; -- struct rmi_driver_data *drvdata = dev_get_drvdata(&rmi_dev->dev); -+ struct rmi_driver_data *drvdata = container_of(work, -+ struct rmi_driver_data, -+ attn_work); - struct rmi4_attn_data attn_data = {0}; - int ret, count; - - count = kfifo_get(&drvdata->attn_fifo, &attn_data); -- if (count) { -- *(drvdata->irq_status) = attn_data.irq_status; -- drvdata->attn_data = attn_data; -- } -+ if (!count) -+ return; - -- ret = rmi_process_interrupt_requests(rmi_dev); -+ *(drvdata->irq_status) = attn_data.irq_status; -+ drvdata->attn_data = attn_data; -+ -+ ret = rmi_process_interrupt_requests(drvdata->rmi_dev); - if (ret) -- rmi_dbg(RMI_DEBUG_CORE, &rmi_dev->dev, -+ rmi_dbg(RMI_DEBUG_CORE, &drvdata->rmi_dev->dev, - "Failed to process interrupt request: %d\n", ret); - -- if (count) { -- kfree(attn_data.data); -- drvdata->attn_data.data = NULL; -- } -+ kfree(attn_data.data); -+ drvdata->attn_data.data = NULL; - - if (!kfifo_is_empty(&drvdata->attn_fifo)) -- return rmi_irq_fn(irq, dev_id); -+ schedule_work(&drvdata->attn_work); -+} -+ -+static irqreturn_t rmi_irq_fn(int irq, void *dev_id) -+{ -+ struct rmi_device *rmi_dev = dev_id; -+ int ret; -+ -+ ret = rmi_process_interrupt_requests(rmi_dev); -+ if (ret) -+ rmi_dbg(RMI_DEBUG_CORE, &rmi_dev->dev, -+ "Failed to process interrupt request: %d\n", ret); - - return IRQ_HANDLED; - } -@@ -217,7 +230,6 @@ static irqreturn_t rmi_irq_fn(int irq, void *dev_id) - static int rmi_irq_init(struct rmi_device *rmi_dev) - { - struct rmi_device_platform_data *pdata = rmi_get_platform_data(rmi_dev); -- struct rmi_driver_data *data = dev_get_drvdata(&rmi_dev->dev); - int irq_flags = irq_get_trigger_type(pdata->irq); - int ret; - -@@ -235,8 +247,6 @@ static int rmi_irq_init(struct rmi_device *rmi_dev) - return ret; - } - -- data->enabled = true; -- - return 0; - } - -@@ -886,23 +896,27 @@ void rmi_enable_irq(struct rmi_device *rmi_dev, bool clear_wake) - if (data->enabled) - goto out; - -- enable_irq(irq); -- data->enabled = true; -- if (clear_wake && device_may_wakeup(rmi_dev->xport->dev)) { -- retval = disable_irq_wake(irq); -- if (retval) -- dev_warn(&rmi_dev->dev, -- "Failed to disable irq for wake: %d\n", -- retval); -- } -+ if (irq) { -+ enable_irq(irq); -+ data->enabled = true; -+ if (clear_wake && device_may_wakeup(rmi_dev->xport->dev)) { -+ retval = disable_irq_wake(irq); -+ if (retval) -+ dev_warn(&rmi_dev->dev, -+ "Failed to disable irq for wake: %d\n", -+ retval); -+ } - -- /* -- * Call rmi_process_interrupt_requests() after enabling irq, -- * otherwise we may lose interrupt on edge-triggered systems. -- */ -- irq_flags = irq_get_trigger_type(pdata->irq); -- if (irq_flags & IRQ_TYPE_EDGE_BOTH) -- rmi_process_interrupt_requests(rmi_dev); -+ /* -+ * Call rmi_process_interrupt_requests() after enabling irq, -+ * otherwise we may lose interrupt on edge-triggered systems. -+ */ -+ irq_flags = irq_get_trigger_type(pdata->irq); -+ if (irq_flags & IRQ_TYPE_EDGE_BOTH) -+ rmi_process_interrupt_requests(rmi_dev); -+ } else { -+ data->enabled = true; -+ } - - out: - mutex_unlock(&data->enabled_mutex); -@@ -922,20 +936,22 @@ void rmi_disable_irq(struct rmi_device *rmi_dev, bool enable_wake) - goto out; - - data->enabled = false; -- disable_irq(irq); -- if (enable_wake && device_may_wakeup(rmi_dev->xport->dev)) { -- retval = enable_irq_wake(irq); -- if (retval) -- dev_warn(&rmi_dev->dev, -- "Failed to enable irq for wake: %d\n", -- retval); -- } -- -- /* make sure the fifo is clean */ -- while (!kfifo_is_empty(&data->attn_fifo)) { -- count = kfifo_get(&data->attn_fifo, &attn_data); -- if (count) -- kfree(attn_data.data); -+ if (irq) { -+ disable_irq(irq); -+ if (enable_wake && device_may_wakeup(rmi_dev->xport->dev)) { -+ retval = enable_irq_wake(irq); -+ if (retval) -+ dev_warn(&rmi_dev->dev, -+ "Failed to enable irq for wake: %d\n", -+ retval); -+ } -+ } else { -+ /* make sure the fifo is clean */ -+ while (!kfifo_is_empty(&data->attn_fifo)) { -+ count = kfifo_get(&data->attn_fifo, &attn_data); -+ if (count) -+ kfree(attn_data.data); -+ } - } - - out: -@@ -981,6 +997,8 @@ static int rmi_driver_remove(struct device *dev) - irq_domain_remove(data->irqdomain); - data->irqdomain = NULL; - -+ cancel_work_sync(&data->attn_work); -+ - rmi_f34_remove_sysfs(rmi_dev); - rmi_free_function_list(rmi_dev); - -@@ -1219,9 +1237,15 @@ static int rmi_driver_probe(struct device *dev) - } - } - -- retval = rmi_irq_init(rmi_dev); -- if (retval < 0) -- goto err_destroy_functions; -+ if (pdata->irq) { -+ retval = rmi_irq_init(rmi_dev); -+ if (retval < 0) -+ goto err_destroy_functions; -+ } -+ -+ data->enabled = true; -+ -+ INIT_WORK(&data->attn_work, attn_callback); - - if (data->f01_container->dev.driver) { - /* Driver already bound, so enable ATTN now. */ -diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c -index 808ab70d5df5..2a92c1c26326 100644 ---- a/drivers/iommu/iommu.c -+++ b/drivers/iommu/iommu.c -@@ -7,6 +7,7 @@ - #define pr_fmt(fmt) "iommu: " fmt - - #include -+#include - #include - #include - #include -@@ -3036,6 +3037,27 @@ u32 iommu_sva_get_pasid(struct iommu_sva *handle) - } - EXPORT_SYMBOL_GPL(iommu_sva_get_pasid); - -+#ifdef CONFIG_ARM64 -+static int __init iommu_quirks(void) -+{ -+ const char *vendor, *name; -+ -+ vendor = dmi_get_system_info(DMI_SYS_VENDOR); -+ name = dmi_get_system_info(DMI_PRODUCT_NAME); -+ -+ if (vendor && -+ (strncmp(vendor, "GIGABYTE", 8) == 0 && name && -+ (strncmp(name, "R120", 4) == 0 || -+ strncmp(name, "R270", 4) == 0))) { -+ pr_warn("Gigabyte %s detected, force iommu passthrough mode", name); -+ iommu_def_domain_type = IOMMU_DOMAIN_IDENTITY; -+ } -+ -+ return 0; -+} -+arch_initcall(iommu_quirks); -+#endif -+ - /* - * Changes the default domain of an iommu group that has *only* one device - * -diff --git a/drivers/net/wireguard/main.c b/drivers/net/wireguard/main.c -index 75dbe77b0b4b..4bd6dd722f44 100644 ---- a/drivers/net/wireguard/main.c -+++ b/drivers/net/wireguard/main.c -@@ -12,6 +12,7 @@ - - #include - -+#include - #include - #include - #include -@@ -21,6 +22,11 @@ static int __init 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/pci.c b/drivers/nvme/host/pci.c -index 42ad75ff1348..5a72bdf5ad03 100644 ---- a/drivers/nvme/host/pci.c -+++ b/drivers/nvme/host/pci.c -@@ -2828,32 +2828,6 @@ static unsigned long check_vendor_combination_bug(struct pci_dev *pdev) - return 0; - } - --#ifdef CONFIG_ACPI --static bool nvme_acpi_storage_d3(struct pci_dev *dev) --{ -- struct acpi_device *adev = ACPI_COMPANION(&dev->dev); -- u8 val; -- -- /* -- * Look for _DSD property specifying that the storage device on the port -- * must use D3 to support deep platform power savings during -- * suspend-to-idle. -- */ -- -- if (!adev) -- return false; -- if (fwnode_property_read_u8(acpi_fwnode_handle(adev), "StorageD3Enable", -- &val)) -- return false; -- return val == 1; --} --#else --static inline bool nvme_acpi_storage_d3(struct pci_dev *dev) --{ -- return false; --} --#endif /* CONFIG_ACPI */ -- - static void nvme_async_probe(void *data, async_cookie_t cookie) - { - struct nvme_dev *dev = data; -@@ -2903,7 +2877,7 @@ static int nvme_probe(struct pci_dev *pdev, const struct pci_device_id *id) - - quirks |= check_vendor_combination_bug(pdev); - -- if (!noacpi && nvme_acpi_storage_d3(pdev)) { -+ if (!noacpi && acpi_storage_d3(&pdev->dev)) { - /* - * Some systems use a bios work around to ask for D3 on - * platforms that support kernel managed suspend. -diff --git a/drivers/pci/controller/pcie-rockchip-host.c b/drivers/pci/controller/pcie-rockchip-host.c -index f1d08a1b1591..78d04ac29cd5 100644 ---- a/drivers/pci/controller/pcie-rockchip-host.c -+++ b/drivers/pci/controller/pcie-rockchip-host.c -@@ -592,10 +592,6 @@ static int rockchip_pcie_parse_host_dt(struct rockchip_pcie *rockchip) - if (err) - return err; - -- err = rockchip_pcie_setup_irq(rockchip); -- if (err) -- return err; -- - rockchip->vpcie12v = devm_regulator_get_optional(dev, "vpcie12v"); - if (IS_ERR(rockchip->vpcie12v)) { - if (PTR_ERR(rockchip->vpcie12v) != -ENODEV) -@@ -973,8 +969,6 @@ static int rockchip_pcie_probe(struct platform_device *pdev) - if (err) - goto err_vpcie; - -- rockchip_pcie_enable_interrupts(rockchip); -- - err = rockchip_pcie_init_irq_domain(rockchip); - if (err < 0) - goto err_deinit_port; -@@ -992,6 +986,12 @@ static int rockchip_pcie_probe(struct platform_device *pdev) - bridge->sysdata = rockchip; - bridge->ops = &rockchip_pcie_ops; - -+ err = rockchip_pcie_setup_irq(rockchip); -+ if (err) -+ goto err_remove_irq_domain; -+ -+ rockchip_pcie_enable_interrupts(rockchip); -+ - err = pci_host_probe(bridge); - if (err < 0) - goto err_remove_irq_domain; -diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c -index 6d74386eadc2..2333c1e4ae05 100644 ---- a/drivers/pci/quirks.c -+++ b/drivers/pci/quirks.c -@@ -4230,6 +4230,30 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_BROADCOM, 0x9000, - DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_BROADCOM, 0x9084, - quirk_bridge_cavm_thrx2_pcie_root); - -+/* -+ * PCI BAR 5 is not setup correctly for the on-board AHCI controller -+ * on Broadcom's Vulcan processor. Added a quirk to fix BAR 5 by -+ * using BAR 4's resources which are populated correctly and NOT -+ * actually used by the AHCI controller. -+ */ -+static void quirk_fix_vulcan_ahci_bars(struct pci_dev *dev) -+{ -+ struct resource *r = &dev->resource[4]; -+ -+ if (!(r->flags & IORESOURCE_MEM) || (r->start == 0)) -+ return; -+ -+ /* Set BAR5 resource to BAR4 */ -+ dev->resource[5] = *r; -+ -+ /* Update BAR5 in pci config space */ -+ pci_write_config_dword(dev, PCI_BASE_ADDRESS_5, r->start); -+ -+ /* Clear BAR4's resource */ -+ memset(r, 0, sizeof(*r)); -+} -+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_BROADCOM, 0x9027, quirk_fix_vulcan_ahci_bars); -+ - /* - * Intersil/Techwell TW686[4589]-based video capture cards have an empty (zero) - * class code. Fix it. -diff --git a/drivers/platform/x86/amd-pmc.c b/drivers/platform/x86/amd-pmc.c -index b9da58ee9b1e..663a4ca0580d 100644 ---- a/drivers/platform/x86/amd-pmc.c -+++ b/drivers/platform/x86/amd-pmc.c -@@ -46,34 +46,79 @@ - #define AMD_PMC_RESULT_CMD_UNKNOWN 0xFE - #define AMD_PMC_RESULT_FAILED 0xFF - -+/* FCH SSC Registers */ -+#define FCH_S0I3_ENTRY_TIME_L_OFFSET 0x30 -+#define FCH_S0I3_ENTRY_TIME_H_OFFSET 0x34 -+#define FCH_S0I3_EXIT_TIME_L_OFFSET 0x38 -+#define FCH_S0I3_EXIT_TIME_H_OFFSET 0x3C -+#define FCH_SSC_MAPPING_SIZE 0x800 -+#define FCH_BASE_PHY_ADDR_LOW 0xFED81100 -+#define FCH_BASE_PHY_ADDR_HIGH 0x00000000 -+ -+/* SMU Message Definations */ -+#define SMU_MSG_GETSMUVERSION 0x02 -+#define SMU_MSG_LOG_GETDRAM_ADDR_HI 0x04 -+#define SMU_MSG_LOG_GETDRAM_ADDR_LO 0x05 -+#define SMU_MSG_LOG_START 0x06 -+#define SMU_MSG_LOG_RESET 0x07 -+#define SMU_MSG_LOG_DUMP_DATA 0x08 -+#define SMU_MSG_GET_SUP_CONSTRAINTS 0x09 - /* List of supported CPU ids */ - #define AMD_CPU_ID_RV 0x15D0 - #define AMD_CPU_ID_RN 0x1630 - #define AMD_CPU_ID_PCO AMD_CPU_ID_RV - #define AMD_CPU_ID_CZN AMD_CPU_ID_RN -+#define AMD_CPU_ID_YC 0x14B5 - --#define AMD_SMU_FW_VERSION 0x0 - #define PMC_MSG_DELAY_MIN_US 100 - #define RESPONSE_REGISTER_LOOP_MAX 200 - -+#define SOC_SUBSYSTEM_IP_MAX 12 -+#define DELAY_MIN_US 2000 -+#define DELAY_MAX_US 3000 - enum amd_pmc_def { - MSG_TEST = 0x01, - MSG_OS_HINT_PCO, - MSG_OS_HINT_RN, - }; - -+struct amd_pmc_bit_map { -+ const char *name; -+ u32 bit_mask; -+}; -+ -+static const struct amd_pmc_bit_map soc15_ip_blk[] = { -+ {"DISPLAY", BIT(0)}, -+ {"CPU", BIT(1)}, -+ {"GFX", BIT(2)}, -+ {"VDD", BIT(3)}, -+ {"ACP", BIT(4)}, -+ {"VCN", BIT(5)}, -+ {"ISP", BIT(6)}, -+ {"NBIO", BIT(7)}, -+ {"DF", BIT(8)}, -+ {"USB0", BIT(9)}, -+ {"USB1", BIT(10)}, -+ {"LAPIC", BIT(11)}, -+ {} -+}; -+ - struct amd_pmc_dev { - void __iomem *regbase; -- void __iomem *smu_base; -+ void __iomem *smu_virt_addr; -+ void __iomem *fch_virt_addr; - u32 base_addr; - u32 cpu_id; -+ u32 active_ips; - struct device *dev; -+ struct mutex lock; /* generic mutex lock */ - #if IS_ENABLED(CONFIG_DEBUG_FS) - struct dentry *dbgfs_dir; - #endif /* CONFIG_DEBUG_FS */ - }; - - static struct amd_pmc_dev pmc; -+static int amd_pmc_send_cmd(struct amd_pmc_dev *dev, bool set, u32 *data, u8 msg, bool ret); - - static inline u32 amd_pmc_reg_read(struct amd_pmc_dev *dev, int reg_offset) - { -@@ -85,18 +130,76 @@ static inline void amd_pmc_reg_write(struct amd_pmc_dev *dev, int reg_offset, u3 - iowrite32(val, dev->regbase + reg_offset); - } - -+struct smu_metrics { -+ u32 table_version; -+ u32 hint_count; -+ u32 s0i3_cyclecount; -+ u32 timein_s0i2; -+ u64 timeentering_s0i3_lastcapture; -+ u64 timeentering_s0i3_totaltime; -+ u64 timeto_resume_to_os_lastcapture; -+ u64 timeto_resume_to_os_totaltime; -+ u64 timein_s0i3_lastcapture; -+ u64 timein_s0i3_totaltime; -+ u64 timein_swdrips_lastcapture; -+ u64 timein_swdrips_totaltime; -+ u64 timecondition_notmet_lastcapture[SOC_SUBSYSTEM_IP_MAX]; -+ u64 timecondition_notmet_totaltime[SOC_SUBSYSTEM_IP_MAX]; -+} __packed; -+ - #ifdef CONFIG_DEBUG_FS - static int smu_fw_info_show(struct seq_file *s, void *unused) - { - struct amd_pmc_dev *dev = s->private; -- u32 value; -+ struct smu_metrics table; -+ int idx; -+ -+ if (dev->cpu_id == AMD_CPU_ID_PCO) -+ return -EINVAL; -+ -+ memcpy_fromio(&table, dev->smu_virt_addr, sizeof(struct smu_metrics)); -+ -+ seq_puts(s, "\n=== SMU Statistics ===\n"); -+ seq_printf(s, "Table Version: %d\n", table.table_version); -+ seq_printf(s, "Hint Count: %d\n", table.hint_count); -+ seq_printf(s, "S0i3 Cycle Count: %d\n", table.s0i3_cyclecount); -+ seq_printf(s, "Time (in us) to S0i3: %lld\n", table.timeentering_s0i3_lastcapture); -+ seq_printf(s, "Time (in us) in S0i3: %lld\n", table.timein_s0i3_lastcapture); -+ -+ seq_puts(s, "\n=== Active time (in us) ===\n"); -+ for (idx = 0 ; idx < SOC_SUBSYSTEM_IP_MAX ; idx++) { -+ if (soc15_ip_blk[idx].bit_mask & dev->active_ips) -+ seq_printf(s, "%-8s : %lld\n", soc15_ip_blk[idx].name, -+ table.timecondition_notmet_lastcapture[idx]); -+ } - -- value = ioread32(dev->smu_base + AMD_SMU_FW_VERSION); -- seq_printf(s, "SMU FW Info: %x\n", value); - return 0; - } - DEFINE_SHOW_ATTRIBUTE(smu_fw_info); - -+static int s0ix_stats_show(struct seq_file *s, void *unused) -+{ -+ struct amd_pmc_dev *dev = s->private; -+ u64 entry_time, exit_time, residency; -+ -+ entry_time = ioread32(dev->fch_virt_addr + FCH_S0I3_ENTRY_TIME_H_OFFSET); -+ entry_time = entry_time << 32 | ioread32(dev->fch_virt_addr + FCH_S0I3_ENTRY_TIME_L_OFFSET); -+ -+ exit_time = ioread32(dev->fch_virt_addr + FCH_S0I3_EXIT_TIME_H_OFFSET); -+ exit_time = exit_time << 32 | ioread32(dev->fch_virt_addr + FCH_S0I3_EXIT_TIME_L_OFFSET); -+ -+ /* It's in 48MHz. We need to convert it */ -+ residency = (exit_time - entry_time) / 48; -+ -+ seq_puts(s, "=== S0ix statistics ===\n"); -+ seq_printf(s, "S0ix Entry Time: %lld\n", entry_time); -+ seq_printf(s, "S0ix Exit Time: %lld\n", exit_time); -+ seq_printf(s, "Residency Time: %lld\n", residency); -+ -+ return 0; -+} -+DEFINE_SHOW_ATTRIBUTE(s0ix_stats); -+ - static void amd_pmc_dbgfs_unregister(struct amd_pmc_dev *dev) - { - debugfs_remove_recursive(dev->dbgfs_dir); -@@ -107,6 +210,8 @@ static void amd_pmc_dbgfs_register(struct amd_pmc_dev *dev) - dev->dbgfs_dir = debugfs_create_dir("amd_pmc", NULL); - debugfs_create_file("smu_fw_info", 0644, dev->dbgfs_dir, dev, - &smu_fw_info_fops); -+ debugfs_create_file("s0ix_stats", 0644, dev->dbgfs_dir, dev, -+ &s0ix_stats_fops); - } - #else - static inline void amd_pmc_dbgfs_register(struct amd_pmc_dev *dev) -@@ -118,6 +223,32 @@ static inline void amd_pmc_dbgfs_unregister(struct amd_pmc_dev *dev) - } - #endif /* CONFIG_DEBUG_FS */ - -+static int amd_pmc_setup_smu_logging(struct amd_pmc_dev *dev) -+{ -+ u32 phys_addr_low, phys_addr_hi; -+ u64 smu_phys_addr; -+ -+ if (dev->cpu_id == AMD_CPU_ID_PCO) -+ return -EINVAL; -+ -+ /* Get Active devices list from SMU */ -+ amd_pmc_send_cmd(dev, 0, &dev->active_ips, SMU_MSG_GET_SUP_CONSTRAINTS, 1); -+ -+ /* Get dram address */ -+ amd_pmc_send_cmd(dev, 0, &phys_addr_low, SMU_MSG_LOG_GETDRAM_ADDR_LO, 1); -+ amd_pmc_send_cmd(dev, 0, &phys_addr_hi, SMU_MSG_LOG_GETDRAM_ADDR_HI, 1); -+ smu_phys_addr = ((u64)phys_addr_hi << 32 | phys_addr_low); -+ -+ dev->smu_virt_addr = devm_ioremap(dev->dev, smu_phys_addr, sizeof(struct smu_metrics)); -+ if (!dev->smu_virt_addr) -+ return -ENOMEM; -+ -+ /* Start the logging */ -+ amd_pmc_send_cmd(dev, 0, NULL, SMU_MSG_LOG_START, 0); -+ -+ return 0; -+} -+ - static void amd_pmc_dump_registers(struct amd_pmc_dev *dev) - { - u32 value; -@@ -132,19 +263,19 @@ static void amd_pmc_dump_registers(struct amd_pmc_dev *dev) - dev_dbg(dev->dev, "AMD_PMC_REGISTER_MESSAGE:%x\n", value); - } - --static int amd_pmc_send_cmd(struct amd_pmc_dev *dev, bool set) -+static int amd_pmc_send_cmd(struct amd_pmc_dev *dev, bool set, u32 *data, u8 msg, bool ret) - { - int rc; -- u8 msg; - u32 val; - -+ mutex_lock(&dev->lock); - /* Wait until we get a valid response */ - rc = readx_poll_timeout(ioread32, dev->regbase + AMD_PMC_REGISTER_RESPONSE, -- val, val > 0, PMC_MSG_DELAY_MIN_US, -+ val, val != 0, PMC_MSG_DELAY_MIN_US, - PMC_MSG_DELAY_MIN_US * RESPONSE_REGISTER_LOOP_MAX); - if (rc) { - dev_err(dev->dev, "failed to talk to SMU\n"); -- return rc; -+ goto out_unlock; - } - - /* Write zero to response register */ -@@ -154,34 +285,91 @@ static int amd_pmc_send_cmd(struct amd_pmc_dev *dev, bool set) - amd_pmc_reg_write(dev, AMD_PMC_REGISTER_ARGUMENT, set); - - /* Write message ID to message ID register */ -- msg = (dev->cpu_id == AMD_CPU_ID_RN) ? MSG_OS_HINT_RN : MSG_OS_HINT_PCO; - amd_pmc_reg_write(dev, AMD_PMC_REGISTER_MESSAGE, msg); -- return 0; -+ -+ /* Wait until we get a valid response */ -+ rc = readx_poll_timeout(ioread32, dev->regbase + AMD_PMC_REGISTER_RESPONSE, -+ val, val != 0, PMC_MSG_DELAY_MIN_US, -+ PMC_MSG_DELAY_MIN_US * RESPONSE_REGISTER_LOOP_MAX); -+ if (rc) { -+ dev_err(dev->dev, "SMU response timed out\n"); -+ goto out_unlock; -+ } -+ -+ switch (val) { -+ case AMD_PMC_RESULT_OK: -+ if (ret) { -+ /* PMFW may take longer time to return back the data */ -+ usleep_range(DELAY_MIN_US, 10 * DELAY_MAX_US); -+ *data = amd_pmc_reg_read(dev, AMD_PMC_REGISTER_ARGUMENT); -+ } -+ break; -+ case AMD_PMC_RESULT_CMD_REJECT_BUSY: -+ dev_err(dev->dev, "SMU not ready. err: 0x%x\n", val); -+ rc = -EBUSY; -+ goto out_unlock; -+ case AMD_PMC_RESULT_CMD_UNKNOWN: -+ dev_err(dev->dev, "SMU cmd unknown. err: 0x%x\n", val); -+ rc = -EINVAL; -+ goto out_unlock; -+ case AMD_PMC_RESULT_CMD_REJECT_PREREQ: -+ case AMD_PMC_RESULT_FAILED: -+ default: -+ dev_err(dev->dev, "SMU cmd failed. err: 0x%x\n", val); -+ rc = -EIO; -+ goto out_unlock; -+ } -+ -+out_unlock: -+ mutex_unlock(&dev->lock); -+ amd_pmc_dump_registers(dev); -+ return rc; -+} -+ -+static int amd_pmc_get_os_hint(struct amd_pmc_dev *dev) -+{ -+ switch (dev->cpu_id) { -+ case AMD_CPU_ID_PCO: -+ return MSG_OS_HINT_PCO; -+ case AMD_CPU_ID_RN: -+ case AMD_CPU_ID_YC: -+ return MSG_OS_HINT_RN; -+ } -+ return -EINVAL; - } - - static int __maybe_unused amd_pmc_suspend(struct device *dev) - { - struct amd_pmc_dev *pdev = dev_get_drvdata(dev); - int rc; -+ u8 msg; -+ -+ /* Reset and Start SMU logging - to monitor the s0i3 stats */ -+ amd_pmc_send_cmd(pdev, 0, NULL, SMU_MSG_LOG_RESET, 0); -+ amd_pmc_send_cmd(pdev, 0, NULL, SMU_MSG_LOG_START, 0); - -- rc = amd_pmc_send_cmd(pdev, 1); -+ msg = amd_pmc_get_os_hint(pdev); -+ rc = amd_pmc_send_cmd(pdev, 1, NULL, msg, 0); - if (rc) - dev_err(pdev->dev, "suspend failed\n"); - -- amd_pmc_dump_registers(pdev); -- return 0; -+ return rc; - } - - static int __maybe_unused amd_pmc_resume(struct device *dev) - { - struct amd_pmc_dev *pdev = dev_get_drvdata(dev); - int rc; -+ u8 msg; -+ -+ /* Let SMU know that we are looking for stats */ -+ amd_pmc_send_cmd(pdev, 0, NULL, SMU_MSG_LOG_DUMP_DATA, 0); - -- rc = amd_pmc_send_cmd(pdev, 0); -+ msg = amd_pmc_get_os_hint(pdev); -+ rc = amd_pmc_send_cmd(pdev, 0, NULL, msg, 0); - if (rc) - dev_err(pdev->dev, "resume failed\n"); - -- amd_pmc_dump_registers(pdev); - return 0; - } - -@@ -190,6 +378,7 @@ static const struct dev_pm_ops amd_pmc_pm_ops = { - }; - - static const struct pci_device_id pmc_pci_ids[] = { -+ { PCI_DEVICE(PCI_VENDOR_ID_AMD, AMD_CPU_ID_YC) }, - { PCI_DEVICE(PCI_VENDOR_ID_AMD, AMD_CPU_ID_CZN) }, - { PCI_DEVICE(PCI_VENDOR_ID_AMD, AMD_CPU_ID_RN) }, - { PCI_DEVICE(PCI_VENDOR_ID_AMD, AMD_CPU_ID_PCO) }, -@@ -201,9 +390,8 @@ static int amd_pmc_probe(struct platform_device *pdev) - { - struct amd_pmc_dev *dev = &pmc; - struct pci_dev *rdev; -- u32 base_addr_lo; -- u32 base_addr_hi; -- u64 base_addr; -+ u32 base_addr_lo, base_addr_hi; -+ u64 base_addr, fch_phys_addr; - int err; - u32 val; - -@@ -248,16 +436,25 @@ static int amd_pmc_probe(struct platform_device *pdev) - pci_dev_put(rdev); - base_addr = ((u64)base_addr_hi << 32 | base_addr_lo); - -- dev->smu_base = devm_ioremap(dev->dev, base_addr, AMD_PMC_MAPPING_SIZE); -- if (!dev->smu_base) -- return -ENOMEM; -- - dev->regbase = devm_ioremap(dev->dev, base_addr + AMD_PMC_BASE_ADDR_OFFSET, - AMD_PMC_MAPPING_SIZE); - if (!dev->regbase) - return -ENOMEM; - -- amd_pmc_dump_registers(dev); -+ mutex_init(&dev->lock); -+ -+ /* Use FCH registers to get the S0ix stats */ -+ base_addr_lo = FCH_BASE_PHY_ADDR_LOW; -+ base_addr_hi = FCH_BASE_PHY_ADDR_HIGH; -+ fch_phys_addr = ((u64)base_addr_hi << 32 | base_addr_lo); -+ dev->fch_virt_addr = devm_ioremap(dev->dev, fch_phys_addr, FCH_SSC_MAPPING_SIZE); -+ if (!dev->fch_virt_addr) -+ return -ENOMEM; -+ -+ /* Use SMU to get the s0i3 debug stats */ -+ err = amd_pmc_setup_smu_logging(dev); -+ if (err) -+ dev_err(dev->dev, "SMU debugging info not supported on this platform\n"); - - platform_set_drvdata(pdev, dev); - amd_pmc_dbgfs_register(dev); -@@ -269,11 +466,14 @@ static int amd_pmc_remove(struct platform_device *pdev) - struct amd_pmc_dev *dev = platform_get_drvdata(pdev); - - amd_pmc_dbgfs_unregister(dev); -+ mutex_destroy(&dev->lock); - return 0; - } - - static const struct acpi_device_id amd_pmc_acpi_ids[] = { - {"AMDI0005", 0}, -+ {"AMDI0006", 0}, -+ {"AMDI0007", 0}, - {"AMD0004", 0}, - { } - }; -diff --git a/drivers/scsi/smartpqi/smartpqi_init.c b/drivers/scsi/smartpqi/smartpqi_init.c -index 5db16509b6e1..5b8b5e3edd39 100644 ---- a/drivers/scsi/smartpqi/smartpqi_init.c -+++ b/drivers/scsi/smartpqi/smartpqi_init.c -@@ -8808,6 +8808,18 @@ static const struct pci_device_id pqi_pci_id_table[] = { - PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f, - 0x19e5, 0xd22c) - }, -+ { -+ PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f, -+ 0x1bd4, 0x004a) -+ }, -+ { -+ PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f, -+ 0x1bd4, 0x004b) -+ }, -+ { -+ PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f, -+ 0x1bd4, 0x004c) -+ }, - { - PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f, - PCI_VENDOR_ID_ADAPTEC2, 0x0110) -@@ -9064,6 +9076,10 @@ static const struct pci_device_id pqi_pci_id_table[] = { - PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f, - PCI_VENDOR_ID_ADVANTECH, 0x8312) - }, -+ { -+ PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f, -+ PCI_VENDOR_ID_ADVANTECH, 0x8312) -+ }, - { - PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f, - PCI_VENDOR_ID_DELL, 0x1fe0) -diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c -index df8e69e60aaf..fb851c5130e1 100644 ---- a/drivers/usb/core/hub.c -+++ b/drivers/usb/core/hub.c -@@ -5587,6 +5587,13 @@ static void hub_event(struct work_struct *work) - (u16) hub->change_bits[0], - (u16) hub->event_bits[0]); - -+ /* Don't disconnect USB-SATA on TrimSlice */ -+ if (strcmp(dev_name(hdev->bus->controller), "tegra-ehci.0") == 0) { -+ if ((hdev->state == 7) && (hub->change_bits[0] == 0) && -+ (hub->event_bits[0] == 0x2)) -+ hub->event_bits[0] = 0; -+ } -+ - /* 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/include/linux/acpi.h b/include/linux/acpi.h -index c60745f657e9..dd0dafd21e33 100644 ---- a/include/linux/acpi.h -+++ b/include/linux/acpi.h -@@ -1004,6 +1004,7 @@ int acpi_dev_resume(struct device *dev); - int acpi_subsys_runtime_suspend(struct device *dev); - int acpi_subsys_runtime_resume(struct device *dev); - int acpi_dev_pm_attach(struct device *dev, bool power_on); -+bool acpi_storage_d3(struct device *dev); - #else - static inline int acpi_subsys_runtime_suspend(struct device *dev) { return 0; } - static inline int acpi_subsys_runtime_resume(struct device *dev) { return 0; } -@@ -1011,6 +1012,10 @@ static inline int acpi_dev_pm_attach(struct device *dev, bool power_on) - { - return 0; - } -+static inline bool acpi_storage_d3(struct device *dev) -+{ -+ return false; -+} - #endif - - #if defined(CONFIG_ACPI) && defined(CONFIG_PM_SLEEP) -diff --git a/include/linux/efi.h b/include/linux/efi.h -index 6b5d36babfcc..fd4a5d66a9d0 100644 ---- a/include/linux/efi.h -+++ b/include/linux/efi.h -@@ -43,6 +43,8 @@ - #define EFI_ABORTED (21 | (1UL << (BITS_PER_LONG-1))) - #define EFI_SECURITY_VIOLATION (26 | (1UL << (BITS_PER_LONG-1))) - -+#define EFI_IS_ERROR(x) ((x) & (1UL << (BITS_PER_LONG-1))) -+ - typedef unsigned long efi_status_t; - typedef u8 efi_bool_t; - typedef u16 efi_char16_t; /* UNICODE character */ -@@ -782,6 +784,14 @@ extern int __init efi_setup_pcdp_console(char *); - #define EFI_MEM_ATTR 10 /* Did firmware publish an EFI_MEMORY_ATTRIBUTES table? */ - #define EFI_MEM_NO_SOFT_RESERVE 11 /* Is the kernel configured to ignore soft reservations? */ - #define EFI_PRESERVE_BS_REGIONS 12 /* Are EFI boot-services memory segments available? */ -+#define EFI_SECURE_BOOT 13 /* Are we in Secure Boot mode? */ -+ -+enum efi_secureboot_mode { -+ efi_secureboot_mode_unset, -+ efi_secureboot_mode_unknown, -+ efi_secureboot_mode_disabled, -+ efi_secureboot_mode_enabled, -+}; - - #ifdef CONFIG_EFI - /* -@@ -793,6 +803,8 @@ static inline bool efi_enabled(int feature) - } - extern void efi_reboot(enum reboot_mode reboot_mode, const char *__unused); - -+extern void __init efi_set_secure_boot(enum efi_secureboot_mode mode); -+ - bool __pure __efi_soft_reserve_enabled(void); - - static inline bool __pure efi_soft_reserve_enabled(void) -@@ -813,6 +825,8 @@ static inline bool efi_enabled(int feature) - static inline void - efi_reboot(enum reboot_mode reboot_mode, const char *__unused) {} - -+static inline void efi_set_secure_boot(enum efi_secureboot_mode mode) {} -+ - static inline bool efi_soft_reserve_enabled(void) - { - return false; -@@ -825,6 +839,7 @@ static inline bool efi_rt_services_supported(unsigned int mask) - #endif - - extern int efi_status_to_err(efi_status_t status); -+extern const char *efi_status_to_str(efi_status_t status); - - /* - * Variable Attributes -@@ -1077,13 +1092,6 @@ static inline bool efi_runtime_disabled(void) { return true; } - extern void efi_call_virt_check_flags(unsigned long flags, const char *call); - extern unsigned long efi_call_virt_save_flags(void); - --enum efi_secureboot_mode { -- efi_secureboot_mode_unset, -- efi_secureboot_mode_unknown, -- efi_secureboot_mode_disabled, -- efi_secureboot_mode_enabled, --}; -- - static inline - enum efi_secureboot_mode efi_get_secureboot_mode(efi_get_variable_t *get_var) - { -diff --git a/include/linux/lsm_hook_defs.h b/include/linux/lsm_hook_defs.h -index 04c01794de83..26f8df026fa9 100644 ---- a/include/linux/lsm_hook_defs.h -+++ b/include/linux/lsm_hook_defs.h -@@ -395,6 +395,8 @@ LSM_HOOK(void, LSM_RET_VOID, bpf_prog_free_security, struct bpf_prog_aux *aux) - #endif /* CONFIG_BPF_SYSCALL */ - - LSM_HOOK(int, 0, locked_down, enum lockdown_reason what) -+LSM_HOOK(int, 0, lock_kernel_down, const char *where, enum lockdown_reason level) -+ - - #ifdef CONFIG_PERF_EVENTS - LSM_HOOK(int, 0, perf_event_open, struct perf_event_attr *attr, int type) -diff --git a/include/linux/lsm_hooks.h b/include/linux/lsm_hooks.h -index 5c4c5c0602cb..753b53038690 100644 ---- a/include/linux/lsm_hooks.h -+++ b/include/linux/lsm_hooks.h -@@ -1545,6 +1545,12 @@ - * - * @what: kernel feature being accessed - * -+ * @lock_kernel_down -+ * Put the kernel into lock-down mode. -+ * -+ * @where: Where the lock-down is originating from (e.g. command line option) -+ * @level: The lock-down level (can only increase) -+ * - * Security hooks for perf events - * - * @perf_event_open: -diff --git a/include/linux/rmi.h b/include/linux/rmi.h -index ab7eea01ab42..fff7c5f737fc 100644 ---- a/include/linux/rmi.h -+++ b/include/linux/rmi.h -@@ -364,6 +364,7 @@ struct rmi_driver_data { - - struct rmi4_attn_data attn_data; - DECLARE_KFIFO(attn_fifo, struct rmi4_attn_data, 16); -+ struct work_struct attn_work; - }; - - int rmi_register_transport_device(struct rmi_transport_dev *xport); -diff --git a/include/linux/security.h b/include/linux/security.h -index 06f7c50ce77f..09ed686ac5e6 100644 ---- a/include/linux/security.h -+++ b/include/linux/security.h -@@ -471,6 +471,7 @@ int security_inode_notifysecctx(struct inode *inode, void *ctx, u32 ctxlen); - int security_inode_setsecctx(struct dentry *dentry, void *ctx, u32 ctxlen); - int security_inode_getsecctx(struct inode *inode, void **ctx, u32 *ctxlen); - int security_locked_down(enum lockdown_reason what); -+int security_lock_kernel_down(const char *where, enum lockdown_reason level); - #else /* CONFIG_SECURITY */ - - static inline int call_blocking_lsm_notifier(enum lsm_event event, void *data) -@@ -1347,6 +1348,10 @@ static inline int security_locked_down(enum lockdown_reason what) - { - return 0; - } -+static inline int security_lock_kernel_down(const char *where, enum lockdown_reason level) -+{ -+ return 0; -+} - #endif /* CONFIG_SECURITY */ - - #if defined(CONFIG_SECURITY) && defined(CONFIG_WATCH_QUEUE) -diff --git a/init/Kconfig b/init/Kconfig -index a61c92066c2e..94107b1d0e3e 100644 ---- a/init/Kconfig -+++ b/init/Kconfig -@@ -1622,7 +1622,7 @@ config AIO - this option saves about 7k. - - config IO_URING -- bool "Enable IO uring support" if EXPERT -+ bool "Enable IO uring support" - select IO_WQ - default y - help -diff --git a/kernel/crash_core.c b/kernel/crash_core.c -index 684a6061a13a..220579c0e963 100644 ---- a/kernel/crash_core.c -+++ b/kernel/crash_core.c -@@ -7,6 +7,7 @@ - #include - #include - #include -+#include - - #include - #include -@@ -41,6 +42,15 @@ static int __init parse_crashkernel_mem(char *cmdline, - unsigned long long *crash_base) - { - char *cur = cmdline, *tmp; -+ unsigned long long total_mem = system_ram; -+ -+ /* -+ * Firmware sometimes reserves some memory regions for it's own use. -+ * so we get less than actual system memory size. -+ * Workaround this by round up the total size to 128M which is -+ * enough for most test cases. -+ */ -+ total_mem = roundup(total_mem, SZ_128M); - - /* for each entry of the comma-separated list */ - do { -@@ -85,13 +95,13 @@ static int __init parse_crashkernel_mem(char *cmdline, - return -EINVAL; - } - cur = tmp; -- if (size >= system_ram) { -+ if (size >= total_mem) { - pr_warn("crashkernel: invalid size\n"); - return -EINVAL; - } - - /* match ? */ -- if (system_ram >= start && system_ram < end) { -+ if (total_mem >= start && total_mem < end) { - *crash_size = size; - break; - } -@@ -250,6 +260,20 @@ static int __init __parse_crashkernel(char *cmdline, - if (suffix) - return parse_crashkernel_suffix(ck_cmdline, crash_size, - suffix); -+ -+ if (strncmp(ck_cmdline, "auto", 4) == 0) { -+#ifdef CONFIG_X86_64 -+ ck_cmdline = "1G-64G:160M,64G-1T:256M,1T-:512M"; -+#elif defined(CONFIG_S390) -+ ck_cmdline = "4G-64G:160M,64G-1T:256M,1T-:512M"; -+#elif defined(CONFIG_ARM64) -+ ck_cmdline = "2G-:512M"; -+#elif defined(CONFIG_PPC64) -+ ck_cmdline = "2G-4G:384M,4G-16G:512M,16G-64G:1G,64G-128G:2G,128G-:4G"; -+#endif -+ pr_info("Using crashkernel=auto, the size chosen is a best effort estimation.\n"); -+ } -+ - /* - * if the commandline contains a ':', then that's the extended - * syntax -- if not, it must be the classic syntax -diff --git a/kernel/module_signing.c b/kernel/module_signing.c -index 8723ae70ea1f..fb2d773498c2 100644 ---- a/kernel/module_signing.c -+++ b/kernel/module_signing.c -@@ -38,8 +38,15 @@ int mod_verify_sig(const void *mod, struct load_info *info) - modlen -= sig_len + sizeof(ms); - info->len = modlen; - -- return verify_pkcs7_signature(mod, modlen, mod + modlen, sig_len, -+ ret = verify_pkcs7_signature(mod, modlen, mod + modlen, sig_len, - VERIFY_USE_SECONDARY_KEYRING, - VERIFYING_MODULE_SIGNATURE, - NULL, NULL); -+ if (ret == -ENOKEY && IS_ENABLED(CONFIG_INTEGRITY_PLATFORM_KEYRING)) { -+ ret = verify_pkcs7_signature(mod, modlen, mod + modlen, sig_len, -+ VERIFY_USE_PLATFORM_KEYRING, -+ VERIFYING_MODULE_SIGNATURE, -+ NULL, NULL); -+ } -+ return ret; - } -diff --git a/security/integrity/platform_certs/load_uefi.c b/security/integrity/platform_certs/load_uefi.c -index f290f78c3f30..d3e7ae04f5be 100644 ---- a/security/integrity/platform_certs/load_uefi.c -+++ b/security/integrity/platform_certs/load_uefi.c -@@ -46,7 +46,8 @@ static __init void *get_cert_list(efi_char16_t *name, efi_guid_t *guid, - return NULL; - - if (*status != EFI_BUFFER_TOO_SMALL) { -- pr_err("Couldn't get size: 0x%lx\n", *status); -+ pr_err("Couldn't get size: %s (0x%lx)\n", -+ efi_status_to_str(*status), *status); - return NULL; - } - -@@ -57,7 +58,8 @@ static __init void *get_cert_list(efi_char16_t *name, efi_guid_t *guid, - *status = efi.get_variable(name, guid, NULL, &lsize, db); - if (*status != EFI_SUCCESS) { - kfree(db); -- pr_err("Error reading db var: 0x%lx\n", *status); -+ pr_err("Error reading db var: %s (0x%lx)\n", -+ efi_status_to_str(*status), *status); - return NULL; - } - -diff --git a/security/lockdown/Kconfig b/security/lockdown/Kconfig -index e84ddf484010..d0501353a4b9 100644 ---- a/security/lockdown/Kconfig -+++ b/security/lockdown/Kconfig -@@ -16,6 +16,19 @@ config SECURITY_LOCKDOWN_LSM_EARLY - subsystem is fully initialised. If enabled, lockdown will - unconditionally be called before any other LSMs. - -+config LOCK_DOWN_IN_EFI_SECURE_BOOT -+ bool "Lock down the kernel in EFI Secure Boot mode" -+ default n -+ depends on EFI && SECURITY_LOCKDOWN_LSM_EARLY -+ help -+ UEFI Secure Boot provides a mechanism for ensuring that the firmware -+ will only load signed bootloaders and kernels. Secure boot mode may -+ be determined from EFI variables provided by the system firmware if -+ not indicated by the boot parameters. -+ -+ Enabling this option results in kernel lockdown being triggered if -+ EFI Secure Boot is set. -+ - choice - prompt "Kernel default lockdown mode" - default LOCK_DOWN_KERNEL_FORCE_NONE -diff --git a/security/lockdown/lockdown.c b/security/lockdown/lockdown.c -index 87cbdc64d272..18555cf18da7 100644 ---- a/security/lockdown/lockdown.c -+++ b/security/lockdown/lockdown.c -@@ -73,6 +73,7 @@ static int lockdown_is_locked_down(enum lockdown_reason what) - - static struct security_hook_list lockdown_hooks[] __lsm_ro_after_init = { - LSM_HOOK_INIT(locked_down, lockdown_is_locked_down), -+ LSM_HOOK_INIT(lock_kernel_down, lock_kernel_down), - }; - - static int __init lockdown_lsm_init(void) -diff --git a/security/security.c b/security/security.c -index b38155b2de83..b0a6711b4825 100644 ---- a/security/security.c -+++ b/security/security.c -@@ -2598,6 +2598,12 @@ int security_locked_down(enum lockdown_reason what) - } - EXPORT_SYMBOL(security_locked_down); - -+int security_lock_kernel_down(const char *where, enum lockdown_reason level) -+{ -+ return call_int_hook(lock_kernel_down, 0, where, level); -+} -+EXPORT_SYMBOL(security_lock_kernel_down); -+ - #ifdef CONFIG_PERF_EVENTS - int security_perf_event_open(struct perf_event_attr *attr, int type) - { -diff --git a/tools/testing/selftests/bpf/Makefile b/tools/testing/selftests/bpf/Makefile -index 511259c2c6c5..bd2ca0032883 100644 ---- a/tools/testing/selftests/bpf/Makefile -+++ b/tools/testing/selftests/bpf/Makefile -@@ -409,7 +409,6 @@ $(TRUNNER_TEST_OBJS): $(TRUNNER_OUTPUT)/%.test.o: \ - $(TRUNNER_EXTRA_HDRS) \ - $(TRUNNER_BPF_OBJS) \ - $(TRUNNER_BPF_SKELS) \ -- $(TRUNNER_BPF_SKELS_LINKED) \ - $$(BPFOBJ) | $(TRUNNER_OUTPUT) - $$(call msg,TEST-OBJ,$(TRUNNER_BINARY),$$@) - $(Q)cd $$(@D) && $$(CC) -I. $$(CFLAGS) -c $(CURDIR)/$$< $$(LDLIBS) -o $$(@F) -diff --git a/tools/testing/selftests/bpf/prog_tests/atomics.c b/tools/testing/selftests/bpf/prog_tests/atomics.c -deleted file mode 100644 -index 21efe7bbf10d..000000000000 ---- a/tools/testing/selftests/bpf/prog_tests/atomics.c -+++ /dev/null -@@ -1,246 +0,0 @@ --// SPDX-License-Identifier: GPL-2.0 -- --#include -- --#include "atomics.skel.h" -- --static void test_add(struct atomics *skel) --{ -- int err, prog_fd; -- __u32 duration = 0, retval; -- struct bpf_link *link; -- -- link = bpf_program__attach(skel->progs.add); -- if (CHECK(IS_ERR(link), "attach(add)", "err: %ld\n", PTR_ERR(link))) -- return; -- -- prog_fd = bpf_program__fd(skel->progs.add); -- err = bpf_prog_test_run(prog_fd, 1, NULL, 0, -- NULL, NULL, &retval, &duration); -- if (CHECK(err || retval, "test_run add", -- "err %d errno %d retval %d duration %d\n", err, errno, retval, duration)) -- goto cleanup; -- -- ASSERT_EQ(skel->data->add64_value, 3, "add64_value"); -- ASSERT_EQ(skel->bss->add64_result, 1, "add64_result"); -- -- ASSERT_EQ(skel->data->add32_value, 3, "add32_value"); -- ASSERT_EQ(skel->bss->add32_result, 1, "add32_result"); -- -- ASSERT_EQ(skel->bss->add_stack_value_copy, 3, "add_stack_value"); -- ASSERT_EQ(skel->bss->add_stack_result, 1, "add_stack_result"); -- -- ASSERT_EQ(skel->data->add_noreturn_value, 3, "add_noreturn_value"); -- --cleanup: -- bpf_link__destroy(link); --} -- --static void test_sub(struct atomics *skel) --{ -- int err, prog_fd; -- __u32 duration = 0, retval; -- struct bpf_link *link; -- -- link = bpf_program__attach(skel->progs.sub); -- if (CHECK(IS_ERR(link), "attach(sub)", "err: %ld\n", PTR_ERR(link))) -- return; -- -- prog_fd = bpf_program__fd(skel->progs.sub); -- err = bpf_prog_test_run(prog_fd, 1, NULL, 0, -- NULL, NULL, &retval, &duration); -- if (CHECK(err || retval, "test_run sub", -- "err %d errno %d retval %d duration %d\n", -- err, errno, retval, duration)) -- goto cleanup; -- -- ASSERT_EQ(skel->data->sub64_value, -1, "sub64_value"); -- ASSERT_EQ(skel->bss->sub64_result, 1, "sub64_result"); -- -- ASSERT_EQ(skel->data->sub32_value, -1, "sub32_value"); -- ASSERT_EQ(skel->bss->sub32_result, 1, "sub32_result"); -- -- ASSERT_EQ(skel->bss->sub_stack_value_copy, -1, "sub_stack_value"); -- ASSERT_EQ(skel->bss->sub_stack_result, 1, "sub_stack_result"); -- -- ASSERT_EQ(skel->data->sub_noreturn_value, -1, "sub_noreturn_value"); -- --cleanup: -- bpf_link__destroy(link); --} -- --static void test_and(struct atomics *skel) --{ -- int err, prog_fd; -- __u32 duration = 0, retval; -- struct bpf_link *link; -- -- link = bpf_program__attach(skel->progs.and); -- if (CHECK(IS_ERR(link), "attach(and)", "err: %ld\n", PTR_ERR(link))) -- return; -- -- prog_fd = bpf_program__fd(skel->progs.and); -- err = bpf_prog_test_run(prog_fd, 1, NULL, 0, -- NULL, NULL, &retval, &duration); -- if (CHECK(err || retval, "test_run and", -- "err %d errno %d retval %d duration %d\n", err, errno, retval, duration)) -- goto cleanup; -- -- ASSERT_EQ(skel->data->and64_value, 0x010ull << 32, "and64_value"); -- ASSERT_EQ(skel->bss->and64_result, 0x110ull << 32, "and64_result"); -- -- ASSERT_EQ(skel->data->and32_value, 0x010, "and32_value"); -- ASSERT_EQ(skel->bss->and32_result, 0x110, "and32_result"); -- -- ASSERT_EQ(skel->data->and_noreturn_value, 0x010ull << 32, "and_noreturn_value"); --cleanup: -- bpf_link__destroy(link); --} -- --static void test_or(struct atomics *skel) --{ -- int err, prog_fd; -- __u32 duration = 0, retval; -- struct bpf_link *link; -- -- link = bpf_program__attach(skel->progs.or); -- if (CHECK(IS_ERR(link), "attach(or)", "err: %ld\n", PTR_ERR(link))) -- return; -- -- prog_fd = bpf_program__fd(skel->progs.or); -- err = bpf_prog_test_run(prog_fd, 1, NULL, 0, -- NULL, NULL, &retval, &duration); -- if (CHECK(err || retval, "test_run or", -- "err %d errno %d retval %d duration %d\n", -- err, errno, retval, duration)) -- goto cleanup; -- -- ASSERT_EQ(skel->data->or64_value, 0x111ull << 32, "or64_value"); -- ASSERT_EQ(skel->bss->or64_result, 0x110ull << 32, "or64_result"); -- -- ASSERT_EQ(skel->data->or32_value, 0x111, "or32_value"); -- ASSERT_EQ(skel->bss->or32_result, 0x110, "or32_result"); -- -- ASSERT_EQ(skel->data->or_noreturn_value, 0x111ull << 32, "or_noreturn_value"); --cleanup: -- bpf_link__destroy(link); --} -- --static void test_xor(struct atomics *skel) --{ -- int err, prog_fd; -- __u32 duration = 0, retval; -- struct bpf_link *link; -- -- link = bpf_program__attach(skel->progs.xor); -- if (CHECK(IS_ERR(link), "attach(xor)", "err: %ld\n", PTR_ERR(link))) -- return; -- -- prog_fd = bpf_program__fd(skel->progs.xor); -- err = bpf_prog_test_run(prog_fd, 1, NULL, 0, -- NULL, NULL, &retval, &duration); -- if (CHECK(err || retval, "test_run xor", -- "err %d errno %d retval %d duration %d\n", err, errno, retval, duration)) -- goto cleanup; -- -- ASSERT_EQ(skel->data->xor64_value, 0x101ull << 32, "xor64_value"); -- ASSERT_EQ(skel->bss->xor64_result, 0x110ull << 32, "xor64_result"); -- -- ASSERT_EQ(skel->data->xor32_value, 0x101, "xor32_value"); -- ASSERT_EQ(skel->bss->xor32_result, 0x110, "xor32_result"); -- -- ASSERT_EQ(skel->data->xor_noreturn_value, 0x101ull << 32, "xor_nxoreturn_value"); --cleanup: -- bpf_link__destroy(link); --} -- --static void test_cmpxchg(struct atomics *skel) --{ -- int err, prog_fd; -- __u32 duration = 0, retval; -- struct bpf_link *link; -- -- link = bpf_program__attach(skel->progs.cmpxchg); -- if (CHECK(IS_ERR(link), "attach(cmpxchg)", "err: %ld\n", PTR_ERR(link))) -- return; -- -- prog_fd = bpf_program__fd(skel->progs.cmpxchg); -- err = bpf_prog_test_run(prog_fd, 1, NULL, 0, -- NULL, NULL, &retval, &duration); -- if (CHECK(err || retval, "test_run add", -- "err %d errno %d retval %d duration %d\n", err, errno, retval, duration)) -- goto cleanup; -- -- ASSERT_EQ(skel->data->cmpxchg64_value, 2, "cmpxchg64_value"); -- ASSERT_EQ(skel->bss->cmpxchg64_result_fail, 1, "cmpxchg_result_fail"); -- ASSERT_EQ(skel->bss->cmpxchg64_result_succeed, 1, "cmpxchg_result_succeed"); -- -- ASSERT_EQ(skel->data->cmpxchg32_value, 2, "lcmpxchg32_value"); -- ASSERT_EQ(skel->bss->cmpxchg32_result_fail, 1, "cmpxchg_result_fail"); -- ASSERT_EQ(skel->bss->cmpxchg32_result_succeed, 1, "cmpxchg_result_succeed"); -- --cleanup: -- bpf_link__destroy(link); --} -- --static void test_xchg(struct atomics *skel) --{ -- int err, prog_fd; -- __u32 duration = 0, retval; -- struct bpf_link *link; -- -- link = bpf_program__attach(skel->progs.xchg); -- if (CHECK(IS_ERR(link), "attach(xchg)", "err: %ld\n", PTR_ERR(link))) -- return; -- -- prog_fd = bpf_program__fd(skel->progs.xchg); -- err = bpf_prog_test_run(prog_fd, 1, NULL, 0, -- NULL, NULL, &retval, &duration); -- if (CHECK(err || retval, "test_run add", -- "err %d errno %d retval %d duration %d\n", err, errno, retval, duration)) -- goto cleanup; -- -- ASSERT_EQ(skel->data->xchg64_value, 2, "xchg64_value"); -- ASSERT_EQ(skel->bss->xchg64_result, 1, "xchg64_result"); -- -- ASSERT_EQ(skel->data->xchg32_value, 2, "xchg32_value"); -- ASSERT_EQ(skel->bss->xchg32_result, 1, "xchg32_result"); -- --cleanup: -- bpf_link__destroy(link); --} -- --void test_atomics(void) --{ -- struct atomics *skel; -- __u32 duration = 0; -- -- skel = atomics__open_and_load(); -- if (CHECK(!skel, "skel_load", "atomics skeleton failed\n")) -- return; -- -- if (skel->data->skip_tests) { -- printf("%s:SKIP:no ENABLE_ATOMICS_TESTS (missing Clang BPF atomics support)", -- __func__); -- test__skip(); -- goto cleanup; -- } -- -- if (test__start_subtest("add")) -- test_add(skel); -- if (test__start_subtest("sub")) -- test_sub(skel); -- if (test__start_subtest("and")) -- test_and(skel); -- if (test__start_subtest("or")) -- test_or(skel); -- if (test__start_subtest("xor")) -- test_xor(skel); -- if (test__start_subtest("cmpxchg")) -- test_cmpxchg(skel); -- if (test__start_subtest("xchg")) -- test_xchg(skel); -- --cleanup: -- atomics__destroy(skel); --} -diff --git a/tools/testing/selftests/bpf/prog_tests/bpf_tcp_ca.c b/tools/testing/selftests/bpf/prog_tests/bpf_tcp_ca.c -deleted file mode 100644 -index e25917f04602..000000000000 ---- a/tools/testing/selftests/bpf/prog_tests/bpf_tcp_ca.c -+++ /dev/null -@@ -1,280 +0,0 @@ --// SPDX-License-Identifier: GPL-2.0 --/* Copyright (c) 2019 Facebook */ -- --#include --#include --#include --#include "bpf_dctcp.skel.h" --#include "bpf_cubic.skel.h" --#include "bpf_tcp_nogpl.skel.h" -- --#define min(a, b) ((a) < (b) ? (a) : (b)) -- --static const unsigned int total_bytes = 10 * 1024 * 1024; --static const struct timeval timeo_sec = { .tv_sec = 10 }; --static const size_t timeo_optlen = sizeof(timeo_sec); --static int expected_stg = 0xeB9F; --static int stop, duration; -- --static int settimeo(int fd) --{ -- int err; -- -- err = setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, &timeo_sec, -- timeo_optlen); -- if (CHECK(err == -1, "setsockopt(fd, SO_RCVTIMEO)", "errno:%d\n", -- errno)) -- return -1; -- -- err = setsockopt(fd, SOL_SOCKET, SO_SNDTIMEO, &timeo_sec, -- timeo_optlen); -- if (CHECK(err == -1, "setsockopt(fd, SO_SNDTIMEO)", "errno:%d\n", -- errno)) -- return -1; -- -- return 0; --} -- --static int settcpca(int fd, const char *tcp_ca) --{ -- int err; -- -- err = setsockopt(fd, IPPROTO_TCP, TCP_CONGESTION, tcp_ca, strlen(tcp_ca)); -- if (CHECK(err == -1, "setsockopt(fd, TCP_CONGESTION)", "errno:%d\n", -- errno)) -- return -1; -- -- return 0; --} -- --static void *server(void *arg) --{ -- int lfd = (int)(long)arg, err = 0, fd; -- ssize_t nr_sent = 0, bytes = 0; -- char batch[1500]; -- -- fd = accept(lfd, NULL, NULL); -- while (fd == -1) { -- if (errno == EINTR) -- continue; -- err = -errno; -- goto done; -- } -- -- if (settimeo(fd)) { -- err = -errno; -- goto done; -- } -- -- while (bytes < total_bytes && !READ_ONCE(stop)) { -- nr_sent = send(fd, &batch, -- min(total_bytes - bytes, sizeof(batch)), 0); -- if (nr_sent == -1 && errno == EINTR) -- continue; -- if (nr_sent == -1) { -- err = -errno; -- break; -- } -- bytes += nr_sent; -- } -- -- CHECK(bytes != total_bytes, "send", "%zd != %u nr_sent:%zd errno:%d\n", -- bytes, total_bytes, nr_sent, errno); -- --done: -- if (fd != -1) -- close(fd); -- if (err) { -- WRITE_ONCE(stop, 1); -- return ERR_PTR(err); -- } -- return NULL; --} -- --static void do_test(const char *tcp_ca, const struct bpf_map *sk_stg_map) --{ -- struct sockaddr_in6 sa6 = {}; -- ssize_t nr_recv = 0, bytes = 0; -- int lfd = -1, fd = -1; -- pthread_t srv_thread; -- socklen_t addrlen = sizeof(sa6); -- void *thread_ret; -- char batch[1500]; -- int err; -- -- WRITE_ONCE(stop, 0); -- -- lfd = socket(AF_INET6, SOCK_STREAM, 0); -- if (CHECK(lfd == -1, "socket", "errno:%d\n", errno)) -- return; -- fd = socket(AF_INET6, SOCK_STREAM, 0); -- if (CHECK(fd == -1, "socket", "errno:%d\n", errno)) { -- close(lfd); -- return; -- } -- -- if (settcpca(lfd, tcp_ca) || settcpca(fd, tcp_ca) || -- settimeo(lfd) || settimeo(fd)) -- goto done; -- -- /* bind, listen and start server thread to accept */ -- sa6.sin6_family = AF_INET6; -- sa6.sin6_addr = in6addr_loopback; -- err = bind(lfd, (struct sockaddr *)&sa6, addrlen); -- if (CHECK(err == -1, "bind", "errno:%d\n", errno)) -- goto done; -- err = getsockname(lfd, (struct sockaddr *)&sa6, &addrlen); -- if (CHECK(err == -1, "getsockname", "errno:%d\n", errno)) -- goto done; -- err = listen(lfd, 1); -- if (CHECK(err == -1, "listen", "errno:%d\n", errno)) -- goto done; -- -- if (sk_stg_map) { -- err = bpf_map_update_elem(bpf_map__fd(sk_stg_map), &fd, -- &expected_stg, BPF_NOEXIST); -- if (CHECK(err, "bpf_map_update_elem(sk_stg_map)", -- "err:%d errno:%d\n", err, errno)) -- goto done; -- } -- -- /* connect to server */ -- err = connect(fd, (struct sockaddr *)&sa6, addrlen); -- if (CHECK(err == -1, "connect", "errno:%d\n", errno)) -- goto done; -- -- if (sk_stg_map) { -- int tmp_stg; -- -- err = bpf_map_lookup_elem(bpf_map__fd(sk_stg_map), &fd, -- &tmp_stg); -- if (CHECK(!err || errno != ENOENT, -- "bpf_map_lookup_elem(sk_stg_map)", -- "err:%d errno:%d\n", err, errno)) -- goto done; -- } -- -- err = pthread_create(&srv_thread, NULL, server, (void *)(long)lfd); -- if (CHECK(err != 0, "pthread_create", "err:%d errno:%d\n", err, errno)) -- goto done; -- -- /* recv total_bytes */ -- while (bytes < total_bytes && !READ_ONCE(stop)) { -- nr_recv = recv(fd, &batch, -- min(total_bytes - bytes, sizeof(batch)), 0); -- if (nr_recv == -1 && errno == EINTR) -- continue; -- if (nr_recv == -1) -- break; -- bytes += nr_recv; -- } -- -- CHECK(bytes != total_bytes, "recv", "%zd != %u nr_recv:%zd errno:%d\n", -- bytes, total_bytes, nr_recv, errno); -- -- WRITE_ONCE(stop, 1); -- pthread_join(srv_thread, &thread_ret); -- CHECK(IS_ERR(thread_ret), "pthread_join", "thread_ret:%ld", -- PTR_ERR(thread_ret)); --done: -- close(lfd); -- close(fd); --} -- --static void test_cubic(void) --{ -- struct bpf_cubic *cubic_skel; -- struct bpf_link *link; -- -- cubic_skel = bpf_cubic__open_and_load(); -- if (CHECK(!cubic_skel, "bpf_cubic__open_and_load", "failed\n")) -- return; -- -- link = bpf_map__attach_struct_ops(cubic_skel->maps.cubic); -- if (CHECK(IS_ERR(link), "bpf_map__attach_struct_ops", "err:%ld\n", -- PTR_ERR(link))) { -- bpf_cubic__destroy(cubic_skel); -- return; -- } -- -- do_test("bpf_cubic", NULL); -- -- bpf_link__destroy(link); -- bpf_cubic__destroy(cubic_skel); --} -- --static void test_dctcp(void) --{ -- struct bpf_dctcp *dctcp_skel; -- struct bpf_link *link; -- -- dctcp_skel = bpf_dctcp__open_and_load(); -- if (CHECK(!dctcp_skel, "bpf_dctcp__open_and_load", "failed\n")) -- return; -- -- link = bpf_map__attach_struct_ops(dctcp_skel->maps.dctcp); -- if (CHECK(IS_ERR(link), "bpf_map__attach_struct_ops", "err:%ld\n", -- PTR_ERR(link))) { -- bpf_dctcp__destroy(dctcp_skel); -- return; -- } -- -- do_test("bpf_dctcp", dctcp_skel->maps.sk_stg_map); -- CHECK(dctcp_skel->bss->stg_result != expected_stg, -- "Unexpected stg_result", "stg_result (%x) != expected_stg (%x)\n", -- dctcp_skel->bss->stg_result, expected_stg); -- -- bpf_link__destroy(link); -- bpf_dctcp__destroy(dctcp_skel); --} -- --static char *err_str; --static bool found; -- --static int libbpf_debug_print(enum libbpf_print_level level, -- const char *format, va_list args) --{ -- char *log_buf; -- -- if (level != LIBBPF_WARN || -- strcmp(format, "libbpf: \n%s\n")) { -- vprintf(format, args); -- return 0; -- } -- -- log_buf = va_arg(args, char *); -- if (!log_buf) -- goto out; -- if (err_str && strstr(log_buf, err_str) != NULL) -- found = true; --out: -- printf(format, log_buf); -- return 0; --} -- --static void test_invalid_license(void) --{ -- libbpf_print_fn_t old_print_fn; -- struct bpf_tcp_nogpl *skel; -- -- err_str = "struct ops programs must have a GPL compatible license"; -- found = false; -- old_print_fn = libbpf_set_print(libbpf_debug_print); -- -- skel = bpf_tcp_nogpl__open_and_load(); -- ASSERT_NULL(skel, "bpf_tcp_nogpl"); -- ASSERT_EQ(found, true, "expected_err_msg"); -- -- bpf_tcp_nogpl__destroy(skel); -- libbpf_set_print(old_print_fn); --} -- --void test_bpf_tcp_ca(void) --{ -- if (test__start_subtest("dctcp")) -- test_dctcp(); -- if (test__start_subtest("cubic")) -- test_cubic(); -- if (test__start_subtest("invalid_license")) -- test_invalid_license(); --} -diff --git a/tools/testing/selftests/bpf/prog_tests/kfunc_call.c b/tools/testing/selftests/bpf/prog_tests/kfunc_call.c -deleted file mode 100644 -index 7fc0951ee75f..000000000000 ---- a/tools/testing/selftests/bpf/prog_tests/kfunc_call.c -+++ /dev/null -@@ -1,59 +0,0 @@ --// SPDX-License-Identifier: GPL-2.0 --/* Copyright (c) 2021 Facebook */ --#include --#include --#include "kfunc_call_test.skel.h" --#include "kfunc_call_test_subprog.skel.h" -- --static void test_main(void) --{ -- struct kfunc_call_test *skel; -- int prog_fd, retval, err; -- -- skel = kfunc_call_test__open_and_load(); -- if (!ASSERT_OK_PTR(skel, "skel")) -- return; -- -- prog_fd = bpf_program__fd(skel->progs.kfunc_call_test1); -- err = bpf_prog_test_run(prog_fd, 1, &pkt_v4, sizeof(pkt_v4), -- NULL, NULL, (__u32 *)&retval, NULL); -- ASSERT_OK(err, "bpf_prog_test_run(test1)"); -- ASSERT_EQ(retval, 12, "test1-retval"); -- -- prog_fd = bpf_program__fd(skel->progs.kfunc_call_test2); -- err = bpf_prog_test_run(prog_fd, 1, &pkt_v4, sizeof(pkt_v4), -- NULL, NULL, (__u32 *)&retval, NULL); -- ASSERT_OK(err, "bpf_prog_test_run(test2)"); -- ASSERT_EQ(retval, 3, "test2-retval"); -- -- kfunc_call_test__destroy(skel); --} -- --static void test_subprog(void) --{ -- struct kfunc_call_test_subprog *skel; -- int prog_fd, retval, err; -- -- skel = kfunc_call_test_subprog__open_and_load(); -- if (!ASSERT_OK_PTR(skel, "skel")) -- return; -- -- prog_fd = bpf_program__fd(skel->progs.kfunc_call_test1); -- err = bpf_prog_test_run(prog_fd, 1, &pkt_v4, sizeof(pkt_v4), -- NULL, NULL, (__u32 *)&retval, NULL); -- ASSERT_OK(err, "bpf_prog_test_run(test1)"); -- ASSERT_EQ(retval, 10, "test1-retval"); -- ASSERT_NEQ(skel->data->active_res, -1, "active_res"); -- ASSERT_EQ(skel->data->sk_state, BPF_TCP_CLOSE, "sk_state"); -- -- kfunc_call_test_subprog__destroy(skel); --} -- --void test_kfunc_call(void) --{ -- if (test__start_subtest("main")) -- test_main(); -- -- if (test__start_subtest("subprog")) -- test_subprog(); --} -diff --git a/tools/testing/selftests/bpf/prog_tests/linked_funcs.c b/tools/testing/selftests/bpf/prog_tests/linked_funcs.c -deleted file mode 100644 -index e9916f2817ec..000000000000 ---- a/tools/testing/selftests/bpf/prog_tests/linked_funcs.c -+++ /dev/null -@@ -1,42 +0,0 @@ --// SPDX-License-Identifier: GPL-2.0 --/* Copyright (c) 2021 Facebook */ -- --#include --#include --#include "linked_funcs.skel.h" -- --void test_linked_funcs(void) --{ -- int err; -- struct linked_funcs *skel; -- -- skel = linked_funcs__open(); -- if (!ASSERT_OK_PTR(skel, "skel_open")) -- return; -- -- skel->rodata->my_tid = syscall(SYS_gettid); -- skel->bss->syscall_id = SYS_getpgid; -- -- err = linked_funcs__load(skel); -- if (!ASSERT_OK(err, "skel_load")) -- goto cleanup; -- -- err = linked_funcs__attach(skel); -- if (!ASSERT_OK(err, "skel_attach")) -- goto cleanup; -- -- /* trigger */ -- syscall(SYS_getpgid); -- -- ASSERT_EQ(skel->bss->output_val1, 2000 + 2000, "output_val1"); -- ASSERT_EQ(skel->bss->output_ctx1, SYS_getpgid, "output_ctx1"); -- ASSERT_EQ(skel->bss->output_weak1, 42, "output_weak1"); -- -- ASSERT_EQ(skel->bss->output_val2, 2 * 1000 + 2 * (2 * 1000), "output_val2"); -- ASSERT_EQ(skel->bss->output_ctx2, SYS_getpgid, "output_ctx2"); -- /* output_weak2 should never be updated */ -- ASSERT_EQ(skel->bss->output_weak2, 0, "output_weak2"); -- --cleanup: -- linked_funcs__destroy(skel); --} -diff --git a/tools/testing/selftests/bpf/prog_tests/linked_maps.c b/tools/testing/selftests/bpf/prog_tests/linked_maps.c -deleted file mode 100644 -index 85dcaaaf2775..000000000000 ---- a/tools/testing/selftests/bpf/prog_tests/linked_maps.c -+++ /dev/null -@@ -1,30 +0,0 @@ --// SPDX-License-Identifier: GPL-2.0 --/* Copyright (c) 2021 Facebook */ -- --#include --#include --#include "linked_maps.skel.h" -- --void test_linked_maps(void) --{ -- int err; -- struct linked_maps *skel; -- -- skel = linked_maps__open_and_load(); -- if (!ASSERT_OK_PTR(skel, "skel_open")) -- return; -- -- err = linked_maps__attach(skel); -- if (!ASSERT_OK(err, "skel_attach")) -- goto cleanup; -- -- /* trigger */ -- syscall(SYS_getpgid); -- -- ASSERT_EQ(skel->bss->output_first1, 2000, "output_first1"); -- ASSERT_EQ(skel->bss->output_second1, 2, "output_second1"); -- ASSERT_EQ(skel->bss->output_weak1, 2, "output_weak1"); -- --cleanup: -- linked_maps__destroy(skel); --} -diff --git a/tools/testing/selftests/bpf/prog_tests/linked_vars.c b/tools/testing/selftests/bpf/prog_tests/linked_vars.c -deleted file mode 100644 -index 267166abe4c1..000000000000 ---- a/tools/testing/selftests/bpf/prog_tests/linked_vars.c -+++ /dev/null -@@ -1,43 +0,0 @@ --// SPDX-License-Identifier: GPL-2.0 --/* Copyright (c) 2021 Facebook */ -- --#include --#include --#include "linked_vars.skel.h" -- --void test_linked_vars(void) --{ -- int err; -- struct linked_vars *skel; -- -- skel = linked_vars__open(); -- if (!ASSERT_OK_PTR(skel, "skel_open")) -- return; -- -- skel->bss->input_bss1 = 1000; -- skel->bss->input_bss2 = 2000; -- skel->bss->input_bss_weak = 3000; -- -- err = linked_vars__load(skel); -- if (!ASSERT_OK(err, "skel_load")) -- goto cleanup; -- -- err = linked_vars__attach(skel); -- if (!ASSERT_OK(err, "skel_attach")) -- goto cleanup; -- -- /* trigger */ -- syscall(SYS_getpgid); -- -- ASSERT_EQ(skel->bss->output_bss1, 1000 + 2000 + 3000, "output_bss1"); -- ASSERT_EQ(skel->bss->output_bss2, 1000 + 2000 + 3000, "output_bss2"); -- /* 10 comes from "winner" input_data_weak in first obj file */ -- ASSERT_EQ(skel->bss->output_data1, 1 + 2 + 10, "output_bss1"); -- ASSERT_EQ(skel->bss->output_data2, 1 + 2 + 10, "output_bss2"); -- /* 100 comes from "winner" input_rodata_weak in first obj file */ -- ASSERT_EQ(skel->bss->output_rodata1, 11 + 22 + 100, "output_weak1"); -- ASSERT_EQ(skel->bss->output_rodata2, 11 + 22 + 100, "output_weak2"); -- --cleanup: -- linked_vars__destroy(skel); --} -diff --git a/tools/testing/selftests/bpf/prog_tests/static_linked.c b/tools/testing/selftests/bpf/prog_tests/static_linked.c -deleted file mode 100644 -index 46556976dccc..000000000000 ---- a/tools/testing/selftests/bpf/prog_tests/static_linked.c -+++ /dev/null -@@ -1,40 +0,0 @@ --// SPDX-License-Identifier: GPL-2.0 --/* Copyright (c) 2019 Facebook */ -- --#include --#include "test_static_linked.skel.h" -- --void test_static_linked(void) --{ -- int err; -- struct test_static_linked* skel; -- -- skel = test_static_linked__open(); -- if (!ASSERT_OK_PTR(skel, "skel_open")) -- return; -- -- skel->rodata->rovar1 = 1; -- skel->bss->static_var1 = 2; -- skel->bss->static_var11 = 3; -- -- skel->rodata->rovar2 = 4; -- skel->bss->static_var2 = 5; -- skel->bss->static_var22 = 6; -- -- err = test_static_linked__load(skel); -- if (!ASSERT_OK(err, "skel_load")) -- goto cleanup; -- -- err = test_static_linked__attach(skel); -- if (!ASSERT_OK(err, "skel_attach")) -- goto cleanup; -- -- /* trigger */ -- usleep(1); -- -- ASSERT_EQ(skel->bss->var1, 1 * 2 + 2 + 3, "var1"); -- ASSERT_EQ(skel->bss->var2, 4 * 3 + 5 + 6, "var2"); -- --cleanup: -- test_static_linked__destroy(skel); --} -diff --git a/tools/testing/selftests/bpf/progs/bpf_cubic.c b/tools/testing/selftests/bpf/progs/bpf_cubic.c -deleted file mode 100644 -index f62df4d023f9..000000000000 ---- a/tools/testing/selftests/bpf/progs/bpf_cubic.c -+++ /dev/null -@@ -1,545 +0,0 @@ --// SPDX-License-Identifier: GPL-2.0-only -- --/* WARNING: This implemenation is not necessarily the same -- * as the tcp_cubic.c. The purpose is mainly for testing -- * the kernel BPF logic. -- * -- * Highlights: -- * 1. CONFIG_HZ .kconfig map is used. -- * 2. In bictcp_update(), calculation is changed to use usec -- * resolution (i.e. USEC_PER_JIFFY) instead of using jiffies. -- * Thus, usecs_to_jiffies() is not used in the bpf_cubic.c. -- * 3. In bitctcp_update() [under tcp_friendliness], the original -- * "while (ca->ack_cnt > delta)" loop is changed to the equivalent -- * "ca->ack_cnt / delta" operation. -- */ -- --#include --#include --#include --#include "bpf_tcp_helpers.h" -- --char _license[] SEC("license") = "GPL"; -- --#define clamp(val, lo, hi) min((typeof(val))max(val, lo), hi) -- --#define BICTCP_BETA_SCALE 1024 /* Scale factor beta calculation -- * max_cwnd = snd_cwnd * beta -- */ --#define BICTCP_HZ 10 /* BIC HZ 2^10 = 1024 */ -- --/* Two methods of hybrid slow start */ --#define HYSTART_ACK_TRAIN 0x1 --#define HYSTART_DELAY 0x2 -- --/* Number of delay samples for detecting the increase of delay */ --#define HYSTART_MIN_SAMPLES 8 --#define HYSTART_DELAY_MIN (4000U) /* 4ms */ --#define HYSTART_DELAY_MAX (16000U) /* 16 ms */ --#define HYSTART_DELAY_THRESH(x) clamp(x, HYSTART_DELAY_MIN, HYSTART_DELAY_MAX) -- --static int fast_convergence = 1; --static const int beta = 717; /* = 717/1024 (BICTCP_BETA_SCALE) */ --static int initial_ssthresh; --static const int bic_scale = 41; --static int tcp_friendliness = 1; -- --static int hystart = 1; --static int hystart_detect = HYSTART_ACK_TRAIN | HYSTART_DELAY; --static int hystart_low_window = 16; --static int hystart_ack_delta_us = 2000; -- --static const __u32 cube_rtt_scale = (bic_scale * 10); /* 1024*c/rtt */ --static const __u32 beta_scale = 8*(BICTCP_BETA_SCALE+beta) / 3 -- / (BICTCP_BETA_SCALE - beta); --/* calculate the "K" for (wmax-cwnd) = c/rtt * K^3 -- * so K = cubic_root( (wmax-cwnd)*rtt/c ) -- * the unit of K is bictcp_HZ=2^10, not HZ -- * -- * c = bic_scale >> 10 -- * rtt = 100ms -- * -- * the following code has been designed and tested for -- * cwnd < 1 million packets -- * RTT < 100 seconds -- * HZ < 1,000,00 (corresponding to 10 nano-second) -- */ -- --/* 1/c * 2^2*bictcp_HZ * srtt, 2^40 */ --static const __u64 cube_factor = (__u64)(1ull << (10+3*BICTCP_HZ)) -- / (bic_scale * 10); -- --/* BIC TCP Parameters */ --struct bictcp { -- __u32 cnt; /* increase cwnd by 1 after ACKs */ -- __u32 last_max_cwnd; /* last maximum snd_cwnd */ -- __u32 last_cwnd; /* the last snd_cwnd */ -- __u32 last_time; /* time when updated last_cwnd */ -- __u32 bic_origin_point;/* origin point of bic function */ -- __u32 bic_K; /* time to origin point -- from the beginning of the current epoch */ -- __u32 delay_min; /* min delay (usec) */ -- __u32 epoch_start; /* beginning of an epoch */ -- __u32 ack_cnt; /* number of acks */ -- __u32 tcp_cwnd; /* estimated tcp cwnd */ -- __u16 unused; -- __u8 sample_cnt; /* number of samples to decide curr_rtt */ -- __u8 found; /* the exit point is found? */ -- __u32 round_start; /* beginning of each round */ -- __u32 end_seq; /* end_seq of the round */ -- __u32 last_ack; /* last time when the ACK spacing is close */ -- __u32 curr_rtt; /* the minimum rtt of current round */ --}; -- --static inline void bictcp_reset(struct bictcp *ca) --{ -- ca->cnt = 0; -- ca->last_max_cwnd = 0; -- ca->last_cwnd = 0; -- ca->last_time = 0; -- ca->bic_origin_point = 0; -- ca->bic_K = 0; -- ca->delay_min = 0; -- ca->epoch_start = 0; -- ca->ack_cnt = 0; -- ca->tcp_cwnd = 0; -- ca->found = 0; --} -- --extern unsigned long CONFIG_HZ __kconfig; --#define HZ CONFIG_HZ --#define USEC_PER_MSEC 1000UL --#define USEC_PER_SEC 1000000UL --#define USEC_PER_JIFFY (USEC_PER_SEC / HZ) -- --static __always_inline __u64 div64_u64(__u64 dividend, __u64 divisor) --{ -- return dividend / divisor; --} -- --#define div64_ul div64_u64 -- --#define BITS_PER_U64 (sizeof(__u64) * 8) --static __always_inline int fls64(__u64 x) --{ -- int num = BITS_PER_U64 - 1; -- -- if (x == 0) -- return 0; -- -- if (!(x & (~0ull << (BITS_PER_U64-32)))) { -- num -= 32; -- x <<= 32; -- } -- if (!(x & (~0ull << (BITS_PER_U64-16)))) { -- num -= 16; -- x <<= 16; -- } -- if (!(x & (~0ull << (BITS_PER_U64-8)))) { -- num -= 8; -- x <<= 8; -- } -- if (!(x & (~0ull << (BITS_PER_U64-4)))) { -- num -= 4; -- x <<= 4; -- } -- if (!(x & (~0ull << (BITS_PER_U64-2)))) { -- num -= 2; -- x <<= 2; -- } -- if (!(x & (~0ull << (BITS_PER_U64-1)))) -- num -= 1; -- -- return num + 1; --} -- --static __always_inline __u32 bictcp_clock_us(const struct sock *sk) --{ -- return tcp_sk(sk)->tcp_mstamp; --} -- --static __always_inline void bictcp_hystart_reset(struct sock *sk) --{ -- struct tcp_sock *tp = tcp_sk(sk); -- struct bictcp *ca = inet_csk_ca(sk); -- -- ca->round_start = ca->last_ack = bictcp_clock_us(sk); -- ca->end_seq = tp->snd_nxt; -- ca->curr_rtt = ~0U; -- ca->sample_cnt = 0; --} -- --/* "struct_ops/" prefix is not a requirement -- * It will be recognized as BPF_PROG_TYPE_STRUCT_OPS -- * as long as it is used in one of the func ptr -- * under SEC(".struct_ops"). -- */ --SEC("struct_ops/bpf_cubic_init") --void BPF_PROG(bpf_cubic_init, struct sock *sk) --{ -- struct bictcp *ca = inet_csk_ca(sk); -- -- bictcp_reset(ca); -- -- if (hystart) -- bictcp_hystart_reset(sk); -- -- if (!hystart && initial_ssthresh) -- tcp_sk(sk)->snd_ssthresh = initial_ssthresh; --} -- --/* No prefix in SEC will also work. -- * The remaining tcp-cubic functions have an easier way. -- */ --SEC("no-sec-prefix-bictcp_cwnd_event") --void BPF_PROG(bpf_cubic_cwnd_event, struct sock *sk, enum tcp_ca_event event) --{ -- if (event == CA_EVENT_TX_START) { -- struct bictcp *ca = inet_csk_ca(sk); -- __u32 now = tcp_jiffies32; -- __s32 delta; -- -- delta = now - tcp_sk(sk)->lsndtime; -- -- /* We were application limited (idle) for a while. -- * Shift epoch_start to keep cwnd growth to cubic curve. -- */ -- if (ca->epoch_start && delta > 0) { -- ca->epoch_start += delta; -- if (after(ca->epoch_start, now)) -- ca->epoch_start = now; -- } -- return; -- } --} -- --/* -- * cbrt(x) MSB values for x MSB values in [0..63]. -- * Precomputed then refined by hand - Willy Tarreau -- * -- * For x in [0..63], -- * v = cbrt(x << 18) - 1 -- * cbrt(x) = (v[x] + 10) >> 6 -- */ --static const __u8 v[] = { -- /* 0x00 */ 0, 54, 54, 54, 118, 118, 118, 118, -- /* 0x08 */ 123, 129, 134, 138, 143, 147, 151, 156, -- /* 0x10 */ 157, 161, 164, 168, 170, 173, 176, 179, -- /* 0x18 */ 181, 185, 187, 190, 192, 194, 197, 199, -- /* 0x20 */ 200, 202, 204, 206, 209, 211, 213, 215, -- /* 0x28 */ 217, 219, 221, 222, 224, 225, 227, 229, -- /* 0x30 */ 231, 232, 234, 236, 237, 239, 240, 242, -- /* 0x38 */ 244, 245, 246, 248, 250, 251, 252, 254, --}; -- --/* calculate the cubic root of x using a table lookup followed by one -- * Newton-Raphson iteration. -- * Avg err ~= 0.195% -- */ --static __always_inline __u32 cubic_root(__u64 a) --{ -- __u32 x, b, shift; -- -- if (a < 64) { -- /* a in [0..63] */ -- return ((__u32)v[(__u32)a] + 35) >> 6; -- } -- -- b = fls64(a); -- b = ((b * 84) >> 8) - 1; -- shift = (a >> (b * 3)); -- -- /* it is needed for verifier's bound check on v */ -- if (shift >= 64) -- return 0; -- -- x = ((__u32)(((__u32)v[shift] + 10) << b)) >> 6; -- -- /* -- * Newton-Raphson iteration -- * 2 -- * x = ( 2 * x + a / x ) / 3 -- * k+1 k k -- */ -- x = (2 * x + (__u32)div64_u64(a, (__u64)x * (__u64)(x - 1))); -- x = ((x * 341) >> 10); -- return x; --} -- --/* -- * Compute congestion window to use. -- */ --static __always_inline void bictcp_update(struct bictcp *ca, __u32 cwnd, -- __u32 acked) --{ -- __u32 delta, bic_target, max_cnt; -- __u64 offs, t; -- -- ca->ack_cnt += acked; /* count the number of ACKed packets */ -- -- if (ca->last_cwnd == cwnd && -- (__s32)(tcp_jiffies32 - ca->last_time) <= HZ / 32) -- return; -- -- /* The CUBIC function can update ca->cnt at most once per jiffy. -- * On all cwnd reduction events, ca->epoch_start is set to 0, -- * which will force a recalculation of ca->cnt. -- */ -- if (ca->epoch_start && tcp_jiffies32 == ca->last_time) -- goto tcp_friendliness; -- -- ca->last_cwnd = cwnd; -- ca->last_time = tcp_jiffies32; -- -- if (ca->epoch_start == 0) { -- ca->epoch_start = tcp_jiffies32; /* record beginning */ -- ca->ack_cnt = acked; /* start counting */ -- ca->tcp_cwnd = cwnd; /* syn with cubic */ -- -- if (ca->last_max_cwnd <= cwnd) { -- ca->bic_K = 0; -- ca->bic_origin_point = cwnd; -- } else { -- /* Compute new K based on -- * (wmax-cwnd) * (srtt>>3 / HZ) / c * 2^(3*bictcp_HZ) -- */ -- ca->bic_K = cubic_root(cube_factor -- * (ca->last_max_cwnd - cwnd)); -- ca->bic_origin_point = ca->last_max_cwnd; -- } -- } -- -- /* cubic function - calc*/ -- /* calculate c * time^3 / rtt, -- * while considering overflow in calculation of time^3 -- * (so time^3 is done by using 64 bit) -- * and without the support of division of 64bit numbers -- * (so all divisions are done by using 32 bit) -- * also NOTE the unit of those veriables -- * time = (t - K) / 2^bictcp_HZ -- * c = bic_scale >> 10 -- * rtt = (srtt >> 3) / HZ -- * !!! The following code does not have overflow problems, -- * if the cwnd < 1 million packets !!! -- */ -- -- t = (__s32)(tcp_jiffies32 - ca->epoch_start) * USEC_PER_JIFFY; -- t += ca->delay_min; -- /* change the unit from usec to bictcp_HZ */ -- t <<= BICTCP_HZ; -- t /= USEC_PER_SEC; -- -- if (t < ca->bic_K) /* t - K */ -- offs = ca->bic_K - t; -- else -- offs = t - ca->bic_K; -- -- /* c/rtt * (t-K)^3 */ -- delta = (cube_rtt_scale * offs * offs * offs) >> (10+3*BICTCP_HZ); -- if (t < ca->bic_K) /* below origin*/ -- bic_target = ca->bic_origin_point - delta; -- else /* above origin*/ -- bic_target = ca->bic_origin_point + delta; -- -- /* cubic function - calc bictcp_cnt*/ -- if (bic_target > cwnd) { -- ca->cnt = cwnd / (bic_target - cwnd); -- } else { -- ca->cnt = 100 * cwnd; /* very small increment*/ -- } -- -- /* -- * The initial growth of cubic function may be too conservative -- * when the available bandwidth is still unknown. -- */ -- if (ca->last_max_cwnd == 0 && ca->cnt > 20) -- ca->cnt = 20; /* increase cwnd 5% per RTT */ -- --tcp_friendliness: -- /* TCP Friendly */ -- if (tcp_friendliness) { -- __u32 scale = beta_scale; -- __u32 n; -- -- /* update tcp cwnd */ -- delta = (cwnd * scale) >> 3; -- if (ca->ack_cnt > delta && delta) { -- n = ca->ack_cnt / delta; -- ca->ack_cnt -= n * delta; -- ca->tcp_cwnd += n; -- } -- -- if (ca->tcp_cwnd > cwnd) { /* if bic is slower than tcp */ -- delta = ca->tcp_cwnd - cwnd; -- max_cnt = cwnd / delta; -- if (ca->cnt > max_cnt) -- ca->cnt = max_cnt; -- } -- } -- -- /* The maximum rate of cwnd increase CUBIC allows is 1 packet per -- * 2 packets ACKed, meaning cwnd grows at 1.5x per RTT. -- */ -- ca->cnt = max(ca->cnt, 2U); --} -- --/* Or simply use the BPF_STRUCT_OPS to avoid the SEC boiler plate. */ --void BPF_STRUCT_OPS(bpf_cubic_cong_avoid, struct sock *sk, __u32 ack, __u32 acked) --{ -- struct tcp_sock *tp = tcp_sk(sk); -- struct bictcp *ca = inet_csk_ca(sk); -- -- if (!tcp_is_cwnd_limited(sk)) -- return; -- -- if (tcp_in_slow_start(tp)) { -- if (hystart && after(ack, ca->end_seq)) -- bictcp_hystart_reset(sk); -- acked = tcp_slow_start(tp, acked); -- if (!acked) -- return; -- } -- bictcp_update(ca, tp->snd_cwnd, acked); -- tcp_cong_avoid_ai(tp, ca->cnt, acked); --} -- --__u32 BPF_STRUCT_OPS(bpf_cubic_recalc_ssthresh, struct sock *sk) --{ -- const struct tcp_sock *tp = tcp_sk(sk); -- struct bictcp *ca = inet_csk_ca(sk); -- -- ca->epoch_start = 0; /* end of epoch */ -- -- /* Wmax and fast convergence */ -- if (tp->snd_cwnd < ca->last_max_cwnd && fast_convergence) -- ca->last_max_cwnd = (tp->snd_cwnd * (BICTCP_BETA_SCALE + beta)) -- / (2 * BICTCP_BETA_SCALE); -- else -- ca->last_max_cwnd = tp->snd_cwnd; -- -- return max((tp->snd_cwnd * beta) / BICTCP_BETA_SCALE, 2U); --} -- --void BPF_STRUCT_OPS(bpf_cubic_state, struct sock *sk, __u8 new_state) --{ -- if (new_state == TCP_CA_Loss) { -- bictcp_reset(inet_csk_ca(sk)); -- bictcp_hystart_reset(sk); -- } --} -- --#define GSO_MAX_SIZE 65536 -- --/* Account for TSO/GRO delays. -- * Otherwise short RTT flows could get too small ssthresh, since during -- * slow start we begin with small TSO packets and ca->delay_min would -- * not account for long aggregation delay when TSO packets get bigger. -- * Ideally even with a very small RTT we would like to have at least one -- * TSO packet being sent and received by GRO, and another one in qdisc layer. -- * We apply another 100% factor because @rate is doubled at this point. -- * We cap the cushion to 1ms. -- */ --static __always_inline __u32 hystart_ack_delay(struct sock *sk) --{ -- unsigned long rate; -- -- rate = sk->sk_pacing_rate; -- if (!rate) -- return 0; -- return min((__u64)USEC_PER_MSEC, -- div64_ul((__u64)GSO_MAX_SIZE * 4 * USEC_PER_SEC, rate)); --} -- --static __always_inline void hystart_update(struct sock *sk, __u32 delay) --{ -- struct tcp_sock *tp = tcp_sk(sk); -- struct bictcp *ca = inet_csk_ca(sk); -- __u32 threshold; -- -- if (hystart_detect & HYSTART_ACK_TRAIN) { -- __u32 now = bictcp_clock_us(sk); -- -- /* first detection parameter - ack-train detection */ -- if ((__s32)(now - ca->last_ack) <= hystart_ack_delta_us) { -- ca->last_ack = now; -- -- threshold = ca->delay_min + hystart_ack_delay(sk); -- -- /* Hystart ack train triggers if we get ack past -- * ca->delay_min/2. -- * Pacing might have delayed packets up to RTT/2 -- * during slow start. -- */ -- if (sk->sk_pacing_status == SK_PACING_NONE) -- threshold >>= 1; -- -- if ((__s32)(now - ca->round_start) > threshold) { -- ca->found = 1; -- tp->snd_ssthresh = tp->snd_cwnd; -- } -- } -- } -- -- if (hystart_detect & HYSTART_DELAY) { -- /* obtain the minimum delay of more than sampling packets */ -- if (ca->curr_rtt > delay) -- ca->curr_rtt = delay; -- if (ca->sample_cnt < HYSTART_MIN_SAMPLES) { -- ca->sample_cnt++; -- } else { -- if (ca->curr_rtt > ca->delay_min + -- HYSTART_DELAY_THRESH(ca->delay_min >> 3)) { -- ca->found = 1; -- tp->snd_ssthresh = tp->snd_cwnd; -- } -- } -- } --} -- --void BPF_STRUCT_OPS(bpf_cubic_acked, struct sock *sk, -- const struct ack_sample *sample) --{ -- const struct tcp_sock *tp = tcp_sk(sk); -- struct bictcp *ca = inet_csk_ca(sk); -- __u32 delay; -- -- /* Some calls are for duplicates without timetamps */ -- if (sample->rtt_us < 0) -- return; -- -- /* Discard delay samples right after fast recovery */ -- if (ca->epoch_start && (__s32)(tcp_jiffies32 - ca->epoch_start) < HZ) -- return; -- -- delay = sample->rtt_us; -- if (delay == 0) -- delay = 1; -- -- /* first time call or link delay decreases */ -- if (ca->delay_min == 0 || ca->delay_min > delay) -- ca->delay_min = delay; -- -- /* hystart triggers when cwnd is larger than some threshold */ -- if (!ca->found && tcp_in_slow_start(tp) && hystart && -- tp->snd_cwnd >= hystart_low_window) -- hystart_update(sk, delay); --} -- --extern __u32 tcp_reno_undo_cwnd(struct sock *sk) __ksym; -- --__u32 BPF_STRUCT_OPS(bpf_cubic_undo_cwnd, struct sock *sk) --{ -- return tcp_reno_undo_cwnd(sk); --} -- --SEC(".struct_ops") --struct tcp_congestion_ops cubic = { -- .init = (void *)bpf_cubic_init, -- .ssthresh = (void *)bpf_cubic_recalc_ssthresh, -- .cong_avoid = (void *)bpf_cubic_cong_avoid, -- .set_state = (void *)bpf_cubic_state, -- .undo_cwnd = (void *)bpf_cubic_undo_cwnd, -- .cwnd_event = (void *)bpf_cubic_cwnd_event, -- .pkts_acked = (void *)bpf_cubic_acked, -- .name = "bpf_cubic", --}; -diff --git a/tools/testing/selftests/bpf/progs/bpf_dctcp.c b/tools/testing/selftests/bpf/progs/bpf_dctcp.c -deleted file mode 100644 -index fd42247da8b4..000000000000 ---- a/tools/testing/selftests/bpf/progs/bpf_dctcp.c -+++ /dev/null -@@ -1,224 +0,0 @@ --// SPDX-License-Identifier: GPL-2.0 --/* Copyright (c) 2019 Facebook */ -- --/* WARNING: This implemenation is not necessarily the same -- * as the tcp_dctcp.c. The purpose is mainly for testing -- * the kernel BPF logic. -- */ -- --#include --#include --#include --#include --#include --#include --#include --#include "bpf_tcp_helpers.h" -- --char _license[] SEC("license") = "GPL"; -- --int stg_result = 0; -- --struct { -- __uint(type, BPF_MAP_TYPE_SK_STORAGE); -- __uint(map_flags, BPF_F_NO_PREALLOC); -- __type(key, int); -- __type(value, int); --} sk_stg_map SEC(".maps"); -- --#define DCTCP_MAX_ALPHA 1024U -- --struct dctcp { -- __u32 old_delivered; -- __u32 old_delivered_ce; -- __u32 prior_rcv_nxt; -- __u32 dctcp_alpha; -- __u32 next_seq; -- __u32 ce_state; -- __u32 loss_cwnd; --}; -- --static unsigned int dctcp_shift_g = 4; /* g = 1/2^4 */ --static unsigned int dctcp_alpha_on_init = DCTCP_MAX_ALPHA; -- --static __always_inline void dctcp_reset(const struct tcp_sock *tp, -- struct dctcp *ca) --{ -- ca->next_seq = tp->snd_nxt; -- -- ca->old_delivered = tp->delivered; -- ca->old_delivered_ce = tp->delivered_ce; --} -- --SEC("struct_ops/dctcp_init") --void BPF_PROG(dctcp_init, struct sock *sk) --{ -- const struct tcp_sock *tp = tcp_sk(sk); -- struct dctcp *ca = inet_csk_ca(sk); -- int *stg; -- -- ca->prior_rcv_nxt = tp->rcv_nxt; -- ca->dctcp_alpha = min(dctcp_alpha_on_init, DCTCP_MAX_ALPHA); -- ca->loss_cwnd = 0; -- ca->ce_state = 0; -- -- stg = bpf_sk_storage_get(&sk_stg_map, (void *)tp, NULL, 0); -- if (stg) { -- stg_result = *stg; -- bpf_sk_storage_delete(&sk_stg_map, (void *)tp); -- } -- dctcp_reset(tp, ca); --} -- --SEC("struct_ops/dctcp_ssthresh") --__u32 BPF_PROG(dctcp_ssthresh, struct sock *sk) --{ -- struct dctcp *ca = inet_csk_ca(sk); -- struct tcp_sock *tp = tcp_sk(sk); -- -- ca->loss_cwnd = tp->snd_cwnd; -- return max(tp->snd_cwnd - ((tp->snd_cwnd * ca->dctcp_alpha) >> 11U), 2U); --} -- --SEC("struct_ops/dctcp_update_alpha") --void BPF_PROG(dctcp_update_alpha, struct sock *sk, __u32 flags) --{ -- const struct tcp_sock *tp = tcp_sk(sk); -- struct dctcp *ca = inet_csk_ca(sk); -- -- /* Expired RTT */ -- if (!before(tp->snd_una, ca->next_seq)) { -- __u32 delivered_ce = tp->delivered_ce - ca->old_delivered_ce; -- __u32 alpha = ca->dctcp_alpha; -- -- /* alpha = (1 - g) * alpha + g * F */ -- -- alpha -= min_not_zero(alpha, alpha >> dctcp_shift_g); -- if (delivered_ce) { -- __u32 delivered = tp->delivered - ca->old_delivered; -- -- /* If dctcp_shift_g == 1, a 32bit value would overflow -- * after 8 M packets. -- */ -- delivered_ce <<= (10 - dctcp_shift_g); -- delivered_ce /= max(1U, delivered); -- -- alpha = min(alpha + delivered_ce, DCTCP_MAX_ALPHA); -- } -- ca->dctcp_alpha = alpha; -- dctcp_reset(tp, ca); -- } --} -- --static __always_inline void dctcp_react_to_loss(struct sock *sk) --{ -- struct dctcp *ca = inet_csk_ca(sk); -- struct tcp_sock *tp = tcp_sk(sk); -- -- ca->loss_cwnd = tp->snd_cwnd; -- tp->snd_ssthresh = max(tp->snd_cwnd >> 1U, 2U); --} -- --SEC("struct_ops/dctcp_state") --void BPF_PROG(dctcp_state, struct sock *sk, __u8 new_state) --{ -- if (new_state == TCP_CA_Recovery && -- new_state != BPF_CORE_READ_BITFIELD(inet_csk(sk), icsk_ca_state)) -- dctcp_react_to_loss(sk); -- /* We handle RTO in dctcp_cwnd_event to ensure that we perform only -- * one loss-adjustment per RTT. -- */ --} -- --static __always_inline void dctcp_ece_ack_cwr(struct sock *sk, __u32 ce_state) --{ -- struct tcp_sock *tp = tcp_sk(sk); -- -- if (ce_state == 1) -- tp->ecn_flags |= TCP_ECN_DEMAND_CWR; -- else -- tp->ecn_flags &= ~TCP_ECN_DEMAND_CWR; --} -- --/* Minimal DCTP CE state machine: -- * -- * S: 0 <- last pkt was non-CE -- * 1 <- last pkt was CE -- */ --static __always_inline --void dctcp_ece_ack_update(struct sock *sk, enum tcp_ca_event evt, -- __u32 *prior_rcv_nxt, __u32 *ce_state) --{ -- __u32 new_ce_state = (evt == CA_EVENT_ECN_IS_CE) ? 1 : 0; -- -- if (*ce_state != new_ce_state) { -- /* CE state has changed, force an immediate ACK to -- * reflect the new CE state. If an ACK was delayed, -- * send that first to reflect the prior CE state. -- */ -- if (inet_csk(sk)->icsk_ack.pending & ICSK_ACK_TIMER) { -- dctcp_ece_ack_cwr(sk, *ce_state); -- bpf_tcp_send_ack(sk, *prior_rcv_nxt); -- } -- inet_csk(sk)->icsk_ack.pending |= ICSK_ACK_NOW; -- } -- *prior_rcv_nxt = tcp_sk(sk)->rcv_nxt; -- *ce_state = new_ce_state; -- dctcp_ece_ack_cwr(sk, new_ce_state); --} -- --SEC("struct_ops/dctcp_cwnd_event") --void BPF_PROG(dctcp_cwnd_event, struct sock *sk, enum tcp_ca_event ev) --{ -- struct dctcp *ca = inet_csk_ca(sk); -- -- switch (ev) { -- case CA_EVENT_ECN_IS_CE: -- case CA_EVENT_ECN_NO_CE: -- dctcp_ece_ack_update(sk, ev, &ca->prior_rcv_nxt, &ca->ce_state); -- break; -- case CA_EVENT_LOSS: -- dctcp_react_to_loss(sk); -- break; -- default: -- /* Don't care for the rest. */ -- break; -- } --} -- --SEC("struct_ops/dctcp_cwnd_undo") --__u32 BPF_PROG(dctcp_cwnd_undo, struct sock *sk) --{ -- const struct dctcp *ca = inet_csk_ca(sk); -- -- return max(tcp_sk(sk)->snd_cwnd, ca->loss_cwnd); --} -- --extern void tcp_reno_cong_avoid(struct sock *sk, __u32 ack, __u32 acked) __ksym; -- --SEC("struct_ops/dctcp_reno_cong_avoid") --void BPF_PROG(dctcp_cong_avoid, struct sock *sk, __u32 ack, __u32 acked) --{ -- tcp_reno_cong_avoid(sk, ack, acked); --} -- --SEC(".struct_ops") --struct tcp_congestion_ops dctcp_nouse = { -- .init = (void *)dctcp_init, -- .set_state = (void *)dctcp_state, -- .flags = TCP_CONG_NEEDS_ECN, -- .name = "bpf_dctcp_nouse", --}; -- --SEC(".struct_ops") --struct tcp_congestion_ops dctcp = { -- .init = (void *)dctcp_init, -- .in_ack_event = (void *)dctcp_update_alpha, -- .cwnd_event = (void *)dctcp_cwnd_event, -- .ssthresh = (void *)dctcp_ssthresh, -- .cong_avoid = (void *)dctcp_cong_avoid, -- .undo_cwnd = (void *)dctcp_cwnd_undo, -- .set_state = (void *)dctcp_state, -- .flags = TCP_CONG_NEEDS_ECN, -- .name = "bpf_dctcp", --}; -diff --git a/tools/testing/selftests/bpf/progs/kfunc_call_test.c b/tools/testing/selftests/bpf/progs/kfunc_call_test.c -deleted file mode 100644 -index 470f8723e463..000000000000 ---- a/tools/testing/selftests/bpf/progs/kfunc_call_test.c -+++ /dev/null -@@ -1,47 +0,0 @@ --// SPDX-License-Identifier: GPL-2.0 --/* Copyright (c) 2021 Facebook */ --#include --#include --#include "bpf_tcp_helpers.h" -- --extern int bpf_kfunc_call_test2(struct sock *sk, __u32 a, __u32 b) __ksym; --extern __u64 bpf_kfunc_call_test1(struct sock *sk, __u32 a, __u64 b, -- __u32 c, __u64 d) __ksym; -- --SEC("classifier") --int kfunc_call_test2(struct __sk_buff *skb) --{ -- struct bpf_sock *sk = skb->sk; -- -- if (!sk) -- return -1; -- -- sk = bpf_sk_fullsock(sk); -- if (!sk) -- return -1; -- -- return bpf_kfunc_call_test2((struct sock *)sk, 1, 2); --} -- --SEC("classifier") --int kfunc_call_test1(struct __sk_buff *skb) --{ -- struct bpf_sock *sk = skb->sk; -- __u64 a = 1ULL << 32; -- __u32 ret; -- -- if (!sk) -- return -1; -- -- sk = bpf_sk_fullsock(sk); -- if (!sk) -- return -1; -- -- a = bpf_kfunc_call_test1((struct sock *)sk, 1, a | 2, 3, a | 4); -- ret = a >> 32; /* ret should be 2 */ -- ret += (__u32)a; /* ret should be 12 */ -- -- return ret; --} -- --char _license[] SEC("license") = "GPL"; -diff --git a/tools/testing/selftests/bpf/progs/kfunc_call_test_subprog.c b/tools/testing/selftests/bpf/progs/kfunc_call_test_subprog.c -deleted file mode 100644 -index b2dcb7d9cb03..000000000000 ---- a/tools/testing/selftests/bpf/progs/kfunc_call_test_subprog.c -+++ /dev/null -@@ -1,42 +0,0 @@ --// SPDX-License-Identifier: GPL-2.0 --/* Copyright (c) 2021 Facebook */ --#include --#include --#include "bpf_tcp_helpers.h" -- --extern const int bpf_prog_active __ksym; --extern __u64 bpf_kfunc_call_test1(struct sock *sk, __u32 a, __u64 b, -- __u32 c, __u64 d) __ksym; --extern struct sock *bpf_kfunc_call_test3(struct sock *sk) __ksym; --int active_res = -1; --int sk_state = -1; -- --int __noinline f1(struct __sk_buff *skb) --{ -- struct bpf_sock *sk = skb->sk; -- int *active; -- -- if (!sk) -- return -1; -- -- sk = bpf_sk_fullsock(sk); -- if (!sk) -- return -1; -- -- active = (int *)bpf_per_cpu_ptr(&bpf_prog_active, -- bpf_get_smp_processor_id()); -- if (active) -- active_res = *active; -- -- sk_state = bpf_kfunc_call_test3((struct sock *)sk)->__sk_common.skc_state; -- -- return (__u32)bpf_kfunc_call_test1((struct sock *)sk, 1, 2, 3, 4); --} -- --SEC("classifier") --int kfunc_call_test1(struct __sk_buff *skb) --{ -- return f1(skb); --} -- --char _license[] SEC("license") = "GPL"; -diff --git a/tools/testing/selftests/bpf/progs/linked_funcs1.c b/tools/testing/selftests/bpf/progs/linked_funcs1.c -deleted file mode 100644 -index b964ec1390c2..000000000000 ---- a/tools/testing/selftests/bpf/progs/linked_funcs1.c -+++ /dev/null -@@ -1,73 +0,0 @@ --// SPDX-License-Identifier: GPL-2.0 --/* Copyright (c) 2021 Facebook */ -- --#include "vmlinux.h" --#include --#include -- --/* weak and shared between two files */ --const volatile int my_tid __weak; --long syscall_id __weak; -- --int output_val1; --int output_ctx1; --int output_weak1; -- --/* same "subprog" name in all files, but it's ok because they all are static */ --static __noinline int subprog(int x) --{ -- /* but different formula */ -- return x * 1; --} -- --/* Global functions can't be void */ --int set_output_val1(int x) --{ -- output_val1 = x + subprog(x); -- return x; --} -- --/* This function can't be verified as global, as it assumes raw_tp/sys_enter -- * context and accesses syscall id (second argument). So we mark it as -- * __hidden, so that libbpf will mark it as static in the final object file, -- * right before verifying it in the kernel. -- * -- * But we don't mark it as __hidden here, rather at extern site. __hidden is -- * "contaminating" visibility, so it will get propagated from either extern or -- * actual definition (including from the losing __weak definition). -- */ --void set_output_ctx1(__u64 *ctx) --{ -- output_ctx1 = ctx[1]; /* long id, same as in BPF_PROG below */ --} -- --/* this weak instance should win because it's the first one */ --__weak int set_output_weak(int x) --{ -- output_weak1 = x; -- return x; --} -- --extern int set_output_val2(int x); -- --/* here we'll force set_output_ctx2() to be __hidden in the final obj file */ --__hidden extern void set_output_ctx2(__u64 *ctx); -- --SEC("raw_tp/sys_enter") --int BPF_PROG(handler1, struct pt_regs *regs, long id) --{ -- if (my_tid != (u32)bpf_get_current_pid_tgid() || id != syscall_id) -- return 0; -- -- set_output_val2(1000); -- set_output_ctx2(ctx); /* ctx definition is hidden in BPF_PROG macro */ -- -- /* keep input value the same across both files to avoid dependency on -- * handler call order; differentiate by output_weak1 vs output_weak2. -- */ -- set_output_weak(42); -- -- return 0; --} -- --char LICENSE[] SEC("license") = "GPL"; -diff --git a/tools/testing/selftests/bpf/progs/linked_funcs2.c b/tools/testing/selftests/bpf/progs/linked_funcs2.c -deleted file mode 100644 -index 575e958e60b7..000000000000 ---- a/tools/testing/selftests/bpf/progs/linked_funcs2.c -+++ /dev/null -@@ -1,73 +0,0 @@ --// SPDX-License-Identifier: GPL-2.0 --/* Copyright (c) 2021 Facebook */ -- --#include "vmlinux.h" --#include --#include -- --/* weak and shared between both files */ --const volatile int my_tid __weak; --long syscall_id __weak; -- --int output_val2; --int output_ctx2; --int output_weak2; /* should stay zero */ -- --/* same "subprog" name in all files, but it's ok because they all are static */ --static __noinline int subprog(int x) --{ -- /* but different formula */ -- return x * 2; --} -- --/* Global functions can't be void */ --int set_output_val2(int x) --{ -- output_val2 = 2 * x + 2 * subprog(x); -- return 2 * x; --} -- --/* This function can't be verified as global, as it assumes raw_tp/sys_enter -- * context and accesses syscall id (second argument). So we mark it as -- * __hidden, so that libbpf will mark it as static in the final object file, -- * right before verifying it in the kernel. -- * -- * But we don't mark it as __hidden here, rather at extern site. __hidden is -- * "contaminating" visibility, so it will get propagated from either extern or -- * actual definition (including from the losing __weak definition). -- */ --void set_output_ctx2(__u64 *ctx) --{ -- output_ctx2 = ctx[1]; /* long id, same as in BPF_PROG below */ --} -- --/* this weak instance should lose, because it will be processed second */ --__weak int set_output_weak(int x) --{ -- output_weak2 = x; -- return 2 * x; --} -- --extern int set_output_val1(int x); -- --/* here we'll force set_output_ctx1() to be __hidden in the final obj file */ --__hidden extern void set_output_ctx1(__u64 *ctx); -- --SEC("raw_tp/sys_enter") --int BPF_PROG(handler2, struct pt_regs *regs, long id) --{ -- if (my_tid != (u32)bpf_get_current_pid_tgid() || id != syscall_id) -- return 0; -- -- set_output_val1(2000); -- set_output_ctx1(ctx); /* ctx definition is hidden in BPF_PROG macro */ -- -- /* keep input value the same across both files to avoid dependency on -- * handler call order; differentiate by output_weak1 vs output_weak2. -- */ -- set_output_weak(42); -- -- return 0; --} -- --char LICENSE[] SEC("license") = "GPL"; -diff --git a/tools/testing/selftests/bpf/progs/linked_maps1.c b/tools/testing/selftests/bpf/progs/linked_maps1.c -deleted file mode 100644 -index 52291515cc72..000000000000 ---- a/tools/testing/selftests/bpf/progs/linked_maps1.c -+++ /dev/null -@@ -1,82 +0,0 @@ --// SPDX-License-Identifier: GPL-2.0 --/* Copyright (c) 2021 Facebook */ -- --#include "vmlinux.h" --#include --#include -- --struct my_key { long x; }; --struct my_value { long x; }; -- --struct { -- __uint(type, BPF_MAP_TYPE_HASH); -- __type(key, struct my_key); -- __type(value, struct my_value); -- __uint(max_entries, 16); --} map1 SEC(".maps"); -- -- /* Matches map2 definition in linked_maps2.c. Order of the attributes doesn't -- * matter. -- */ --typedef struct { -- __uint(max_entries, 8); -- __type(key, int); -- __type(value, int); -- __uint(type, BPF_MAP_TYPE_ARRAY); --} map2_t; -- --extern map2_t map2 SEC(".maps"); -- --/* This should be the winning map definition, but we have no way of verifying, -- * so we just make sure that it links and works without errors -- */ --struct { -- __uint(type, BPF_MAP_TYPE_ARRAY); -- __type(key, int); -- __type(value, int); -- __uint(max_entries, 16); --} map_weak __weak SEC(".maps"); -- --int output_first1; --int output_second1; --int output_weak1; -- --SEC("raw_tp/sys_enter") --int BPF_PROG(handler_enter1) --{ -- /* update values with key = 1 */ -- int key = 1, val = 1; -- struct my_key key_struct = { .x = 1 }; -- struct my_value val_struct = { .x = 1000 }; -- -- bpf_map_update_elem(&map1, &key_struct, &val_struct, 0); -- bpf_map_update_elem(&map2, &key, &val, 0); -- bpf_map_update_elem(&map_weak, &key, &val, 0); -- -- return 0; --} -- --SEC("raw_tp/sys_exit") --int BPF_PROG(handler_exit1) --{ -- /* lookup values with key = 2, set in another file */ -- int key = 2, *val; -- struct my_key key_struct = { .x = 2 }; -- struct my_value *value_struct; -- -- value_struct = bpf_map_lookup_elem(&map1, &key_struct); -- if (value_struct) -- output_first1 = value_struct->x; -- -- val = bpf_map_lookup_elem(&map2, &key); -- if (val) -- output_second1 = *val; -- -- val = bpf_map_lookup_elem(&map_weak, &key); -- if (val) -- output_weak1 = *val; -- -- return 0; --} -- --char LICENSE[] SEC("license") = "GPL"; -diff --git a/tools/testing/selftests/bpf/progs/linked_maps2.c b/tools/testing/selftests/bpf/progs/linked_maps2.c -deleted file mode 100644 -index 0693687474ed..000000000000 ---- a/tools/testing/selftests/bpf/progs/linked_maps2.c -+++ /dev/null -@@ -1,76 +0,0 @@ --// SPDX-License-Identifier: GPL-2.0 --/* Copyright (c) 2021 Facebook */ -- --#include "vmlinux.h" --#include --#include -- --/* modifiers and typedefs are ignored when comparing key/value types */ --typedef struct my_key { long x; } key_type; --typedef struct my_value { long x; } value_type; -- --extern struct { -- __uint(max_entries, 16); -- __type(key, key_type); -- __type(value, value_type); -- __uint(type, BPF_MAP_TYPE_HASH); --} map1 SEC(".maps"); -- --struct { -- __uint(type, BPF_MAP_TYPE_ARRAY); -- __type(key, int); -- __type(value, int); -- __uint(max_entries, 8); --} map2 SEC(".maps"); -- --/* this definition will lose, but it has to exactly match the winner */ --struct { -- __uint(type, BPF_MAP_TYPE_ARRAY); -- __type(key, int); -- __type(value, int); -- __uint(max_entries, 16); --} map_weak __weak SEC(".maps"); -- --int output_first2; --int output_second2; --int output_weak2; -- --SEC("raw_tp/sys_enter") --int BPF_PROG(handler_enter2) --{ -- /* update values with key = 2 */ -- int key = 2, val = 2; -- key_type key_struct = { .x = 2 }; -- value_type val_struct = { .x = 2000 }; -- -- bpf_map_update_elem(&map1, &key_struct, &val_struct, 0); -- bpf_map_update_elem(&map2, &key, &val, 0); -- bpf_map_update_elem(&map_weak, &key, &val, 0); -- -- return 0; --} -- --SEC("raw_tp/sys_exit") --int BPF_PROG(handler_exit2) --{ -- /* lookup values with key = 1, set in another file */ -- int key = 1, *val; -- key_type key_struct = { .x = 1 }; -- value_type *value_struct; -- -- value_struct = bpf_map_lookup_elem(&map1, &key_struct); -- if (value_struct) -- output_first2 = value_struct->x; -- -- val = bpf_map_lookup_elem(&map2, &key); -- if (val) -- output_second2 = *val; -- -- val = bpf_map_lookup_elem(&map_weak, &key); -- if (val) -- output_weak2 = *val; -- -- return 0; --} -- --char LICENSE[] SEC("license") = "GPL"; -diff --git a/tools/testing/selftests/bpf/progs/linked_vars1.c b/tools/testing/selftests/bpf/progs/linked_vars1.c -deleted file mode 100644 -index ef9e9d0bb0ca..000000000000 ---- a/tools/testing/selftests/bpf/progs/linked_vars1.c -+++ /dev/null -@@ -1,54 +0,0 @@ --// SPDX-License-Identifier: GPL-2.0 --/* Copyright (c) 2021 Facebook */ -- --#include "vmlinux.h" --#include --#include -- --extern int LINUX_KERNEL_VERSION __kconfig; --/* this weak extern will be strict due to the other file's strong extern */ --extern bool CONFIG_BPF_SYSCALL __kconfig __weak; --extern const void bpf_link_fops __ksym __weak; -- --int input_bss1; --int input_data1 = 1; --const volatile int input_rodata1 = 11; -- --int input_bss_weak __weak; --/* these two definitions should win */ --int input_data_weak __weak = 10; --const volatile int input_rodata_weak __weak = 100; -- --extern int input_bss2; --extern int input_data2; --extern const int input_rodata2; -- --int output_bss1; --int output_data1; --int output_rodata1; -- --long output_sink1; -- --static __noinline int get_bss_res(void) --{ -- /* just make sure all the relocations work against .text as well */ -- return input_bss1 + input_bss2 + input_bss_weak; --} -- --SEC("raw_tp/sys_enter") --int BPF_PROG(handler1) --{ -- output_bss1 = get_bss_res(); -- output_data1 = input_data1 + input_data2 + input_data_weak; -- output_rodata1 = input_rodata1 + input_rodata2 + input_rodata_weak; -- -- /* make sure we actually use above special externs, otherwise compiler -- * will optimize them out -- */ -- output_sink1 = LINUX_KERNEL_VERSION -- + CONFIG_BPF_SYSCALL -- + (long)&bpf_link_fops; -- return 0; --} -- --char LICENSE[] SEC("license") = "GPL"; -diff --git a/tools/testing/selftests/bpf/progs/linked_vars2.c b/tools/testing/selftests/bpf/progs/linked_vars2.c -deleted file mode 100644 -index e4f5bd388a3c..000000000000 ---- a/tools/testing/selftests/bpf/progs/linked_vars2.c -+++ /dev/null -@@ -1,55 +0,0 @@ --// SPDX-License-Identifier: GPL-2.0 --/* Copyright (c) 2021 Facebook */ -- --#include "vmlinux.h" --#include --#include -- --extern int LINUX_KERNEL_VERSION __kconfig; --/* when an extern is defined as both strong and weak, resulting symbol will be strong */ --extern bool CONFIG_BPF_SYSCALL __kconfig; --extern const void __start_BTF __ksym; -- --int input_bss2; --int input_data2 = 2; --const volatile int input_rodata2 = 22; -- --int input_bss_weak __weak; --/* these two weak variables should lose */ --int input_data_weak __weak = 20; --const volatile int input_rodata_weak __weak = 200; -- --extern int input_bss1; --extern int input_data1; --extern const int input_rodata1; -- --int output_bss2; --int output_data2; --int output_rodata2; -- --int output_sink2; -- --static __noinline int get_data_res(void) --{ -- /* just make sure all the relocations work against .text as well */ -- return input_data1 + input_data2 + input_data_weak; --} -- --SEC("raw_tp/sys_enter") --int BPF_PROG(handler2) --{ -- output_bss2 = input_bss1 + input_bss2 + input_bss_weak; -- output_data2 = get_data_res(); -- output_rodata2 = input_rodata1 + input_rodata2 + input_rodata_weak; -- -- /* make sure we actually use above special externs, otherwise compiler -- * will optimize them out -- */ -- output_sink2 = LINUX_KERNEL_VERSION -- + CONFIG_BPF_SYSCALL -- + (long)&__start_BTF; -- -- return 0; --} -- --char LICENSE[] SEC("license") = "GPL"; -diff --git a/tools/testing/selftests/bpf/progs/test_static_linked1.c b/tools/testing/selftests/bpf/progs/test_static_linked1.c -deleted file mode 100644 -index ea1a6c4c7172..000000000000 ---- a/tools/testing/selftests/bpf/progs/test_static_linked1.c -+++ /dev/null -@@ -1,30 +0,0 @@ --// SPDX-License-Identifier: GPL-2.0 --/* Copyright (c) 2021 Facebook */ -- --#include --#include -- --/* 8-byte aligned .bss */ --static volatile long static_var1; --static volatile int static_var11; --int var1 = 0; --/* 4-byte aligned .rodata */ --const volatile int rovar1; -- --/* same "subprog" name in both files */ --static __noinline int subprog(int x) --{ -- /* but different formula */ -- return x * 2; --} -- --SEC("raw_tp/sys_enter") --int handler1(const void *ctx) --{ -- var1 = subprog(rovar1) + static_var1 + static_var11; -- -- return 0; --} -- --char LICENSE[] SEC("license") = "GPL"; --int VERSION SEC("version") = 1; -diff --git a/tools/testing/selftests/bpf/progs/test_static_linked2.c b/tools/testing/selftests/bpf/progs/test_static_linked2.c -deleted file mode 100644 -index 54d8d1ab577c..000000000000 ---- a/tools/testing/selftests/bpf/progs/test_static_linked2.c -+++ /dev/null -@@ -1,31 +0,0 @@ --// SPDX-License-Identifier: GPL-2.0 --/* Copyright (c) 2021 Facebook */ -- --#include --#include -- --/* 4-byte aligned .bss */ --static volatile int static_var2; --static volatile int static_var22; --int var2 = 0; --/* 8-byte aligned .rodata */ --const volatile long rovar2; -- --/* same "subprog" name in both files */ --static __noinline int subprog(int x) --{ -- /* but different formula */ -- return x * 3; --} -- --SEC("raw_tp/sys_enter") --int handler2(const void *ctx) --{ -- var2 = subprog(rovar2) + static_var2 + static_var22; -- -- return 0; --} -- --/* different name and/or type of the variable doesn't matter */ --char _license[] SEC("license") = "GPL"; --int _version SEC("version") = 1; diff --git a/patch-5.15-redhat.patch b/patch-5.15-redhat.patch new file mode 100644 index 000000000..0c06c5553 --- /dev/null +++ b/patch-5.15-redhat.patch @@ -0,0 +1,1965 @@ + Makefile | 4 + + arch/arm/Kconfig | 4 +- + arch/arm64/Kconfig | 3 +- + .../boot/dts/rockchip/rk3399-pinebook-pro.dts | 6 +- + arch/arm64/kernel/acpi.c | 2 +- + arch/s390/include/asm/ipl.h | 1 + + arch/s390/kernel/ipl.c | 5 + + arch/s390/kernel/setup.c | 4 + + arch/x86/kernel/setup.c | 22 ++-- + crypto/rng.c | 73 +++++++++++- + 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/char/ipmi/ipmi_msghandler.c | 16 ++- + drivers/char/random.c | 115 +++++++++++++++++++ + drivers/firmware/efi/Makefile | 1 + + drivers/firmware/efi/efi.c | 124 +++++++++++++++------ + drivers/firmware/efi/secureboot.c | 38 +++++++ + drivers/hid/hid-rmi.c | 64 ----------- + drivers/hwtracing/coresight/coresight-etm4x-core.c | 19 ++++ + drivers/input/rmi4/rmi_driver.c | 124 ++++++++++++--------- + drivers/input/serio/i8042-x86ia64io.h | 14 +++ + drivers/iommu/iommu.c | 22 ++++ + drivers/net/wireguard/main.c | 7 ++ + drivers/nvme/host/core.c | 22 +++- + drivers/nvme/host/multipath.c | 19 ++-- + drivers/nvme/host/nvme.h | 4 + + drivers/pci/pci-driver.c | 29 +++++ + drivers/pci/quirks.c | 24 ++++ + drivers/scsi/megaraid/megaraid_sas_base.c | 2 + + drivers/usb/core/hub.c | 7 ++ + fs/btrfs/async-thread.c | 14 +++ + fs/ext4/super.c | 5 + + fs/xfs/xfs_super.c | 5 + + include/linux/efi.h | 22 ++-- + include/linux/lsm_hook_defs.h | 2 + + include/linux/lsm_hooks.h | 6 + + include/linux/pci.h | 4 + + include/linux/random.h | 7 ++ + include/linux/rmi.h | 1 + + include/linux/security.h | 5 + + init/Kconfig | 2 +- + kernel/module_signing.c | 9 +- + scripts/tags.sh | 2 + + security/integrity/platform_certs/load_uefi.c | 6 +- + security/lockdown/Kconfig | 13 +++ + security/lockdown/lockdown.c | 1 + + security/security.c | 6 + + 50 files changed, 760 insertions(+), 192 deletions(-) + +diff --git a/Makefile b/Makefile +index ffcc7eadc44b..7c94a55d6770 100644 +--- a/Makefile ++++ b/Makefile +@@ -18,6 +18,10 @@ $(if $(filter __%, $(MAKECMDGOALS)), \ + PHONY := __all + __all: + ++# Set RHEL variables ++# Use this spot to avoid future merge conflicts ++include Makefile.rhelver ++ + # We are using a recursive build, so we need to do a little thinking + # to get the ordering right. + # +diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig +index dcf2df6da98f..b03b682850ab 100644 +--- a/arch/arm/Kconfig ++++ b/arch/arm/Kconfig +@@ -1470,9 +1470,9 @@ config HIGHMEM + If unsure, say n. + + 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 +diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig +index fee914c716aa..99bb34aac703 100644 +--- a/arch/arm64/Kconfig ++++ b/arch/arm64/Kconfig +@@ -911,7 +911,7 @@ endchoice + + config ARM64_FORCE_52BIT + bool "Force 52-bit virtual addresses for userspace" +- depends on ARM64_VA_BITS_52 && EXPERT ++ depends on ARM64_VA_BITS_52 + help + For systems with 52-bit userspace VAs enabled, the kernel will attempt + to maintain compatibility with older software by providing 48-bit VAs +@@ -1152,6 +1152,7 @@ config XEN + config FORCE_MAX_ZONEORDER + int + default "14" if ARM64_64K_PAGES ++ default "13" if (ARCH_THUNDER && !ARM64_64K_PAGES) + default "12" if ARM64_16K_PAGES + default "11" + help +diff --git a/arch/arm64/boot/dts/rockchip/rk3399-pinebook-pro.dts b/arch/arm64/boot/dts/rockchip/rk3399-pinebook-pro.dts +index 2b5f001ff4a6..dae8c252bc2b 100644 +--- a/arch/arm64/boot/dts/rockchip/rk3399-pinebook-pro.dts ++++ b/arch/arm64/boot/dts/rockchip/rk3399-pinebook-pro.dts +@@ -385,10 +385,6 @@ mains_charger: dc-charger { + }; + }; + +-&cdn_dp { +- status = "okay"; +-}; +- + &cpu_b0 { + cpu-supply = <&vdd_cpu_b>; + }; +@@ -711,7 +707,7 @@ fusb0: fusb30x@22 { + + connector { + compatible = "usb-c-connector"; +- data-role = "host"; ++ data-role = "dual"; + label = "USB-C"; + op-sink-microwatt = <1000000>; + power-role = "dual"; +diff --git a/arch/arm64/kernel/acpi.c b/arch/arm64/kernel/acpi.c +index f3851724fe35..cac21da49455 100644 +--- a/arch/arm64/kernel/acpi.c ++++ b/arch/arm64/kernel/acpi.c +@@ -40,7 +40,7 @@ int acpi_pci_disabled = 1; /* skip ACPI PCI scan and IRQ initialization */ + EXPORT_SYMBOL(acpi_pci_disabled); + + static bool param_acpi_off __initdata; +-static bool param_acpi_on __initdata; ++static bool param_acpi_on __initdata = true; + static bool param_acpi_force __initdata; + + static int __init parse_acpi(char *arg) +diff --git a/arch/s390/include/asm/ipl.h b/arch/s390/include/asm/ipl.h +index 3f8ee257f9aa..3ab92feb6241 100644 +--- a/arch/s390/include/asm/ipl.h ++++ b/arch/s390/include/asm/ipl.h +@@ -128,6 +128,7 @@ int ipl_report_add_component(struct ipl_report *report, struct kexec_buf *kbuf, + unsigned char flags, unsigned short cert); + int ipl_report_add_certificate(struct ipl_report *report, void *key, + unsigned long addr, unsigned long len); ++bool ipl_get_secureboot(void); + + /* + * DIAG 308 support +diff --git a/arch/s390/kernel/ipl.c b/arch/s390/kernel/ipl.c +index e2cc35775b99..96fc8134f056 100644 +--- a/arch/s390/kernel/ipl.c ++++ b/arch/s390/kernel/ipl.c +@@ -2215,3 +2215,8 @@ int ipl_report_free(struct ipl_report *report) + } + + #endif ++ ++bool ipl_get_secureboot(void) ++{ ++ return !!ipl_secure_flag; ++} +diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c +index 67e5fff96ee0..0d58c1f07176 100644 +--- a/arch/s390/kernel/setup.c ++++ b/arch/s390/kernel/setup.c +@@ -49,6 +49,7 @@ + #include + #include + #include ++#include + #include + #include + +@@ -981,6 +982,9 @@ void __init setup_arch(char **cmdline_p) + + log_component_list(); + ++ if (ipl_get_secureboot()) ++ security_lock_kernel_down("Secure IPL mode", LOCKDOWN_INTEGRITY_MAX); ++ + /* 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/setup.c b/arch/x86/kernel/setup.c +index 40ed44ead063..31aac8c787cf 100644 +--- a/arch/x86/kernel/setup.c ++++ b/arch/x86/kernel/setup.c +@@ -20,6 +20,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -929,6 +930,13 @@ void __init setup_arch(char **cmdline_p) + if (efi_enabled(EFI_BOOT)) + efi_init(); + ++ efi_set_secure_boot(boot_params.secure_boot); ++ ++#ifdef CONFIG_LOCK_DOWN_IN_EFI_SECURE_BOOT ++ if (efi_enabled(EFI_SECURE_BOOT)) ++ security_lock_kernel_down("EFI Secure Boot mode", LOCKDOWN_INTEGRITY_MAX); ++#endif ++ + dmi_setup(); + + /* +@@ -1094,19 +1102,7 @@ void __init setup_arch(char **cmdline_p) + /* Allocate bigger log buffer */ + setup_log_buf(1); + +- if (efi_enabled(EFI_BOOT)) { +- switch (boot_params.secure_boot) { +- case efi_secureboot_mode_disabled: +- pr_info("Secure boot disabled\n"); +- break; +- case efi_secureboot_mode_enabled: +- pr_info("Secure boot enabled\n"); +- break; +- default: +- pr_info("Secure boot could not be determined\n"); +- break; +- } +- } ++ efi_set_secure_boot(boot_params.secure_boot); + + reserve_initrd(); + +diff --git a/crypto/rng.c b/crypto/rng.c +index fea082b25fe4..50a9d040bed1 100644 +--- a/crypto/rng.c ++++ b/crypto/rng.c +@@ -11,14 +11,17 @@ + #include + #include + #include ++#include ++#include + #include + #include + #include + #include ++#include ++#include + #include + #include + #include +-#include + #include + + #include "internal.h" +@@ -224,5 +227,73 @@ void crypto_unregister_rngs(struct rng_alg *algs, int count) + } + EXPORT_SYMBOL_GPL(crypto_unregister_rngs); + ++static ssize_t crypto_devrandom_read(void __user *buf, size_t buflen) ++{ ++ u8 tmp[256]; ++ ssize_t ret; ++ ++ if (!buflen) ++ return 0; ++ ++ ret = crypto_get_default_rng(); ++ if (ret) ++ return ret; ++ ++ for (;;) { ++ int err; ++ int i; ++ ++ i = min_t(int, buflen, sizeof(tmp)); ++ err = crypto_rng_get_bytes(crypto_default_rng, tmp, i); ++ if (err) { ++ ret = err; ++ break; ++ } ++ ++ if (copy_to_user(buf, tmp, i)) { ++ ret = -EFAULT; ++ break; ++ } ++ ++ buflen -= i; ++ buf += i; ++ ret += i; ++ ++ if (!buflen) ++ break; ++ ++ if (need_resched()) { ++ if (signal_pending(current)) ++ break; ++ schedule(); ++ } ++ } ++ ++ crypto_put_default_rng(); ++ memzero_explicit(tmp, sizeof(tmp)); ++ ++ return ret; ++} ++ ++static const struct random_extrng crypto_devrandom_rng = { ++ .extrng_read = crypto_devrandom_read, ++ .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/drivers/acpi/apei/hest.c b/drivers/acpi/apei/hest.c +index 277f00b288d1..adbce15c273d 100644 +--- a/drivers/acpi/apei/hest.c ++++ b/drivers/acpi/apei/hest.c +@@ -94,6 +94,14 @@ int apei_hest_parse(apei_hest_func_t func, void *data) + if (hest_disable || !hest_tab) + return -EINVAL; + ++#ifdef CONFIG_ARM64 ++ /* Ignore broken firmware */ ++ if (!strncmp(hest_tab->header.oem_id, "HPE ", 6) && ++ !strncmp(hest_tab->header.oem_table_id, "ProLiant", 8) && ++ MIDR_IMPLEMENTOR(read_cpuid_id()) == ARM_CPU_IMP_APM) ++ return -EINVAL; ++#endif ++ + hest_hdr = (struct acpi_hest_header *)(hest_tab + 1); + for (i = 0; i < hest_tab->error_source_count; i++) { + len = hest_esrc_len(hest_hdr); +diff --git a/drivers/acpi/irq.c b/drivers/acpi/irq.c +index c68e694fca26..146cba5ae5bc 100644 +--- a/drivers/acpi/irq.c ++++ b/drivers/acpi/irq.c +@@ -130,6 +130,7 @@ struct acpi_irq_parse_one_ctx { + unsigned int index; + unsigned long *res_flags; + struct irq_fwspec *fwspec; ++ bool skip_producer_check; + }; + + /** +@@ -201,7 +202,8 @@ static acpi_status acpi_irq_parse_one_cb(struct acpi_resource *ares, + return AE_CTRL_TERMINATE; + case ACPI_RESOURCE_TYPE_EXTENDED_IRQ: + eirq = &ares->data.extended_irq; +- if (eirq->producer_consumer == ACPI_PRODUCER) ++ if (!ctx->skip_producer_check && ++ eirq->producer_consumer == ACPI_PRODUCER) + return AE_OK; + if (ctx->index >= eirq->interrupt_count) { + ctx->index -= eirq->interrupt_count; +@@ -236,8 +238,19 @@ static acpi_status acpi_irq_parse_one_cb(struct acpi_resource *ares, + static int acpi_irq_parse_one(acpi_handle handle, unsigned int index, + struct irq_fwspec *fwspec, unsigned long *flags) + { +- struct acpi_irq_parse_one_ctx ctx = { -EINVAL, index, flags, fwspec }; ++ struct acpi_irq_parse_one_ctx ctx = { -EINVAL, index, flags, fwspec, false }; + ++ /* ++ * Firmware on arm64-based HPE m400 platform incorrectly marks ++ * its UART interrupt as ACPI_PRODUCER rather than ACPI_CONSUMER. ++ * Don't do the producer/consumer check for that device. ++ */ ++ if (IS_ENABLED(CONFIG_ARM64)) { ++ struct acpi_device *adev = acpi_bus_get_acpi_device(handle); ++ ++ if (adev && !strcmp(acpi_device_hid(adev), "APMC0D08")) ++ ctx.skip_producer_check = true; ++ } + acpi_walk_resources(handle, METHOD_NAME__CRS, acpi_irq_parse_one_cb, &ctx); + return ctx.rc; + } +diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c +index 5b54c80b9d32..86c314f8d8a0 100644 +--- a/drivers/acpi/scan.c ++++ b/drivers/acpi/scan.c +@@ -1720,6 +1720,15 @@ static bool acpi_device_enumeration_by_parent(struct acpi_device *device) + if (!acpi_match_device_ids(device, i2c_multi_instantiate_ids)) + return false; + ++ /* ++ * Firmware on some arm64 X-Gene platforms will make the UART ++ * device appear as both a UART and a slave of that UART. Just ++ * bail out here for X-Gene UARTs. ++ */ ++ if (IS_ENABLED(CONFIG_ARM64) && ++ !strcmp(acpi_device_hid(device), "APMC0D08")) ++ return false; ++ + INIT_LIST_HEAD(&resource_list); + acpi_dev_get_resources(device, &resource_list, + acpi_check_serial_bus_slave, +diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c +index 5b3fa2cbe722..ad46d87e17e2 100644 +--- a/drivers/ata/libahci.c ++++ b/drivers/ata/libahci.c +@@ -672,6 +672,24 @@ int ahci_stop_engine(struct ata_port *ap) + tmp &= ~PORT_CMD_START; + writel(tmp, port_mmio + PORT_CMD); + ++#ifdef CONFIG_ARM64 ++ /* Rev Ax of Cavium CN99XX needs a hack for port stop */ ++ if (dev_is_pci(ap->host->dev) && ++ to_pci_dev(ap->host->dev)->vendor == 0x14e4 && ++ to_pci_dev(ap->host->dev)->device == 0x9027 && ++ midr_is_cpu_model_range(read_cpuid_id(), ++ MIDR_CPU_MODEL(ARM_CPU_IMP_BRCM, BRCM_CPU_PART_VULCAN), ++ MIDR_CPU_VAR_REV(0, 0), ++ MIDR_CPU_VAR_REV(0, MIDR_REVISION_MASK))) { ++ tmp = readl(hpriv->mmio + 0x8000); ++ udelay(100); ++ writel(tmp | (1 << 26), hpriv->mmio + 0x8000); ++ udelay(100); ++ writel(tmp & ~(1 << 26), hpriv->mmio + 0x8000); ++ dev_warn(ap->host->dev, "CN99XX SATA reset workaround applied\n"); ++ } ++#endif ++ + /* wait for engine to stop. This could be as long as 500 msec */ + tmp = ata_wait_register(ap, port_mmio + PORT_CMD, + PORT_CMD_LIST_ON, PORT_CMD_LIST_ON, 1, 500); +diff --git a/drivers/char/ipmi/ipmi_dmi.c b/drivers/char/ipmi/ipmi_dmi.c +index bbf7029e224b..cf7faa970dd6 100644 +--- a/drivers/char/ipmi/ipmi_dmi.c ++++ b/drivers/char/ipmi/ipmi_dmi.c +@@ -215,6 +215,21 @@ static int __init scan_for_dmi_ipmi(void) + { + const struct dmi_device *dev = NULL; + ++#ifdef CONFIG_ARM64 ++ /* RHEL-only ++ * If this is ARM-based HPE m400, return now, because that platform ++ * reports the host-side ipmi address as intel port-io space, which ++ * does not exist in the ARM architecture. ++ */ ++ const char *dmistr = dmi_get_system_info(DMI_PRODUCT_NAME); ++ ++ if (dmistr && (strcmp("ProLiant m400 Server", dmistr) == 0)) { ++ pr_debug("%s does not support host ipmi\n", dmistr); ++ return 0; ++ } ++ /* END RHEL-only */ ++#endif ++ + while ((dev = dmi_find_device(DMI_DEV_TYPE_IPMI, NULL, dev))) + dmi_decode_ipmi((const struct dmi_header *) dev->device_data); + +diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_msghandler.c +index e96cb5c4f97a..d645460fe8a9 100644 +--- a/drivers/char/ipmi/ipmi_msghandler.c ++++ b/drivers/char/ipmi/ipmi_msghandler.c +@@ -35,6 +35,7 @@ + #include + #include + #include ++#include + #include + + #define IPMI_DRIVER_VERSION "39.2" +@@ -5160,8 +5161,21 @@ static int __init ipmi_init_msghandler_mod(void) + { + int rv; + +- pr_info("version " IPMI_DRIVER_VERSION "\n"); ++#ifdef CONFIG_ARM64 ++ /* RHEL-only ++ * If this is ARM-based HPE m400, return now, because that platform ++ * reports the host-side ipmi address as intel port-io space, which ++ * does not exist in the ARM architecture. ++ */ ++ const char *dmistr = dmi_get_system_info(DMI_PRODUCT_NAME); + ++ if (dmistr && (strcmp("ProLiant m400 Server", dmistr) == 0)) { ++ pr_debug("%s does not support host ipmi\n", dmistr); ++ return -ENOSYS; ++ } ++ /* END RHEL-only */ ++#endif ++ pr_info("version " IPMI_DRIVER_VERSION "\n"); + 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 605969ed0f96..4d51f1c67675 100644 +--- a/drivers/char/random.c ++++ b/drivers/char/random.c +@@ -335,6 +335,7 @@ + #include + #include + #include ++#include + #include + #include + +@@ -349,6 +350,11 @@ + + /* #define ADD_INTERRUPT_BENCH */ + ++/* ++ * Hook for external RNG. ++ */ ++static const struct random_extrng __rcu *extrng; ++ + /* + * Configuration information + */ +@@ -481,6 +487,9 @@ static int ratelimit_disable __read_mostly; + module_param_named(ratelimit_disable, ratelimit_disable, int, 0644); + MODULE_PARM_DESC(ratelimit_disable, "Disable random ratelimit suppression"); + ++static const struct file_operations extrng_random_fops; ++static const struct file_operations extrng_urandom_fops; ++ + /********************************************************************** + * + * OS independent entropy store. Here are the functions which handle +@@ -1858,6 +1867,13 @@ random_poll(struct file *file, poll_table * wait) + return mask; + } + ++static __poll_t ++extrng_poll(struct file *file, poll_table * wait) ++{ ++ /* extrng pool is always full, always read, no writes */ ++ return EPOLLIN | EPOLLRDNORM; ++} ++ + static int + write_pool(struct entropy_store *r, const char __user *buffer, size_t count) + { +@@ -1961,7 +1977,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(struct file *file, char __user *buf, size_t nbytes, loff_t *ppos) ++{ ++ return rcu_dereference_raw(extrng)->extrng_read(buf, nbytes); ++} ++ + const struct file_operations random_fops = { ++ .open = random_open, + .read = random_read, + .write = random_write, + .poll = random_poll, +@@ -1972,6 +2039,7 @@ const struct file_operations random_fops = { + }; + + const struct file_operations urandom_fops = { ++ .open = urandom_open, + .read = urandom_read, + .write = random_write, + .unlocked_ioctl = random_ioctl, +@@ -1980,9 +2048,31 @@ const struct file_operations urandom_fops = { + .llseek = noop_llseek, + }; + ++static const struct file_operations extrng_random_fops = { ++ .open = random_open, ++ .read = extrng_read, ++ .write = random_write, ++ .poll = extrng_poll, ++ .unlocked_ioctl = random_ioctl, ++ .fasync = random_fasync, ++ .llseek = noop_llseek, ++ .release = extrng_release, ++}; ++ ++static const struct file_operations extrng_urandom_fops = { ++ .open = urandom_open, ++ .read = extrng_read, ++ .write = random_write, ++ .unlocked_ioctl = random_ioctl, ++ .fasync = random_fasync, ++ .llseek = noop_llseek, ++ .release = extrng_release, ++}; ++ + SYSCALL_DEFINE3(getrandom, char __user *, buf, size_t, count, + unsigned int, flags) + { ++ const struct random_extrng *rng; + int ret; + + if (flags & ~(GRND_NONBLOCK|GRND_RANDOM|GRND_INSECURE)) +@@ -1998,6 +2088,18 @@ SYSCALL_DEFINE3(getrandom, char __user *, buf, size_t, count, + if (count > INT_MAX) + count = INT_MAX; + ++ rcu_read_lock(); ++ rng = rcu_dereference(extrng); ++ if (rng && !try_module_get(rng->owner)) ++ rng = NULL; ++ rcu_read_unlock(); ++ ++ if (rng) { ++ ret = rng->extrng_read(buf, count); ++ module_put(rng->owner); ++ return ret; ++ } ++ + if (!(flags & GRND_INSECURE) && !crng_ready()) { + if (flags & GRND_NONBLOCK) + return -EAGAIN; +@@ -2303,3 +2405,16 @@ void add_bootloader_randomness(const void *buf, unsigned int size) + add_device_randomness(buf, size); + } + EXPORT_SYMBOL_GPL(add_bootloader_randomness); ++ ++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); +diff --git a/drivers/firmware/efi/Makefile b/drivers/firmware/efi/Makefile +index c02ff25dd477..d860f8eb9a81 100644 +--- a/drivers/firmware/efi/Makefile ++++ b/drivers/firmware/efi/Makefile +@@ -28,6 +28,7 @@ obj-$(CONFIG_EFI_FAKE_MEMMAP) += fake_map.o + obj-$(CONFIG_EFI_BOOTLOADER_CONTROL) += efibc.o + obj-$(CONFIG_EFI_TEST) += test/ + obj-$(CONFIG_EFI_DEV_PATH_PARSER) += dev-path-parser.o ++obj-$(CONFIG_EFI) += secureboot.o + obj-$(CONFIG_APPLE_PROPERTIES) += apple-properties.o + obj-$(CONFIG_EFI_RCI2_TABLE) += rci2-table.o + obj-$(CONFIG_EFI_EMBEDDED_FIRMWARE) += embedded-firmware.o +diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c +index 847f33ffc4ae..363037f8eaf8 100644 +--- a/drivers/firmware/efi/efi.c ++++ b/drivers/firmware/efi/efi.c +@@ -31,6 +31,7 @@ + #include + #include + #include ++#include + + #include + +@@ -841,40 +842,101 @@ int efi_mem_type(unsigned long phys_addr) + } + #endif + ++struct efi_error_code { ++ efi_status_t status; ++ int errno; ++ const char *description; ++}; ++ ++static const struct efi_error_code efi_error_codes[] = { ++ { EFI_SUCCESS, 0, "Success"}, ++#if 0 ++ { EFI_LOAD_ERROR, -EPICK_AN_ERRNO, "Load Error"}, ++#endif ++ { EFI_INVALID_PARAMETER, -EINVAL, "Invalid Parameter"}, ++ { EFI_UNSUPPORTED, -ENOSYS, "Unsupported"}, ++ { EFI_BAD_BUFFER_SIZE, -ENOSPC, "Bad Buffer Size"}, ++ { EFI_BUFFER_TOO_SMALL, -ENOSPC, "Buffer Too Small"}, ++ { EFI_NOT_READY, -EAGAIN, "Not Ready"}, ++ { EFI_DEVICE_ERROR, -EIO, "Device Error"}, ++ { EFI_WRITE_PROTECTED, -EROFS, "Write Protected"}, ++ { EFI_OUT_OF_RESOURCES, -ENOMEM, "Out of Resources"}, ++#if 0 ++ { EFI_VOLUME_CORRUPTED, -EPICK_AN_ERRNO, "Volume Corrupt"}, ++ { EFI_VOLUME_FULL, -EPICK_AN_ERRNO, "Volume Full"}, ++ { EFI_NO_MEDIA, -EPICK_AN_ERRNO, "No Media"}, ++ { EFI_MEDIA_CHANGED, -EPICK_AN_ERRNO, "Media changed"}, ++#endif ++ { EFI_NOT_FOUND, -ENOENT, "Not Found"}, ++#if 0 ++ { EFI_ACCESS_DENIED, -EPICK_AN_ERRNO, "Access Denied"}, ++ { EFI_NO_RESPONSE, -EPICK_AN_ERRNO, "No Response"}, ++ { EFI_NO_MAPPING, -EPICK_AN_ERRNO, "No mapping"}, ++ { EFI_TIMEOUT, -EPICK_AN_ERRNO, "Time out"}, ++ { EFI_NOT_STARTED, -EPICK_AN_ERRNO, "Not started"}, ++ { EFI_ALREADY_STARTED, -EPICK_AN_ERRNO, "Already started"}, ++#endif ++ { EFI_ABORTED, -EINTR, "Aborted"}, ++#if 0 ++ { EFI_ICMP_ERROR, -EPICK_AN_ERRNO, "ICMP Error"}, ++ { EFI_TFTP_ERROR, -EPICK_AN_ERRNO, "TFTP Error"}, ++ { EFI_PROTOCOL_ERROR, -EPICK_AN_ERRNO, "Protocol Error"}, ++ { EFI_INCOMPATIBLE_VERSION, -EPICK_AN_ERRNO, "Incompatible Version"}, ++#endif ++ { EFI_SECURITY_VIOLATION, -EACCES, "Security Policy Violation"}, ++#if 0 ++ { EFI_CRC_ERROR, -EPICK_AN_ERRNO, "CRC Error"}, ++ { EFI_END_OF_MEDIA, -EPICK_AN_ERRNO, "End of Media"}, ++ { EFI_END_OF_FILE, -EPICK_AN_ERRNO, "End of File"}, ++ { EFI_INVALID_LANGUAGE, -EPICK_AN_ERRNO, "Invalid Languages"}, ++ { EFI_COMPROMISED_DATA, -EPICK_AN_ERRNO, "Compromised Data"}, ++ ++ // warnings ++ { EFI_WARN_UNKOWN_GLYPH, -EPICK_AN_ERRNO, "Warning Unknown Glyph"}, ++ { EFI_WARN_DELETE_FAILURE, -EPICK_AN_ERRNO, "Warning Delete Failure"}, ++ { EFI_WARN_WRITE_FAILURE, -EPICK_AN_ERRNO, "Warning Write Failure"}, ++ { EFI_WARN_BUFFER_TOO_SMALL, -EPICK_AN_ERRNO, "Warning Buffer Too Small"}, ++#endif ++}; ++ ++static int ++efi_status_cmp_bsearch(const void *key, const void *item) ++{ ++ u64 status = (u64)(uintptr_t)key; ++ struct efi_error_code *code = (struct efi_error_code *)item; ++ ++ if (status < code->status) ++ return -1; ++ if (status > code->status) ++ return 1; ++ return 0; ++} ++ + int efi_status_to_err(efi_status_t status) + { +- int err; +- +- switch (status) { +- case EFI_SUCCESS: +- err = 0; +- break; +- case EFI_INVALID_PARAMETER: +- err = -EINVAL; +- break; +- case EFI_OUT_OF_RESOURCES: +- err = -ENOSPC; +- break; +- case EFI_DEVICE_ERROR: +- err = -EIO; +- break; +- case EFI_WRITE_PROTECTED: +- err = -EROFS; +- break; +- case EFI_SECURITY_VIOLATION: +- err = -EACCES; +- break; +- case EFI_NOT_FOUND: +- err = -ENOENT; +- break; +- case EFI_ABORTED: +- err = -EINTR; +- break; +- default: +- err = -EINVAL; +- } ++ struct efi_error_code *found; ++ size_t num = sizeof(efi_error_codes) / sizeof(struct efi_error_code); + +- return err; ++ found = bsearch((void *)(uintptr_t)status, efi_error_codes, ++ sizeof(struct efi_error_code), num, ++ efi_status_cmp_bsearch); ++ if (!found) ++ return -EINVAL; ++ return found->errno; ++} ++ ++const char * ++efi_status_to_str(efi_status_t status) ++{ ++ struct efi_error_code *found; ++ size_t num = sizeof(efi_error_codes) / sizeof(struct efi_error_code); ++ ++ found = bsearch((void *)(uintptr_t)status, efi_error_codes, ++ sizeof(struct efi_error_code), num, ++ efi_status_cmp_bsearch); ++ if (!found) ++ return "Unknown error code"; ++ return found->description; + } + + static DEFINE_SPINLOCK(efi_mem_reserve_persistent_lock); +diff --git a/drivers/firmware/efi/secureboot.c b/drivers/firmware/efi/secureboot.c +new file mode 100644 +index 000000000000..de0a3714a5d4 +--- /dev/null ++++ b/drivers/firmware/efi/secureboot.c +@@ -0,0 +1,38 @@ ++/* Core kernel secure boot support. ++ * ++ * Copyright (C) 2017 Red Hat, Inc. All Rights Reserved. ++ * Written by David Howells (dhowells@redhat.com) ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public Licence ++ * as published by the Free Software Foundation; either version ++ * 2 of the Licence, or (at your option) any later version. ++ */ ++ ++#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt ++ ++#include ++#include ++#include ++ ++/* ++ * Decide what to do when UEFI secure boot mode is enabled. ++ */ ++void __init efi_set_secure_boot(enum efi_secureboot_mode mode) ++{ ++ if (efi_enabled(EFI_BOOT)) { ++ switch (mode) { ++ case efi_secureboot_mode_disabled: ++ pr_info("Secure boot disabled\n"); ++ break; ++ case efi_secureboot_mode_enabled: ++ set_bit(EFI_SECURE_BOOT, &efi.flags); ++ pr_info("Secure boot enabled\n"); ++ break; ++ default: ++ pr_warn("Secure boot could not be determined (mode %u)\n", ++ mode); ++ break; ++ } ++ } ++} +diff --git a/drivers/hid/hid-rmi.c b/drivers/hid/hid-rmi.c +index 311eee599ce9..2460c6bd46f8 100644 +--- a/drivers/hid/hid-rmi.c ++++ b/drivers/hid/hid-rmi.c +@@ -322,19 +322,12 @@ static int rmi_input_event(struct hid_device *hdev, u8 *data, int size) + { + struct rmi_data *hdata = hid_get_drvdata(hdev); + struct rmi_device *rmi_dev = hdata->xport.rmi_dev; +- unsigned long flags; + + if (!(test_bit(RMI_STARTED, &hdata->flags))) + return 0; + +- local_irq_save(flags); +- + rmi_set_attn_data(rmi_dev, data[1], &data[2], size - 2); + +- generic_handle_irq(hdata->rmi_irq); +- +- local_irq_restore(flags); +- + return 1; + } + +@@ -591,56 +584,6 @@ static const struct rmi_transport_ops hid_rmi_ops = { + .reset = rmi_hid_reset, + }; + +-static void rmi_irq_teardown(void *data) +-{ +- struct rmi_data *hdata = data; +- struct irq_domain *domain = hdata->domain; +- +- if (!domain) +- return; +- +- irq_dispose_mapping(irq_find_mapping(domain, 0)); +- +- irq_domain_remove(domain); +- hdata->domain = NULL; +- hdata->rmi_irq = 0; +-} +- +-static int rmi_irq_map(struct irq_domain *h, unsigned int virq, +- irq_hw_number_t hw_irq_num) +-{ +- irq_set_chip_and_handler(virq, &dummy_irq_chip, handle_simple_irq); +- +- return 0; +-} +- +-static const struct irq_domain_ops rmi_irq_ops = { +- .map = rmi_irq_map, +-}; +- +-static int rmi_setup_irq_domain(struct hid_device *hdev) +-{ +- struct rmi_data *hdata = hid_get_drvdata(hdev); +- int ret; +- +- hdata->domain = irq_domain_create_linear(hdev->dev.fwnode, 1, +- &rmi_irq_ops, hdata); +- if (!hdata->domain) +- return -ENOMEM; +- +- ret = devm_add_action_or_reset(&hdev->dev, &rmi_irq_teardown, hdata); +- if (ret) +- return ret; +- +- hdata->rmi_irq = irq_create_mapping(hdata->domain, 0); +- if (hdata->rmi_irq <= 0) { +- hid_err(hdev, "Can't allocate an IRQ\n"); +- return hdata->rmi_irq < 0 ? hdata->rmi_irq : -ENXIO; +- } +- +- return 0; +-} +- + static int rmi_probe(struct hid_device *hdev, const struct hid_device_id *id) + { + struct rmi_data *data = NULL; +@@ -713,18 +656,11 @@ static int rmi_probe(struct hid_device *hdev, const struct hid_device_id *id) + + mutex_init(&data->page_mutex); + +- ret = rmi_setup_irq_domain(hdev); +- if (ret) { +- hid_err(hdev, "failed to allocate IRQ domain\n"); +- return ret; +- } +- + if (data->device_flags & RMI_DEVICE_HAS_PHYS_BUTTONS) + rmi_hid_pdata.gpio_data.disable = true; + + data->xport.dev = hdev->dev.parent; + data->xport.pdata = rmi_hid_pdata; +- data->xport.pdata.irq = data->rmi_irq; + data->xport.proto_name = "hid"; + data->xport.ops = &hid_rmi_ops; + +diff --git a/drivers/hwtracing/coresight/coresight-etm4x-core.c b/drivers/hwtracing/coresight/coresight-etm4x-core.c +index e24252eaf8e4..368d64adeee8 100644 +--- a/drivers/hwtracing/coresight/coresight-etm4x-core.c ++++ b/drivers/hwtracing/coresight/coresight-etm4x-core.c +@@ -9,6 +9,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -2105,6 +2106,16 @@ static const struct amba_id etm4_ids[] = { + {}, + }; + ++static const struct dmi_system_id broken_coresight[] = { ++ { ++ .matches = { ++ DMI_MATCH(DMI_SYS_VENDOR, "HPE"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "Apollo 70"), ++ }, ++ }, ++ { } /* terminating entry */ ++}; ++ + MODULE_DEVICE_TABLE(amba, etm4_ids); + + static struct amba_driver etm4x_amba_driver = { +@@ -2138,6 +2149,11 @@ static int __init etm4x_init(void) + { + int ret; + ++ if (dmi_check_system(broken_coresight)) { ++ pr_info("ETM4 disabled due to firmware bug\n"); ++ return 0; ++ } ++ + ret = etm4_pm_setup(); + + /* etm4_pm_setup() does its own cleanup - exit on error */ +@@ -2164,6 +2180,9 @@ static int __init etm4x_init(void) + + static void __exit etm4x_exit(void) + { ++ if (dmi_check_system(broken_coresight)) ++ return; ++ + amba_driver_unregister(&etm4x_amba_driver); + platform_driver_unregister(&etm4_platform_driver); + etm4_pm_clear(); +diff --git a/drivers/input/rmi4/rmi_driver.c b/drivers/input/rmi4/rmi_driver.c +index 258d5fe3d395..f7298e3dc8f3 100644 +--- a/drivers/input/rmi4/rmi_driver.c ++++ b/drivers/input/rmi4/rmi_driver.c +@@ -182,34 +182,47 @@ void rmi_set_attn_data(struct rmi_device *rmi_dev, unsigned long irq_status, + attn_data.data = fifo_data; + + kfifo_put(&drvdata->attn_fifo, attn_data); ++ ++ schedule_work(&drvdata->attn_work); + } + EXPORT_SYMBOL_GPL(rmi_set_attn_data); + +-static irqreturn_t rmi_irq_fn(int irq, void *dev_id) ++static void attn_callback(struct work_struct *work) + { +- struct rmi_device *rmi_dev = dev_id; +- struct rmi_driver_data *drvdata = dev_get_drvdata(&rmi_dev->dev); ++ struct rmi_driver_data *drvdata = container_of(work, ++ struct rmi_driver_data, ++ attn_work); + struct rmi4_attn_data attn_data = {0}; + int ret, count; + + count = kfifo_get(&drvdata->attn_fifo, &attn_data); +- if (count) { +- *(drvdata->irq_status) = attn_data.irq_status; +- drvdata->attn_data = attn_data; +- } ++ if (!count) ++ return; + +- ret = rmi_process_interrupt_requests(rmi_dev); ++ *(drvdata->irq_status) = attn_data.irq_status; ++ drvdata->attn_data = attn_data; ++ ++ ret = rmi_process_interrupt_requests(drvdata->rmi_dev); + if (ret) +- rmi_dbg(RMI_DEBUG_CORE, &rmi_dev->dev, ++ rmi_dbg(RMI_DEBUG_CORE, &drvdata->rmi_dev->dev, + "Failed to process interrupt request: %d\n", ret); + +- if (count) { +- kfree(attn_data.data); +- drvdata->attn_data.data = NULL; +- } ++ kfree(attn_data.data); ++ drvdata->attn_data.data = NULL; + + if (!kfifo_is_empty(&drvdata->attn_fifo)) +- return rmi_irq_fn(irq, dev_id); ++ schedule_work(&drvdata->attn_work); ++} ++ ++static irqreturn_t rmi_irq_fn(int irq, void *dev_id) ++{ ++ struct rmi_device *rmi_dev = dev_id; ++ int ret; ++ ++ ret = rmi_process_interrupt_requests(rmi_dev); ++ if (ret) ++ rmi_dbg(RMI_DEBUG_CORE, &rmi_dev->dev, ++ "Failed to process interrupt request: %d\n", ret); + + return IRQ_HANDLED; + } +@@ -217,7 +230,6 @@ static irqreturn_t rmi_irq_fn(int irq, void *dev_id) + static int rmi_irq_init(struct rmi_device *rmi_dev) + { + struct rmi_device_platform_data *pdata = rmi_get_platform_data(rmi_dev); +- struct rmi_driver_data *data = dev_get_drvdata(&rmi_dev->dev); + int irq_flags = irq_get_trigger_type(pdata->irq); + int ret; + +@@ -235,8 +247,6 @@ static int rmi_irq_init(struct rmi_device *rmi_dev) + return ret; + } + +- data->enabled = true; +- + return 0; + } + +@@ -886,23 +896,27 @@ void rmi_enable_irq(struct rmi_device *rmi_dev, bool clear_wake) + if (data->enabled) + goto out; + +- enable_irq(irq); +- data->enabled = true; +- if (clear_wake && device_may_wakeup(rmi_dev->xport->dev)) { +- retval = disable_irq_wake(irq); +- if (retval) +- dev_warn(&rmi_dev->dev, +- "Failed to disable irq for wake: %d\n", +- retval); +- } ++ if (irq) { ++ enable_irq(irq); ++ data->enabled = true; ++ if (clear_wake && device_may_wakeup(rmi_dev->xport->dev)) { ++ retval = disable_irq_wake(irq); ++ if (retval) ++ dev_warn(&rmi_dev->dev, ++ "Failed to disable irq for wake: %d\n", ++ retval); ++ } + +- /* +- * Call rmi_process_interrupt_requests() after enabling irq, +- * otherwise we may lose interrupt on edge-triggered systems. +- */ +- irq_flags = irq_get_trigger_type(pdata->irq); +- if (irq_flags & IRQ_TYPE_EDGE_BOTH) +- rmi_process_interrupt_requests(rmi_dev); ++ /* ++ * Call rmi_process_interrupt_requests() after enabling irq, ++ * otherwise we may lose interrupt on edge-triggered systems. ++ */ ++ irq_flags = irq_get_trigger_type(pdata->irq); ++ if (irq_flags & IRQ_TYPE_EDGE_BOTH) ++ rmi_process_interrupt_requests(rmi_dev); ++ } else { ++ data->enabled = true; ++ } + + out: + mutex_unlock(&data->enabled_mutex); +@@ -922,20 +936,22 @@ void rmi_disable_irq(struct rmi_device *rmi_dev, bool enable_wake) + goto out; + + data->enabled = false; +- disable_irq(irq); +- if (enable_wake && device_may_wakeup(rmi_dev->xport->dev)) { +- retval = enable_irq_wake(irq); +- if (retval) +- dev_warn(&rmi_dev->dev, +- "Failed to enable irq for wake: %d\n", +- retval); +- } +- +- /* make sure the fifo is clean */ +- while (!kfifo_is_empty(&data->attn_fifo)) { +- count = kfifo_get(&data->attn_fifo, &attn_data); +- if (count) +- kfree(attn_data.data); ++ if (irq) { ++ disable_irq(irq); ++ if (enable_wake && device_may_wakeup(rmi_dev->xport->dev)) { ++ retval = enable_irq_wake(irq); ++ if (retval) ++ dev_warn(&rmi_dev->dev, ++ "Failed to enable irq for wake: %d\n", ++ retval); ++ } ++ } else { ++ /* make sure the fifo is clean */ ++ while (!kfifo_is_empty(&data->attn_fifo)) { ++ count = kfifo_get(&data->attn_fifo, &attn_data); ++ if (count) ++ kfree(attn_data.data); ++ } + } + + out: +@@ -981,6 +997,8 @@ static int rmi_driver_remove(struct device *dev) + irq_domain_remove(data->irqdomain); + data->irqdomain = NULL; + ++ cancel_work_sync(&data->attn_work); ++ + rmi_f34_remove_sysfs(rmi_dev); + rmi_free_function_list(rmi_dev); + +@@ -1219,9 +1237,15 @@ static int rmi_driver_probe(struct device *dev) + } + } + +- retval = rmi_irq_init(rmi_dev); +- if (retval < 0) +- goto err_destroy_functions; ++ if (pdata->irq) { ++ retval = rmi_irq_init(rmi_dev); ++ if (retval < 0) ++ goto err_destroy_functions; ++ } ++ ++ data->enabled = true; ++ ++ INIT_WORK(&data->attn_work, attn_callback); + + if (data->f01_container->dev.driver) { + /* Driver already bound, so enable ATTN now. */ +diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h +index a5a003553646..aedd05541044 100644 +--- a/drivers/input/serio/i8042-x86ia64io.h ++++ b/drivers/input/serio/i8042-x86ia64io.h +@@ -272,6 +272,13 @@ static const struct dmi_system_id __initconst i8042_dmi_nomux_table[] = { + DMI_MATCH(DMI_PRODUCT_NAME, "LifeBook S6230"), + }, + }, ++ { ++ /* Fujitsu Lifebook T725 laptop */ ++ .matches = { ++ DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK T725"), ++ }, ++ }, + { + /* Fujitsu Lifebook U745 */ + .matches = { +@@ -840,6 +847,13 @@ static const struct dmi_system_id __initconst i8042_dmi_notimeout_table[] = { + DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK AH544"), + }, + }, ++ { ++ /* Fujitsu Lifebook T725 laptop */ ++ .matches = { ++ DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK T725"), ++ }, ++ }, + { + /* Fujitsu U574 laptop */ + /* https://bugzilla.kernel.org/show_bug.cgi?id=69731 */ +diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c +index 3303d707bab4..372edaaafaa1 100644 +--- a/drivers/iommu/iommu.c ++++ b/drivers/iommu/iommu.c +@@ -7,6 +7,7 @@ + #define pr_fmt(fmt) "iommu: " fmt + + #include ++#include + #include + #include + #include +@@ -3118,6 +3119,27 @@ u32 iommu_sva_get_pasid(struct iommu_sva *handle) + } + EXPORT_SYMBOL_GPL(iommu_sva_get_pasid); + ++#ifdef CONFIG_ARM64 ++static int __init iommu_quirks(void) ++{ ++ const char *vendor, *name; ++ ++ vendor = dmi_get_system_info(DMI_SYS_VENDOR); ++ name = dmi_get_system_info(DMI_PRODUCT_NAME); ++ ++ if (vendor && ++ (strncmp(vendor, "GIGABYTE", 8) == 0 && name && ++ (strncmp(name, "R120", 4) == 0 || ++ strncmp(name, "R270", 4) == 0))) { ++ pr_warn("Gigabyte %s detected, force iommu passthrough mode", name); ++ iommu_def_domain_type = IOMMU_DOMAIN_IDENTITY; ++ } ++ ++ return 0; ++} ++arch_initcall(iommu_quirks); ++#endif ++ + /* + * Changes the default domain of an iommu group that has *only* one device + * +diff --git a/drivers/net/wireguard/main.c b/drivers/net/wireguard/main.c +index 75dbe77b0b4b..029ff8576f8e 100644 +--- a/drivers/net/wireguard/main.c ++++ b/drivers/net/wireguard/main.c +@@ -12,6 +12,7 @@ + + #include + ++#include + #include + #include + #include +@@ -21,6 +22,11 @@ static int __init 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; +@@ -48,6 +54,7 @@ static int __init mod_init(void) + pr_info("WireGuard " WIREGUARD_VERSION " loaded. See www.wireguard.com for information.\n"); + pr_info("Copyright (C) 2015-2019 Jason A. Donenfeld . All Rights Reserved.\n"); + ++ mark_tech_preview("WireGuard", THIS_MODULE); + return 0; + + err_netlink: +diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c +index f8dd664b2eda..0ff9ea8340e4 100644 +--- a/drivers/nvme/host/core.c ++++ b/drivers/nvme/host/core.c +@@ -262,6 +262,9 @@ static void nvme_delete_ctrl_sync(struct nvme_ctrl *ctrl) + + static blk_status_t nvme_error_status(u16 status) + { ++ if (unlikely(status & NVME_SC_DNR)) ++ return BLK_STS_TARGET; ++ + switch (status & 0x7ff) { + case NVME_SC_SUCCESS: + return BLK_STS_OK; +@@ -321,6 +324,7 @@ enum nvme_disposition { + COMPLETE, + RETRY, + FAILOVER, ++ FAILUP, + }; + + static inline enum nvme_disposition nvme_decide_disposition(struct request *req) +@@ -328,15 +332,16 @@ 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_SC_DNR) || + nvme_req(req)->retries >= nvme_max_retries) + return COMPLETE; + +- 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; +@@ -358,6 +363,14 @@ static inline 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) + { + trace_nvme_complete_rq(req); +@@ -376,6 +389,9 @@ void nvme_complete_rq(struct request *req) + case FAILOVER: + nvme_failover_req(req); + return; ++ case FAILUP: ++ nvme_failup_req(req); ++ return; + } + } + EXPORT_SYMBOL_GPL(nvme_complete_rq); +diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c +index fba06618c6c2..a4d81de29e13 100644 +--- a/drivers/nvme/host/multipath.c ++++ b/drivers/nvme/host/multipath.c +@@ -65,14 +65,10 @@ bool nvme_mpath_set_disk_name(struct nvme_ns *ns, char *disk_name, int *flags) + return true; + } + +-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 & 0x7ff; +- 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 +@@ -83,6 +79,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) +@@ -814,8 +820,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; + + if (!ctrl->max_namespaces || +diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h +index ed79a6c7e804..961dc67d7261 100644 +--- a/drivers/nvme/host/nvme.h ++++ b/drivers/nvme/host/nvme.h +@@ -746,6 +746,7 @@ void nvme_mpath_wait_freeze(struct nvme_subsystem *subsys); + void nvme_mpath_start_freeze(struct nvme_subsystem *subsys); + bool nvme_mpath_set_disk_name(struct nvme_ns *ns, char *disk_name, int *flags); + 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, struct nvme_id_ns *id); +@@ -784,6 +785,9 @@ static inline bool nvme_mpath_set_disk_name(struct nvme_ns *ns, char *disk_name, + 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 2761ab86490d..aa71a0c904f3 100644 +--- a/drivers/pci/pci-driver.c ++++ b/drivers/pci/pci-driver.c +@@ -19,6 +19,7 @@ + #include + #include + #include ++#include + #include + #include "pci.h" + #include "pcie/portdrv.h" +@@ -295,6 +296,34 @@ static struct attribute *pci_drv_attrs[] = { + }; + ATTRIBUTE_GROUPS(pci_drv); + ++/** ++ * pci_hw_vendor_status - Tell if a PCI device is supported by the HW vendor ++ * @ids: array of PCI device id structures to search in ++ * @dev: the PCI device structure to match against ++ * ++ * Used by a driver to check whether this device is in its list of unsupported ++ * devices. Returns the matching pci_device_id structure or %NULL if there is ++ * no match. ++ * ++ * Reserved for Internal Red Hat use only. ++ */ ++const struct pci_device_id *pci_hw_vendor_status( ++ const struct pci_device_id *ids, ++ struct pci_dev *dev) ++{ ++ char devinfo[64]; ++ const struct pci_device_id *ret = pci_match_id(ids, dev); ++ ++ if (ret) { ++ snprintf(devinfo, sizeof(devinfo), "%s %s", ++ dev_driver_string(&dev->dev), dev_name(&dev->dev)); ++ mark_hardware_deprecated(devinfo); ++ } ++ ++ return ret; ++} ++EXPORT_SYMBOL(pci_hw_vendor_status); ++ + struct drv_dev_and_id { + struct pci_driver *drv; + struct pci_dev *dev; +diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c +index 4537d1ea14fd..af30ab6c81e2 100644 +--- a/drivers/pci/quirks.c ++++ b/drivers/pci/quirks.c +@@ -4268,6 +4268,30 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_BROADCOM, 0x9000, + DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_BROADCOM, 0x9084, + quirk_bridge_cavm_thrx2_pcie_root); + ++/* ++ * PCI BAR 5 is not setup correctly for the on-board AHCI controller ++ * on Broadcom's Vulcan processor. Added a quirk to fix BAR 5 by ++ * using BAR 4's resources which are populated correctly and NOT ++ * actually used by the AHCI controller. ++ */ ++static void quirk_fix_vulcan_ahci_bars(struct pci_dev *dev) ++{ ++ struct resource *r = &dev->resource[4]; ++ ++ if (!(r->flags & IORESOURCE_MEM) || (r->start == 0)) ++ return; ++ ++ /* Set BAR5 resource to BAR4 */ ++ dev->resource[5] = *r; ++ ++ /* Update BAR5 in pci config space */ ++ pci_write_config_dword(dev, PCI_BASE_ADDRESS_5, r->start); ++ ++ /* Clear BAR4's resource */ ++ memset(r, 0, sizeof(*r)); ++} ++DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_BROADCOM, 0x9027, quirk_fix_vulcan_ahci_bars); ++ + /* + * Intersil/Techwell TW686[4589]-based video capture cards have an empty (zero) + * class code. Fix it. +diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c +index 39d8754e63ac..044e54b7aeda 100644 +--- a/drivers/scsi/megaraid/megaraid_sas_base.c ++++ b/drivers/scsi/megaraid/megaraid_sas_base.c +@@ -157,12 +157,14 @@ 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)}, +diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c +index 86658a81d284..5647f4756e97 100644 +--- a/drivers/usb/core/hub.c ++++ b/drivers/usb/core/hub.c +@@ -5657,6 +5657,13 @@ static void hub_event(struct work_struct *work) + (u16) hub->change_bits[0], + (u16) hub->event_bits[0]); + ++ /* Don't disconnect USB-SATA on TrimSlice */ ++ if (strcmp(dev_name(hdev->bus->controller), "tegra-ehci.0") == 0) { ++ if ((hdev->state == 7) && (hub->change_bits[0] == 0) && ++ (hub->event_bits[0] == 0x2)) ++ hub->event_bits[0] = 0; ++ } ++ + /* 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/btrfs/async-thread.c b/fs/btrfs/async-thread.c +index 309516e6a968..d39af03b456c 100644 +--- a/fs/btrfs/async-thread.c ++++ b/fs/btrfs/async-thread.c +@@ -234,6 +234,13 @@ static void run_ordered_work(struct __btrfs_workqueue *wq, + ordered_list); + if (!test_bit(WORK_DONE_BIT, &work->flags)) + break; ++ /* ++ * Orders all subsequent loads after reading WORK_DONE_BIT, ++ * paired with the smp_mb__before_atomic in btrfs_work_helper ++ * this guarantees that the ordered function will see all ++ * updates from ordinary work function. ++ */ ++ smp_rmb(); + + /* + * we are going to call the ordered done function, but +@@ -317,6 +324,13 @@ static void btrfs_work_helper(struct work_struct *normal_work) + thresh_exec_hook(wq); + work->func(work); + if (need_order) { ++ /* ++ * Ensures all memory accesses done in the work function are ++ * ordered before setting the WORK_DONE_BIT.Ensuring the thread ++ * which is going to executed the ordered work sees them. ++ * Pairs with the smp_rmb in run_ordered_work. ++ */ ++ smp_mb__before_atomic(); + set_bit(WORK_DONE_BIT, &work->flags); + run_ordered_work(wq, work); + } else { +diff --git a/fs/ext4/super.c b/fs/ext4/super.c +index 88d5d274a868..6693ff552b24 100644 +--- a/fs/ext4/super.c ++++ b/fs/ext4/super.c +@@ -4298,6 +4298,7 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent) + set_bit(EXT4_FLAGS_BDEV_IS_DAX, &sbi->s_ext4_flags); + + if (sbi->s_mount_opt & EXT4_MOUNT_DAX_ALWAYS) { ++ static bool printed = false; + if (ext4_has_feature_inline_data(sb)) { + ext4_msg(sb, KERN_ERR, "Cannot use DAX on a filesystem" + " that may contain inline data"); +@@ -4308,6 +4309,10 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent) + "DAX unsupported by block device."); + goto failed_mount; + } ++ if (!printed) { ++ mark_tech_preview("ext4 direct access (dax)", NULL); ++ printed = true; ++ } + } + + if (ext4_has_feature_encrypt(sb) && es->s_encryption_level) { +diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c +index c4e0cd1c1c8c..f80fa9b6d53e 100644 +--- a/fs/xfs/xfs_super.c ++++ b/fs/xfs/xfs_super.c +@@ -1593,6 +1593,7 @@ xfs_fs_fill_super( + + if (xfs_has_dax_always(mp)) { + bool rtdev_is_dax = false, datadev_is_dax; ++ static bool printed = false; + + xfs_warn(mp, + "DAX enabled. Warning: EXPERIMENTAL, use at your own risk"); +@@ -1612,6 +1613,10 @@ xfs_fs_fill_super( + error = -EINVAL; + goto out_filestream_unmount; + } ++ if (!printed) { ++ mark_tech_preview("xfs direct access (dax)", NULL); ++ printed = true; ++ } + } + + if (xfs_has_discard(mp)) { +diff --git a/include/linux/efi.h b/include/linux/efi.h +index 6b5d36babfcc..fd4a5d66a9d0 100644 +--- a/include/linux/efi.h ++++ b/include/linux/efi.h +@@ -43,6 +43,8 @@ + #define EFI_ABORTED (21 | (1UL << (BITS_PER_LONG-1))) + #define EFI_SECURITY_VIOLATION (26 | (1UL << (BITS_PER_LONG-1))) + ++#define EFI_IS_ERROR(x) ((x) & (1UL << (BITS_PER_LONG-1))) ++ + typedef unsigned long efi_status_t; + typedef u8 efi_bool_t; + typedef u16 efi_char16_t; /* UNICODE character */ +@@ -782,6 +784,14 @@ extern int __init efi_setup_pcdp_console(char *); + #define EFI_MEM_ATTR 10 /* Did firmware publish an EFI_MEMORY_ATTRIBUTES table? */ + #define EFI_MEM_NO_SOFT_RESERVE 11 /* Is the kernel configured to ignore soft reservations? */ + #define EFI_PRESERVE_BS_REGIONS 12 /* Are EFI boot-services memory segments available? */ ++#define EFI_SECURE_BOOT 13 /* Are we in Secure Boot mode? */ ++ ++enum efi_secureboot_mode { ++ efi_secureboot_mode_unset, ++ efi_secureboot_mode_unknown, ++ efi_secureboot_mode_disabled, ++ efi_secureboot_mode_enabled, ++}; + + #ifdef CONFIG_EFI + /* +@@ -793,6 +803,8 @@ static inline bool efi_enabled(int feature) + } + extern void efi_reboot(enum reboot_mode reboot_mode, const char *__unused); + ++extern void __init efi_set_secure_boot(enum efi_secureboot_mode mode); ++ + bool __pure __efi_soft_reserve_enabled(void); + + static inline bool __pure efi_soft_reserve_enabled(void) +@@ -813,6 +825,8 @@ static inline bool efi_enabled(int feature) + static inline void + efi_reboot(enum reboot_mode reboot_mode, const char *__unused) {} + ++static inline void efi_set_secure_boot(enum efi_secureboot_mode mode) {} ++ + static inline bool efi_soft_reserve_enabled(void) + { + return false; +@@ -825,6 +839,7 @@ static inline bool efi_rt_services_supported(unsigned int mask) + #endif + + extern int efi_status_to_err(efi_status_t status); ++extern const char *efi_status_to_str(efi_status_t status); + + /* + * Variable Attributes +@@ -1077,13 +1092,6 @@ static inline bool efi_runtime_disabled(void) { return true; } + extern void efi_call_virt_check_flags(unsigned long flags, const char *call); + extern unsigned long efi_call_virt_save_flags(void); + +-enum efi_secureboot_mode { +- efi_secureboot_mode_unset, +- efi_secureboot_mode_unknown, +- efi_secureboot_mode_disabled, +- efi_secureboot_mode_enabled, +-}; +- + static inline + enum efi_secureboot_mode efi_get_secureboot_mode(efi_get_variable_t *get_var) + { +diff --git a/include/linux/lsm_hook_defs.h b/include/linux/lsm_hook_defs.h +index 2adeea44c0d5..517013ece679 100644 +--- a/include/linux/lsm_hook_defs.h ++++ b/include/linux/lsm_hook_defs.h +@@ -394,6 +394,8 @@ LSM_HOOK(void, LSM_RET_VOID, bpf_prog_free_security, struct bpf_prog_aux *aux) + #endif /* CONFIG_BPF_SYSCALL */ + + LSM_HOOK(int, 0, locked_down, enum lockdown_reason what) ++LSM_HOOK(int, 0, lock_kernel_down, const char *where, enum lockdown_reason level) ++ + + #ifdef CONFIG_PERF_EVENTS + LSM_HOOK(int, 0, perf_event_open, struct perf_event_attr *attr, int type) +diff --git a/include/linux/lsm_hooks.h b/include/linux/lsm_hooks.h +index 5c4c5c0602cb..753b53038690 100644 +--- a/include/linux/lsm_hooks.h ++++ b/include/linux/lsm_hooks.h +@@ -1545,6 +1545,12 @@ + * + * @what: kernel feature being accessed + * ++ * @lock_kernel_down ++ * Put the kernel into lock-down mode. ++ * ++ * @where: Where the lock-down is originating from (e.g. command line option) ++ * @level: The lock-down level (can only increase) ++ * + * Security hooks for perf events + * + * @perf_event_open: +diff --git a/include/linux/pci.h b/include/linux/pci.h +index cd8aa6fce204..35df61824d02 100644 +--- a/include/linux/pci.h ++++ b/include/linux/pci.h +@@ -1470,6 +1470,10 @@ 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); ++/* Reserved for Internal Red Hat use only */ ++const struct pci_device_id *pci_hw_vendor_status( ++ 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); + +diff --git a/include/linux/random.h b/include/linux/random.h +index f45b8be3e3c4..7ccdec68b789 100644 +--- a/include/linux/random.h ++++ b/include/linux/random.h +@@ -14,6 +14,11 @@ + + #include + ++struct random_extrng { ++ ssize_t (*extrng_read)(void __user *buf, size_t buflen); ++ struct module *owner; ++}; ++ + struct random_ready_callback { + struct list_head list; + void (*func)(struct random_ready_callback *rdy); +@@ -44,6 +49,8 @@ extern bool rng_is_initialized(void); + extern int add_random_ready_callback(struct random_ready_callback *rdy); + extern void del_random_ready_callback(struct random_ready_callback *rdy); + extern int __must_check get_random_bytes_arch(void *buf, int nbytes); ++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; +diff --git a/include/linux/rmi.h b/include/linux/rmi.h +index ab7eea01ab42..fff7c5f737fc 100644 +--- a/include/linux/rmi.h ++++ b/include/linux/rmi.h +@@ -364,6 +364,7 @@ struct rmi_driver_data { + + struct rmi4_attn_data attn_data; + DECLARE_KFIFO(attn_fifo, struct rmi4_attn_data, 16); ++ struct work_struct attn_work; + }; + + int rmi_register_transport_device(struct rmi_transport_dev *xport); +diff --git a/include/linux/security.h b/include/linux/security.h +index 5b7288521300..f966f591c91e 100644 +--- a/include/linux/security.h ++++ b/include/linux/security.h +@@ -472,6 +472,7 @@ int security_inode_notifysecctx(struct inode *inode, void *ctx, u32 ctxlen); + int security_inode_setsecctx(struct dentry *dentry, void *ctx, u32 ctxlen); + int security_inode_getsecctx(struct inode *inode, void **ctx, u32 *ctxlen); + int security_locked_down(enum lockdown_reason what); ++int security_lock_kernel_down(const char *where, enum lockdown_reason level); + #else /* CONFIG_SECURITY */ + + static inline int call_blocking_lsm_notifier(enum lsm_event event, void *data) +@@ -1348,6 +1349,10 @@ static inline int security_locked_down(enum lockdown_reason what) + { + return 0; + } ++static inline int security_lock_kernel_down(const char *where, enum lockdown_reason level) ++{ ++ return 0; ++} + #endif /* CONFIG_SECURITY */ + + #if defined(CONFIG_SECURITY) && defined(CONFIG_WATCH_QUEUE) +diff --git a/init/Kconfig b/init/Kconfig +index 11f8a845f259..9b94cc1b5546 100644 +--- a/init/Kconfig ++++ b/init/Kconfig +@@ -1648,7 +1648,7 @@ config AIO + this option saves about 7k. + + config IO_URING +- bool "Enable IO uring support" if EXPERT ++ bool "Enable IO uring support" + select IO_WQ + default y + help +diff --git a/kernel/module_signing.c b/kernel/module_signing.c +index 8723ae70ea1f..fb2d773498c2 100644 +--- a/kernel/module_signing.c ++++ b/kernel/module_signing.c +@@ -38,8 +38,15 @@ int mod_verify_sig(const void *mod, struct load_info *info) + modlen -= sig_len + sizeof(ms); + info->len = modlen; + +- return verify_pkcs7_signature(mod, modlen, mod + modlen, sig_len, ++ ret = verify_pkcs7_signature(mod, modlen, mod + modlen, sig_len, + VERIFY_USE_SECONDARY_KEYRING, + VERIFYING_MODULE_SIGNATURE, + NULL, NULL); ++ if (ret == -ENOKEY && IS_ENABLED(CONFIG_INTEGRITY_PLATFORM_KEYRING)) { ++ ret = verify_pkcs7_signature(mod, modlen, mod + modlen, sig_len, ++ VERIFY_USE_PLATFORM_KEYRING, ++ VERIFYING_MODULE_SIGNATURE, ++ NULL, NULL); ++ } ++ return ret; + } +diff --git a/scripts/tags.sh b/scripts/tags.sh +index db8ba411860a..2294fb0f17a9 100755 +--- a/scripts/tags.sh ++++ b/scripts/tags.sh +@@ -16,6 +16,8 @@ fi + ignore="$(echo "$RCS_FIND_IGNORE" | sed 's|\\||g' )" + # tags and cscope files should also ignore MODVERSION *.mod.c files + ignore="$ignore ( -name *.mod.c ) -prune -o" ++# RHEL tags and cscope should also ignore redhat/rpm ++ignore="$ignore ( -path redhat/rpm ) -prune -o" + + # Use make KBUILD_ABS_SRCTREE=1 {tags|cscope} + # to force full paths for a non-O= build +diff --git a/security/integrity/platform_certs/load_uefi.c b/security/integrity/platform_certs/load_uefi.c +index f290f78c3f30..d3e7ae04f5be 100644 +--- a/security/integrity/platform_certs/load_uefi.c ++++ b/security/integrity/platform_certs/load_uefi.c +@@ -46,7 +46,8 @@ static __init void *get_cert_list(efi_char16_t *name, efi_guid_t *guid, + return NULL; + + if (*status != EFI_BUFFER_TOO_SMALL) { +- pr_err("Couldn't get size: 0x%lx\n", *status); ++ pr_err("Couldn't get size: %s (0x%lx)\n", ++ efi_status_to_str(*status), *status); + return NULL; + } + +@@ -57,7 +58,8 @@ static __init void *get_cert_list(efi_char16_t *name, efi_guid_t *guid, + *status = efi.get_variable(name, guid, NULL, &lsize, db); + if (*status != EFI_SUCCESS) { + kfree(db); +- pr_err("Error reading db var: 0x%lx\n", *status); ++ pr_err("Error reading db var: %s (0x%lx)\n", ++ efi_status_to_str(*status), *status); + return NULL; + } + +diff --git a/security/lockdown/Kconfig b/security/lockdown/Kconfig +index e84ddf484010..d0501353a4b9 100644 +--- a/security/lockdown/Kconfig ++++ b/security/lockdown/Kconfig +@@ -16,6 +16,19 @@ config SECURITY_LOCKDOWN_LSM_EARLY + subsystem is fully initialised. If enabled, lockdown will + unconditionally be called before any other LSMs. + ++config LOCK_DOWN_IN_EFI_SECURE_BOOT ++ bool "Lock down the kernel in EFI Secure Boot mode" ++ default n ++ depends on EFI && SECURITY_LOCKDOWN_LSM_EARLY ++ help ++ UEFI Secure Boot provides a mechanism for ensuring that the firmware ++ will only load signed bootloaders and kernels. Secure boot mode may ++ be determined from EFI variables provided by the system firmware if ++ not indicated by the boot parameters. ++ ++ Enabling this option results in kernel lockdown being triggered if ++ EFI Secure Boot is set. ++ + choice + prompt "Kernel default lockdown mode" + default LOCK_DOWN_KERNEL_FORCE_NONE +diff --git a/security/lockdown/lockdown.c b/security/lockdown/lockdown.c +index 87cbdc64d272..18555cf18da7 100644 +--- a/security/lockdown/lockdown.c ++++ b/security/lockdown/lockdown.c +@@ -73,6 +73,7 @@ static int lockdown_is_locked_down(enum lockdown_reason what) + + static struct security_hook_list lockdown_hooks[] __lsm_ro_after_init = { + LSM_HOOK_INIT(locked_down, lockdown_is_locked_down), ++ LSM_HOOK_INIT(lock_kernel_down, lock_kernel_down), + }; + + static int __init lockdown_lsm_init(void) +diff --git a/security/security.c b/security/security.c +index 9ffa9e9c5c55..36484cc9842d 100644 +--- a/security/security.c ++++ b/security/security.c +@@ -2599,6 +2599,12 @@ int security_locked_down(enum lockdown_reason what) + } + EXPORT_SYMBOL(security_locked_down); + ++int security_lock_kernel_down(const char *where, enum lockdown_reason level) ++{ ++ return call_int_hook(lock_kernel_down, 0, where, level); ++} ++EXPORT_SYMBOL(security_lock_kernel_down); ++ + #ifdef CONFIG_PERF_EVENTS + int security_perf_event_open(struct perf_event_attr *attr, int type) + { diff --git a/process_configs.sh b/process_configs.sh index b1e1f4338..8c997a5fa 100755 --- a/process_configs.sh +++ b/process_configs.sh @@ -31,6 +31,16 @@ die() exit 1 } +get_cross_compile() +{ + arch=$1 + if [[ "$CC_IS_CLANG" -eq 1 ]]; then + echo "$arch" + else + echo "scripts/dummy-tools/" + fi +} + # stupid function to find top of tree to do kernel make configs switch_to_toplevel() { @@ -135,9 +145,9 @@ parsenewconfigs() BEGIN { inpatch=0; outfile="none"; symbol="none"; } - /^CONFIG_.*:$/ { - split($0, a, ":"); - symbol=a[1]; + /^Symbol: .*$/ { + split($0, a, " "); + symbol="CONFIG_"a[2]; outfile=BASE "/fake_"symbol } /-----/ { @@ -193,11 +203,11 @@ function commit_new_configs() fi echo -n "Checking for new configs in $cfg ... " - make ARCH="$arch" CROSS_COMPILE=scripts/dummy-tools/ KCONFIG_CONFIG="$cfgorig" listnewconfig >& .listnewconfig + make ${MAKEOPTS} ARCH="$arch" CROSS_COMPILE=$(get_cross_compile $arch) KCONFIG_CONFIG="$cfgorig" listnewconfig >& .listnewconfig grep -E 'CONFIG_' .listnewconfig > .newoptions if test -s .newoptions then - make ARCH="$arch" CROSS_COMPILE=scripts/dummy-tools/ KCONFIG_CONFIG="$cfgorig" helpnewconfig >& .helpnewconfig + make ${MAKEOPTS} ARCH="$arch" CROSS_COMPILE=$(get_cross_compile $arch) KCONFIG_CONFIG="$cfgorig" helpnewconfig >& .helpnewconfig parsenewconfigs fi rm .newoptions @@ -227,7 +237,7 @@ function process_configs() fi echo -n "Processing $cfg ... " - make ARCH="$arch" CROSS_COMPILE=scripts/dummy-tools/ KCONFIG_CONFIG="$cfgorig" listnewconfig >& .listnewconfig + make ${MAKEOPTS} ARCH="$arch" CROSS_COMPILE=$(get_cross_compile $arch) KCONFIG_CONFIG="$cfgorig" listnewconfig >& .listnewconfig grep -E 'CONFIG_' .listnewconfig > .newoptions if test -n "$NEWOPTIONS" && test -s .newoptions then @@ -252,7 +262,7 @@ function process_configs() rm .listnewconfig - make ARCH="$arch" CROSS_COMPILE=scripts/dummy-tools/ KCONFIG_CONFIG="$cfgorig" olddefconfig > /dev/null || exit 1 + make ${MAKEOPTS} ARCH="$arch" CROSS_COMPILE=$(get_cross_compile $arch) KCONFIG_CONFIG="$cfgorig" olddefconfig > /dev/null || exit 1 echo "# $arch" > "$cfgtmp" cat "$cfgorig" >> "$cfgtmp" if test -n "$CHECKOPTIONS" @@ -280,6 +290,8 @@ CONTINUEONERROR="" NEWOPTIONS="" TESTRUN="" CHECKWARNINGS="" +MAKEOPTS="" +CC_IS_CLANG=0 RETURNCODE=0 @@ -314,6 +326,13 @@ do -z) COMMITNEWCONFIGS="x" ;; + -m) + shift + if [ "$1" = "CC=clang" -o "$1" = "LLVM=1" ]; then + CC_IS_CLANG=1 + fi + MAKEOPTS="$MAKEOPTS $1" + ;; *) break;; esac diff --git a/rpminspect.yaml b/rpminspect.yaml index e540fbd45..f62742aa5 100644 --- a/rpminspect.yaml +++ b/rpminspect.yaml @@ -5,6 +5,9 @@ emptyrpm: expected_empty: - kernel - kernel-debug + - kernel-debug-devel-matched + - kernel-devel-matched - kernel-lpae - kernel-zfcpdump + - kernel-zfcpdump-devel-matched - kernel-zfcpdump-modules diff --git a/sources b/sources index 37d1355e9..30c1e7ecb 100644 --- a/sources +++ b/sources @@ -1,3 +1,4 @@ -SHA512 (linux-5.13.3.tar.xz) = 26e00d0689f26db2f8810cccc3d3975975695c7c9adef0dc67bdec1733b52c3f8b32bbccdaf2f0762c7ac072bf8c5272606fc0ce830df014f445ebb20583e95d SHA512 (kernel-abi-whitelists-5.13.3-300.tar.bz2) = 6bf4f456ba178ec95b63b3818d3575773ede221e74fde97bb20eb32409a64c58d4f9a6acce9b8b58a5477d27cb708c53abe03dada02a3bdf1cfd596ccd129294 -SHA512 (kernel-kabi-dw-5.13.3-300.tar.bz2) = a5d60a2b2db7f08ab1e476658d1001073a112fbecec6bd1434c059caccd4bfd2a31228644f25928323c91281f69bb483821568dcee9ac45b7366a2bd27dc24c7 +SHA512 (linux-5.15.1.tar.xz) = 927a475f0cc40ed08c462130d799b0d74a6200d2db50c92940fc0d63c2aac9029ff4276e5bbfecad49953829599c155a96f8ce563d448f9649432e4c3d730b07 +SHA512 (kernel-abi-stablelists-5.15.1-200.tar.bz2) = b3fef602d8ee177d7d7b6294cd3aa39c31be5d7bf5f27f4afcdec9a084ba4736fe2604ed9f8e0db069e97715d43b4772605d4dd7d3a91455aaf730f186a18492 +SHA512 (kernel-kabi-dw-5.15.1-200.tar.bz2) = 44a2fa1d3c32d4b2464cdd9e76a68537be12be985b1357ef3ae69e5f0aff1fb1c609998331cf82ac7252b453f41841168e4d88955994d1e2a5b418efe4231156 -- cgit From 80b20b714154105c92ccdfdd858b906af808a2bf Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Tue, 9 Nov 2021 10:12:09 -0600 Subject: kernel-5.15-200 * Tue Nov 09 2021 Justin M. Forbes [5.15-200] - Revert "add pci_hw_vendor_status()" (Justin M. Forbes) - Input: i8042 - Add quirk for Fujitsu Lifebook T725 (Takashi Iwai) Resolves: rhbz# Signed-off-by: Justin M. Forbes --- Patchlist.changelog | 3 +++ kernel.spec | 1 + patch-5.15-redhat.patch | 66 +------------------------------------------------ sources | 4 +-- 4 files changed, 7 insertions(+), 67 deletions(-) diff --git a/Patchlist.changelog b/Patchlist.changelog index 72516ca7a..4ce109aea 100644 --- a/Patchlist.changelog +++ b/Patchlist.changelog @@ -1,3 +1,6 @@ +https://gitlab.com/cki-project/kernel-ark/-/commit/e7dd4e098056b44495d41d06418a11c4442447e0 + e7dd4e098056b44495d41d06418a11c4442447e0 Revert "add pci_hw_vendor_status()" + https://gitlab.com/cki-project/kernel-ark/-/commit/69487df85dc22a202aa7276e2c47ea11ec52eb19 69487df85dc22a202aa7276e2c47ea11ec52eb19 Input: i8042 - Add quirk for Fujitsu Lifebook T725 diff --git a/kernel.spec b/kernel.spec index 746dd4895..b4f9fb5ea 100755 --- a/kernel.spec +++ b/kernel.spec @@ -2973,6 +2973,7 @@ fi # %changelog * Tue Nov 09 2021 Justin M. Forbes [5.15-200] +- Revert "add pci_hw_vendor_status()" (Justin M. Forbes) - Input: i8042 - Add quirk for Fujitsu Lifebook T725 (Takashi Iwai) * Mon Nov 08 2021 Justin M. Forbes [5.15-0] diff --git a/patch-5.15-redhat.patch b/patch-5.15-redhat.patch index 0c06c5553..9ef422550 100644 --- a/patch-5.15-redhat.patch +++ b/patch-5.15-redhat.patch @@ -27,7 +27,6 @@ drivers/nvme/host/core.c | 22 +++- drivers/nvme/host/multipath.c | 19 ++-- drivers/nvme/host/nvme.h | 4 + - drivers/pci/pci-driver.c | 29 +++++ drivers/pci/quirks.c | 24 ++++ drivers/scsi/megaraid/megaraid_sas_base.c | 2 + drivers/usb/core/hub.c | 7 ++ @@ -37,7 +36,6 @@ include/linux/efi.h | 22 ++-- include/linux/lsm_hook_defs.h | 2 + include/linux/lsm_hooks.h | 6 + - include/linux/pci.h | 4 + include/linux/random.h | 7 ++ include/linux/rmi.h | 1 + include/linux/security.h | 5 + @@ -48,7 +46,7 @@ security/lockdown/Kconfig | 13 +++ security/lockdown/lockdown.c | 1 + security/security.c | 6 + - 50 files changed, 760 insertions(+), 192 deletions(-) + 48 files changed, 727 insertions(+), 192 deletions(-) diff --git a/Makefile b/Makefile index ffcc7eadc44b..7c94a55d6770 100644 @@ -1469,53 +1467,6 @@ index ed79a6c7e804..961dc67d7261 100644 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 2761ab86490d..aa71a0c904f3 100644 ---- a/drivers/pci/pci-driver.c -+++ b/drivers/pci/pci-driver.c -@@ -19,6 +19,7 @@ - #include - #include - #include -+#include - #include - #include "pci.h" - #include "pcie/portdrv.h" -@@ -295,6 +296,34 @@ static struct attribute *pci_drv_attrs[] = { - }; - ATTRIBUTE_GROUPS(pci_drv); - -+/** -+ * pci_hw_vendor_status - Tell if a PCI device is supported by the HW vendor -+ * @ids: array of PCI device id structures to search in -+ * @dev: the PCI device structure to match against -+ * -+ * Used by a driver to check whether this device is in its list of unsupported -+ * devices. Returns the matching pci_device_id structure or %NULL if there is -+ * no match. -+ * -+ * Reserved for Internal Red Hat use only. -+ */ -+const struct pci_device_id *pci_hw_vendor_status( -+ const struct pci_device_id *ids, -+ struct pci_dev *dev) -+{ -+ char devinfo[64]; -+ const struct pci_device_id *ret = pci_match_id(ids, dev); -+ -+ if (ret) { -+ snprintf(devinfo, sizeof(devinfo), "%s %s", -+ dev_driver_string(&dev->dev), dev_name(&dev->dev)); -+ mark_hardware_deprecated(devinfo); -+ } -+ -+ return ret; -+} -+EXPORT_SYMBOL(pci_hw_vendor_status); -+ - struct drv_dev_and_id { - struct pci_driver *drv; - struct pci_dev *dev; diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index 4537d1ea14fd..af30ab6c81e2 100644 --- a/drivers/pci/quirks.c @@ -1764,21 +1715,6 @@ index 5c4c5c0602cb..753b53038690 100644 * Security hooks for perf events * * @perf_event_open: -diff --git a/include/linux/pci.h b/include/linux/pci.h -index cd8aa6fce204..35df61824d02 100644 ---- a/include/linux/pci.h -+++ b/include/linux/pci.h -@@ -1470,6 +1470,10 @@ 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); -+/* Reserved for Internal Red Hat use only */ -+const struct pci_device_id *pci_hw_vendor_status( -+ 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); - diff --git a/include/linux/random.h b/include/linux/random.h index f45b8be3e3c4..7ccdec68b789 100644 --- a/include/linux/random.h diff --git a/sources b/sources index 30c1e7ecb..95886ef84 100644 --- a/sources +++ b/sources @@ -1,4 +1,4 @@ SHA512 (kernel-abi-whitelists-5.13.3-300.tar.bz2) = 6bf4f456ba178ec95b63b3818d3575773ede221e74fde97bb20eb32409a64c58d4f9a6acce9b8b58a5477d27cb708c53abe03dada02a3bdf1cfd596ccd129294 SHA512 (linux-5.15.1.tar.xz) = 927a475f0cc40ed08c462130d799b0d74a6200d2db50c92940fc0d63c2aac9029ff4276e5bbfecad49953829599c155a96f8ce563d448f9649432e4c3d730b07 -SHA512 (kernel-abi-stablelists-5.15.1-200.tar.bz2) = b3fef602d8ee177d7d7b6294cd3aa39c31be5d7bf5f27f4afcdec9a084ba4736fe2604ed9f8e0db069e97715d43b4772605d4dd7d3a91455aaf730f186a18492 -SHA512 (kernel-kabi-dw-5.15.1-200.tar.bz2) = 44a2fa1d3c32d4b2464cdd9e76a68537be12be985b1357ef3ae69e5f0aff1fb1c609998331cf82ac7252b453f41841168e4d88955994d1e2a5b418efe4231156 +SHA512 (kernel-abi-stablelists-5.15.1-200.tar.bz2) = f7a474c70bab304459569952e12a43f03e0ce9996d9fb1fd6e1dd26d694a2198f80b18e1140cd81be487c46ad9732b96463497006ffaf1682f1c7c5bc82e568f +SHA512 (kernel-kabi-dw-5.15.1-200.tar.bz2) = 8e06c53dd3b27a3980c9cbbfca86b12ddff0961c1534b56dc6bc292752dfa3dca455a5adbce56c559a4470563df868c62dec76d4ff06df474eef2392e22f8917 -- cgit From 2bd3b79064972283c4a32129bed1fe20179b0316 Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Tue, 9 Nov 2021 10:33:20 -0600 Subject: kernel-5.15-200 * Tue Nov 09 2021 Justin M. Forbes [5.15-200] - Revert "[fs] dax: mark tech preview" (Justin M. Forbes) - Revert "wireguard: mark as Tech Preview" (Justin M. Forbes) - Revert "add pci_hw_vendor_status()" (Justin M. Forbes) - Input: i8042 - Add quirk for Fujitsu Lifebook T725 (Takashi Iwai) Resolves: rhbz# Signed-off-by: Justin M. Forbes --- Patchlist.changelog | 6 +++++ kernel.spec | 2 ++ patch-5.15-redhat.patch | 62 +++---------------------------------------------- sources | 2 +- 4 files changed, 12 insertions(+), 60 deletions(-) diff --git a/Patchlist.changelog b/Patchlist.changelog index 4ce109aea..9c3dfa583 100644 --- a/Patchlist.changelog +++ b/Patchlist.changelog @@ -1,3 +1,9 @@ +https://gitlab.com/cki-project/kernel-ark/-/commit/83006c3429d58b6247863c348495417636186107 + 83006c3429d58b6247863c348495417636186107 Revert "[fs] dax: mark tech preview" + +https://gitlab.com/cki-project/kernel-ark/-/commit/58b66eecb6ef60c71c5017aa0220b6e3e2a5e38f + 58b66eecb6ef60c71c5017aa0220b6e3e2a5e38f Revert "wireguard: mark as Tech Preview" + https://gitlab.com/cki-project/kernel-ark/-/commit/e7dd4e098056b44495d41d06418a11c4442447e0 e7dd4e098056b44495d41d06418a11c4442447e0 Revert "add pci_hw_vendor_status()" diff --git a/kernel.spec b/kernel.spec index b4f9fb5ea..fe30749f0 100755 --- a/kernel.spec +++ b/kernel.spec @@ -2973,6 +2973,8 @@ fi # %changelog * Tue Nov 09 2021 Justin M. Forbes [5.15-200] +- Revert "[fs] dax: mark tech preview" (Justin M. Forbes) +- Revert "wireguard: mark as Tech Preview" (Justin M. Forbes) - Revert "add pci_hw_vendor_status()" (Justin M. Forbes) - Input: i8042 - Add quirk for Fujitsu Lifebook T725 (Takashi Iwai) diff --git a/patch-5.15-redhat.patch b/patch-5.15-redhat.patch index 9ef422550..0ec5a5c2a 100644 --- a/patch-5.15-redhat.patch +++ b/patch-5.15-redhat.patch @@ -23,7 +23,7 @@ drivers/input/rmi4/rmi_driver.c | 124 ++++++++++++--------- drivers/input/serio/i8042-x86ia64io.h | 14 +++ drivers/iommu/iommu.c | 22 ++++ - drivers/net/wireguard/main.c | 7 ++ + drivers/net/wireguard/main.c | 6 + drivers/nvme/host/core.c | 22 +++- drivers/nvme/host/multipath.c | 19 ++-- drivers/nvme/host/nvme.h | 4 + @@ -31,8 +31,6 @@ drivers/scsi/megaraid/megaraid_sas_base.c | 2 + drivers/usb/core/hub.c | 7 ++ fs/btrfs/async-thread.c | 14 +++ - fs/ext4/super.c | 5 + - fs/xfs/xfs_super.c | 5 + include/linux/efi.h | 22 ++-- include/linux/lsm_hook_defs.h | 2 + include/linux/lsm_hooks.h | 6 + @@ -46,7 +44,7 @@ security/lockdown/Kconfig | 13 +++ security/lockdown/lockdown.c | 1 + security/security.c | 6 + - 48 files changed, 727 insertions(+), 192 deletions(-) + 46 files changed, 716 insertions(+), 192 deletions(-) diff --git a/Makefile b/Makefile index ffcc7eadc44b..7c94a55d6770 100644 @@ -1300,7 +1298,7 @@ index 3303d707bab4..372edaaafaa1 100644 * Changes the default domain of an iommu group that has *only* one device * diff --git a/drivers/net/wireguard/main.c b/drivers/net/wireguard/main.c -index 75dbe77b0b4b..029ff8576f8e 100644 +index 75dbe77b0b4b..4bd6dd722f44 100644 --- a/drivers/net/wireguard/main.c +++ b/drivers/net/wireguard/main.c @@ -12,6 +12,7 @@ @@ -1323,14 +1321,6 @@ index 75dbe77b0b4b..029ff8576f8e 100644 ret = wg_allowedips_slab_init(); if (ret < 0) goto err_allowedips; -@@ -48,6 +54,7 @@ static int __init mod_init(void) - pr_info("WireGuard " WIREGUARD_VERSION " loaded. See www.wireguard.com for information.\n"); - pr_info("Copyright (C) 2015-2019 Jason A. Donenfeld . All Rights Reserved.\n"); - -+ mark_tech_preview("WireGuard", THIS_MODULE); - return 0; - - err_netlink: diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c index f8dd664b2eda..0ff9ea8340e4 100644 --- a/drivers/nvme/host/core.c @@ -1571,52 +1561,6 @@ index 309516e6a968..d39af03b456c 100644 set_bit(WORK_DONE_BIT, &work->flags); run_ordered_work(wq, work); } else { -diff --git a/fs/ext4/super.c b/fs/ext4/super.c -index 88d5d274a868..6693ff552b24 100644 ---- a/fs/ext4/super.c -+++ b/fs/ext4/super.c -@@ -4298,6 +4298,7 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent) - set_bit(EXT4_FLAGS_BDEV_IS_DAX, &sbi->s_ext4_flags); - - if (sbi->s_mount_opt & EXT4_MOUNT_DAX_ALWAYS) { -+ static bool printed = false; - if (ext4_has_feature_inline_data(sb)) { - ext4_msg(sb, KERN_ERR, "Cannot use DAX on a filesystem" - " that may contain inline data"); -@@ -4308,6 +4309,10 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent) - "DAX unsupported by block device."); - goto failed_mount; - } -+ if (!printed) { -+ mark_tech_preview("ext4 direct access (dax)", NULL); -+ printed = true; -+ } - } - - if (ext4_has_feature_encrypt(sb) && es->s_encryption_level) { -diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c -index c4e0cd1c1c8c..f80fa9b6d53e 100644 ---- a/fs/xfs/xfs_super.c -+++ b/fs/xfs/xfs_super.c -@@ -1593,6 +1593,7 @@ xfs_fs_fill_super( - - if (xfs_has_dax_always(mp)) { - bool rtdev_is_dax = false, datadev_is_dax; -+ static bool printed = false; - - xfs_warn(mp, - "DAX enabled. Warning: EXPERIMENTAL, use at your own risk"); -@@ -1612,6 +1613,10 @@ xfs_fs_fill_super( - error = -EINVAL; - goto out_filestream_unmount; - } -+ if (!printed) { -+ mark_tech_preview("xfs direct access (dax)", NULL); -+ printed = true; -+ } - } - - if (xfs_has_discard(mp)) { diff --git a/include/linux/efi.h b/include/linux/efi.h index 6b5d36babfcc..fd4a5d66a9d0 100644 --- a/include/linux/efi.h diff --git a/sources b/sources index 95886ef84..a23fe901d 100644 --- a/sources +++ b/sources @@ -1,4 +1,4 @@ SHA512 (kernel-abi-whitelists-5.13.3-300.tar.bz2) = 6bf4f456ba178ec95b63b3818d3575773ede221e74fde97bb20eb32409a64c58d4f9a6acce9b8b58a5477d27cb708c53abe03dada02a3bdf1cfd596ccd129294 SHA512 (linux-5.15.1.tar.xz) = 927a475f0cc40ed08c462130d799b0d74a6200d2db50c92940fc0d63c2aac9029ff4276e5bbfecad49953829599c155a96f8ce563d448f9649432e4c3d730b07 -SHA512 (kernel-abi-stablelists-5.15.1-200.tar.bz2) = f7a474c70bab304459569952e12a43f03e0ce9996d9fb1fd6e1dd26d694a2198f80b18e1140cd81be487c46ad9732b96463497006ffaf1682f1c7c5bc82e568f +SHA512 (kernel-abi-stablelists-5.15.1-200.tar.bz2) = 3be403e64a33a4b0cbb11ecedcb730058f3da9eb62d29642a92f54001b571ac5a1c39b8773638c908d97e70f9b01c5a109968472c17087e76f53dcdcbc1d6049 SHA512 (kernel-kabi-dw-5.15.1-200.tar.bz2) = 8e06c53dd3b27a3980c9cbbfca86b12ddff0961c1534b56dc6bc292752dfa3dca455a5adbce56c559a4470563df868c62dec76d4ff06df474eef2392e22f8917 -- cgit