linux/drivers/of
John Garry 89c38422e0 of, numa: Validate some distance map rules
Currently the NUMA distance map parsing does not validate the distance
table for the distance-matrix rules 1-2 in [1].

However the arch NUMA code may enforce some of these rules, but not all.
Such is the case for the arm64 port, which does not enforce the rule that
the distance between separates nodes cannot equal LOCAL_DISTANCE.

The patch adds the following rules validation:
- distance of node to self equals LOCAL_DISTANCE
- distance of separate nodes > LOCAL_DISTANCE

This change avoids a yet-unresolved crash reported in [2].

A note on dealing with symmetrical distances between nodes:

Validating symmetrical distances between nodes is difficult. If it were
mandated in the bindings that every distance must be recorded in the
table, then it would be easy. However, it isn't.

In addition to this, it is also possible to record [b, a] distance only
(and not [a, b]). So, when processing the table for [b, a], we cannot
assert that current distance of [a, b] != [b, a] as invalid, as [a, b]
distance may not be present in the table and current distance would be
default at REMOTE_DISTANCE.

As such, we maintain the policy that we overwrite distance [a, b] = [b, a]
for b > a. This policy is different to kernel ACPI SLIT validation, which
allows non-symmetrical distances (ACPI spec SLIT rules allow it). However,
the distance debug message is dropped as it may be misleading (for a distance
which is later overwritten).

Some final notes on semantics:

- It is implied that it is the responsibility of the arch NUMA code to
  reset the NUMA distance map for an error in distance map parsing.

- It is the responsibility of the FW NUMA topology parsing (whether OF or
  ACPI) to enforce NUMA distance rules, and not arch NUMA code.

[1] Documents/devicetree/bindings/numa.txt
[2] https://www.spinics.net/lists/arm-kernel/msg683304.html

Cc: stable@vger.kernel.org # 4.7
Signed-off-by: John Garry <john.garry@huawei.com>
Acked-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Rob Herring <robh@kernel.org>
2018-11-08 12:44:34 -06:00
..
unittest-data of/unittest: Fix I2C bus unit-address error 2018-09-19 15:10:06 -07:00
address.c drivers/of: Make of_io_request_and_map() "name" argument optional 2018-07-10 08:08:57 -06:00
base.c of: Fix cpu node iterator to not ignore disabled cpu nodes 2018-11-01 16:16:54 -05:00
device.c of/device: Really only set bus DMA mask when appropriate 2018-11-08 12:44:34 -06:00
dynamic.c of: overlay: do not include path in full_name of added nodes 2018-03-05 15:38:34 -06:00
fdt_address.c of: Use SPDX license tag for DT files 2018-01-08 08:22:45 -06:00
fdt.c of/fdt: Remove PPC32 longtrail hack in memory scan 2018-08-07 12:05:54 -06:00
irq.c of: Use SPDX license tag for DT files 2018-01-08 08:22:45 -06:00
Kconfig of: change overlay apply input data from unflattened to FDT 2018-03-04 00:29:24 -08:00
kobj.c of: Use SPDX license tag for DT files 2018-01-08 08:22:45 -06:00
Makefile PCI: Move OF-related PCI functions into PCI core 2018-01-17 17:36:39 -06:00
of_mdio.c of: Convert to using %pOFn instead of device_node.name 2018-09-07 11:04:41 -05:00
of_net.c of_net: Implement of_get_nvmem_mac_address helper 2018-03-30 10:40:18 -04:00
of_numa.c of, numa: Validate some distance map rules 2018-11-08 12:44:34 -06:00
of_private.h of: make default address and size cells sizes private 2018-09-07 11:04:41 -05:00
of_reserved_mem.c drivers: remove force dma flag from buses 2018-05-03 16:25:08 +02:00
overlay.c of: Convert to using %pOFn instead of device_node.name 2018-09-07 11:04:41 -05:00
pdt.c of: Use SPDX license tag for DT files 2018-01-08 08:22:45 -06:00
platform.c of: Convert to using %pOFn instead of device_node.name 2018-09-07 11:04:41 -05:00
property.c device property: Constify device_get_match_data() 2018-02-12 10:41:11 +01:00
resolver.c of: overlay: validate offset from property fixups 2018-05-23 15:07:43 -05:00
unittest.c of: unittest: Disable interrupt node tests for old world MAC systems 2018-09-27 16:11:41 -05:00