Message ID | 20240609210908.4470-1-W_Armin@gmx.de (mailing list archive) |
---|---|
State | Mainlined, archived |
Headers | show |
Series | ACPI: acpi_pad: Still evaluate _OST when _PUR evaluation fails | expand |
On Sun, Jun 9, 2024 at 11:09 PM Armin Wolf <W_Armin@gmx.de> 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@gmx.de> > --- > 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!
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); }
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@gmx.de> --- drivers/acpi/acpi_pad.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) -- 2.39.2