Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'acpi-6.16-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm

Pull ACPI fixes from Rafael Wysocki:
"These fix an ACPI APEI error injection driver failure that started to
occur after switching it over to using a faux device, address an EC
driver issue related to invalid ECDT tables, clean up the usage of
mwait_idle_with_hints() in the ACPI PAD driver, add a new IRQ override
quirk, and fix a NULL pointer dereference related to nosmp:

- Update the faux device handling code in the driver core and address
an ACPI APEI error injection driver failure that started to occur
after switching it over to using a faux device on top of that (Dan
Williams)

- Update data types of variables passed as arguments to
mwait_idle_with_hints() in the ACPI PAD (processor aggregator
device) driver to match the function definition after recent
changes (Uros Bizjak)

- Fix a NULL pointer dereference in the ACPI CPPC library that occurs
when nosmp is passed to the kernel in the command line (Yunhui Cui)

- Ignore ECDT tables with an invalid ID string to prevent using an
incorrect GPE for signaling events on some systems (Armin Wolf)

- Add a new IRQ override quirk for MACHENIKE 16P (Wentao Guan)"

* tag 'acpi-6.16-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
ACPI: resource: Use IRQ override on MACHENIKE 16P
ACPI: EC: Ignore ECDT tables with an invalid ID string
ACPI: CPPC: Fix NULL pointer dereference when nosmp is used
ACPI: PAD: Update arguments of mwait_idle_with_hints()
ACPI: APEI: EINJ: Do not fail einj_init() on faux_device_create() failure
driver core: faux: Quiet probe failures
driver core: faux: Suppress bind attributes

+31 -9
+1 -1
drivers/acpi/acpi_pad.c
··· 33 33 static DEFINE_MUTEX(isolated_cpus_lock); 34 34 static DEFINE_MUTEX(round_robin_lock); 35 35 36 - static unsigned long power_saving_mwait_eax; 36 + static unsigned int power_saving_mwait_eax; 37 37 38 38 static unsigned char tsc_detected_unstable; 39 39 static unsigned char tsc_marked_unstable;
+3 -6
drivers/acpi/apei/einj-core.c
··· 883 883 } 884 884 885 885 einj_dev = faux_device_create("acpi-einj", NULL, &einj_device_ops); 886 - if (!einj_dev) 887 - return -ENODEV; 888 886 889 - einj_initialized = true; 887 + if (einj_dev) 888 + einj_initialized = true; 890 889 891 890 return 0; 892 891 } 893 892 894 893 static void __exit einj_exit(void) 895 894 { 896 - if (einj_initialized) 897 - faux_device_destroy(einj_dev); 898 - 895 + faux_device_destroy(einj_dev); 899 896 } 900 897 901 898 module_init(einj_init);
+1 -1
drivers/acpi/cppc_acpi.c
··· 476 476 struct cpc_desc *cpc_ptr; 477 477 int cpu; 478 478 479 - for_each_possible_cpu(cpu) { 479 + for_each_present_cpu(cpu) { 480 480 cpc_ptr = per_cpu(cpc_desc_ptr, cpu); 481 481 desired_reg = &cpc_ptr->cpc_regs[DESIRED_PERF]; 482 482 if (!CPC_IN_SYSTEM_MEMORY(desired_reg) &&
+17
drivers/acpi/ec.c
··· 23 23 #include <linux/delay.h> 24 24 #include <linux/interrupt.h> 25 25 #include <linux/list.h> 26 + #include <linux/printk.h> 26 27 #include <linux/spinlock.h> 27 28 #include <linux/slab.h> 29 + #include <linux/string.h> 28 30 #include <linux/suspend.h> 29 31 #include <linux/acpi.h> 30 32 #include <linux/dmi.h> ··· 2030 2028 * Asus X50GL: 2031 2029 * https://bugzilla.kernel.org/show_bug.cgi?id=11880 2032 2030 */ 2031 + goto out; 2032 + } 2033 + 2034 + if (!strstarts(ecdt_ptr->id, "\\")) { 2035 + /* 2036 + * The ECDT table on some MSI notebooks contains invalid data, together 2037 + * with an empty ID string (""). 2038 + * 2039 + * Section 5.2.15 of the ACPI specification requires the ID string to be 2040 + * a "fully qualified reference to the (...) embedded controller device", 2041 + * so this string always has to start with a backslash. 2042 + * 2043 + * By verifying this we can avoid such faulty ECDT tables in a safe way. 2044 + */ 2045 + pr_err(FW_BUG "Ignoring ECDT due to invalid ID string \"%s\"\n", ecdt_ptr->id); 2033 2046 goto out; 2034 2047 } 2035 2048
+7
drivers/acpi/resource.c
··· 667 667 }, 668 668 }, 669 669 { 670 + /* MACHENIKE L16P/L16P */ 671 + .matches = { 672 + DMI_MATCH(DMI_SYS_VENDOR, "MACHENIKE"), 673 + DMI_MATCH(DMI_BOARD_NAME, "L16P"), 674 + }, 675 + }, 676 + { 670 677 /* 671 678 * TongFang GM5HG0A in case of the SKIKK Vanaheim relabel the 672 679 * board-name is changed, so check OEM strings instead. Note
+2 -1
drivers/base/faux.c
··· 86 86 .name = "faux_driver", 87 87 .bus = &faux_bus_type, 88 88 .probe_type = PROBE_FORCE_SYNCHRONOUS, 89 + .suppress_bind_attrs = true, 89 90 }; 90 91 91 92 static void faux_device_release(struct device *dev) ··· 170 169 * successful is almost impossible to determine by the caller. 171 170 */ 172 171 if (!dev->driver) { 173 - dev_err(dev, "probe did not succeed, tearing down the device\n"); 172 + dev_dbg(dev, "probe did not succeed, tearing down the device\n"); 174 173 faux_device_destroy(faux_dev); 175 174 faux_dev = NULL; 176 175 }