RE: [PATCH] ACPICA / Interpreter: Fix a regression triggered because of wrong Linux ECDT support

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

 



Hi, Greg

> From: Greg KH [mailto:greg@xxxxxxxxx]
> Subject: Re: [PATCH] ACPICA / Interpreter: Fix a regression triggered because
> of wrong Linux ECDT support
> 
> On Wed, Apr 20, 2016 at 10:39:56AM +0800, Lv Zheng wrote:
> > 4.5-stable review patch. If anyone has any objects, please let me know.
> 
> Huh?  I don't understand this email...
> 
> 
[Lv Zheng] 

I received an error notice from you on 4/11/2016:
FAILED: patch "[PATCH] ACPICA / Interpreter: Fix a regression triggered because of ACPICA: Events: Enhance acpi_ev_execute_reg_method() to" failed to apply to 4.5-stable tree
And promised you to perform the back porting.
After having it tested by LKP for several days, I sent it out to the stable mailing list.

I'm sorry I didn't send this email to you directly and didn't send it to the original mail thread for you to reference.
The original thread is:
Message-ID: <14603111697259@xxxxxxxxx>
Subject: FAILED: patch "[PATCH] ACPICA / Interpreter: Fix a regression triggered because of
 ACPICA: Events: Enhance acpi_ev_execute_reg_method() to" failed to apply to 4.5-stable tree

Hope you can help to have this shipped in 4.5-stable.

Thanks and best regards
-Lv


> 
> >
> > ---------------
> >
> > From: Lv Zheng <lv.zheng@xxxxxxxxx>
> >
> > commit 5508df89756f8378024828e185724a9bd2348985 upstream.
> >
> > It is reported that the following commit triggers regressions:
> >  Linux commit: efaed9be998b5ae0afb7458e057e5f4402b43fa0
> >  ACPICA commit: 31178590dde82368fdb0f6b0e466b6c0add96c57
> >  Subject: ACPICA: Events: Enhance acpi_ev_execute_reg_method() to
> >           ensure no _REG evaluations can happen during OS early boot
> >           stages
> >
> > This is because that the ECDT support is not corrected in Linux, and Linux
> > requires to execute _REG for ECDT (though this sounds so wrong), we need to
> > ensure acpi_gbl_reg_methods_enabled is set before ECDT probing in order
> > for _REG to be executed. Since we have to move
> > "acpi_gbl_reg_methods_enabled = TRUE" to the initialization step
> > happening before ECDT probing, acpi_load_tables() is the best candidate for
> > now. Thus this patch fixes the regression by doing so.
> >
> > But if the ECDT support is fixed, Linux will not execute _REG for ECDT, and
> > ECDT probing will happen before acpi_load_tables(). At that time, we still
> > want to ensure acpi_gbl_reg_methods_enabled is set after executing
> > acpi_ns_initialize_objects() (under the condition of
> > acpi_gbl_group_module_level_code = FALSE), this patch also moves
> > acpi_ns_initialize_objects() to acpi_load_tables() accordingly.
> >
> > Since acpi_ns_initialize_objects() doesn't seem to be skippable, this
> > patch also removes ACPI_NO_OBJECT_INIT for the one invoked in
> > acpi_load_tables(). Reported by Chris Bainbridge, Fixed by Lv Zheng.
> >
> > Fixes: efaed9be998b (ACPICA: Events: Enhance
> acpi_ev_execute_reg_method() to ensure no _REG evaluations can happen
> during OS early boot stages)
> > Reported-and-tested-by: Chris Bainbridge <chris.bainbridge@xxxxxxxxx>
> > Signed-off-by: Lv Zheng <lv.zheng@xxxxxxxxx>
> > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx>
> > ---
> >  drivers/acpi/acpica/nsinit.c   |    2 ++
> >  drivers/acpi/acpica/tbxfload.c |   14 ++++++++++++++
> >  drivers/acpi/acpica/utxfinit.c |   25 +++++++++++--------------
> >  3 files changed, 27 insertions(+), 14 deletions(-)
> >
> > diff --git a/drivers/acpi/acpica/nsinit.c b/drivers/acpi/acpica/nsinit.c
> > index bd75d46..ddb436f 100644
> > --- a/drivers/acpi/acpica/nsinit.c
> > +++ b/drivers/acpi/acpica/nsinit.c
> > @@ -83,6 +83,8 @@ acpi_status acpi_ns_initialize_objects(void)
> >
> >  	ACPI_FUNCTION_TRACE(ns_initialize_objects);
> >
> > +	ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
> > +			  "[Init] Completing Initialization of ACPI Objects\n"));
> >  	ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
> >  			  "**** Starting initialization of namespace objects
> ****\n"));
> >  	ACPI_DEBUG_PRINT_RAW((ACPI_DB_INIT,
> > diff --git a/drivers/acpi/acpica/tbxfload.c b/drivers/acpi/acpica/tbxfload.c
> > index 278666e..c37d479 100644
> > --- a/drivers/acpi/acpica/tbxfload.c
> > +++ b/drivers/acpi/acpica/tbxfload.c
> > @@ -83,6 +83,20 @@ acpi_status __init acpi_load_tables(void)
> >  				"While loading namespace from ACPI tables"));
> >  	}
> >
> > +	if (!acpi_gbl_group_module_level_code) {
> > +		/*
> > +		 * Initialize the objects that remain uninitialized. This
> > +		 * runs the executable AML that may be part of the
> > +		 * declaration of these objects:
> > +		 * operation_regions, buffer_fields, Buffers, and Packages.
> > +		 */
> > +		status = acpi_ns_initialize_objects();
> > +		if (ACPI_FAILURE(status)) {
> > +			return_ACPI_STATUS(status);
> > +		}
> > +	}
> > +
> > +	acpi_gbl_reg_methods_enabled = TRUE;
> >  	return_ACPI_STATUS(status);
> >  }
> >
> > diff --git a/drivers/acpi/acpica/utxfinit.c b/drivers/acpi/acpica/utxfinit.c
> > index 721b87c..638fbd4 100644
> > --- a/drivers/acpi/acpica/utxfinit.c
> > +++ b/drivers/acpi/acpica/utxfinit.c
> > @@ -267,7 +267,6 @@ acpi_status __init acpi_initialize_objects(u32 flags)
> >  	 * initialized, even if they contain executable AML (see the call to
> >  	 * acpi_ns_initialize_objects below).
> >  	 */
> > -	acpi_gbl_reg_methods_enabled = TRUE;
> >  	if (!(flags & ACPI_NO_ADDRESS_SPACE_INIT)) {
> >  		ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
> >  				  "[Init] Executing _REG OpRegion
> methods\n"));
> > @@ -299,20 +298,18 @@ acpi_status __init acpi_initialize_objects(u32 flags)
> >  	 */
> >  	if (acpi_gbl_group_module_level_code) {
> >  		acpi_ns_exec_module_code_list();
> > -	}
> >
> > -	/*
> > -	 * Initialize the objects that remain uninitialized. This runs the
> > -	 * executable AML that may be part of the declaration of these objects:
> > -	 * operation_regions, buffer_fields, Buffers, and Packages.
> > -	 */
> > -	if (!(flags & ACPI_NO_OBJECT_INIT)) {
> > -		ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
> > -				  "[Init] Completing Initialization of ACPI
> Objects\n"));
> > -
> > -		status = acpi_ns_initialize_objects();
> > -		if (ACPI_FAILURE(status)) {
> > -			return_ACPI_STATUS(status);
> > +		/*
> > +		 * Initialize the objects that remain uninitialized. This
> > +		 * runs the executable AML that may be part of the
> > +		 * declaration of these objects:
> > +		 * operation_regions, buffer_fields, Buffers, and Packages.
> > +		 */
> > +		if (!(flags & ACPI_NO_OBJECT_INIT)) {
> > +			status = acpi_ns_initialize_objects();
> > +			if (ACPI_FAILURE(status)) {
> > +				return_ACPI_STATUS(status);
> > +			}
> >  		}
> >  	}
> >
> > --
> > 1.7.10
> >
> > --
> > To unsubscribe from this list: send the line "unsubscribe stable" in
> > the body of a message to majordomo@xxxxxxxxxxxxxxx
> > More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe stable" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



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