Re: [PATCH 4.19 025/361] ACPICA: AML interpreter: add region addresses in global list during initialization

From: Holger HoffstÃtte
Date: Mon Nov 12 2018 - 13:31:03 EST


On 11/11/18 11:16 PM, Greg Kroah-Hartman wrote:
4.19-stable review patch. If anyone has any objections, please let me know.

As probably expected this patch causes problems. In my case one server
can no longer load the nct6775 hwmon module, which means the fan cannot be
monitored, and therefore my monitoring system promptly starts spamming me with
alerts that my fan has failed - which is of course not true.

--snip--
Nov 12 18:08:56 tux kernel: nct6775: Found NCT6776D/F or compatible chip at 0x2e:0x290
Nov 12 18:08:56 tux kernel: ACPI Warning: SystemIO range 0x0000000000000295-0x0000000000000296 conflicts with OpRegion 0x0000000000000290-0x
Nov 12 18:08:56 tux kernel: ACPI: If an ACPI driver is available for this device, you should use it instead of the native driver
--snip--

This is certainly caused by my old BIOS and its broken ACPI implementation,
however since it's working perfectly fine otherwise I see no reason to replace
it. That being said, I must be able to monitor my fan, so for now reverting
the patch immediately "fixed" the problem for me - the fan entries appeared
in sysfs again after successfully loading the module.

Idea, workarounds or patches welcome.

------------------

From: Erik Schmauss <erik.schmauss@xxxxxxxxx>

commit 4abb951b73ff0a8a979113ef185651aa3c8da19b upstream.

The table load process omitted adding the operation region address
range to the global list. This omission is problematic because the OS
queries the global list to check for address range conflicts before
deciding which drivers to load. This commit may result in warning
messages that look like the following:

[ 7.871761] ACPI Warning: system_IO range 0x00000428-0x0000042F conflicts with op_region 0x00000400-0x0000047F (\PMIO) (20180531/utaddress-213)
[ 7.871769] ACPI: If an ACPI driver is available for this device, you should use it instead of the native driver

However, these messages do not signify regressions. It is a result of
properly adding address ranges within the global address list.

Link: https://bugzilla.kernel.org/show_bug.cgi?id=200011
Tested-by: Jean-Marc Lenoir <archlinux@xxxxxxxxxxx>
Signed-off-by: Erik Schmauss <erik.schmauss@xxxxxxxxx>
Cc: All applicable <stable@xxxxxxxxxxxxxxx>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx>
Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>

---
drivers/acpi/acpica/dsopcode.c | 4 ++++
1 file changed, 4 insertions(+)

--- a/drivers/acpi/acpica/dsopcode.c
+++ b/drivers/acpi/acpica/dsopcode.c
@@ -417,6 +417,10 @@ acpi_ds_eval_region_operands(struct acpi
ACPI_FORMAT_UINT64(obj_desc->region.address),
obj_desc->region.length));
+ status = acpi_ut_add_address_range(obj_desc->region.space_id,
+ obj_desc->region.address,
+ obj_desc->region.length, node);
+
/* Now the address and length are valid for this opregion */
obj_desc->region.flags |= AOPOBJ_DATA_VALID;