* [PATCH] irqchip/gic-v3-its: Allow GIC ITS number more than MAX_NUMNODES
@ 2017-07-21 9:51 Hanjun Guo
2017-07-21 10:06 ` Hanjun Guo
0 siblings, 1 reply; 7+ messages in thread
From: Hanjun Guo @ 2017-07-21 9:51 UTC (permalink / raw)
To: Thomas Gleixner, Marc Zyngier
Cc: linux-acpi, linux-arm-kernel, linux-kernel, linuxarm, Hanjun Guo,
Ganapatrao Kulkarni, Lorenzo Pieralisi
From: Hanjun Guo <hanjun.guo@linaro.org>
When running 4.13-rc1 on top of D05, I got the boot log:
[ 0.000000] SRAT: PXM 0 -> ITS 0 -> Node 0
[ 0.000000] SRAT: PXM 0 -> ITS 1 -> Node 0
[ 0.000000] SRAT: PXM 0 -> ITS 2 -> Node 0
[ 0.000000] SRAT: PXM 1 -> ITS 3 -> Node 1
[ 0.000000] SRAT: ITS affinity exceeding max count[4]
This is wrong on D05 as we have 8 ITSes with 4 NUMA nodes.
So dynamically alloc the memory needed instead of using
its_srat_maps[MAX_NUMNODES], which count the number of
ITS entry(ies) in SRAT and alloc its_srat_maps as needed,
then build the mapping of numa node to ITS ID.
After doing this, I got what I wanted:
[ 0.000000] SRAT: PXM 0 -> ITS 0 -> Node 0
[ 0.000000] SRAT: PXM 0 -> ITS 1 -> Node 0
[ 0.000000] SRAT: PXM 0 -> ITS 2 -> Node 0
[ 0.000000] SRAT: PXM 1 -> ITS 3 -> Node 1
[ 0.000000] SRAT: PXM 2 -> ITS 4 -> Node 2
[ 0.000000] SRAT: PXM 2 -> ITS 5 -> Node 2
[ 0.000000] SRAT: PXM 2 -> ITS 6 -> Node 2
[ 0.000000] SRAT: PXM 3 -> ITS 7 -> Node 3
Fixes: dbd2b8267233 ("irqchip/gic-v3-its: Add ACPI NUMA node mapping")
Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org>
Cc: Ganapatrao Kulkarni <ganapatrao.kulkarni@cavium.com>
Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Cc: Marc Zyngier <marc.zyngier@arm.com>
---
drivers/irqchip/irq-gic-v3-its.c | 28 +++++++++++++++++++++-------
1 file changed, 21 insertions(+), 7 deletions(-)
diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c
index 3ccdf76..fb1c090 100644
--- a/drivers/irqchip/irq-gic-v3-its.c
+++ b/drivers/irqchip/irq-gic-v3-its.c
@@ -1847,7 +1847,7 @@ struct its_srat_map {
u32 its_id;
};
-static struct its_srat_map its_srat_maps[MAX_NUMNODES] __initdata;
+static struct its_srat_map *its_srat_maps __initdata;
static int its_in_srat __initdata;
static int __init acpi_get_its_numa_node(u32 its_id)
@@ -1861,6 +1861,12 @@ static int __init acpi_get_its_numa_node(u32 its_id)
return NUMA_NO_NODE;
}
+static int __init gic_acpi_match_srat_its(struct acpi_subtable_header *header,
+ const unsigned long end)
+{
+ return 0;
+}
+
static int __init gic_acpi_parse_srat_its(struct acpi_subtable_header *header,
const unsigned long end)
{
@@ -1877,12 +1883,6 @@ static int __init gic_acpi_parse_srat_its(struct acpi_subtable_header *header,
return -EINVAL;
}
- if (its_in_srat >= MAX_NUMNODES) {
- pr_err("SRAT: ITS affinity exceeding max count[%d]\n",
- MAX_NUMNODES);
- return -EINVAL;
- }
-
node = acpi_map_pxm_to_node(its_affinity->proximity_domain);
if (node == NUMA_NO_NODE || node >= MAX_NUMNODES) {
@@ -1901,6 +1901,20 @@ static int __init gic_acpi_parse_srat_its(struct acpi_subtable_header *header,
static void __init acpi_table_parse_srat_its(void)
{
+ int count;
+
+ count = acpi_table_parse_entries(ACPI_SIG_SRAT,
+ sizeof(struct acpi_table_srat),
+ ACPI_SRAT_TYPE_GIC_ITS_AFFINITY,
+ gic_acpi_match_srat_its, 0);
+ if (count <= 0)
+ return;
+
+ its_srat_maps = kmalloc(count * sizeof(struct its_srat_map),
+ GFP_KERNEL);
+ if (!its_srat_maps)
+ return;
+
acpi_table_parse_entries(ACPI_SIG_SRAT,
sizeof(struct acpi_table_srat),
ACPI_SRAT_TYPE_GIC_ITS_AFFINITY,
--
1.7.12.4
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH] irqchip/gic-v3-its: Allow GIC ITS number more than MAX_NUMNODES
2017-07-21 9:51 [PATCH] irqchip/gic-v3-its: Allow GIC ITS number more than MAX_NUMNODES Hanjun Guo
@ 2017-07-21 10:06 ` Hanjun Guo
2017-07-21 10:50 ` Hanjun Guo
2017-07-21 11:20 ` Marc Zyngier
0 siblings, 2 replies; 7+ messages in thread
From: Hanjun Guo @ 2017-07-21 10:06 UTC (permalink / raw)
To: Thomas Gleixner, Marc Zyngier
Cc: linux-acpi, linux-arm-kernel, linux-kernel, linuxarm, Hanjun Guo,
Ganapatrao Kulkarni, Lorenzo Pieralisi
On 2017/7/21 17:51, Hanjun Guo wrote:
> From: Hanjun Guo <hanjun.guo@linaro.org>
>
> When running 4.13-rc1 on top of D05, I got the boot log:
>
> [ 0.000000] SRAT: PXM 0 -> ITS 0 -> Node 0
> [ 0.000000] SRAT: PXM 0 -> ITS 1 -> Node 0
> [ 0.000000] SRAT: PXM 0 -> ITS 2 -> Node 0
> [ 0.000000] SRAT: PXM 1 -> ITS 3 -> Node 1
> [ 0.000000] SRAT: ITS affinity exceeding max count[4]
>
> This is wrong on D05 as we have 8 ITSes with 4 NUMA nodes.
>
> So dynamically alloc the memory needed instead of using
> its_srat_maps[MAX_NUMNODES], which count the number of
> ITS entry(ies) in SRAT and alloc its_srat_maps as needed,
> then build the mapping of numa node to ITS ID.
>
> After doing this, I got what I wanted:
>
> [ 0.000000] SRAT: PXM 0 -> ITS 0 -> Node 0
> [ 0.000000] SRAT: PXM 0 -> ITS 1 -> Node 0
> [ 0.000000] SRAT: PXM 0 -> ITS 2 -> Node 0
> [ 0.000000] SRAT: PXM 1 -> ITS 3 -> Node 1
> [ 0.000000] SRAT: PXM 2 -> ITS 4 -> Node 2
> [ 0.000000] SRAT: PXM 2 -> ITS 5 -> Node 2
> [ 0.000000] SRAT: PXM 2 -> ITS 6 -> Node 2
> [ 0.000000] SRAT: PXM 3 -> ITS 7 -> Node 3
>
> Fixes: dbd2b8267233 ("irqchip/gic-v3-its: Add ACPI NUMA node mapping")
> Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org>
> Cc: Ganapatrao Kulkarni <ganapatrao.kulkarni@cavium.com>
> Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
> Cc: Marc Zyngier <marc.zyngier@arm.com>
> ---
> drivers/irqchip/irq-gic-v3-its.c | 28 +++++++++++++++++++++-------
> 1 file changed, 21 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c
> index 3ccdf76..fb1c090 100644
> --- a/drivers/irqchip/irq-gic-v3-its.c
> +++ b/drivers/irqchip/irq-gic-v3-its.c
> @@ -1847,7 +1847,7 @@ struct its_srat_map {
> u32 its_id;
> };
>
> -static struct its_srat_map its_srat_maps[MAX_NUMNODES] __initdata;
> +static struct its_srat_map *its_srat_maps __initdata;
> static int its_in_srat __initdata;
>
> static int __init acpi_get_its_numa_node(u32 its_id)
> @@ -1861,6 +1861,12 @@ static int __init acpi_get_its_numa_node(u32 its_id)
> return NUMA_NO_NODE;
> }
Oops, need to check if the its_srat_maps valid or not here, please
comment on what else I'm missing or wrong, then I will prepare another
version.
Thanks
Hanjun
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] irqchip/gic-v3-its: Allow GIC ITS number more than MAX_NUMNODES
2017-07-21 10:06 ` Hanjun Guo
@ 2017-07-21 10:50 ` Hanjun Guo
2017-07-21 11:20 ` Marc Zyngier
1 sibling, 0 replies; 7+ messages in thread
From: Hanjun Guo @ 2017-07-21 10:50 UTC (permalink / raw)
To: Hanjun Guo
Cc: Thomas Gleixner, Marc Zyngier, linux-acpi, linux-arm-kernel,
linux-kernel, Linuxarm, Ganapatrao Kulkarni, Lorenzo Pieralisi
On 21 July 2017 at 18:06, Hanjun Guo <guohanjun@huawei.com> wrote:
>
> On 2017/7/21 17:51, Hanjun Guo wrote:
> > From: Hanjun Guo <hanjun.guo@linaro.org>
> >
> > When running 4.13-rc1 on top of D05, I got the boot log:
> >
> > [ 0.000000] SRAT: PXM 0 -> ITS 0 -> Node 0
> > [ 0.000000] SRAT: PXM 0 -> ITS 1 -> Node 0
> > [ 0.000000] SRAT: PXM 0 -> ITS 2 -> Node 0
> > [ 0.000000] SRAT: PXM 1 -> ITS 3 -> Node 1
> > [ 0.000000] SRAT: ITS affinity exceeding max count[4]
> >
> > This is wrong on D05 as we have 8 ITSes with 4 NUMA nodes.
> >
> > So dynamically alloc the memory needed instead of using
> > its_srat_maps[MAX_NUMNODES], which count the number of
> > ITS entry(ies) in SRAT and alloc its_srat_maps as needed,
> > then build the mapping of numa node to ITS ID.
> >
> > After doing this, I got what I wanted:
> >
> > [ 0.000000] SRAT: PXM 0 -> ITS 0 -> Node 0
> > [ 0.000000] SRAT: PXM 0 -> ITS 1 -> Node 0
> > [ 0.000000] SRAT: PXM 0 -> ITS 2 -> Node 0
> > [ 0.000000] SRAT: PXM 1 -> ITS 3 -> Node 1
> > [ 0.000000] SRAT: PXM 2 -> ITS 4 -> Node 2
> > [ 0.000000] SRAT: PXM 2 -> ITS 5 -> Node 2
> > [ 0.000000] SRAT: PXM 2 -> ITS 6 -> Node 2
> > [ 0.000000] SRAT: PXM 3 -> ITS 7 -> Node 3
> >
> > Fixes: dbd2b8267233 ("irqchip/gic-v3-its: Add ACPI NUMA node mapping")
> > Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org>
> > Cc: Ganapatrao Kulkarni <ganapatrao.kulkarni@cavium.com>
> > Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
> > Cc: Marc Zyngier <marc.zyngier@arm.com>
> > ---
> > drivers/irqchip/irq-gic-v3-its.c | 28 +++++++++++++++++++++-------
> > 1 file changed, 21 insertions(+), 7 deletions(-)
> >
> > diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c
> > index 3ccdf76..fb1c090 100644
> > --- a/drivers/irqchip/irq-gic-v3-its.c
> > +++ b/drivers/irqchip/irq-gic-v3-its.c
> > @@ -1847,7 +1847,7 @@ struct its_srat_map {
> > u32 its_id;
> > };
> >
> > -static struct its_srat_map its_srat_maps[MAX_NUMNODES] __initdata;
> > +static struct its_srat_map *its_srat_maps __initdata;
> > static int its_in_srat __initdata;
> >
> > static int __init acpi_get_its_numa_node(u32 its_id)
> > @@ -1861,6 +1861,12 @@ static int __init acpi_get_its_numa_node(u32 its_id)
> > return NUMA_NO_NODE;
> > }
>
> Oops, need to check if the its_srat_maps valid or not here, please
> comment on what else I'm missing or wrong, then I will prepare another
^^^
And need to free the memory.
Thanks
Hanjun
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] irqchip/gic-v3-its: Allow GIC ITS number more than MAX_NUMNODES
2017-07-21 10:06 ` Hanjun Guo
2017-07-21 10:50 ` Hanjun Guo
@ 2017-07-21 11:20 ` Marc Zyngier
2017-07-21 11:42 ` Ganapatrao Kulkarni
2017-07-22 3:44 ` Hanjun Guo
1 sibling, 2 replies; 7+ messages in thread
From: Marc Zyngier @ 2017-07-21 11:20 UTC (permalink / raw)
To: Hanjun Guo, Thomas Gleixner
Cc: linux-acpi, linux-arm-kernel, linux-kernel, linuxarm, Hanjun Guo,
Ganapatrao Kulkarni, Lorenzo Pieralisi
On 21/07/17 11:06, Hanjun Guo wrote:
> On 2017/7/21 17:51, Hanjun Guo wrote:
>> From: Hanjun Guo <hanjun.guo@linaro.org>
>>
>> When running 4.13-rc1 on top of D05, I got the boot log:
>>
>> [ 0.000000] SRAT: PXM 0 -> ITS 0 -> Node 0
>> [ 0.000000] SRAT: PXM 0 -> ITS 1 -> Node 0
>> [ 0.000000] SRAT: PXM 0 -> ITS 2 -> Node 0
>> [ 0.000000] SRAT: PXM 1 -> ITS 3 -> Node 1
>> [ 0.000000] SRAT: ITS affinity exceeding max count[4]
>>
>> This is wrong on D05 as we have 8 ITSes with 4 NUMA nodes.
I'm not seeing this on the D05 I have access to. Actually, I'm not
seeing any data related to SRAT and the ITS. Is that a different firmware?
>>
>> So dynamically alloc the memory needed instead of using
>> its_srat_maps[MAX_NUMNODES], which count the number of
>> ITS entry(ies) in SRAT and alloc its_srat_maps as needed,
>> then build the mapping of numa node to ITS ID.
>>
>> After doing this, I got what I wanted:
>>
>> [ 0.000000] SRAT: PXM 0 -> ITS 0 -> Node 0
>> [ 0.000000] SRAT: PXM 0 -> ITS 1 -> Node 0
>> [ 0.000000] SRAT: PXM 0 -> ITS 2 -> Node 0
>> [ 0.000000] SRAT: PXM 1 -> ITS 3 -> Node 1
>> [ 0.000000] SRAT: PXM 2 -> ITS 4 -> Node 2
>> [ 0.000000] SRAT: PXM 2 -> ITS 5 -> Node 2
>> [ 0.000000] SRAT: PXM 2 -> ITS 6 -> Node 2
>> [ 0.000000] SRAT: PXM 3 -> ITS 7 -> Node 3
>>
>> Fixes: dbd2b8267233 ("irqchip/gic-v3-its: Add ACPI NUMA node mapping")
>> Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org>
>> Cc: Ganapatrao Kulkarni <ganapatrao.kulkarni@cavium.com>
>> Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
>> Cc: Marc Zyngier <marc.zyngier@arm.com>
>> ---
>> drivers/irqchip/irq-gic-v3-its.c | 28 +++++++++++++++++++++-------
>> 1 file changed, 21 insertions(+), 7 deletions(-)
>>
>> diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c
>> index 3ccdf76..fb1c090 100644
>> --- a/drivers/irqchip/irq-gic-v3-its.c
>> +++ b/drivers/irqchip/irq-gic-v3-its.c
>> @@ -1847,7 +1847,7 @@ struct its_srat_map {
>> u32 its_id;
>> };
>>
>> -static struct its_srat_map its_srat_maps[MAX_NUMNODES] __initdata;
>> +static struct its_srat_map *its_srat_maps __initdata;
>> static int its_in_srat __initdata;
>>
>> static int __init acpi_get_its_numa_node(u32 its_id)
>> @@ -1861,6 +1861,12 @@ static int __init acpi_get_its_numa_node(u32 its_id)
>> return NUMA_NO_NODE;
>> }
>
> Oops, need to check if the its_srat_maps valid or not here, please
> comment on what else I'm missing or wrong, then I will prepare another
> version.
Please post a patch that has all of the fixes, and I'll review that.
Thanks,
M.
--
Jazz is not dead. It just smells funny...
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] irqchip/gic-v3-its: Allow GIC ITS number more than MAX_NUMNODES
2017-07-21 11:20 ` Marc Zyngier
@ 2017-07-21 11:42 ` Ganapatrao Kulkarni
2017-07-22 3:52 ` Hanjun Guo
2017-07-22 3:44 ` Hanjun Guo
1 sibling, 1 reply; 7+ messages in thread
From: Ganapatrao Kulkarni @ 2017-07-21 11:42 UTC (permalink / raw)
To: Marc Zyngier
Cc: Hanjun Guo, Thomas Gleixner, Lorenzo Pieralisi, linux-kernel,
linuxarm, linux-acpi, Hanjun Guo, Ganapatrao Kulkarni,
linux-arm-kernel, Jayachandran.Nair
Hi Hanjun,
On Fri, Jul 21, 2017 at 4:50 PM, Marc Zyngier <marc.zyngier@arm.com> wrote:
> On 21/07/17 11:06, Hanjun Guo wrote:
>> On 2017/7/21 17:51, Hanjun Guo wrote:
>>> From: Hanjun Guo <hanjun.guo@linaro.org>
>>>
>>> When running 4.13-rc1 on top of D05, I got the boot log:
>>>
>>> [ 0.000000] SRAT: PXM 0 -> ITS 0 -> Node 0
>>> [ 0.000000] SRAT: PXM 0 -> ITS 1 -> Node 0
>>> [ 0.000000] SRAT: PXM 0 -> ITS 2 -> Node 0
>>> [ 0.000000] SRAT: PXM 1 -> ITS 3 -> Node 1
>>> [ 0.000000] SRAT: ITS affinity exceeding max count[4]
>>>
>>> This is wrong on D05 as we have 8 ITSes with 4 NUMA nodes.
Used static array to keep it simple. we can have either dynamic array
or increase static array size (which is in init data) to a larger
number.
We may have to go for dynamic array to be more sane. You can refer my
v2 patch [1], which was doing dynamic allocation and avoids
2 calls to acpi parser as done in this patch.
[1] https://patchwork.kernel.org/patch/9798659/
>
> I'm not seeing this on the D05 I have access to. Actually, I'm not
> seeing any data related to SRAT and the ITS. Is that a different firmware?
>
>>>
>>> So dynamically alloc the memory needed instead of using
>>> its_srat_maps[MAX_NUMNODES], which count the number of
>>> ITS entry(ies) in SRAT and alloc its_srat_maps as needed,
>>> then build the mapping of numa node to ITS ID.
>>>
>>> After doing this, I got what I wanted:
>>>
>>> [ 0.000000] SRAT: PXM 0 -> ITS 0 -> Node 0
>>> [ 0.000000] SRAT: PXM 0 -> ITS 1 -> Node 0
>>> [ 0.000000] SRAT: PXM 0 -> ITS 2 -> Node 0
>>> [ 0.000000] SRAT: PXM 1 -> ITS 3 -> Node 1
>>> [ 0.000000] SRAT: PXM 2 -> ITS 4 -> Node 2
>>> [ 0.000000] SRAT: PXM 2 -> ITS 5 -> Node 2
>>> [ 0.000000] SRAT: PXM 2 -> ITS 6 -> Node 2
>>> [ 0.000000] SRAT: PXM 3 -> ITS 7 -> Node 3
>>>
>>> Fixes: dbd2b8267233 ("irqchip/gic-v3-its: Add ACPI NUMA node mapping")
>>> Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org>
>>> Cc: Ganapatrao Kulkarni <ganapatrao.kulkarni@cavium.com>
>>> Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
>>> Cc: Marc Zyngier <marc.zyngier@arm.com>
>>> ---
>>> drivers/irqchip/irq-gic-v3-its.c | 28 +++++++++++++++++++++-------
>>> 1 file changed, 21 insertions(+), 7 deletions(-)
>>>
>>> diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c
>>> index 3ccdf76..fb1c090 100644
>>> --- a/drivers/irqchip/irq-gic-v3-its.c
>>> +++ b/drivers/irqchip/irq-gic-v3-its.c
>>> @@ -1847,7 +1847,7 @@ struct its_srat_map {
>>> u32 its_id;
>>> };
>>>
>>> -static struct its_srat_map its_srat_maps[MAX_NUMNODES] __initdata;
>>> +static struct its_srat_map *its_srat_maps __initdata;
>>> static int its_in_srat __initdata;
>>>
>>> static int __init acpi_get_its_numa_node(u32 its_id)
>>> @@ -1861,6 +1861,12 @@ static int __init acpi_get_its_numa_node(u32 its_id)
>>> return NUMA_NO_NODE;
>>> }
>>
>> Oops, need to check if the its_srat_maps valid or not here, please
>> comment on what else I'm missing or wrong, then I will prepare another
>> version.
>
> Please post a patch that has all of the fixes, and I'll review that.
>
> Thanks,
>
> M.
> --
> Jazz is not dead. It just smells funny...
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
thanks
Ganapat
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] irqchip/gic-v3-its: Allow GIC ITS number more than MAX_NUMNODES
2017-07-21 11:20 ` Marc Zyngier
2017-07-21 11:42 ` Ganapatrao Kulkarni
@ 2017-07-22 3:44 ` Hanjun Guo
1 sibling, 0 replies; 7+ messages in thread
From: Hanjun Guo @ 2017-07-22 3:44 UTC (permalink / raw)
To: Marc Zyngier, Thomas Gleixner
Cc: linux-acpi, linux-arm-kernel, linux-kernel, linuxarm, Hanjun Guo,
Ganapatrao Kulkarni, Lorenzo Pieralisi
On 2017/7/21 19:20, Marc Zyngier wrote:
> On 21/07/17 11:06, Hanjun Guo wrote:
>> On 2017/7/21 17:51, Hanjun Guo wrote:
>>> From: Hanjun Guo <hanjun.guo@linaro.org>
>>>
>>> When running 4.13-rc1 on top of D05, I got the boot log:
>>>
>>> [ 0.000000] SRAT: PXM 0 -> ITS 0 -> Node 0
>>> [ 0.000000] SRAT: PXM 0 -> ITS 1 -> Node 0
>>> [ 0.000000] SRAT: PXM 0 -> ITS 2 -> Node 0
>>> [ 0.000000] SRAT: PXM 1 -> ITS 3 -> Node 1
>>> [ 0.000000] SRAT: ITS affinity exceeding max count[4]
>>>
>>> This is wrong on D05 as we have 8 ITSes with 4 NUMA nodes.
> I'm not seeing this on the D05 I have access to. Actually, I'm not
> seeing any data related to SRAT and the ITS. Is that a different firmware?
Yes, actually it's just a updated version in this week, that's why
the bug wasn't be spotted when Ganapat's patch was merged.
>
>>> So dynamically alloc the memory needed instead of using
>>> its_srat_maps[MAX_NUMNODES], which count the number of
>>> ITS entry(ies) in SRAT and alloc its_srat_maps as needed,
>>> then build the mapping of numa node to ITS ID.
>>>
>>> After doing this, I got what I wanted:
>>>
>>> [ 0.000000] SRAT: PXM 0 -> ITS 0 -> Node 0
>>> [ 0.000000] SRAT: PXM 0 -> ITS 1 -> Node 0
>>> [ 0.000000] SRAT: PXM 0 -> ITS 2 -> Node 0
>>> [ 0.000000] SRAT: PXM 1 -> ITS 3 -> Node 1
>>> [ 0.000000] SRAT: PXM 2 -> ITS 4 -> Node 2
>>> [ 0.000000] SRAT: PXM 2 -> ITS 5 -> Node 2
>>> [ 0.000000] SRAT: PXM 2 -> ITS 6 -> Node 2
>>> [ 0.000000] SRAT: PXM 3 -> ITS 7 -> Node 3
>>>
>>> Fixes: dbd2b8267233 ("irqchip/gic-v3-its: Add ACPI NUMA node mapping")
>>> Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org>
>>> Cc: Ganapatrao Kulkarni <ganapatrao.kulkarni@cavium.com>
>>> Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
>>> Cc: Marc Zyngier <marc.zyngier@arm.com>
>>> ---
>>> drivers/irqchip/irq-gic-v3-its.c | 28 +++++++++++++++++++++-------
>>> 1 file changed, 21 insertions(+), 7 deletions(-)
>>>
>>> diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c
>>> index 3ccdf76..fb1c090 100644
>>> --- a/drivers/irqchip/irq-gic-v3-its.c
>>> +++ b/drivers/irqchip/irq-gic-v3-its.c
>>> @@ -1847,7 +1847,7 @@ struct its_srat_map {
>>> u32 its_id;
>>> };
>>>
>>> -static struct its_srat_map its_srat_maps[MAX_NUMNODES] __initdata;
>>> +static struct its_srat_map *its_srat_maps __initdata;
>>> static int its_in_srat __initdata;
>>>
>>> static int __init acpi_get_its_numa_node(u32 its_id)
>>> @@ -1861,6 +1861,12 @@ static int __init acpi_get_its_numa_node(u32 its_id)
>>> return NUMA_NO_NODE;
>>> }
>> Oops, need to check if the its_srat_maps valid or not here, please
>> comment on what else I'm missing or wrong, then I will prepare another
>> version.
> Please post a patch that has all of the fixes, and I'll review that.
Will do that later.
Thanks
Hanjun
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] irqchip/gic-v3-its: Allow GIC ITS number more than MAX_NUMNODES
2017-07-21 11:42 ` Ganapatrao Kulkarni
@ 2017-07-22 3:52 ` Hanjun Guo
0 siblings, 0 replies; 7+ messages in thread
From: Hanjun Guo @ 2017-07-22 3:52 UTC (permalink / raw)
To: Ganapatrao Kulkarni, Marc Zyngier
Cc: Thomas Gleixner, Lorenzo Pieralisi, linux-kernel, linuxarm,
linux-acpi, Hanjun Guo, Ganapatrao Kulkarni, linux-arm-kernel,
Jayachandran.Nair
On 2017/7/21 19:42, Ganapatrao Kulkarni wrote:
> Hi Hanjun,
>
>
> On Fri, Jul 21, 2017 at 4:50 PM, Marc Zyngier <marc.zyngier@arm.com> wrote:
>> On 21/07/17 11:06, Hanjun Guo wrote:
>>> On 2017/7/21 17:51, Hanjun Guo wrote:
>>>> From: Hanjun Guo <hanjun.guo@linaro.org>
>>>>
>>>> When running 4.13-rc1 on top of D05, I got the boot log:
>>>>
>>>> [ 0.000000] SRAT: PXM 0 -> ITS 0 -> Node 0
>>>> [ 0.000000] SRAT: PXM 0 -> ITS 1 -> Node 0
>>>> [ 0.000000] SRAT: PXM 0 -> ITS 2 -> Node 0
>>>> [ 0.000000] SRAT: PXM 1 -> ITS 3 -> Node 1
>>>> [ 0.000000] SRAT: ITS affinity exceeding max count[4]
>>>>
>>>> This is wrong on D05 as we have 8 ITSes with 4 NUMA nodes.
> Used static array to keep it simple. we can have either dynamic array
> or increase static array size (which is in init data) to a larger
> number.
> We may have to go for dynamic array to be more sane. You can refer my
> v2 patch [1], which was doing dynamic allocation and avoids
> 2 calls to acpi parser as done in this patch.
>
> [1] https://patchwork.kernel.org/patch/9798659/
Hmm, although scanning the SRAT twice is bad, it will keep the
code simple, and no need to alloc the memory every time when we
find a ITS affinity entry, you need to free that memory when
ITS probing is done.
I will post a patch later, please take a look if it's ok to you :)
Thanks
Hanjun
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2017-07-22 3:53 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-07-21 9:51 [PATCH] irqchip/gic-v3-its: Allow GIC ITS number more than MAX_NUMNODES Hanjun Guo
2017-07-21 10:06 ` Hanjun Guo
2017-07-21 10:50 ` Hanjun Guo
2017-07-21 11:20 ` Marc Zyngier
2017-07-21 11:42 ` Ganapatrao Kulkarni
2017-07-22 3:52 ` Hanjun Guo
2017-07-22 3:44 ` Hanjun Guo
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).