kernel-6.5.7-200

* Tue Oct 10 2023 Augusto Caringi <acaringi@redhat.com> [6.5.7-0]
- common: aarch64: enable CONFIG_ARM64_ERRATUM_2966298 (Augusto Caringi)
- Linux v6.5.7
Resolves:

Signed-off-by: Augusto Caringi <acaringi@redhat.com>
This commit is contained in:
Augusto Caringi 2023-10-10 23:53:45 -03:00
parent 9560771995
commit 4031693b50
13 changed files with 134 additions and 135 deletions

View File

@ -394,6 +394,7 @@ CONFIG_ARM64_ERRATUM_2441009=y
CONFIG_ARM64_ERRATUM_2457168=y CONFIG_ARM64_ERRATUM_2457168=y
CONFIG_ARM64_ERRATUM_2645198=y CONFIG_ARM64_ERRATUM_2645198=y
CONFIG_ARM64_ERRATUM_2658417=y CONFIG_ARM64_ERRATUM_2658417=y
CONFIG_ARM64_ERRATUM_2966298=y
CONFIG_ARM64_ERRATUM_819472=y CONFIG_ARM64_ERRATUM_819472=y
CONFIG_ARM64_ERRATUM_824069=y CONFIG_ARM64_ERRATUM_824069=y
CONFIG_ARM64_ERRATUM_826319=y CONFIG_ARM64_ERRATUM_826319=y

View File

@ -394,6 +394,7 @@ CONFIG_ARM64_ERRATUM_2441009=y
CONFIG_ARM64_ERRATUM_2457168=y CONFIG_ARM64_ERRATUM_2457168=y
CONFIG_ARM64_ERRATUM_2645198=y CONFIG_ARM64_ERRATUM_2645198=y
CONFIG_ARM64_ERRATUM_2658417=y CONFIG_ARM64_ERRATUM_2658417=y
CONFIG_ARM64_ERRATUM_2966298=y
CONFIG_ARM64_ERRATUM_819472=y CONFIG_ARM64_ERRATUM_819472=y
CONFIG_ARM64_ERRATUM_824069=y CONFIG_ARM64_ERRATUM_824069=y
CONFIG_ARM64_ERRATUM_826319=y CONFIG_ARM64_ERRATUM_826319=y

View File

@ -324,6 +324,7 @@ CONFIG_ARM64_ERRATUM_2441009=y
CONFIG_ARM64_ERRATUM_2457168=y CONFIG_ARM64_ERRATUM_2457168=y
CONFIG_ARM64_ERRATUM_2645198=y CONFIG_ARM64_ERRATUM_2645198=y
CONFIG_ARM64_ERRATUM_2658417=y CONFIG_ARM64_ERRATUM_2658417=y
CONFIG_ARM64_ERRATUM_2966298=y
CONFIG_ARM64_ERRATUM_819472=y CONFIG_ARM64_ERRATUM_819472=y
CONFIG_ARM64_ERRATUM_824069=y CONFIG_ARM64_ERRATUM_824069=y
CONFIG_ARM64_ERRATUM_826319=y CONFIG_ARM64_ERRATUM_826319=y

View File

@ -324,6 +324,7 @@ CONFIG_ARM64_ERRATUM_2441009=y
CONFIG_ARM64_ERRATUM_2457168=y CONFIG_ARM64_ERRATUM_2457168=y
CONFIG_ARM64_ERRATUM_2645198=y CONFIG_ARM64_ERRATUM_2645198=y
CONFIG_ARM64_ERRATUM_2658417=y CONFIG_ARM64_ERRATUM_2658417=y
CONFIG_ARM64_ERRATUM_2966298=y
CONFIG_ARM64_ERRATUM_819472=y CONFIG_ARM64_ERRATUM_819472=y
CONFIG_ARM64_ERRATUM_824069=y CONFIG_ARM64_ERRATUM_824069=y
CONFIG_ARM64_ERRATUM_826319=y CONFIG_ARM64_ERRATUM_826319=y

View File

@ -394,6 +394,7 @@ CONFIG_ARM64_ERRATUM_2441009=y
CONFIG_ARM64_ERRATUM_2457168=y CONFIG_ARM64_ERRATUM_2457168=y
CONFIG_ARM64_ERRATUM_2645198=y CONFIG_ARM64_ERRATUM_2645198=y
CONFIG_ARM64_ERRATUM_2658417=y CONFIG_ARM64_ERRATUM_2658417=y
CONFIG_ARM64_ERRATUM_2966298=y
CONFIG_ARM64_ERRATUM_819472=y CONFIG_ARM64_ERRATUM_819472=y
CONFIG_ARM64_ERRATUM_824069=y CONFIG_ARM64_ERRATUM_824069=y
CONFIG_ARM64_ERRATUM_826319=y CONFIG_ARM64_ERRATUM_826319=y

View File

@ -324,6 +324,7 @@ CONFIG_ARM64_ERRATUM_2441009=y
CONFIG_ARM64_ERRATUM_2457168=y CONFIG_ARM64_ERRATUM_2457168=y
CONFIG_ARM64_ERRATUM_2645198=y CONFIG_ARM64_ERRATUM_2645198=y
CONFIG_ARM64_ERRATUM_2658417=y CONFIG_ARM64_ERRATUM_2658417=y
CONFIG_ARM64_ERRATUM_2966298=y
CONFIG_ARM64_ERRATUM_819472=y CONFIG_ARM64_ERRATUM_819472=y
CONFIG_ARM64_ERRATUM_824069=y CONFIG_ARM64_ERRATUM_824069=y
CONFIG_ARM64_ERRATUM_826319=y CONFIG_ARM64_ERRATUM_826319=y

View File

@ -394,6 +394,7 @@ CONFIG_ARM64_ERRATUM_2441009=y
CONFIG_ARM64_ERRATUM_2457168=y CONFIG_ARM64_ERRATUM_2457168=y
CONFIG_ARM64_ERRATUM_2645198=y CONFIG_ARM64_ERRATUM_2645198=y
CONFIG_ARM64_ERRATUM_2658417=y CONFIG_ARM64_ERRATUM_2658417=y
CONFIG_ARM64_ERRATUM_2966298=y
CONFIG_ARM64_ERRATUM_819472=y CONFIG_ARM64_ERRATUM_819472=y
CONFIG_ARM64_ERRATUM_824069=y CONFIG_ARM64_ERRATUM_824069=y
CONFIG_ARM64_ERRATUM_826319=y CONFIG_ARM64_ERRATUM_826319=y

View File

@ -324,6 +324,7 @@ CONFIG_ARM64_ERRATUM_2441009=y
CONFIG_ARM64_ERRATUM_2457168=y CONFIG_ARM64_ERRATUM_2457168=y
CONFIG_ARM64_ERRATUM_2645198=y CONFIG_ARM64_ERRATUM_2645198=y
CONFIG_ARM64_ERRATUM_2658417=y CONFIG_ARM64_ERRATUM_2658417=y
CONFIG_ARM64_ERRATUM_2966298=y
CONFIG_ARM64_ERRATUM_819472=y CONFIG_ARM64_ERRATUM_819472=y
CONFIG_ARM64_ERRATUM_824069=y CONFIG_ARM64_ERRATUM_824069=y
CONFIG_ARM64_ERRATUM_826319=y CONFIG_ARM64_ERRATUM_826319=y

View File

@ -324,6 +324,7 @@ CONFIG_ARM64_ERRATUM_2441009=y
CONFIG_ARM64_ERRATUM_2457168=y CONFIG_ARM64_ERRATUM_2457168=y
CONFIG_ARM64_ERRATUM_2645198=y CONFIG_ARM64_ERRATUM_2645198=y
CONFIG_ARM64_ERRATUM_2658417=y CONFIG_ARM64_ERRATUM_2658417=y
CONFIG_ARM64_ERRATUM_2966298=y
CONFIG_ARM64_ERRATUM_819472=y CONFIG_ARM64_ERRATUM_819472=y
CONFIG_ARM64_ERRATUM_824069=y CONFIG_ARM64_ERRATUM_824069=y
CONFIG_ARM64_ERRATUM_826319=y CONFIG_ARM64_ERRATUM_826319=y

View File

@ -324,6 +324,7 @@ CONFIG_ARM64_ERRATUM_2441009=y
CONFIG_ARM64_ERRATUM_2457168=y CONFIG_ARM64_ERRATUM_2457168=y
CONFIG_ARM64_ERRATUM_2645198=y CONFIG_ARM64_ERRATUM_2645198=y
CONFIG_ARM64_ERRATUM_2658417=y CONFIG_ARM64_ERRATUM_2658417=y
CONFIG_ARM64_ERRATUM_2966298=y
CONFIG_ARM64_ERRATUM_819472=y CONFIG_ARM64_ERRATUM_819472=y
CONFIG_ARM64_ERRATUM_824069=y CONFIG_ARM64_ERRATUM_824069=y
CONFIG_ARM64_ERRATUM_826319=y CONFIG_ARM64_ERRATUM_826319=y

View File

