Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1696938

Re: [PATCH v2] irqchip/gic-v3-its: Allow GIC ITS number more than MAX_NUMNODES

Path csiph.com!eternal-september.org!feeder.eternal-september.org!aioe.org!bofh.it!news.nic.it!robomod
From Hanjun Guo <hanjun.guo@linaro.org>
Newsgroups linux.kernel
Subject Re: [PATCH v2] irqchip/gic-v3-its: Allow GIC ITS number more than MAX_NUMNODES
Date Wed, 26 Jul 2017 12:00:01 +0200
Message-ID <u7rgJ-77f-3@gated-at.bofh.it> (permalink)
References <u5TTP-5uP-1@gated-at.bofh.it> <u75pU-1BV-11@gated-at.bofh.it> <u7poD-5Va-27@gated-at.bofh.it> <u7pyh-6dA-7@gated-at.bofh.it>
X-Original-To Marc Zyngier <marc.zyngier@arm.com>, Hanjun Guo <guohanjun@huawei.com>, Thomas Gleixner <tglx@linutronix.de>
Dkim-Signature v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=f4WjIevUNbr0f5deEhDfnJs7T2Rc5ikW/YMvwYQanDs=; b=QvHfz9eiuUsmc+gacXNjoKwJB6lbMxJPWKZoJlcgYUyGLNNqbXbOW+qPeW9X2DConA hPuomOC1PaqMsXGjKTeSTZBQHiDAz6ik/8l3GlvsSy3IN0r6cFXnyEBy+72IquIQfFXb Huk0XYwmjKIr9NKZXm9ypT5O3NFN+Pz67Zg28=
X-Google-Dkim-Signature v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=f4WjIevUNbr0f5deEhDfnJs7T2Rc5ikW/YMvwYQanDs=; b=CdD2b+tTVERA8pJx8xvIXFPQZ+frVPzlK1tnDLeg2MwN1nuWfX2KwB8dIwsheSxk2e xNfppyf324Kv32PdOjC8n898l0OUHfjngu02R6LqUMbAkwY/44+4QViQx7YEj5z6/nMr Yrwnh15b2xS0ytDEqyQTP+V2FghcH2OKGXb2rHtGQb/9iw0UFSqkbR2FKXE8AfjxpL/W z98Xi+bgdNTTF96SXNrYf8rlQO7imJzVEprHYrMdbIqQyTYy38UVN4665Dv8vq1PEaTz lpqbg32t127ygzrKnollbte4WvRyvSFAqv+7uP1CMQlLuk5wgWxijA7hC8wzOlAQMa9a xYdg==
X-Gm-Message-State AIVw110TsmhF7ws+RIWgEr0IyE5se5MWTUofFQNfPUCaVguUIOzJXkc1 3UqEedZntkFwI3pA
X-Received by 10.99.36.7 with SMTP id k7mr302166pgk.325.1501062933198; Wed, 26 Jul 2017 02:55:33 -0700 (PDT)
User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1
MIME-Version 1.0
Content-Type text/plain; charset=windows-1252; format=flowed
Content-Language en-US
Content-Transfer-Encoding 7bit
Sender robomod@news.nic.it
List-ID <linux-kernel.vger.kernel.org>
X-Mailing-List linux-kernel@vger.kernel.org
Approved robomod@news.nic.it
Lines 111
Organization linux.* mail to news gateway
X-Original-Cc linux-acpi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linuxarm@huawei.com, Ganapatrao Kulkarni <ganapatrao.kulkarni@cavium.com>, Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
X-Original-Date Wed, 26 Jul 2017 17:55:17 +0800
X-Original-Message-ID <3677255d-d8c9-0e01-df60-8c194397e384@linaro.org>
X-Original-References <1500695652-27025-1-git-send-email-guohanjun@huawei.com> <91588872-441b-88c0-07e3-452c2998d173@arm.com> <f57a04ad-b686-9872-8b6a-bbacea29b3b0@linaro.org> <998a03b4-89b1-7407-45ea-83a3128d66ed@arm.com>
X-Original-Sender linux-kernel-owner@vger.kernel.org
Xref csiph.com linux.kernel:1696938

Show key headers only | View raw


