mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	ACPI: configfs: Resolve objects on host-directed table loads
If an ACPI SSDT overlay is loaded after built-in tables have been loaded e.g. via configfs or efivar_ssdt_load() it is necessary to rewalk the namespace to resolve references. Without this, relative and absolute paths like ^PCI0.SBUS or \_SB.PCI0.SBUS are not resolved correctly. Make configfs loads use the same method as efivar_ssdt_load(). Signed-off-by: Nikolaus Voss <nikolaus.voss@loewensteinmedical.de> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
		
							parent
							
								
									c78fea61f0
								
							
						
					
					
						commit
						d06c47e3dd
					
				
					 2 changed files with 12 additions and 5 deletions
				
			
		| 
						 | 
					@ -56,11 +56,7 @@ static ssize_t acpi_table_aml_write(struct config_item *cfg,
 | 
				
			||||||
	if (!table->header)
 | 
						if (!table->header)
 | 
				
			||||||
		return -ENOMEM;
 | 
							return -ENOMEM;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ACPI_INFO(("Host-directed Dynamic ACPI Table Load:"));
 | 
						ret = acpi_load_table(table->header);
 | 
				
			||||||
	ret = acpi_tb_install_and_load_table(
 | 
					 | 
				
			||||||
			ACPI_PTR_TO_PHYSADDR(table->header),
 | 
					 | 
				
			||||||
			ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL, FALSE,
 | 
					 | 
				
			||||||
			&table->index);
 | 
					 | 
				
			||||||
	if (ret) {
 | 
						if (ret) {
 | 
				
			||||||
		kfree(table->header);
 | 
							kfree(table->header);
 | 
				
			||||||
		table->header = NULL;
 | 
							table->header = NULL;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -297,6 +297,17 @@ acpi_status acpi_load_table(struct acpi_table_header *table)
 | 
				
			||||||
	status = acpi_tb_install_and_load_table(ACPI_PTR_TO_PHYSADDR(table),
 | 
						status = acpi_tb_install_and_load_table(ACPI_PTR_TO_PHYSADDR(table),
 | 
				
			||||||
						ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL,
 | 
											ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL,
 | 
				
			||||||
						FALSE, &table_index);
 | 
											FALSE, &table_index);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (ACPI_SUCCESS(status)) {
 | 
				
			||||||
 | 
							/* Complete the initialization/resolution of package objects */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							status = acpi_ns_walk_namespace(ACPI_TYPE_PACKAGE,
 | 
				
			||||||
 | 
											ACPI_ROOT_OBJECT,
 | 
				
			||||||
 | 
											ACPI_UINT32_MAX, 0,
 | 
				
			||||||
 | 
											acpi_ns_init_one_package,
 | 
				
			||||||
 | 
											NULL, NULL, NULL);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return_ACPI_STATUS(status);
 | 
						return_ACPI_STATUS(status);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue