On Sun, Jun 9, 2024 at 11:09 PM Armin Wolf <W_Armin@xxxxxx> wrote: > > The ACPI specification says that if no action was performed when > processing the _PUR object, _OST should still be evaluated, albeit > with a different status code. > > Evaluate _OST even when evaluating _PUR fails, to signal the firmware > that no action was performed. > > Compile-tested only. > > Signed-off-by: Armin Wolf <W_Armin@xxxxxx> > --- > drivers/acpi/acpi_pad.c | 19 +++++++++++++++---- > 1 file changed, 15 insertions(+), 4 deletions(-) > > diff --git a/drivers/acpi/acpi_pad.c b/drivers/acpi/acpi_pad.c > index bd1ad07f0290..350d3a892889 100644 > --- a/drivers/acpi/acpi_pad.c > +++ b/drivers/acpi/acpi_pad.c > @@ -25,6 +25,10 @@ > #define ACPI_PROCESSOR_AGGREGATOR_CLASS "acpi_pad" > #define ACPI_PROCESSOR_AGGREGATOR_DEVICE_NAME "Processor Aggregator" > #define ACPI_PROCESSOR_AGGREGATOR_NOTIFY 0x80 > + > +#define ACPI_PROCESSOR_AGGREGATOR_STATUS_SUCCESS 0 > +#define ACPI_PROCESSOR_AGGREGATOR_STATUS_NO_ACTION 1 > + > static DEFINE_MUTEX(isolated_cpus_lock); > static DEFINE_MUTEX(round_robin_lock); > > @@ -382,16 +386,23 @@ static void acpi_pad_handle_notify(acpi_handle handle) > .length = 4, > .pointer = (void *)&idle_cpus, > }; > + u32 status; > > mutex_lock(&isolated_cpus_lock); > num_cpus = acpi_pad_pur(handle); > if (num_cpus < 0) { > - mutex_unlock(&isolated_cpus_lock); > - return; > + /* The ACPI specification says that if no action was performed when > + * processing the _PUR object, _OST should still be evaluated, albeit > + * with a different status code. > + */ > + status = ACPI_PROCESSOR_AGGREGATOR_STATUS_NO_ACTION; > + } else { > + status = ACPI_PROCESSOR_AGGREGATOR_STATUS_SUCCESS; > + acpi_pad_idle_cpus(num_cpus); > } > - acpi_pad_idle_cpus(num_cpus); > + > idle_cpus = acpi_pad_idle_cpus_num(); > - acpi_evaluate_ost(handle, ACPI_PROCESSOR_AGGREGATOR_NOTIFY, 0, ¶m); > + acpi_evaluate_ost(handle, ACPI_PROCESSOR_AGGREGATOR_NOTIFY, status, ¶m); > mutex_unlock(&isolated_cpus_lock); > } > > -- Applied as 6.11 material, thanks!