On Sat, Jul 28, 2018 at 11:05 PM, Erik Schmauss <erik.schmauss@xxxxxxxxx> wrote: > Previous change in the AML parser code blindly set all non-successful > dispatcher statuses to AE_OK. This approach is incorrect because > successful control method invocations from module-level return > AE_CTRL_TRANSFER. Overwriting AE_OK to this status causes the AML > parser to think that there was no return value from the control > method invocation. > > fixes: 73c2a01c52b6 (ACPICA: AML Parser: ignore dispatcher error status during table load) > > Reported-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> > Tested-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> > Tested-by: Oleksandr Natalenko <oleksandr@xxxxxxxxxxxxxx> > Signed-off-by: Erik Schmauss <erik.schmauss@xxxxxxxxx> > --- > drivers/acpi/acpica/psloop.c | 19 ++++++++++++------- > 1 file changed, 12 insertions(+), 7 deletions(-) > > diff --git a/drivers/acpi/acpica/psloop.c b/drivers/acpi/acpica/psloop.c > index ee840be150b5..44f35ab3347d 100644 > --- a/drivers/acpi/acpica/psloop.c > +++ b/drivers/acpi/acpica/psloop.c > @@ -709,15 +709,20 @@ acpi_status acpi_ps_parse_loop(struct acpi_walk_state *walk_state) > } else > if ((walk_state-> > parse_flags & ACPI_PARSE_MODULE_LEVEL) > + && status != AE_CTRL_TRANSFER > && ACPI_FAILURE(status)) { > /* > - * ACPI_PARSE_MODULE_LEVEL means that we are loading a table by > - * executing it as a control method. However, if we encounter > - * an error while loading the table, we need to keep trying to > - * load the table rather than aborting the table load. Set the > - * status to AE_OK to proceed with the table load. If we get a > - * failure at this point, it means that the dispatcher got an > - * error while processing Op (most likely an AML operand error. > + * ACPI_PARSE_MODULE_LEVEL flag means that we are currently > + * loading a table by executing it as a control method. > + * However, if we encounter an error while loading the table, > + * we need to keep trying to load the table rather than > + * aborting the table load (setting the status to AE_OK > + * continues the table load). If we get a failure at this > + * point, it means that the dispatcher got an error while > + * processing Op (most likely an AML operand error) or a > + * control method was called from module level and the > + * dispatcher returned AE_CTRL_TRANSFER. In the latter case, > + * leave the status alone, there's nothing wrong with it. > */ > status = AE_OK; > } > -- Applied, thanks! -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html