RE: [PATCH 05/11] ACPICA: AML Parser: skip opcodes that open a scope upon parse failure

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




> -----Original Message-----
> From: Rafael J. Wysocki [mailto:rafael@xxxxxxxxxx]
> Sent: Sunday, August 12, 2018 2:47 AM
> To: Schmauss, Erik <erik.schmauss@xxxxxxxxx>
> Cc: ACPI Devel Maling List <linux-acpi@xxxxxxxxxxxxxxx>; Rafael J. Wysocki
> <rjw@xxxxxxxxxxxxx>
> Subject: Re: [PATCH 05/11] ACPICA: AML Parser: skip opcodes that open a scope
> upon parse failure
> 
> On Fri, Aug 10, 2018 at 11:45 PM Erik Schmauss <erik.schmauss@xxxxxxxxx>
> wrote:
> >
> > This change skips the entire length of opcodes that open a scope
> > (Device, Scope, Processor, etc) if the creation of the op fails. The
> > failure could be caused by various errors including AE_ALREADY_EXISTS
> > and AE_NOT_FOUND.
> >
> > Reported-by: Jeremy Linton <jeremy.linton@xxxxxxx>
> > Tested-by: Jeremy Linton <jeremy.linton@xxxxxxx>
> > Signed-off-by: Erik Schmauss <erik.schmauss@xxxxxxxxx>
> 
> I think that we should propagate this fix to the "stable" kernel series, at least
> 4.17.y and newer.  Do you agree?

Yes, I agree.

Hi Greg, please add this to the stable kernel

> 
> > ---
> >  drivers/acpi/acpica/psloop.c | 17 +++++++++++------
> >  1 file changed, 11 insertions(+), 6 deletions(-)
> >
> > diff --git a/drivers/acpi/acpica/psloop.c
> > b/drivers/acpi/acpica/psloop.c index 20b6142da183..358fcdd1f8a5 100644
> > --- a/drivers/acpi/acpica/psloop.c
> > +++ b/drivers/acpi/acpica/psloop.c
> > @@ -22,6 +22,7 @@
> >  #include "acdispat.h"
> >  #include "amlcode.h"
> >  #include "acconvert.h"
> > +#include "acnamesp.h"
> >
> >  #define _COMPONENT          ACPI_PARSER
> >  ACPI_MODULE_NAME("psloop")
> > @@ -527,12 +528,18 @@ acpi_status acpi_ps_parse_loop(struct
> acpi_walk_state *walk_state)
> >                                 if (ACPI_FAILURE(status)) {
> >                                         return_ACPI_STATUS(status);
> >                                 }
> > -                               if (walk_state->opcode == AML_SCOPE_OP) {
> > +                               if (acpi_ns_opens_scope
> > +                                   (acpi_ps_get_opcode_info
> > +
> > + (walk_state->opcode)->object_type)) {
> >                                         /*
> > -                                        * If the scope op fails to parse, skip the body of the
> > -                                        * scope op because the parse failure indicates that the
> > -                                        * device may not exist.
> > +                                        * If the scope/device op fails to parse, skip the body of
> > +                                        * the scope op because the parse failure indicates that
> > +                                        * the device may not exist.
> >                                          */
> > +                                       ACPI_ERROR((AE_INFO,
> > +                                                   "Skip parsing opcode %s",
> > +                                                   acpi_ps_get_opcode_name
> > +
> > + (walk_state->opcode)));
> >                                         walk_state->parser_state.aml =
> >                                             walk_state->aml + 1;
> >                                         walk_state->parser_state.aml =
> > @@ -540,8 +547,6 @@ acpi_status acpi_ps_parse_loop(struct
> acpi_walk_state *walk_state)
> >                                             (&walk_state->parser_state);
> >                                         walk_state->aml =
> >                                             walk_state->parser_state.aml;
> > -                                       ACPI_ERROR((AE_INFO,
> > -                                                   "Skipping Scope block"));
> >                                 }
> >
> >                                 continue;
> > --
> > 2.17.1
> >




[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux