RE: 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

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

 



Hi,

> From: gregkh@xxxxxxxxxxxxxxxxxxx [mailto:gregkh@xxxxxxxxxxxxxxxxxxx]
> 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
> 
> 
> The patch below does not apply to the 4.5-stable tree.
> If someone wants it applied there, or to any other stable or longterm
> tree, then please email the backport, including the original git commit
> id to <stable@xxxxxxxxxxxxxxx>.
[Lv Zheng] 
I can help to port it to 4.5-stable.
I'll send it to the stable mailing list later when this is done.

Thanks
-Lv

> 
> thanks,
> 
> greg k-h
> 
> ------------------ original commit in Linus's tree ------------------
> 
> From 5508df89756f8378024828e185724a9bd2348985 Mon Sep 17 00:00:00
> 2001
> From: Lv Zheng <lv.zheng@xxxxxxxxx>
> Date: Thu, 10 Mar 2016 10:54:29 +0800
> Subject: [PATCH] ACPICA / Interpreter: Fix a regression triggered because of
>  wrong Linux ECDT support
> 
> 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_namespace_initialized is set before ECDT probing in order
> for _REG to be executed. Since we have to move
> "acpi_gbl_namespace_initialized = 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_namespace_initialized 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(). And since the default region handlers should always be
> installed before loading the tables, this patch also removes useless
> acpi_gbl_group_module_level_code check accordingly. 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>
> 
> diff --git a/drivers/acpi/acpica/nsinit.c b/drivers/acpi/acpica/nsinit.c
> index f029a3da67eb..d4aa8b696ee9 100644
> --- a/drivers/acpi/acpica/nsinit.c
> +++ b/drivers/acpi/acpica/nsinit.c
> @@ -84,6 +84,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 9496b84476a4..3151968c10d1 100644
> --- a/drivers/acpi/acpica/tbxfload.c
> +++ b/drivers/acpi/acpica/tbxfload.c
> @@ -81,13 +81,11 @@ acpi_status __init acpi_load_tables(void)
>  	 * between acpi_initialize_subsystem() and acpi_load_tables() to use
>  	 * their customized default region handlers.
>  	 */
> -	if (acpi_gbl_group_module_level_code) {
> -		status = acpi_ev_install_region_handlers();
> -		if (ACPI_FAILURE(status) && status != AE_ALREADY_EXISTS) {
> -			ACPI_EXCEPTION((AE_INFO, status,
> -					"During Region initialization"));
> -			return_ACPI_STATUS(status);
> -		}
> +	status = acpi_ev_install_region_handlers();
> +	if (ACPI_FAILURE(status) && status != AE_ALREADY_EXISTS) {
> +		ACPI_EXCEPTION((AE_INFO, status,
> +				"During Region initialization"));
> +		return_ACPI_STATUS(status);
>  	}
> 
>  	/* Load the namespace from the tables */
> @@ -105,6 +103,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_namespace_initialized = TRUE;
>  	return_ACPI_STATUS(status);
>  }
> 
> diff --git a/drivers/acpi/acpica/utxfinit.c b/drivers/acpi/acpica/utxfinit.c
> index d70649d3ac60..75b5f27da267 100644
> --- a/drivers/acpi/acpica/utxfinit.c
> +++ b/drivers/acpi/acpica/utxfinit.c
> @@ -154,23 +154,6 @@ acpi_status __init acpi_enable_subsystem(u32 flags)
>  	 */
>  	acpi_gbl_early_initialization = FALSE;
> 
> -	/*
> -	 * Install the default operation region handlers. These are the
> -	 * handlers that are defined by the ACPI specification to be
> -	 * "always accessible" -- namely, system_memory, system_IO, and
> -	 * PCI_Config. This also means that no _REG methods need to be
> -	 * run for these address spaces. We need to have these handlers
> -	 * installed before any AML code can be executed, especially any
> -	 * module-level code (11/2015).
> -	 */
> -	if (!acpi_gbl_group_module_level_code) {
> -		status = acpi_ev_install_region_handlers();
> -		if (ACPI_FAILURE(status)) {
> -			ACPI_EXCEPTION((AE_INFO, status,
> -					"During Region initialization"));
> -			return_ACPI_STATUS(status);
> -		}
> -	}
>  #if (!ACPI_REDUCED_HARDWARE)
> 
>  	/* Enable ACPI mode */
> @@ -284,25 +267,21 @@ 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);
> +			}
>  		}
>  	}
> 
> -	acpi_gbl_namespace_initialized = TRUE;
> -
>  	/*
>  	 * Initialize all device/region objects in the namespace. This runs
>  	 * the device _STA and _INI methods and region _REG methods.

--
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]