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

Merge branches 'acpi-video' and 'acpi-processor' into acpi

Merge ACPI backlight driver fixes and an ACPI processor driver fix for
6.7-rc3:

- Avoid powering up GPUs while attempting to fix up power for their
children (Hans de Goede).

- Use raw_safe_halt() instead of safe_halt() in acpi_idle_play_dead()
so as to avoid triple-falts during CPU online in Xen HVM guests due
to the setting of the hardirqs_enabled flag in safe_halt() (David
Woodhouse).

* acpi-video:
ACPI: video: Use acpi_device_fix_up_power_children()
ACPI: PM: Add acpi_device_fix_up_power_children() function

* acpi-processor:
ACPI: processor_idle: use raw_safe_halt() in acpi_idle_play_dead()

+16 -2
+1 -1
drivers/acpi/acpi_video.c
··· 2031 2031 * HP ZBook Fury 16 G10 requires ACPI video's child devices have _PS0 2032 2032 * evaluated to have functional panel brightness control. 2033 2033 */ 2034 - acpi_device_fix_up_power_extended(device); 2034 + acpi_device_fix_up_power_children(device); 2035 2035 2036 2036 pr_info("%s [%s] (multi-head: %s rom: %s post: %s)\n", 2037 2037 ACPI_VIDEO_DEVICE_NAME, acpi_device_bid(device),
+13
drivers/acpi/device_pm.c
··· 397 397 } 398 398 EXPORT_SYMBOL_GPL(acpi_device_fix_up_power_extended); 399 399 400 + /** 401 + * acpi_device_fix_up_power_children - Force a device's children into D0. 402 + * @adev: Parent device object whose children's power state is to be fixed up. 403 + * 404 + * Call acpi_device_fix_up_power() for @adev's children so long as they 405 + * are reported as present and enabled. 406 + */ 407 + void acpi_device_fix_up_power_children(struct acpi_device *adev) 408 + { 409 + acpi_dev_for_each_child(adev, fix_up_power_if_applicable, NULL); 410 + } 411 + EXPORT_SYMBOL_GPL(acpi_device_fix_up_power_children); 412 + 400 413 int acpi_device_update_power(struct acpi_device *device, int *state_p) 401 414 { 402 415 int state;
+1 -1
drivers/acpi/processor_idle.c
··· 592 592 while (1) { 593 593 594 594 if (cx->entry_method == ACPI_CSTATE_HALT) 595 - safe_halt(); 595 + raw_safe_halt(); 596 596 else if (cx->entry_method == ACPI_CSTATE_SYSTEMIO) { 597 597 io_idle(cx->address); 598 598 } else
+1
include/acpi/acpi_bus.h
··· 542 542 int acpi_bus_init_power(struct acpi_device *device); 543 543 int acpi_device_fix_up_power(struct acpi_device *device); 544 544 void acpi_device_fix_up_power_extended(struct acpi_device *adev); 545 + void acpi_device_fix_up_power_children(struct acpi_device *adev); 545 546 int acpi_bus_update_power(acpi_handle handle, int *state_p); 546 547 int acpi_device_update_power(struct acpi_device *device, int *state_p); 547 548 bool acpi_bus_power_manageable(acpi_handle handle);