09 Nov, 2018
1 commit
-
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_DISTANCEThis 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.htmlCc: stable@vger.kernel.org # 4.7
Signed-off-by: John Garry
Acked-by: Will Deacon
Signed-off-by: Rob Herring
29 Sep, 2018
1 commit
-
Use the for_each_of_cpu_node iterator to iterate over cpu nodes. This
has the side effect of defaulting to iterating using "cpu" node names in
preference to the deprecated (for FDT) device_type == "cpu".Cc: Frank Rowand
Cc: devicetree@vger.kernel.org
Reviewed-by: Geert Uytterhoeven
Signed-off-by: Rob Herring
08 Sep, 2018
1 commit
-
In preparation to remove the node name pointer from struct device_node,
convert printf users to use the %pOFn format specifier.Reviewed-by: Frank Rowand
Cc: Andrew Lunn
Cc: Florian Fainelli
Cc: netdev@vger.kernel.org
Signed-off-by: Rob Herring
18 Apr, 2018
1 commit
-
The "generic" implementation of of_node_to_nid is only used by
arm64 and only in built-in code, so remove its export. Any
device with a struct device should be able to use dev_to_node()
instead. Also, exporting of_node_to_nid doesn't actually work if
we build a module on an arch that doesn't select OF_NUMA nor provide its
own of_node_to_nid implementation.Cc: Frank Rowand
Signed-off-by: Rob Herring
08 Jan, 2018
1 commit
-
Convert remaining DT files to use SPDX-License-Identifier tags.
Cc: Benjamin Herrenschmidt
Cc: Guennadi Liakhovetski
Cc: Paul Mackerras
Cc: Pantelis Antoniou
Reviewed-by: Frank Rowand
Reviewed-by: Philippe Ombredanne
Signed-off-by: Rob Herring
19 Apr, 2017
1 commit
-
The call to of_find_node_by_path("/cpus") returns the cpus device_node
with its reference count incremented. There is no matching of_node_put()
call in of_numa_parse_cpu_nodes() which results in a leaked reference
to the "/cpus" node.This patch adds an of_node_put() to release the reference.
fixes: 298535c00a2c ("of, numa: Add NUMA of binding implementation.")
Signed-off-by: Tyrel Datwyler
Acked-by: David Daney
Cc: stable@vger.kernel.org # v4.7+
Signed-off-by: Rob Herring
15 Nov, 2016
1 commit
-
On arm64 NUMA kernels we can pass "numa=off" on the command line to
disable NUMA. A side effect of this is that kmalloc_node() calls to
non-zero nodes will crash the system with an OOPS:[ 0.000000] ITS@0x0000901000020000: allocated 2097152 Devices @10002000000 (flat, esz 8, psz 64K, shr 1)
[ 0.000000] Unable to handle kernel NULL pointer dereference at virtual address 00001680
[ 0.000000] pgd = fffffc0009470000
[ 0.000000] [00001680] *pgd=0000010ffff90003, *pud=0000010ffff90003, *pmd=0000010ffff90003, *pte=0000000000000000
[ 0.000000] Internal error: Oops: 96000006 [#1] SMP
.
.
.
[ 0.000000] [] __alloc_pages_nodemask+0xa4/0xe68
[ 0.000000] [] new_slab+0xd0/0x564
[ 0.000000] [] ___slab_alloc+0x2e4/0x514
[ 0.000000] [] __slab_alloc+0x48/0x58
[ 0.000000] [] __kmalloc_node+0xd0/0x2dc
[ 0.000000] [] __irq_domain_add+0x7c/0x164
[ 0.000000] [] its_probe+0x784/0x81c
[ 0.000000] [] its_init+0x48/0x1b0
[ 0.000000] [] gic_init_bases+0x228/0x360
[ 0.000000] [] gic_of_init+0x148/0x1cc
[ 0.000000] [] of_irq_init+0x184/0x298
[ 0.000000] [] irqchip_init+0x14/0x38
[ 0.000000] [] init_IRQ+0xc/0x30
[ 0.000000] [] start_kernel+0x240/0x3b8
[ 0.000000] [] __primary_switched+0x30/0x6c
[ 0.000000] Code: 912ec2a0 b9403809 0a0902fb 37b007db (f9400300)
.
.
.This is caused by code like this in kernel/irq/irqdomain.c
domain = kzalloc_node(sizeof(*domain) + (sizeof(unsigned int) * size),
GFP_KERNEL, of_node_to_nid(of_node));When NUMA is disabled, the concept of a node is really undefined, so
of_node_to_nid() should unconditionally return NUMA_NO_NODE.Fix by returning NUMA_NO_NODE when the nid is not in the set of
possible nodes.Reported-by: Gilbert Netzer
Signed-off-by: David Daney
Cc: stable@vger.kernel.org # 4.7+
Signed-off-by: Rob Herring
09 Sep, 2016
6 commits
-
Use pr_fmt to prefix kernel output.
Signed-off-by: Kefeng Wang
Acked-by: Rob Herring
Signed-off-by: Will Deacon -
Use of_get_next_parent() instead of open-code.
Signed-off-by: Kefeng Wang
Acked-by: Rob Herring
Signed-off-by: Will Deacon -
This warning has been printed in of_numa_parse_cpu_nodes before.
Signed-off-by: Zhen Lei
Acked-by: Rob Herring
Signed-off-by: Will Deacon -
If the numa-id which was configured in memory@ devicetree node is greater
than MAX_NUMNODES, we should report a warning. We have done this for cpus
and distance-map dt nodes, this patch help them to be consistent.Acked-by: Rob Herring
Signed-off-by: Zhen Lei
Signed-off-by: Will Deacon -
For a normal memory@ devicetree node, its reg property can contains more
memory blocks.Because we don't known how many memory blocks maybe contained, so we try
from index=0, increase 1 until error returned(the end).Signed-off-by: Zhen Lei
Acked-by: Rob Herring
Signed-off-by: Will Deacon -
This information will be printed in the subfunction numa_add_memblk.
They are not the same, but very similar.Signed-off-by: Zhen Lei
Acked-by: Rob Herring
Signed-off-by: Will Deacon
30 May, 2016
1 commit
-
Rework numa_add_memblk() to update the parameter "u64 size" to "u64
end", this will make it consistent with x86 and simplifies the arm64
ACPI NUMA code to be added later.Signed-off-by: Hanjun Guo
Signed-off-by: Robert Richter
Signed-off-by: David Daney
Acked-by: Catalin Marinas
Signed-off-by: Rafael J. Wysocki
16 Apr, 2016
1 commit
-
Add device tree parsing for NUMA topology using device
"numa-node-id" property in distance-map and cpu nodes.This is a complete rewrite of a previous patch by:
Ganapatrao KulkarniSigned-off-by: David Daney
Acked-by: Rob Herring
Signed-off-by: Will Deacon