Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp7384609ybl; Tue, 24 Dec 2019 01:23:02 -0800 (PST) X-Google-Smtp-Source: APXvYqzqTCJpSbiB+63Pmw2OPaeGzGQonf/dQf0Yhgw4U5BZSuhrLYBfxq0er9lUr4xtRe1YB5jA X-Received: by 2002:a05:6830:1112:: with SMTP id w18mr31184139otq.356.1577179382124; Tue, 24 Dec 2019 01:23:02 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1577179382; cv=none; d=google.com; s=arc-20160816; b=EYMtur8rDGCGTJUA+J0QwO5JbCxqHH4E6btZIPQr6mnIPTvu3edBycQEPkj1wMxSDT 67wQJ+6ojRk+eRI0z+oN8N4IvJkSGhq91BuskAI6n1ePFpOwwNxspbHXogeLUXLT4ur1 BPfXuFYlcvSibeKPYAHTpRgrHK1WdLhqVFW4wTOMTWEof83hkcMzMOjVJT9l7mY7/7zH r+mQKDFQWO9WwTD+PPyqOYJoWKb2NlaZx1cJjAyK331oL1x1FSEHYHoouVv22zWsDHXe dLWrs0B/KcMitKuoeTa5TkCHVenGGGlCNrNa+V1OsOEykkUrdaxJtuRggtoc20q/8l4w SKXg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:message-id:references :in-reply-to:cc:from:date:content-transfer-encoding:mime-version :subject:to; bh=6s5SqrW6t57UVcl2kLsaWJHhaBpmIMzJclIy7uJ7p6U=; b=lUjoggd8H4W0YGf0sqcTyIMG80ULzN0JhPHXBeQ8G1S2c1z7o/po9PO7COT9VQ8a37 EH/IA9UeGO2Z7k9HaK8FoVfD1NRSb4m+jEcgovWXJ1nwuFD9i8jo68jZV4yH5abg8JqQ Chfq5uW9WxIJ2KWotXOXytD2yZFOlLql8n/BVMKOHeb7GBU/tv2VWccC5/usSigwABPT AUvgoS04src2lLneO8TDnOlYFLb8dwIB64yBVIaq2dRNXPxjxVE2QMORmvg6KIwr5qhB zSQ0swzNUjedVE2pswovT2LWgnmyGlLCig7qFZfYCrsGC9bPTsMEI8BI6Q5YpU4JpGv6 Kbng== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d12si10535647otf.141.2019.12.24.01.22.38; Tue, 24 Dec 2019 01:23:02 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726124AbfLXJTG (ORCPT + 99 others); Tue, 24 Dec 2019 04:19:06 -0500 Received: from inca-roads.misterjones.org ([213.251.177.50]:46908 "EHLO inca-roads.misterjones.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726065AbfLXJTF (ORCPT ); Tue, 24 Dec 2019 04:19:05 -0500 Received: from www-data by cheepnis.misterjones.org with local (Exim 4.80) (envelope-from ) id 1ijgLE-0007yh-OI; Tue, 24 Dec 2019 10:19:00 +0100 To: Zenghui Yu Subject: Re: [PATCH v2 11/36] irqchip/gic-v4.1: VPE table (aka =?UTF-8?Q?GICR=5FVPROPBASER=29=20allocation?= X-PHP-Originating-Script: 0:main.inc MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Date: Tue, 24 Dec 2019 09:19:00 +0000 From: Marc Zyngier Cc: , , Eric Auger , James Morse , Julien Thierry , Suzuki K Poulose , Thomas Gleixner , Jason Cooper , Lorenzo Pieralisi , Andrew Murray , Jayachandran C , Robert Richter , , In-Reply-To: <61526052-aa00-0769-d5bb-3524161c5650@huawei.com> References: <20191027144234.8395-1-maz@kernel.org> <20191027144234.8395-12-maz@kernel.org> <61526052-aa00-0769-d5bb-3524161c5650@huawei.com> Message-ID: <7eb71594ac3617e1a2b58b7537cf3d64@www.loen.fr> X-Sender: maz@kernel.org User-Agent: Roundcube Webmail/0.7.2 X-SA-Exim-Connect-IP: X-SA-Exim-Rcpt-To: yuzenghui@huawei.com, kvmarm@lists.cs.columbia.edu, linux-kernel@vger.kernel.org, eric.auger@redhat.com, james.morse@arm.com, julien.thierry.kdev@gmail.com, suzuki.poulose@arm.com, tglx@linutronix.de, jason@lakedaemon.net, lorenzo.pieralisi@arm.com, andrew.murray@arm.com, jnair@marvell.com, rrichter@marvell.com, tangnianyao@huawei.com, wangwudi@hisilicon.com X-SA-Exim-Mail-From: maz@kernel.org X-SA-Exim-Scanned: No (on cheepnis.misterjones.org); SAEximRunCond expanded to false Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Zenghui, On 2019-12-24 07:10, Zenghui Yu wrote: > Hi Marc, > > [ +Wudi and Nianyao. As they spotted the following issue but > I forgot to send it out. ] > > On 2019/10/27 22:42, Marc Zyngier wrote: >> GICv4.1 defines a new VPE table that is potentially shared between >> both the ITSs and the redistributors, following complicated affinity >> rules. >> To make things more confusing, the programming of this table at >> the redistributor level is reusing the GICv4.0 GICR_VPROPBASER >> register >> for something completely different. >> The code flow is somewhat complexified by the need to respect the >> affinities required by the HW, meaning that tables can either be >> inherited from a previously discovered ITS or redistributor. >> Signed-off-by: Marc Zyngier >> ---[...] >> diff --git a/drivers/irqchip/irq-gic-v3-its.c >> b/drivers/irqchip/irq-gic-v3-its.c >> index 40912b3fb0e1..478d3678850c 100644 >> --- a/drivers/irqchip/irq-gic-v3-its.c >> +++ b/drivers/irqchip/irq-gic-v3-its.c > [...] >> @@ -2025,6 +2098,214 @@ static int its_alloc_tables(struct its_node >> *its) >> return 0; >> } >> +static u64 inherit_vpe_l1_table_from_its(void) >> +{ >> + struct its_node *its; >> + u64 val; >> + u32 aff; >> + >> + val = gic_read_typer(gic_data_rdist_rd_base() + GICR_TYPER); >> + aff = compute_common_aff(val); >> + >> + list_for_each_entry(its, &its_nodes, entry) { >> + u64 baser; >> + >> + if (!is_v4_1(its)) >> + continue; >> + >> + if (!FIELD_GET(GITS_TYPER_SVPET, its->typer)) >> + continue; >> + >> + if (aff != compute_its_aff(its)) >> + continue; >> + >> + /* GICv4.1 guarantees that the vPE table is GITS_BASER2 */ >> + baser = its->tables[2].val; >> + if (!(baser & GITS_BASER_VALID)) >> + continue; >> + >> + /* We have a winner! */ >> + val = GICR_VPROPBASER_4_1_VALID; >> + if (baser & GITS_BASER_INDIRECT) >> + val |= GICR_VPROPBASER_4_1_INDIRECT; >> + val |= FIELD_PREP(GICR_VPROPBASER_4_1_PAGE_SIZE, >> + FIELD_GET(GITS_BASER_PAGE_SIZE_MASK, baser)); >> + val |= FIELD_PREP(GICR_VPROPBASER_4_1_ADDR, >> + GITS_BASER_ADDR_48_to_52(baser) >> 12); > > We've used GITS_BASER_ADDR_48_to_52() only in the KVM code where the > pagesize of ITS table is fixed to 64K. > It may not work when the pagesize is 4K or 16K? You're absolutely right, we shouldn't mess with the 52bit macros when PZ isn't set to 64k. I'm adding the following fix to this patch: diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c index e1f8d5f9a0e3..3234bb9fbdbe 100644 --- a/drivers/irqchip/irq-gic-v3-its.c +++ b/drivers/irqchip/irq-gic-v3-its.c @@ -2433,7 +2433,7 @@ static u64 inherit_vpe_l1_table_from_its(void) aff = compute_common_aff(val); list_for_each_entry(its, &its_nodes, entry) { - u64 baser; + u64 baser, addr; if (!is_v4_1(its)) continue; @@ -2455,8 +2455,15 @@ static u64 inherit_vpe_l1_table_from_its(void) val |= GICR_VPROPBASER_4_1_INDIRECT; val |= FIELD_PREP(GICR_VPROPBASER_4_1_PAGE_SIZE, FIELD_GET(GITS_BASER_PAGE_SIZE_MASK, baser)); - val |= FIELD_PREP(GICR_VPROPBASER_4_1_ADDR, - GITS_BASER_ADDR_48_to_52(baser) >> 12); + switch (FIELD_GET(GITS_BASER_PAGE_SIZE_MASK, baser)) { + case GIC_PAGE_SIZE_64K: + addr = GITS_BASER_ADDR_48_to_52(baser); + break; + default: + addr = baser & GENMASK_ULL(47, 12); + break; + } + val |= FIELD_PREP(GICR_VPROPBASER_4_1_ADDR, addr >> 12); val |= FIELD_PREP(GICR_VPROPBASER_SHAREABILITY_MASK, FIELD_GET(GITS_BASER_SHAREABILITY_MASK, baser)); val |= FIELD_PREP(GICR_VPROPBASER_INNER_CACHEABILITY_MASK, Thanks again, M. -- Jazz is not dead. It just smells funny...