On 2017/7/26 16:00, Marc Zyngier wrote:
> On 26/07/17 08:52, Hanjun Guo wrote:
>> On 2017/7/25 18:30, Marc Zyngier wrote:
>>> On 22/07/17 04:54, 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. Of course,
>>>> its_srat_maps will be freed after ITS probing because
>>>> we don't need that after boot.
>>>>
>>>> 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>
>>>> ---
>>>>
>>>> v1->v2:
>>>>     - Add NULL check in acpi_get_its_numa_node() for no ITS affinity case;
>>>>     - Free the its_srat_maps after ITS probing.
>>>>
>>>>    drivers/irqchip/irq-gic-v3-its.c | 39 ++++++++++++++++++++++++++++++++-------
>>>>    1 file changed, 32 insertions(+), 7 deletions(-)
>>>>
>>>> diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c
>>>> index 3ccdf76..1d692aa 100644
>>>> --- a/drivers/irqchip/irq-gic-v3-its.c
>>>> +++ b/drivers/irqchip/irq-gic-v3-its.c
>>>> @@ -1847,13 +1847,16 @@ 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)
>>>>    {
>>>>    	int i;
>>>>    
>>>> +	if (!its_srat_maps)
>>>> +		return NUMA_NO_NODE;
>>>> +
>>>>    	for (i = 0; i < its_in_srat; i++) {
>>>>    		if (its_id == its_srat_maps[i].its_id)
>>>>    			return its_srat_maps[i].numa_node;
>>>> @@ -1861,6 +1864,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 +1886,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;
>>>> -	}
>>>> -
>>>
>>> So you're getting rid of that message when overflowing the array...
>>
>> This overflowing will not happen, because I scan the SRAT
>> to count the entry(ies) of ITS affinity first to alloc the
>> array, and then parse the same SRAT again to setup the mapping
>> of NUMA node to ITS, so is it fine for us to just remove the
>> check here?
> 
> Removing that check is fine, as long as you make sure the allocation
> hasn't failed.

Sorry, just want to make sure I understand correctly. This function will
not be called if allocation failure, so do you mean we can keep the code
as it is?

Thanks
Hanjun

Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH v2] irqchip/gic-v3-its: Allow GIC ITS number more than MAX_NUMNODES Hanjun Guo <guohanjun@huawei.com> - 2017-07-22 06:10 +0200
  Re: [PATCH v2] irqchip/gic-v3-its: Allow GIC ITS number more than  MAX_NUMNODES Marc Zyngier <marc.zyngier@arm.com> - 2017-07-25 12:40 +0200
    Re: [PATCH v2] irqchip/gic-v3-its: Allow GIC ITS number more than  MAX_NUMNODES Hanjun Guo <hanjun.guo@linaro.org> - 2017-07-26 10:00 +0200
      Re: [PATCH v2] irqchip/gic-v3-its: Allow GIC ITS number more than  MAX_NUMNODES Marc Zyngier <marc.zyngier@arm.com> - 2017-07-26 10:10 +0200
        Re: [PATCH v2] irqchip/gic-v3-its: Allow GIC ITS number more than  MAX_NUMNODES Hanjun Guo <hanjun.guo@linaro.org> - 2017-07-26 12:00 +0200
          Re: [PATCH v2] irqchip/gic-v3-its: Allow GIC ITS number more than  MAX_NUMNODES Hanjun Guo <hanjun.guo@linaro.org> - 2017-07-26 12:10 +0200
          Re: [PATCH v2] irqchip/gic-v3-its: Allow GIC ITS number more than  MAX_NUMNODES Marc Zyngier <marc.zyngier@arm.com> - 2017-07-26 12:10 +0200
  Re: [PATCH v2] irqchip/gic-v3-its: Allow GIC ITS number more than  MAX_NUMNODES Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> - 2017-07-25 12:50 +0200
    Re: [PATCH v2] irqchip/gic-v3-its: Allow GIC ITS number more than  MAX_NUMNODES Hanjun Guo <hanjun.guo@linaro.org> - 2017-07-26 10:20 +0200
      Re: [PATCH v2] irqchip/gic-v3-its: Allow GIC ITS number more than  MAX_NUMNODES Robin Murphy <robin.murphy@arm.com> - 2017-07-26 13:10 +0200
        Re: [PATCH v2] irqchip/gic-v3-its: Allow GIC ITS number more than  MAX_NUMNODES Hanjun Guo <hanjun.guo@linaro.org> - 2017-07-27 09:40 +0200
  Re: [PATCH v2] irqchip/gic-v3-its: Allow GIC ITS number more than  MAX_NUMNODES John Garry <john.garry@huawei.com> - 2017-07-25 13:10 +0200
    Re: [PATCH v2] irqchip/gic-v3-its: Allow GIC ITS number more than  MAX_NUMNODES Hanjun Guo <hanjun.guo@linaro.org> - 2017-07-26 11:50 +0200
    Re: [PATCH v2] irqchip/gic-v3-its: Allow GIC ITS number more than  MAX_NUMNODES Hanjun Guo <hanjun.guo@linaro.org> - 2017-07-26 11:50 +0200

csiph-web