Merge back ACPI processor driver changes for 6.19

This commit is contained in:
Rafael J. Wysocki 2025-11-28 12:59:01 +01:00
commit 9fac2a114b
2 changed files with 17 additions and 27 deletions

View File

@ -54,7 +54,7 @@ static int map_x2apic_id(struct acpi_subtable_header *entry,
if (!(apic->lapic_flags & ACPI_MADT_ENABLED)) if (!(apic->lapic_flags & ACPI_MADT_ENABLED))
return -ENODEV; return -ENODEV;
if (device_declaration && (apic->uid == acpi_id)) { if (apic->uid == acpi_id && (device_declaration || acpi_id < 255)) {
*apic_id = apic->local_apic_id; *apic_id = apic->local_apic_id;
return 0; return 0;
} }

View File

@ -732,18 +732,16 @@ static int __cpuidle acpi_idle_enter_s2idle(struct cpuidle_device *dev,
return 0; return 0;
} }
static int acpi_processor_setup_cpuidle_cx(struct acpi_processor *pr, static void acpi_processor_setup_cpuidle_cx(struct acpi_processor *pr,
struct cpuidle_device *dev) struct cpuidle_device *dev)
{ {
int i, count = ACPI_IDLE_STATE_START; int i, count = ACPI_IDLE_STATE_START;
struct acpi_processor_cx *cx; struct acpi_processor_cx *cx;
struct cpuidle_state *state;
if (max_cstate == 0) if (max_cstate == 0)
max_cstate = 1; max_cstate = 1;
for (i = 1; i < ACPI_PROCESSOR_MAX_POWER && i <= max_cstate; i++) { for (i = 1; i < ACPI_PROCESSOR_MAX_POWER && i <= max_cstate; i++) {
state = &acpi_idle_driver.states[count];
cx = &pr->power.states[i]; cx = &pr->power.states[i];
if (!cx->valid) if (!cx->valid)
@ -751,27 +749,13 @@ static int acpi_processor_setup_cpuidle_cx(struct acpi_processor *pr,
per_cpu(acpi_cstate[count], dev->cpu) = cx; per_cpu(acpi_cstate[count], dev->cpu) = cx;
if (lapic_timer_needs_broadcast(pr, cx))
state->flags |= CPUIDLE_FLAG_TIMER_STOP;
if (cx->type == ACPI_STATE_C3) {
state->flags |= CPUIDLE_FLAG_TLB_FLUSHED;
if (pr->flags.bm_check)
state->flags |= CPUIDLE_FLAG_RCU_IDLE;
}
count++; count++;
if (count == CPUIDLE_STATE_MAX) if (count == CPUIDLE_STATE_MAX)
break; break;
} }
if (!count)
return -EINVAL;
return 0;
} }
static int acpi_processor_setup_cstates(struct acpi_processor *pr) static void acpi_processor_setup_cstates(struct acpi_processor *pr)
{ {
int i, count; int i, count;
struct acpi_processor_cx *cx; struct acpi_processor_cx *cx;
@ -818,17 +802,21 @@ static int acpi_processor_setup_cstates(struct acpi_processor *pr)
if (cx->type != ACPI_STATE_C1 && !acpi_idle_fallback_to_c1(pr)) if (cx->type != ACPI_STATE_C1 && !acpi_idle_fallback_to_c1(pr))
state->enter_s2idle = acpi_idle_enter_s2idle; state->enter_s2idle = acpi_idle_enter_s2idle;
if (lapic_timer_needs_broadcast(pr, cx))
state->flags |= CPUIDLE_FLAG_TIMER_STOP;
if (cx->type == ACPI_STATE_C3) {
state->flags |= CPUIDLE_FLAG_TLB_FLUSHED;
if (pr->flags.bm_check)
state->flags |= CPUIDLE_FLAG_RCU_IDLE;
}
count++; count++;
if (count == CPUIDLE_STATE_MAX) if (count == CPUIDLE_STATE_MAX)
break; break;
} }
drv->state_count = count; drv->state_count = count;
if (!count)
return -EINVAL;
return 0;
} }
static inline void acpi_processor_cstate_first_run_checks(void) static inline void acpi_processor_cstate_first_run_checks(void)
@ -1243,7 +1231,8 @@ static int acpi_processor_setup_cpuidle_states(struct acpi_processor *pr)
if (pr->flags.has_lpi) if (pr->flags.has_lpi)
return acpi_processor_setup_lpi_states(pr); return acpi_processor_setup_lpi_states(pr);
return acpi_processor_setup_cstates(pr); acpi_processor_setup_cstates(pr);
return 0;
} }
/** /**
@ -1263,7 +1252,8 @@ static int acpi_processor_setup_cpuidle_dev(struct acpi_processor *pr,
if (pr->flags.has_lpi) if (pr->flags.has_lpi)
return acpi_processor_ffh_lpi_probe(pr->id); return acpi_processor_ffh_lpi_probe(pr->id);
return acpi_processor_setup_cpuidle_cx(pr, dev); acpi_processor_setup_cpuidle_cx(pr, dev);
return 0;
} }
static int acpi_processor_get_power_info(struct acpi_processor *pr) static int acpi_processor_get_power_info(struct acpi_processor *pr)