@ -160,18 +160,18 @@ Summary: The Linux kernel
# the --with-release option overrides this setting.) # the --with-release option overrides this setting.)
%define debugbuildsenabled 1 %define debugbuildsenabled 1
# define buildid .local # define buildid .local
%define specrpmversion 6.5.6 %define specrpmversion 6.5.7
%define specversion 6.5.6 %define specversion 6.5.7
%define patchversion 6.5 %define patchversion 6.5
%define pkgrelease 200 %define pkgrelease 200
%define kversion 6 %define kversion 6
%define tarfile_release 6.5.6 %define tarfile_release 6.5.7
# This is needed to do merge window version magic # This is needed to do merge window version magic
%define patchlevel 5 %define patchlevel 5
# This allows pkg_release to have configurable %%{?dist} tag # This allows pkg_release to have configurable %%{?dist} tag
%define specrelease 200%{?buildid}%{?dist} %define specrelease 200%{?buildid}%{?dist}
# This defines the kabi tarball version # This defines the kabi tarball version
%define kabiversion 6.5.6 %define kabiversion 6.5.7
# If this variable is set to 1, a bpf selftests build failure will cause a # If this variable is set to 1, a bpf selftests build failure will cause a
# fatal kernel package build error # fatal kernel package build error
@ -3702,6 +3702,10 @@ fi\
# #
# #
%changelog %changelog
* Tue Oct 10 2023 Augusto Caringi <acaringi@redhat.com> [6.5.7-0]
- common: aarch64: enable CONFIG_ARM64_ERRATUM_2966298 (Augusto Caringi)
- Linux v6.5.7
* Fri Oct 06 2023 Augusto Caringi <acaringi@redhat.com> [6.5.6-0] * Fri Oct 06 2023 Augusto Caringi <acaringi@redhat.com> [6.5.6-0]
- power: supply: core: Use blocking_notifier_call_chain to avoid RCU complaint (Kai-Heng Feng) - power: supply: core: Use blocking_notifier_call_chain to avoid RCU complaint (Kai-Heng Feng)
- Revert "Add linux-next specific files for 20231004" (Justin M. Forbes) - Revert "Add linux-next specific files for 20231004" (Justin M. Forbes)

View File

