Re: [PATCH v3] irqchip, gicv3-its, numa: Workaround for Cavium thunderx erratum 23144

From: Robert Richter
Date: Wed Feb 17 2016 - 07:16:26 EST


On 16.02.16 18:41:22, Ganapatrao Kulkarni wrote:
> The erratum fixes the hang of ITS SYNC command by avoiding inter node
> io and collections/cpu mapping on thunderx dual-socket platform.
>
> This is based on NUMA v10 series.
> https://lkml.org/lkml/2016/2/2/134
>
> v3:
> updatated as per Marc Zyngier's review comments.
> http://www.spinics.net/lists/arm-kernel/msg443462.html
>
> v2:
> updatated as per Marc Zyngier's review comments.
>
> Signed-off-by: Ganapatrao Kulkarni <gkulkarni@xxxxxxxxxxxxxxxxxx>
>
> ---
> arch/arm64/Kconfig | 9 ++++++++
> drivers/irqchip/irq-gic-v3-its.c | 46 ++++++++++++++++++++++++++++++++++++++--
> 2 files changed, 53 insertions(+), 2 deletions(-)

> @@ -1086,6 +1098,14 @@ static void its_cpu_init_collection(void)
> list_for_each_entry(its, &its_nodes, entry) {
> u64 target;
>
> + /* avoid cross node collections and its mapping */
> + if (its->flags & ITS_FLAGS_WORKAROUND_CAVIUM_23144) {
> + struct device_node *cpu_node;
> + cpu_node = of_get_cpu_node(cpu, NULL);
> + if (its->numa_node != of_node_to_nid(cpu_node))
> + continue;

I think you may not continue in case of its->numa_node ==
NUMA_NO_NODE. This is the case if no numa node info is provided and
thus ITS is systemwide. So the check needs to be extended accordingly.

-Robert

> + }
> +
> /*
> * We now have to bind each collection to its target
> * redistributor.