Skip to content

Commit 1bcc689

Browse files
committed
Merge tag 'acpi-6.7-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
Pull ACPI fixes from Rafael Wysocki: "These add an ACPI IRQ override quirk for ASUS ExpertBook B1402CVA and fix an ACPI processor idle issue leading to triple-faults in Xen HVM guests and an ACPI backlight driver issue that causes GPUs to misbehave while their children power is being fixed up. Specifics: - 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) - Add an ACPI IRQ override quirk for ASUS ExpertBook B1402CVA (Hans de Goede)" * tag 'acpi-6.7-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: ACPI: resource: Skip IRQ override on ASUS ExpertBook B1402CVA ACPI: video: Use acpi_device_fix_up_power_children() ACPI: PM: Add acpi_device_fix_up_power_children() function ACPI: processor_idle: use raw_safe_halt() in acpi_idle_play_dead()
2 parents b345fd5 + e374706 commit 1bcc689

File tree

5 files changed

+23
-2
lines changed

5 files changed

+23
-2
lines changed

drivers/acpi/acpi_video.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2031,7 +2031,7 @@ static int acpi_video_bus_add(struct acpi_device *device)
20312031
* HP ZBook Fury 16 G10 requires ACPI video's child devices have _PS0
20322032
* evaluated to have functional panel brightness control.
20332033
*/
2034-
acpi_device_fix_up_power_extended(device);
2034+
acpi_device_fix_up_power_children(device);
20352035

20362036
pr_info("%s [%s] (multi-head: %s rom: %s post: %s)\n",
20372037
ACPI_VIDEO_DEVICE_NAME, acpi_device_bid(device),

drivers/acpi/device_pm.c

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -397,6 +397,19 @@ void acpi_device_fix_up_power_extended(struct acpi_device *adev)
397397
}
398398
EXPORT_SYMBOL_GPL(acpi_device_fix_up_power_extended);
399399

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+
400413
int acpi_device_update_power(struct acpi_device *device, int *state_p)
401414
{
402415
int state;

drivers/acpi/processor_idle.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -592,7 +592,7 @@ static int acpi_idle_play_dead(struct cpuidle_device *dev, int index)
592592
while (1) {
593593

594594
if (cx->entry_method == ACPI_CSTATE_HALT)
595-
safe_halt();
595+
raw_safe_halt();
596596
else if (cx->entry_method == ACPI_CSTATE_SYSTEMIO) {
597597
io_idle(cx->address);
598598
} else

drivers/acpi/resource.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -447,6 +447,13 @@ static const struct dmi_system_id irq1_level_low_skip_override[] = {
447447
DMI_MATCH(DMI_BOARD_NAME, "B1402CBA"),
448448
},
449449
},
450+
{
451+
/* Asus ExpertBook B1402CVA */
452+
.matches = {
453+
DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
454+
DMI_MATCH(DMI_BOARD_NAME, "B1402CVA"),
455+
},
456+
},
450457
{
451458
/* Asus ExpertBook B1502CBA */
452459
.matches = {

include/acpi/acpi_bus.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -542,6 +542,7 @@ int acpi_device_set_power(struct acpi_device *device, int state);
542542
int acpi_bus_init_power(struct acpi_device *device);
543543
int acpi_device_fix_up_power(struct acpi_device *device);
544544
void acpi_device_fix_up_power_extended(struct acpi_device *adev);
545+
void acpi_device_fix_up_power_children(struct acpi_device *adev);
545546
int acpi_bus_update_power(acpi_handle handle, int *state_p);
546547
int acpi_device_update_power(struct acpi_device *device, int *state_p);
547548
bool acpi_bus_power_manageable(acpi_handle handle);

0 commit comments

Comments
 (0)