@ -16,7 +16,6 @@
drivers/hid/hid-rmi.c | 66 ----------- drivers/hid/hid-rmi.c | 66 -----------
drivers/hwtracing/coresight/coresight-etm4x-core.c | 19 ++++ drivers/hwtracing/coresight/coresight-etm4x-core.c | 19 ++++
drivers/input/rmi4/rmi_driver.c | 124 ++++++++++++--------- drivers/input/rmi4/rmi_driver.c | 124 ++++++++++++---------
drivers/iommu/apple-dart.c | 3 +-
drivers/iommu/iommu.c | 22 ++++ drivers/iommu/iommu.c | 22 ++++
drivers/misc/cardreader/rts5228.c | 6 + drivers/misc/cardreader/rts5228.c | 6 +
drivers/misc/cardreader/rts5260.c | 6 + drivers/misc/cardreader/rts5260.c | 6 +
@ -40,16 +39,16 @@
security/lockdown/Kconfig | 13 +++ security/lockdown/Kconfig | 13 +++
security/lockdown/lockdown.c | 1 + security/lockdown/lockdown.c | 1 +
security/security.c | 12 ++ security/security.c | 12 ++
42 files changed, 555 insertions(+), 191 deletions(-) 41 files changed, 554 insertions(+), 189 deletions(-)
diff --git a/Makefile b/Makefile diff --git a/Makefile b/Makefile
index 81f14b15592f..c0507c199e18 100644 index f9d5970f3441..e9655d0c31ca 100644
--- a/Makefile --- a/Makefile
+++ b/Makefile +++ b/Makefile
@@ -22,6 +22,18 @@ $(if $(filter __%, $(MAKECMDGOALS)), \ @@ -22,6 +22,18 @@ $(if $(filter __%, $(MAKECMDGOALS)), \
PHONY := __all PHONY := __all
__all: __all:
+# Set RHEL variables +# Set RHEL variables
+# Note that this ifdef'ery is required to handle when building with +# Note that this ifdef'ery is required to handle when building with
+# the O= mechanism (relocate the object file results) due to upstream +# the O= mechanism (relocate the object file results) due to upstream
@ -74,7 +73,7 @@ index b0d00032479d..afb9544fb007 100644
int ipl_report_add_certificate(struct ipl_report *report, void *key, int ipl_report_add_certificate(struct ipl_report *report, void *key,
unsigned long addr, unsigned long len); unsigned long addr, unsigned long len);
+bool ipl_get_secureboot(void); +bool ipl_get_secureboot(void);
/* /*
* DIAG 308 support * DIAG 308 support
diff --git a/arch/s390/kernel/ipl.c b/arch/s390/kernel/ipl.c diff --git a/arch/s390/kernel/ipl.c b/arch/s390/kernel/ipl.c
@ -83,7 +82,7 @@ index dfcb2b563e2b..29e3f1b4bd00 100644
+++ b/arch/s390/kernel/ipl.c +++ b/arch/s390/kernel/ipl.c
@@ -2535,3 +2535,8 @@ int ipl_report_free(struct ipl_report *report) @@ -2535,3 +2535,8 @@ int ipl_report_free(struct ipl_report *report)
} }
#endif #endif
+ +
+bool ipl_get_secureboot(void) +bool ipl_get_secureboot(void)
@ -101,11 +100,11 @@ index 00d76448319d..e679d13303e3 100644
+#include <linux/security.h> +#include <linux/security.h>
#include <linux/hugetlb.h> #include <linux/hugetlb.h>
#include <linux/kmemleak.h> #include <linux/kmemleak.h>
@@ -914,6 +915,9 @@ void __init setup_arch(char **cmdline_p) @@ -914,6 +915,9 @@ void __init setup_arch(char **cmdline_p)
log_component_list(); log_component_list();
+ if (ipl_get_secureboot()) + if (ipl_get_secureboot())
+ security_lock_kernel_down("Secure IPL mode", LOCKDOWN_INTEGRITY_MAX); + security_lock_kernel_down("Secure IPL mode", LOCKDOWN_INTEGRITY_MAX);
+ +
@ -127,7 +126,7 @@ index aa0df37c1fe7..04f1de50e058 100644
@@ -1027,6 +1028,13 @@ void __init setup_arch(char **cmdline_p) @@ -1027,6 +1028,13 @@ void __init setup_arch(char **cmdline_p)
if (efi_enabled(EFI_BOOT)) if (efi_enabled(EFI_BOOT))
efi_init(); efi_init();
+ efi_set_secure_boot(boot_params.secure_boot); + efi_set_secure_boot(boot_params.secure_boot);
+ +
+#ifdef CONFIG_LOCK_DOWN_IN_EFI_SECURE_BOOT +#ifdef CONFIG_LOCK_DOWN_IN_EFI_SECURE_BOOT
@ -137,11 +136,11 @@ index aa0df37c1fe7..04f1de50e058 100644
+ +
reserve_ibft_region(); reserve_ibft_region();
dmi_setup(); dmi_setup();
@@ -1188,19 +1196,7 @@ void __init setup_arch(char **cmdline_p) @@ -1188,19 +1196,7 @@ void __init setup_arch(char **cmdline_p)
/* Allocate bigger log buffer */ /* Allocate bigger log buffer */
setup_log_buf(1); setup_log_buf(1);
- if (efi_enabled(EFI_BOOT)) { - if (efi_enabled(EFI_BOOT)) {
- switch (boot_params.secure_boot) { - switch (boot_params.secure_boot) {
- case efi_secureboot_mode_disabled: - case efi_secureboot_mode_disabled:
@ -156,9 +155,9 @@ index aa0df37c1fe7..04f1de50e058 100644
- } - }
- } - }
+ efi_set_secure_boot(boot_params.secure_boot); + efi_set_secure_boot(boot_params.secure_boot);
reserve_initrd(); reserve_initrd();
diff --git a/drivers/acpi/apei/hest.c b/drivers/acpi/apei/hest.c diff --git a/drivers/acpi/apei/hest.c b/drivers/acpi/apei/hest.c
index 6aef1ee5e1bd..8f146b1b4972 100644 index 6aef1ee5e1bd..8f146b1b4972 100644
--- a/drivers/acpi/apei/hest.c --- a/drivers/acpi/apei/hest.c
@ -166,7 +165,7 @@ index 6aef1ee5e1bd..8f146b1b4972 100644
@@ -96,6 +96,14 @@ static int apei_hest_parse(apei_hest_func_t func, void *data) @@ -96,6 +96,14 @@ static int apei_hest_parse(apei_hest_func_t func, void *data)
if (hest_disable || !hest_tab) if (hest_disable || !hest_tab)
return -EINVAL; return -EINVAL;
+#ifdef CONFIG_ARM64 +#ifdef CONFIG_ARM64
+ /* Ignore broken firmware */ + /* Ignore broken firmware */
+ if (!strncmp(hest_tab->header.oem_id, "HPE ", 6) && + if (!strncmp(hest_tab->header.oem_id, "HPE ", 6) &&
@ -188,7 +187,7 @@ index c2c786eb95ab..4e3aa80cd5cf 100644
struct irq_fwspec *fwspec; struct irq_fwspec *fwspec;
+ bool skip_producer_check; + bool skip_producer_check;
}; };
/** /**
@@ -211,7 +212,8 @@ static acpi_status acpi_irq_parse_one_cb(struct acpi_resource *ares, @@ -211,7 +212,8 @@ static acpi_status acpi_irq_parse_one_cb(struct acpi_resource *ares,
return AE_CTRL_TERMINATE; return AE_CTRL_TERMINATE;
@ -206,7 +205,7 @@ index c2c786eb95ab..4e3aa80cd5cf 100644
{ {
- struct acpi_irq_parse_one_ctx ctx = { -EINVAL, index, flags, fwspec }; - struct acpi_irq_parse_one_ctx ctx = { -EINVAL, index, flags, fwspec };
+ struct acpi_irq_parse_one_ctx ctx = { -EINVAL, index, flags, fwspec, false }; + struct acpi_irq_parse_one_ctx ctx = { -EINVAL, index, flags, fwspec, false };
+ /* + /*
+ * Firmware on arm64-based HPE m400 platform incorrectly marks + * Firmware on arm64-based HPE m400 platform incorrectly marks
+ * its UART interrupt as ACPI_PRODUCER rather than ACPI_CONSUMER. + * its UART interrupt as ACPI_PRODUCER rather than ACPI_CONSUMER.
@ -228,7 +227,7 @@ index 87e385542576..7e9de6e3eb9f 100644
@@ -1749,6 +1749,15 @@ static bool acpi_device_enumeration_by_parent(struct acpi_device *device) @@ -1749,6 +1749,15 @@ static bool acpi_device_enumeration_by_parent(struct acpi_device *device)
if (!acpi_match_device_ids(device, ignore_serial_bus_ids)) if (!acpi_match_device_ids(device, ignore_serial_bus_ids))
return false; return false;
+ /* + /*
+ * Firmware on some arm64 X-Gene platforms will make the UART + * Firmware on some arm64 X-Gene platforms will make the UART
+ * device appear as both a UART and a slave of that UART. Just + * device appear as both a UART and a slave of that UART. Just
@ -248,7 +247,7 @@ index a6212f6d3796..1bd84617d751 100644
@@ -729,6 +729,24 @@ int ahci_stop_engine(struct ata_port *ap) @@ -729,6 +729,24 @@ int ahci_stop_engine(struct ata_port *ap)
tmp &= ~PORT_CMD_START; tmp &= ~PORT_CMD_START;
writel(tmp, port_mmio + PORT_CMD); writel(tmp, port_mmio + PORT_CMD);
+#ifdef CONFIG_ARM64 +#ifdef CONFIG_ARM64
+ /* Rev Ax of Cavium CN99XX needs a hack for port stop */ + /* Rev Ax of Cavium CN99XX needs a hack for port stop */
+ if (dev_is_pci(ap->host->dev) && + if (dev_is_pci(ap->host->dev) &&
@ -277,7 +276,7 @@ index bbf7029e224b..cf7faa970dd6 100644
@@ -215,6 +215,21 @@ static int __init scan_for_dmi_ipmi(void) @@ -215,6 +215,21 @@ static int __init scan_for_dmi_ipmi(void)
{ {
const struct dmi_device *dev = NULL; const struct dmi_device *dev = NULL;
+#ifdef CONFIG_ARM64 +#ifdef CONFIG_ARM64
+ /* RHEL-only + /* RHEL-only
+ * If this is ARM-based HPE m400, return now, because that platform + * If this is ARM-based HPE m400, return now, because that platform
@ -295,7 +294,7 @@ index bbf7029e224b..cf7faa970dd6 100644
+ +
while ((dev = dmi_find_device(DMI_DEV_TYPE_IPMI, NULL, dev))) while ((dev = dmi_find_device(DMI_DEV_TYPE_IPMI, NULL, dev)))
dmi_decode_ipmi((const struct dmi_header *) dev->device_data); 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 diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_msghandler.c
index 186f1fee7534..93e3a76596ff 100644 index 186f1fee7534..93e3a76596ff 100644
--- a/drivers/char/ipmi/ipmi_msghandler.c --- a/drivers/char/ipmi/ipmi_msghandler.c
@ -306,12 +305,12 @@ index 186f1fee7534..93e3a76596ff 100644
#include <linux/vmalloc.h> #include <linux/vmalloc.h>
+#include <linux/dmi.h> +#include <linux/dmi.h>
#include <linux/delay.h> #include <linux/delay.h>
#define IPMI_DRIVER_VERSION "39.2" #define IPMI_DRIVER_VERSION "39.2"
@@ -5516,8 +5517,21 @@ static int __init ipmi_init_msghandler_mod(void) @@ -5516,8 +5517,21 @@ static int __init ipmi_init_msghandler_mod(void)
{ {
int rv; int rv;
- pr_info("version " IPMI_DRIVER_VERSION "\n"); - pr_info("version " IPMI_DRIVER_VERSION "\n");
+#ifdef CONFIG_ARM64 +#ifdef CONFIG_ARM64
+ /* RHEL-only + /* RHEL-only
@ -320,7 +319,7 @@ index 186f1fee7534..93e3a76596ff 100644
+ * does not exist in the ARM architecture. + * does not exist in the ARM architecture.
+ */ + */
+ const char *dmistr = dmi_get_system_info(DMI_PRODUCT_NAME); + const char *dmistr = dmi_get_system_info(DMI_PRODUCT_NAME);
+ if (dmistr && (strcmp("ProLiant m400 Server", dmistr) == 0)) { + if (dmistr && (strcmp("ProLiant m400 Server", dmistr) == 0)) {
+ pr_debug("%s does not support host ipmi\n", dmistr); + pr_debug("%s does not support host ipmi\n", dmistr);
+ return -ENOSYS; + return -ENOSYS;
@ -352,13 +351,13 @@ index 1599f1176842..a1fc17f1e0cc 100644
#include <linux/memblock.h> #include <linux/memblock.h>
#include <linux/security.h> #include <linux/security.h>
+#include <linux/bsearch.h> +#include <linux/bsearch.h>
#include <asm/early_ioremap.h> #include <asm/early_ioremap.h>
@@ -953,40 +954,101 @@ int efi_mem_type(unsigned long phys_addr) @@ -953,40 +954,101 @@ int efi_mem_type(unsigned long phys_addr)
} }
#endif #endif
+struct efi_error_code { +struct efi_error_code {
+ efi_status_t status; + efi_status_t status;
+ int errno; + int errno;
@ -463,7 +462,7 @@ index 1599f1176842..a1fc17f1e0cc 100644
- } - }
+ struct efi_error_code *found; + struct efi_error_code *found;
+ size_t num = sizeof(efi_error_codes) / sizeof(struct efi_error_code); + size_t num = sizeof(efi_error_codes) / sizeof(struct efi_error_code);
- return err; - return err;
+ found = bsearch((void *)(uintptr_t)status, efi_error_codes, + found = bsearch((void *)(uintptr_t)status, efi_error_codes,
+ sizeof(struct efi_error_code), num, + sizeof(struct efi_error_code), num,
@ -487,7 +486,7 @@ index 1599f1176842..a1fc17f1e0cc 100644
+ return found->description; + return found->description;
} }
EXPORT_SYMBOL_GPL(efi_status_to_err); EXPORT_SYMBOL_GPL(efi_status_to_err);
diff --git a/drivers/firmware/efi/secureboot.c b/drivers/firmware/efi/secureboot.c diff --git a/drivers/firmware/efi/secureboot.c b/drivers/firmware/efi/secureboot.c
new file mode 100644 new file mode 100644
index 000000000000..de0a3714a5d4 index 000000000000..de0a3714a5d4
@ -539,7 +538,7 @@ index 82fcfd29bc4d..17b7e096b682 100644
@@ -34,6 +34,22 @@ @@ -34,6 +34,22 @@
#include <linux/screen_info.h> #include <linux/screen_info.h>
#include <linux/sysfb.h> #include <linux/sysfb.h>
+static int skip_simpledrm; +static int skip_simpledrm;
+ +
+static int __init simpledrm_disable(char *opt) +static int __init simpledrm_disable(char *opt)
@ -560,7 +559,7 @@ index 82fcfd29bc4d..17b7e096b682 100644
static DEFINE_MUTEX(disable_lock); static DEFINE_MUTEX(disable_lock);
static bool disabled; static bool disabled;
@@ -85,7 +101,7 @@ static __init int sysfb_init(void) @@ -85,7 +101,7 @@ static __init int sysfb_init(void)
/* try to create a simple-framebuffer device */ /* try to create a simple-framebuffer device */
compatible = sysfb_parse_mode(si, &mode); compatible = sysfb_parse_mode(si, &mode);
- if (compatible) { - if (compatible) {
@ -577,27 +576,27 @@ index 84e7ba5314d3..efc96776f761 100644
struct rmi_data *hdata = hid_get_drvdata(hdev); struct rmi_data *hdata = hid_get_drvdata(hdev);
struct rmi_device *rmi_dev = hdata->xport.rmi_dev; struct rmi_device *rmi_dev = hdata->xport.rmi_dev;
- unsigned long flags; - unsigned long flags;
if (!(test_bit(RMI_STARTED, &hdata->flags))) if (!(test_bit(RMI_STARTED, &hdata->flags)))
return 0; return 0;
- pm_wakeup_event(hdev->dev.parent, 0); - pm_wakeup_event(hdev->dev.parent, 0);
- -
- local_irq_save(flags); - local_irq_save(flags);
- -
rmi_set_attn_data(rmi_dev, data[1], &data[2], size - 2); rmi_set_attn_data(rmi_dev, data[1], &data[2], size - 2);
- generic_handle_irq(hdata->rmi_irq); - generic_handle_irq(hdata->rmi_irq);
- -
- local_irq_restore(flags); - local_irq_restore(flags);
- -
return 1; return 1;
} }
@@ -591,56 +582,6 @@ static const struct rmi_transport_ops hid_rmi_ops = { @@ -591,56 +582,6 @@ static const struct rmi_transport_ops hid_rmi_ops = {
.reset = rmi_hid_reset, .reset = rmi_hid_reset,
}; };
-static void rmi_irq_teardown(void *data) -static void rmi_irq_teardown(void *data)
-{ -{
- struct rmi_data *hdata = data; - struct rmi_data *hdata = data;
@ -652,9 +651,9 @@ index 84e7ba5314d3..efc96776f761 100644
{ {
struct rmi_data *data = NULL; struct rmi_data *data = NULL;
@@ -713,18 +654,11 @@ static int rmi_probe(struct hid_device *hdev, const struct hid_device_id *id) @@ -713,18 +654,11 @@ static int rmi_probe(struct hid_device *hdev, const struct hid_device_id *id)
mutex_init(&data->page_mutex); mutex_init(&data->page_mutex);
- ret = rmi_setup_irq_domain(hdev); - ret = rmi_setup_irq_domain(hdev);
- if (ret) { - if (ret) {
- hid_err(hdev, "failed to allocate IRQ domain\n"); - hid_err(hdev, "failed to allocate IRQ domain\n");
@ -663,13 +662,13 @@ index 84e7ba5314d3..efc96776f761 100644
- -
if (data->device_flags & RMI_DEVICE_HAS_PHYS_BUTTONS) if (data->device_flags & RMI_DEVICE_HAS_PHYS_BUTTONS)
rmi_hid_pdata.gpio_data.disable = true; rmi_hid_pdata.gpio_data.disable = true;
data->xport.dev = hdev->dev.parent; data->xport.dev = hdev->dev.parent;
data->xport.pdata = rmi_hid_pdata; data->xport.pdata = rmi_hid_pdata;
- data->xport.pdata.irq = data->rmi_irq; - data->xport.pdata.irq = data->rmi_irq;
data->xport.proto_name = "hid"; data->xport.proto_name = "hid";
data->xport.ops = &hid_rmi_ops; data->xport.ops = &hid_rmi_ops;
diff --git a/drivers/hwtracing/coresight/coresight-etm4x-core.c b/drivers/hwtracing/coresight/coresight-etm4x-core.c diff --git a/drivers/hwtracing/coresight/coresight-etm4x-core.c b/drivers/hwtracing/coresight/coresight-etm4x-core.c
index 7e307022303a..c68d7da67148 100644 index 7e307022303a..c68d7da67148 100644
--- a/drivers/hwtracing/coresight/coresight-etm4x-core.c --- a/drivers/hwtracing/coresight/coresight-etm4x-core.c
@ -685,7 +684,7 @@ index 7e307022303a..c68d7da67148 100644
@@ -2265,6 +2266,16 @@ static const struct amba_id etm4_ids[] = { @@ -2265,6 +2266,16 @@ static const struct amba_id etm4_ids[] = {
{}, {},
}; };
+static const struct dmi_system_id broken_coresight[] = { +static const struct dmi_system_id broken_coresight[] = {
+ { + {
+ .matches = { + .matches = {
@ -697,22 +696,22 @@ index 7e307022303a..c68d7da67148 100644
+}; +};
+ +
MODULE_DEVICE_TABLE(amba, etm4_ids); MODULE_DEVICE_TABLE(amba, etm4_ids);
static struct amba_driver etm4x_amba_driver = { static struct amba_driver etm4x_amba_driver = {
@@ -2298,6 +2309,11 @@ static int __init etm4x_init(void) @@ -2298,6 +2309,11 @@ static int __init etm4x_init(void)
{ {
int ret; int ret;
+ if (dmi_check_system(broken_coresight)) { + if (dmi_check_system(broken_coresight)) {
+ pr_info("ETM4 disabled due to firmware bug\n"); + pr_info("ETM4 disabled due to firmware bug\n");
+ return 0; + return 0;
+ } + }
+ +
ret = etm4_pm_setup(); ret = etm4_pm_setup();
/* etm4_pm_setup() does its own cleanup - exit on error */ /* etm4_pm_setup() does its own cleanup - exit on error */
@@ -2324,6 +2340,9 @@ static int __init etm4x_init(void) @@ -2324,6 +2340,9 @@ static int __init etm4x_init(void)
static void __exit etm4x_exit(void) static void __exit etm4x_exit(void)
{ {
+ if (dmi_check_system(broken_coresight)) + if (dmi_check_system(broken_coresight))
@ -727,13 +726,13 @@ index 258d5fe3d395..f7298e3dc8f3 100644
+++ b/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, @@ -182,34 +182,47 @@ void rmi_set_attn_data(struct rmi_device *rmi_dev, unsigned long irq_status,
attn_data.data = fifo_data; attn_data.data = fifo_data;
kfifo_put(&drvdata->attn_fifo, attn_data); kfifo_put(&drvdata->attn_fifo, attn_data);
+ +
+ schedule_work(&drvdata->attn_work); + schedule_work(&drvdata->attn_work);
} }
EXPORT_SYMBOL_GPL(rmi_set_attn_data); EXPORT_SYMBOL_GPL(rmi_set_attn_data);
-static irqreturn_t rmi_irq_fn(int irq, void *dev_id) -static irqreturn_t rmi_irq_fn(int irq, void *dev_id)
+static void attn_callback(struct work_struct *work) +static void attn_callback(struct work_struct *work)
{ {
@ -744,7 +743,7 @@ index 258d5fe3d395..f7298e3dc8f3 100644
+ attn_work); + attn_work);
struct rmi4_attn_data attn_data = {0}; struct rmi4_attn_data attn_data = {0};
int ret, count; int ret, count;
count = kfifo_get(&drvdata->attn_fifo, &attn_data); count = kfifo_get(&drvdata->attn_fifo, &attn_data);
- if (count) { - if (count) {
- *(drvdata->irq_status) = attn_data.irq_status; - *(drvdata->irq_status) = attn_data.irq_status;
@ -752,7 +751,7 @@ index 258d5fe3d395..f7298e3dc8f3 100644
- } - }
+ if (!count) + if (!count)
+ return; + return;
- ret = rmi_process_interrupt_requests(rmi_dev); - ret = rmi_process_interrupt_requests(rmi_dev);
+ *(drvdata->irq_status) = attn_data.irq_status; + *(drvdata->irq_status) = attn_data.irq_status;
+ drvdata->attn_data = attn_data; + drvdata->attn_data = attn_data;
@ -762,14 +761,14 @@ index 258d5fe3d395..f7298e3dc8f3 100644
- rmi_dbg(RMI_DEBUG_CORE, &rmi_dev->dev, - rmi_dbg(RMI_DEBUG_CORE, &rmi_dev->dev,
+ rmi_dbg(RMI_DEBUG_CORE, &drvdata->rmi_dev->dev, + rmi_dbg(RMI_DEBUG_CORE, &drvdata->rmi_dev->dev,
"Failed to process interrupt request: %d\n", ret); "Failed to process interrupt request: %d\n", ret);
- if (count) { - if (count) {
- kfree(attn_data.data); - kfree(attn_data.data);
- drvdata->attn_data.data = NULL; - drvdata->attn_data.data = NULL;
- } - }
+ kfree(attn_data.data); + kfree(attn_data.data);
+ drvdata->attn_data.data = NULL; + drvdata->attn_data.data = NULL;
if (!kfifo_is_empty(&drvdata->attn_fifo)) if (!kfifo_is_empty(&drvdata->attn_fifo))
- return rmi_irq_fn(irq, dev_id); - return rmi_irq_fn(irq, dev_id);
+ schedule_work(&drvdata->attn_work); + schedule_work(&drvdata->attn_work);
@ -784,7 +783,7 @@ index 258d5fe3d395..f7298e3dc8f3 100644
+ if (ret) + if (ret)
+ rmi_dbg(RMI_DEBUG_CORE, &rmi_dev->dev, + rmi_dbg(RMI_DEBUG_CORE, &rmi_dev->dev,
+ "Failed to process interrupt request: %d\n", ret); + "Failed to process interrupt request: %d\n", ret);
return IRQ_HANDLED; return IRQ_HANDLED;
} }
@@ -217,7 +230,6 @@ static irqreturn_t rmi_irq_fn(int irq, void *dev_id) @@ -217,7 +230,6 @@ static irqreturn_t rmi_irq_fn(int irq, void *dev_id)
@ -794,20 +793,20 @@ index 258d5fe3d395..f7298e3dc8f3 100644
- struct rmi_driver_data *data = dev_get_drvdata(&rmi_dev->dev); - struct rmi_driver_data *data = dev_get_drvdata(&rmi_dev->dev);
int irq_flags = irq_get_trigger_type(pdata->irq); int irq_flags = irq_get_trigger_type(pdata->irq);
int ret; int ret;
@@ -235,8 +247,6 @@ static int rmi_irq_init(struct rmi_device *rmi_dev) @@ -235,8 +247,6 @@ static int rmi_irq_init(struct rmi_device *rmi_dev)
return ret; return ret;
} }
- data->enabled = true; - data->enabled = true;
- -
return 0; return 0;
} }
@@ -886,23 +896,27 @@ void rmi_enable_irq(struct rmi_device *rmi_dev, bool clear_wake) @@ -886,23 +896,27 @@ void rmi_enable_irq(struct rmi_device *rmi_dev, bool clear_wake)
if (data->enabled) if (data->enabled)
goto out; goto out;
- enable_irq(irq); - enable_irq(irq);
- data->enabled = true; - data->enabled = true;
- if (clear_wake && device_may_wakeup(rmi_dev->xport->dev)) { - if (clear_wake && device_may_wakeup(rmi_dev->xport->dev)) {
@ -827,7 +826,7 @@ index 258d5fe3d395..f7298e3dc8f3 100644
+ "Failed to disable irq for wake: %d\n", + "Failed to disable irq for wake: %d\n",
+ retval); + retval);
+ } + }
- /* - /*
- * Call rmi_process_interrupt_requests() after enabling irq, - * Call rmi_process_interrupt_requests() after enabling irq,
- * otherwise we may lose interrupt on edge-triggered systems. - * otherwise we may lose interrupt on edge-triggered systems.
@ -845,12 +844,12 @@ index 258d5fe3d395..f7298e3dc8f3 100644
+ } else { + } else {
+ data->enabled = true; + data->enabled = true;
+ } + }
out: out:
mutex_unlock(&data->enabled_mutex); mutex_unlock(&data->enabled_mutex);
@@ -922,20 +936,22 @@ void rmi_disable_irq(struct rmi_device *rmi_dev, bool enable_wake) @@ -922,20 +936,22 @@ void rmi_disable_irq(struct rmi_device *rmi_dev, bool enable_wake)
goto out; goto out;
data->enabled = false; data->enabled = false;
- disable_irq(irq); - disable_irq(irq);
- if (enable_wake && device_may_wakeup(rmi_dev->xport->dev)) { - if (enable_wake && device_may_wakeup(rmi_dev->xport->dev)) {
@ -883,21 +882,21 @@ index 258d5fe3d395..f7298e3dc8f3 100644
+ kfree(attn_data.data); + kfree(attn_data.data);
+ } + }
} }
out: out:
@@ -981,6 +997,8 @@ static int rmi_driver_remove(struct device *dev) @@ -981,6 +997,8 @@ static int rmi_driver_remove(struct device *dev)
irq_domain_remove(data->irqdomain); irq_domain_remove(data->irqdomain);
data->irqdomain = NULL; data->irqdomain = NULL;
+ cancel_work_sync(&data->attn_work); + cancel_work_sync(&data->attn_work);
+ +
rmi_f34_remove_sysfs(rmi_dev); rmi_f34_remove_sysfs(rmi_dev);
rmi_free_function_list(rmi_dev); rmi_free_function_list(rmi_dev);
@@ -1219,9 +1237,15 @@ static int rmi_driver_probe(struct device *dev) @@ -1219,9 +1237,15 @@ static int rmi_driver_probe(struct device *dev)
} }
} }
- retval = rmi_irq_init(rmi_dev); - retval = rmi_irq_init(rmi_dev);
- if (retval < 0) - if (retval < 0)
- goto err_destroy_functions; - goto err_destroy_functions;
@ -910,29 +909,15 @@ index 258d5fe3d395..f7298e3dc8f3 100644
+ data->enabled = true; + data->enabled = true;
+ +
+ INIT_WORK(&data->attn_work, attn_callback); + INIT_WORK(&data->attn_work, attn_callback);
if (data->f01_container->dev.driver) { if (data->f01_container->dev.driver) {
/* Driver already bound, so enable ATTN now. */ /* Driver already bound, so enable ATTN now. */
diff --git a/drivers/iommu/apple-dart.c b/drivers/iommu/apple-dart.c
index 8af64b57f048..f4d880408254 100644
--- a/drivers/iommu/apple-dart.c
+++ b/drivers/iommu/apple-dart.c
@@ -671,8 +671,7 @@ static int apple_dart_attach_dev(struct iommu_domain *domain,
return ret;
switch (domain->type) {
- case IOMMU_DOMAIN_DMA:
- case IOMMU_DOMAIN_UNMANAGED:
+ default:
ret = apple_dart_domain_add_streams(dart_domain, cfg);
if (ret)
return ret;
diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
index cabeb5bd3e41..25ef4e9cc34a 100644 index cabeb5bd3e41..25ef4e9cc34a 100644
--- a/drivers/iommu/iommu.c --- a/drivers/iommu/iommu.c
+++ b/drivers/iommu/iommu.c +++ b/drivers/iommu/iommu.c
@@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
#include <linux/amba/bus.h> #include <linux/amba/bus.h>
#include <linux/device.h> #include <linux/device.h>
+#include <linux/dmi.h> +#include <linux/dmi.h>
@ -942,7 +927,7 @@ index cabeb5bd3e41..25ef4e9cc34a 100644
@@ -2819,6 +2820,27 @@ int iommu_dev_disable_feature(struct device *dev, enum iommu_dev_features feat) @@ -2819,6 +2820,27 @@ int iommu_dev_disable_feature(struct device *dev, enum iommu_dev_features feat)
} }
EXPORT_SYMBOL_GPL(iommu_dev_disable_feature); EXPORT_SYMBOL_GPL(iommu_dev_disable_feature);
+#ifdef CONFIG_ARM64 +#ifdef CONFIG_ARM64
+static int __init iommu_quirks(void) +static int __init iommu_quirks(void)
+{ +{
@ -982,7 +967,7 @@ index 0c7f10bcf6f1..4ca9da411ebb 100644
+ else + else
+ option->force_clkreq_0 = true; + option->force_clkreq_0 = true;
} }
static int rts5228_extra_init_hw(struct rtsx_pcr *pcr) static int rts5228_extra_init_hw(struct rtsx_pcr *pcr)
diff --git a/drivers/misc/cardreader/rts5260.c b/drivers/misc/cardreader/rts5260.c diff --git a/drivers/misc/cardreader/rts5260.c b/drivers/misc/cardreader/rts5260.c
index d2d3a6ccb8f7..0cef0808b1f1 100644 index d2d3a6ccb8f7..0cef0808b1f1 100644
@ -999,7 +984,7 @@ index d2d3a6ccb8f7..0cef0808b1f1 100644
+ else + else
+ option->force_clkreq_0 = true; + option->force_clkreq_0 = true;
} }
static int rts5260_extra_init_hw(struct rtsx_pcr *pcr) static int rts5260_extra_init_hw(struct rtsx_pcr *pcr)
diff --git a/drivers/misc/cardreader/rts5261.c b/drivers/misc/cardreader/rts5261.c diff --git a/drivers/misc/cardreader/rts5261.c b/drivers/misc/cardreader/rts5261.c
index 67252512a132..3236a82feca5 100644 index 67252512a132..3236a82feca5 100644
@ -1016,14 +1001,14 @@ index 67252512a132..3236a82feca5 100644
+ else + else
+ option->force_clkreq_0 = true; + option->force_clkreq_0 = true;
} }
static int rts5261_extra_init_hw(struct rtsx_pcr *pcr) static int rts5261_extra_init_hw(struct rtsx_pcr *pcr)
diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
index 21783aa2ee8e..f2f9bdb3e0c8 100644 index 21783aa2ee8e..f2f9bdb3e0c8 100644
--- a/drivers/nvme/host/core.c --- a/drivers/nvme/host/core.c
+++ b/drivers/nvme/host/core.c +++ b/drivers/nvme/host/core.c
@@ -251,6 +251,9 @@ void nvme_delete_ctrl_sync(struct nvme_ctrl *ctrl) @@ -251,6 +251,9 @@ void nvme_delete_ctrl_sync(struct nvme_ctrl *ctrl)
static blk_status_t nvme_error_status(u16 status) static blk_status_t nvme_error_status(u16 status)
{ {
+ if (unlikely(status & NVME_SC_DNR)) + if (unlikely(status & NVME_SC_DNR))
@ -1039,17 +1024,17 @@ index 21783aa2ee8e..f2f9bdb3e0c8 100644
+ FAILUP, + FAILUP,
AUTHENTICATE, AUTHENTICATE,
}; };
@@ -352,15 +356,16 @@ static inline enum nvme_disposition nvme_decide_disposition(struct request *req) @@ -352,15 +356,16 @@ static inline enum nvme_disposition nvme_decide_disposition(struct request *req)
if ((nvme_req(req)->status & 0x7ff) == NVME_SC_AUTH_REQUIRED) if ((nvme_req(req)->status & 0x7ff) == NVME_SC_AUTH_REQUIRED)
return AUTHENTICATE; return AUTHENTICATE;
- if (blk_noretry_request(req) || - if (blk_noretry_request(req) ||
+ if ((req->cmd_flags & (REQ_FAILFAST_DEV | REQ_FAILFAST_DRIVER)) || + if ((req->cmd_flags & (REQ_FAILFAST_DEV | REQ_FAILFAST_DRIVER)) ||
(nvme_req(req)->status & NVME_SC_DNR) || (nvme_req(req)->status & NVME_SC_DNR) ||
nvme_req(req)->retries >= nvme_max_retries) nvme_req(req)->retries >= nvme_max_retries)
return COMPLETE; return COMPLETE;
- if (req->cmd_flags & REQ_NVME_MPATH) { - if (req->cmd_flags & REQ_NVME_MPATH) {
+ if (req->cmd_flags & (REQ_NVME_MPATH | REQ_FAILFAST_TRANSPORT)) { + if (req->cmd_flags & (REQ_NVME_MPATH | REQ_FAILFAST_TRANSPORT)) {
if (nvme_is_path_error(nvme_req(req)->status) || if (nvme_is_path_error(nvme_req(req)->status) ||
@ -1063,7 +1048,7 @@ index 21783aa2ee8e..f2f9bdb3e0c8 100644
@@ -390,6 +395,14 @@ static inline void nvme_end_req(struct request *req) @@ -390,6 +395,14 @@ static inline void nvme_end_req(struct request *req)
blk_mq_end_request(req, status); blk_mq_end_request(req, status);
} }
+static inline void nvme_failup_req(struct request *req) +static inline void nvme_failup_req(struct request *req)
+{ +{
+ nvme_update_ana(req); + nvme_update_ana(req);
@ -1092,7 +1077,7 @@ index 0a88d7bdc5e3..967bb3a85889 100644
@@ -80,14 +80,10 @@ void nvme_mpath_start_freeze(struct nvme_subsystem *subsys) @@ -80,14 +80,10 @@ void nvme_mpath_start_freeze(struct nvme_subsystem *subsys)
blk_freeze_queue_start(h->disk->queue); blk_freeze_queue_start(h->disk->queue);
} }
-void nvme_failover_req(struct request *req) -void nvme_failover_req(struct request *req)
+void nvme_update_ana(struct request *req) +void nvme_update_ana(struct request *req)
{ {
@ -1102,7 +1087,7 @@ index 0a88d7bdc5e3..967bb3a85889 100644
- struct bio *bio; - struct bio *bio;
- -
- nvme_mpath_clear_current_path(ns); - nvme_mpath_clear_current_path(ns);
/* /*
* If we got back an ANA error, we know the controller is alive but not * If we got back an ANA error, we know the controller is alive but not
@@ -98,6 +94,16 @@ void nvme_failover_req(struct request *req) @@ -98,6 +94,16 @@ void nvme_failover_req(struct request *req)
@ -1119,18 +1104,18 @@ index 0a88d7bdc5e3..967bb3a85889 100644
+ +
+ nvme_mpath_clear_current_path(ns); + nvme_mpath_clear_current_path(ns);
+ nvme_update_ana(req); + nvme_update_ana(req);
spin_lock_irqsave(&ns->head->requeue_lock, flags); spin_lock_irqsave(&ns->head->requeue_lock, flags);
for (bio = req->bio; bio; bio = bio->bi_next) { for (bio = req->bio; bio; bio = bio->bi_next) {
@@ -912,8 +918,7 @@ int nvme_mpath_init_identify(struct nvme_ctrl *ctrl, struct nvme_id_ctrl *id) @@ -912,8 +918,7 @@ int nvme_mpath_init_identify(struct nvme_ctrl *ctrl, struct nvme_id_ctrl *id)
int error = 0; int error = 0;
/* check if multipath is enabled and we have the capability */ /* check if multipath is enabled and we have the capability */
- if (!multipath || !ctrl->subsys || - if (!multipath || !ctrl->subsys ||
- !(ctrl->subsys->cmic & NVME_CTRL_CMIC_ANA)) - !(ctrl->subsys->cmic & NVME_CTRL_CMIC_ANA))
+ if (!ctrl->subsys || !(ctrl->subsys->cmic & NVME_CTRL_CMIC_ANA)) + if (!ctrl->subsys || !(ctrl->subsys->cmic & NVME_CTRL_CMIC_ANA))
return 0; return 0;
if (!ctrl->max_namespaces || if (!ctrl->max_namespaces ||
diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h
index f35647c470af..e57357f23306 100644 index f35647c470af..e57357f23306 100644
@ -1161,7 +1146,7 @@ index 321156ca273d..fc399e56ec8f 100644
@@ -4406,6 +4406,30 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_BROADCOM, 0x9000, @@ -4406,6 +4406,30 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_BROADCOM, 0x9000,
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_BROADCOM, 0x9084, DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_BROADCOM, 0x9084,
quirk_bridge_cavm_thrx2_pcie_root); quirk_bridge_cavm_thrx2_pcie_root);
+/* +/*
+ * PCI BAR 5 is not setup correctly for the on-board AHCI controller + * 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 + * on Broadcom's Vulcan processor. Added a quirk to fix BAR 5 by
@ -1196,11 +1181,11 @@ index 3791aec69ddc..0d2e72a966c9 100644
@@ -29,7 +29,7 @@ @@ -29,7 +29,7 @@
struct class *power_supply_class; struct class *power_supply_class;
EXPORT_SYMBOL_GPL(power_supply_class); EXPORT_SYMBOL_GPL(power_supply_class);
-ATOMIC_NOTIFIER_HEAD(power_supply_notifier); -ATOMIC_NOTIFIER_HEAD(power_supply_notifier);
+BLOCKING_NOTIFIER_HEAD(power_supply_notifier); +BLOCKING_NOTIFIER_HEAD(power_supply_notifier);
EXPORT_SYMBOL_GPL(power_supply_notifier); EXPORT_SYMBOL_GPL(power_supply_notifier);
static struct device_type power_supply_dev_type; static struct device_type power_supply_dev_type;
@@ -97,7 +97,7 @@ static void power_supply_changed_work(struct work_struct *work) @@ -97,7 +97,7 @@ static void power_supply_changed_work(struct work_struct *work)
class_for_each_device(power_supply_class, NULL, psy, class_for_each_device(power_supply_class, NULL, psy,
@ -1212,21 +1197,21 @@ index 3791aec69ddc..0d2e72a966c9 100644
kobject_uevent(&psy->dev.kobj, KOBJ_CHANGE); kobject_uevent(&psy->dev.kobj, KOBJ_CHANGE);
spin_lock_irqsave(&psy->changed_lock, flags); spin_lock_irqsave(&psy->changed_lock, flags);
@@ -1262,13 +1262,13 @@ static void power_supply_dev_release(struct device *dev) @@ -1262,13 +1262,13 @@ static void power_supply_dev_release(struct device *dev)
int power_supply_reg_notifier(struct notifier_block *nb) int power_supply_reg_notifier(struct notifier_block *nb)
{ {
- return atomic_notifier_chain_register(&power_supply_notifier, nb); - return atomic_notifier_chain_register(&power_supply_notifier, nb);
+ return blocking_notifier_chain_register(&power_supply_notifier, nb); + return blocking_notifier_chain_register(&power_supply_notifier, nb);
} }
EXPORT_SYMBOL_GPL(power_supply_reg_notifier); EXPORT_SYMBOL_GPL(power_supply_reg_notifier);
void power_supply_unreg_notifier(struct notifier_block *nb) void power_supply_unreg_notifier(struct notifier_block *nb)
{ {
- atomic_notifier_chain_unregister(&power_supply_notifier, nb); - atomic_notifier_chain_unregister(&power_supply_notifier, nb);
+ blocking_notifier_chain_unregister(&power_supply_notifier, nb); + blocking_notifier_chain_unregister(&power_supply_notifier, nb);
} }
EXPORT_SYMBOL_GPL(power_supply_unreg_notifier); EXPORT_SYMBOL_GPL(power_supply_unreg_notifier);
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
index d6535cbb4e05..bcaad1fc5d8d 100644 index d6535cbb4e05..bcaad1fc5d8d 100644
--- a/drivers/scsi/sd.c --- a/drivers/scsi/sd.c
@ -1234,7 +1219,7 @@ index d6535cbb4e05..bcaad1fc5d8d 100644
@@ -130,6 +130,14 @@ static const char *sd_cache_types[] = { @@ -130,6 +130,14 @@ static const char *sd_cache_types[] = {
"write back, no read (daft)" "write back, no read (daft)"
}; };
+static const char *sd_probe_types[] = { "async", "sync" }; +static const char *sd_probe_types[] = { "async", "sync" };
+ +
+static char sd_probe_type[6] = "async"; +static char sd_probe_type[6] = "async";
@ -1249,7 +1234,7 @@ index d6535cbb4e05..bcaad1fc5d8d 100644
@@ -4024,6 +4032,8 @@ static int __init init_sd(void) @@ -4024,6 +4032,8 @@ static int __init init_sd(void)
goto err_out_class; goto err_out_class;
} }
+ if (!strcmp(sd_probe_type, "sync")) + if (!strcmp(sd_probe_type, "sync"))
+ sd_template.gendrv.probe_type = PROBE_FORCE_SYNCHRONOUS; + sd_template.gendrv.probe_type = PROBE_FORCE_SYNCHRONOUS;
err = scsi_register_driver(&sd_template.gendrv); err = scsi_register_driver(&sd_template.gendrv);
@ -1262,7 +1247,7 @@ index 26a27ff50408..e1050b7dd63d 100644
@@ -5805,6 +5805,13 @@ static void hub_event(struct work_struct *work) @@ -5805,6 +5805,13 @@ static void hub_event(struct work_struct *work)
(u16) hub->change_bits[0], (u16) hub->change_bits[0],
(u16) hub->event_bits[0]); (u16) hub->event_bits[0]);
+ /* Don't disconnect USB-SATA on TrimSlice */ + /* Don't disconnect USB-SATA on TrimSlice */
+ if (strcmp(dev_name(hdev->bus->controller), "tegra-ehci.0") == 0) { + if (strcmp(dev_name(hdev->bus->controller), "tegra-ehci.0") == 0) {
+ if ((hdev->state == 7) && (hub->change_bits[0] == 0) && + if ((hdev->state == 7) && (hub->change_bits[0] == 0) &&
@ -1280,7 +1265,7 @@ index ba5322fe34f5..35d084c52f2d 100644
@@ -365,6 +365,23 @@ static u64 calc_available_free_space(struct btrfs_fs_info *fs_info, @@ -365,6 +365,23 @@ static u64 calc_available_free_space(struct btrfs_fs_info *fs_info,
factor = btrfs_bg_type_to_factor(profile); factor = btrfs_bg_type_to_factor(profile);
avail = div_u64(avail, factor); avail = div_u64(avail, factor);
+ /* + /*
+ * Since data allocations immediately use block groups as part of the + * Since data allocations immediately use block groups as part of the
+ * reservation, because we assume that data reservations will == actual + * reservation, because we assume that data reservations will == actual
@ -1308,7 +1293,7 @@ index ab088c662e88..f974f9d9a7c5 100644
@@ -43,6 +43,8 @@ @@ -43,6 +43,8 @@
#define EFI_ABORTED (21 | (1UL << (BITS_PER_LONG-1))) #define EFI_ABORTED (21 | (1UL << (BITS_PER_LONG-1)))
#define EFI_SECURITY_VIOLATION (26 | (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))) +#define EFI_IS_ERROR(x) ((x) & (1UL << (BITS_PER_LONG-1)))
+ +
typedef unsigned long efi_status_t; typedef unsigned long efi_status_t;
@ -1326,22 +1311,22 @@ index ab088c662e88..f974f9d9a7c5 100644
+ efi_secureboot_mode_disabled, + efi_secureboot_mode_disabled,
+ efi_secureboot_mode_enabled, + efi_secureboot_mode_enabled,
+}; +};
#ifdef CONFIG_EFI #ifdef CONFIG_EFI
/* /*
@@ -882,6 +892,8 @@ static inline bool efi_enabled(int feature) @@ -882,6 +892,8 @@ static inline bool efi_enabled(int feature)
} }
extern void efi_reboot(enum reboot_mode reboot_mode, const char *__unused); extern void efi_reboot(enum reboot_mode reboot_mode, const char *__unused);
+extern void __init efi_set_secure_boot(enum efi_secureboot_mode mode); +extern void __init efi_set_secure_boot(enum efi_secureboot_mode mode);
+ +
bool __pure __efi_soft_reserve_enabled(void); bool __pure __efi_soft_reserve_enabled(void);
static inline bool __pure efi_soft_reserve_enabled(void) static inline bool __pure efi_soft_reserve_enabled(void)
@@ -903,6 +915,8 @@ static inline bool efi_enabled(int feature) @@ -903,6 +915,8 @@ static inline bool efi_enabled(int feature)
static inline void static inline void
efi_reboot(enum reboot_mode reboot_mode, const char *__unused) {} efi_reboot(enum reboot_mode reboot_mode, const char *__unused) {}
+static inline void efi_set_secure_boot(enum efi_secureboot_mode mode) {} +static inline void efi_set_secure_boot(enum efi_secureboot_mode mode) {}
+ +
static inline bool efi_soft_reserve_enabled(void) static inline bool efi_soft_reserve_enabled(void)
@ -1349,16 +1334,16 @@ index ab088c662e88..f974f9d9a7c5 100644
return false; return false;
@@ -917,6 +931,7 @@ static inline void efi_find_mirror(void) {} @@ -917,6 +931,7 @@ static inline void efi_find_mirror(void) {}
#endif #endif
extern int efi_status_to_err(efi_status_t status); extern int efi_status_to_err(efi_status_t status);
+extern const char *efi_status_to_str(efi_status_t status); +extern const char *efi_status_to_str(efi_status_t status);
/* /*
* Variable Attributes * Variable Attributes
@@ -1133,13 +1148,6 @@ static inline bool efi_runtime_disabled(void) { return true; } @@ -1133,13 +1148,6 @@ static inline bool efi_runtime_disabled(void) { return true; }
extern void efi_call_virt_check_flags(unsigned long flags, const char *call); extern void efi_call_virt_check_flags(unsigned long flags, const char *call);
extern unsigned long efi_call_virt_save_flags(void); extern unsigned long efi_call_virt_save_flags(void);
-enum efi_secureboot_mode { -enum efi_secureboot_mode {
- efi_secureboot_mode_unset, - efi_secureboot_mode_unset,
- efi_secureboot_mode_unknown, - efi_secureboot_mode_unknown,
@ -1375,11 +1360,11 @@ index af796986baee..83e1cb0ca159 100644
+++ b/include/linux/lsm_hook_defs.h +++ b/include/linux/lsm_hook_defs.h
@@ -405,6 +405,8 @@ LSM_HOOK(void, LSM_RET_VOID, bpf_prog_free_security, struct bpf_prog_aux *aux) @@ -405,6 +405,8 @@ LSM_HOOK(void, LSM_RET_VOID, bpf_prog_free_security, struct bpf_prog_aux *aux)
#endif /* CONFIG_BPF_SYSCALL */ #endif /* CONFIG_BPF_SYSCALL */
LSM_HOOK(int, 0, locked_down, enum lockdown_reason what) LSM_HOOK(int, 0, locked_down, enum lockdown_reason what)
+LSM_HOOK(int, 0, lock_kernel_down, const char *where, enum lockdown_reason level) +LSM_HOOK(int, 0, lock_kernel_down, const char *where, enum lockdown_reason level)
+ +
#ifdef CONFIG_PERF_EVENTS #ifdef CONFIG_PERF_EVENTS
LSM_HOOK(int, 0, perf_event_open, struct perf_event_attr *attr, int type) LSM_HOOK(int, 0, perf_event_open, struct perf_event_attr *attr, int type)
diff --git a/include/linux/power_supply.h b/include/linux/power_supply.h diff --git a/include/linux/power_supply.h b/include/linux/power_supply.h
@ -1389,7 +1374,7 @@ index a427f13c757f..85b86768c0b9 100644
@@ -767,7 +767,7 @@ struct power_supply_battery_info { @@ -767,7 +767,7 @@ struct power_supply_battery_info {
int bti_resistance_tolerance; int bti_resistance_tolerance;
}; };
-extern struct atomic_notifier_head power_supply_notifier; -extern struct atomic_notifier_head power_supply_notifier;
+extern struct blocking_notifier_head power_supply_notifier; +extern struct blocking_notifier_head power_supply_notifier;
extern int power_supply_reg_notifier(struct notifier_block *nb); extern int power_supply_reg_notifier(struct notifier_block *nb);
@ -1400,12 +1385,12 @@ index ab7eea01ab42..fff7c5f737fc 100644
--- a/include/linux/rmi.h --- a/include/linux/rmi.h
+++ b/include/linux/rmi.h +++ b/include/linux/rmi.h
@@ -364,6 +364,7 @@ struct rmi_driver_data { @@ -364,6 +364,7 @@ struct rmi_driver_data {
struct rmi4_attn_data attn_data; struct rmi4_attn_data attn_data;
DECLARE_KFIFO(attn_fifo, struct rmi4_attn_data, 16); DECLARE_KFIFO(attn_fifo, struct rmi4_attn_data, 16);
+ struct work_struct attn_work; + struct work_struct attn_work;
}; };
int rmi_register_transport_device(struct rmi_transport_dev *xport); int rmi_register_transport_device(struct rmi_transport_dev *xport);
diff --git a/include/linux/security.h b/include/linux/security.h diff --git a/include/linux/security.h b/include/linux/security.h
index bac98ea18f78..28abed10b583 100644 index bac98ea18f78..28abed10b583 100644
@ -1417,7 +1402,7 @@ index bac98ea18f78..28abed10b583 100644
int security_locked_down(enum lockdown_reason what); int security_locked_down(enum lockdown_reason what);
+int security_lock_kernel_down(const char *where, enum lockdown_reason level); +int security_lock_kernel_down(const char *where, enum lockdown_reason level);
#else /* CONFIG_SECURITY */ #else /* CONFIG_SECURITY */
static inline int call_blocking_lsm_notifier(enum lsm_event event, void *data) static inline int call_blocking_lsm_notifier(enum lsm_event event, void *data)
@@ -1394,6 +1395,10 @@ static inline int security_locked_down(enum lockdown_reason what) @@ -1394,6 +1395,10 @@ static inline int security_locked_down(enum lockdown_reason what)
{ {
@ -1428,7 +1413,7 @@ index bac98ea18f78..28abed10b583 100644
+ return 0; + return 0;
+} +}
#endif /* CONFIG_SECURITY */ #endif /* CONFIG_SECURITY */
#if defined(CONFIG_SECURITY) && defined(CONFIG_WATCH_QUEUE) #if defined(CONFIG_SECURITY) && defined(CONFIG_WATCH_QUEUE)
diff --git a/kernel/module/signing.c b/kernel/module/signing.c diff --git a/kernel/module/signing.c b/kernel/module/signing.c
index a2ff4242e623..f0d2be1ee4f1 100644 index a2ff4242e623..f0d2be1ee4f1 100644
@ -1437,7 +1422,7 @@ index a2ff4242e623..f0d2be1ee4f1 100644
@@ -61,10 +61,17 @@ int mod_verify_sig(const void *mod, struct load_info *info) @@ -61,10 +61,17 @@ int mod_verify_sig(const void *mod, struct load_info *info)
modlen -= sig_len + sizeof(ms); modlen -= sig_len + sizeof(ms);
info->len = modlen; info->len = modlen;
- return verify_pkcs7_signature(mod, modlen, mod + modlen, sig_len, - return verify_pkcs7_signature(mod, modlen, mod + modlen, sig_len,
+ ret = verify_pkcs7_signature(mod, modlen, mod + modlen, sig_len, + ret = verify_pkcs7_signature(mod, modlen, mod + modlen, sig_len,
VERIFY_USE_SECONDARY_KEYRING, VERIFY_USE_SECONDARY_KEYRING,
@ -1451,7 +1436,7 @@ index a2ff4242e623..f0d2be1ee4f1 100644
+ } + }
+ return ret; + return ret;
} }
int module_sig_check(struct load_info *info, int flags) int module_sig_check(struct load_info *info, int flags)
diff --git a/scripts/tags.sh b/scripts/tags.sh diff --git a/scripts/tags.sh b/scripts/tags.sh
index a70d43723146..56d06b04f752 100755 index a70d43723146..56d06b04f752 100755
@ -1463,7 +1448,7 @@ index a70d43723146..56d06b04f752 100755
ignore="$ignore ( -name *.mod.c ) -prune -o" ignore="$ignore ( -name *.mod.c ) -prune -o"
+# RHEL tags and cscope should also ignore redhat/rpm +# RHEL tags and cscope should also ignore redhat/rpm
+ignore="$ignore ( -path redhat/rpm ) -prune -o" +ignore="$ignore ( -path redhat/rpm ) -prune -o"
# ignore arbitrary directories # ignore arbitrary directories
if [ -n "${IGNORE_DIRS}" ]; then if [ -n "${IGNORE_DIRS}" ]; then
diff --git a/security/integrity/platform_certs/load_uefi.c b/security/integrity/platform_certs/load_uefi.c diff --git a/security/integrity/platform_certs/load_uefi.c b/security/integrity/platform_certs/load_uefi.c
@ -1472,14 +1457,14 @@ index d1fdd113450a..182e8090cfe8 100644
+++ b/security/integrity/platform_certs/load_uefi.c +++ b/security/integrity/platform_certs/load_uefi.c
@@ -74,7 +74,8 @@ static __init void *get_cert_list(efi_char16_t *name, efi_guid_t *guid, @@ -74,7 +74,8 @@ static __init void *get_cert_list(efi_char16_t *name, efi_guid_t *guid,
return NULL; return NULL;
if (*status != EFI_BUFFER_TOO_SMALL) { if (*status != EFI_BUFFER_TOO_SMALL) {
- pr_err("Couldn't get size: 0x%lx\n", *status); - pr_err("Couldn't get size: 0x%lx\n", *status);
+ pr_err("Couldn't get size: %s (0x%lx)\n", + pr_err("Couldn't get size: %s (0x%lx)\n",
+ efi_status_to_str(*status), *status); + efi_status_to_str(*status), *status);
return NULL; return NULL;
} }
@@ -85,7 +86,8 @@ static __init void *get_cert_list(efi_char16_t *name, efi_guid_t *guid, @@ -85,7 +86,8 @@ static __init void *get_cert_list(efi_char16_t *name, efi_guid_t *guid,
*status = efi.get_variable(name, guid, NULL, &lsize, db); *status = efi.get_variable(name, guid, NULL, &lsize, db);
if (*status != EFI_SUCCESS) { if (*status != EFI_SUCCESS) {
@ -1489,7 +1474,7 @@ index d1fdd113450a..182e8090cfe8 100644
+ efi_status_to_str(*status), *status); + efi_status_to_str(*status), *status);
return NULL; return NULL;
} }
diff --git a/security/lockdown/Kconfig b/security/lockdown/Kconfig diff --git a/security/lockdown/Kconfig b/security/lockdown/Kconfig
index e84ddf484010..d0501353a4b9 100644 index e84ddf484010..d0501353a4b9 100644
--- a/security/lockdown/Kconfig --- a/security/lockdown/Kconfig
@ -1497,7 +1482,7 @@ index e84ddf484010..d0501353a4b9 100644
@@ -16,6 +16,19 @@ config SECURITY_LOCKDOWN_LSM_EARLY @@ -16,6 +16,19 @@ config SECURITY_LOCKDOWN_LSM_EARLY
subsystem is fully initialised. If enabled, lockdown will subsystem is fully initialised. If enabled, lockdown will
unconditionally be called before any other LSMs. unconditionally be called before any other LSMs.
+config LOCK_DOWN_IN_EFI_SECURE_BOOT +config LOCK_DOWN_IN_EFI_SECURE_BOOT
+ bool "Lock down the kernel in EFI Secure Boot mode" + bool "Lock down the kernel in EFI Secure Boot mode"
+ default n + default n
@ -1519,12 +1504,12 @@ index 68d19632aeb7..ef348935b6ff 100644
--- a/security/lockdown/lockdown.c --- a/security/lockdown/lockdown.c
+++ b/security/lockdown/lockdown.c +++ b/security/lockdown/lockdown.c
@@ -73,6 +73,7 @@ static int lockdown_is_locked_down(enum lockdown_reason what) @@ -73,6 +73,7 @@ static int lockdown_is_locked_down(enum lockdown_reason what)
static struct security_hook_list lockdown_hooks[] __ro_after_init = { static struct security_hook_list lockdown_hooks[] __ro_after_init = {
LSM_HOOK_INIT(locked_down, lockdown_is_locked_down), LSM_HOOK_INIT(locked_down, lockdown_is_locked_down),
+ LSM_HOOK_INIT(lock_kernel_down, lock_kernel_down), + LSM_HOOK_INIT(lock_kernel_down, lock_kernel_down),
}; };
static int __init lockdown_lsm_init(void) static int __init lockdown_lsm_init(void)
diff --git a/security/security.c b/security/security.c diff --git a/security/security.c b/security/security.c
index 549104a447e3..73670798f075 100644 index 549104a447e3..73670798f075 100644
@ -1533,7 +1518,7 @@ index 549104a447e3..73670798f075 100644
@@ -5198,6 +5198,18 @@ int security_locked_down(enum lockdown_reason what) @@ -5198,6 +5198,18 @@ int security_locked_down(enum lockdown_reason what)
} }
EXPORT_SYMBOL(security_locked_down); EXPORT_SYMBOL(security_locked_down);
+/** +/**
+ * security_lock_kernel_down() - Put the kernel into lock-down mode. + * security_lock_kernel_down() - Put the kernel into lock-down mode.
+ * + *

View File

@ -1,3 +1,3 @@
SHA512 (linux-6.5.6.tar.xz) = 98129b8bd53d63afaf104b3c53419b79d1eea59cb78f49d09279dbaf457ba7eea65eac4e7746fdc29cfca44a1e6095935cb42b98c3bfbcd9999c93b5a7bae914 SHA512 (linux-6.5.7.tar.xz) = 1424161a121a210fa23d6a0f54105716d475c1d3927d982b050d6e69f5e01f66a129bebe9d6d06f57d15564053c993e346d3ac913dac98dcc45c679f268b23f1
SHA512 (kernel-abi-stablelists-6.5.6.tar.bz2) = 4a01419d93717132c30e3bc48ef70deab327d0e311b7609b804142380b736a37a8a65304328e608f0d8d08ce0c67ea7aac3e8aaa75dda77fea32b2dd2bae4a96 SHA512 (kernel-abi-stablelists-6.5.7.tar.bz2) = d2d6d816ffa18cc14eb1a6bbead22ebb76296f01fc9d4e8754c1717dad3d313385894a1884c215b9dd9d3ffb4e0e435c6a99dcf0f9e67ada3cd0829d113b5c2e
SHA512 (kernel-kabi-dw-6.5.6.tar.bz2) = 56a3613eb046c3927e466b10f6b856929094aae1689457c061b69b174e6b3c915c6ddf9f49a1ad93c395951a24ab54627fbe5e8152fae3af19b78e8f7e4cbb87 SHA512 (kernel-kabi-dw-6.5.7.tar.bz2) = ff2829459ccee8af87cedccc5c1588cfba20781893f336f318122e592751ea7b1b617d4997d38c93926c180b88be960aee6ce41b1669d891f80deb272df046ed