Received: by 10.223.176.5 with SMTP id f5csp1792488wra; Thu, 8 Feb 2018 03:37:48 -0800 (PST) X-Google-Smtp-Source: AH8x226SXCnSyrMXuobwNDeEgq8+s88LyjUyLurhYIp7H7b8+TC0WfZtiplU5HSMoNK7yH8Xy+Pj X-Received: by 10.101.93.142 with SMTP id f14mr312715pgt.82.1518089868480; Thu, 08 Feb 2018 03:37:48 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1518089868; cv=none; d=google.com; s=arc-20160816; b=rNWnvi1o0esiV3MoVqNbpT/q+8akYSJQuAkV4VagF0/zK7lSTXHymCvUO7fmj7rVuW sUsCmbCIXdRwvrE3z2WtqXIAiqWs2nhrFZhM+EtpXYNccXxSpS2Cs4U6pGsd4GRP6GUQ bZ9DnTIaHXyoTCuiqgLQWvWqVd29uwxrn+S0Mi46058I7Dg0PN8FdV2gG3RXKt5mcro5 aXlHhodiKgO0AN89rKFmYqjjmXplnrBqJaRnlCGusSsutuRR+/3Z11SCvMJCHKD/+iQO sYAwsYwJwYT3Jxsm3RN+dI95zOZHfHUkW487VimX04KSpKpX9HApPZCmosYyYioCmWYk H4Pw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject:arc-authentication-results; bh=YuugrPcZWwTYTCxUzcZ8RfGutISN5hPXlE4FIaMKqG0=; b=NQ98ErZoVqzYOTtf45024X3KKkRkI8eHO5rXfSg2i10N3XmEb9VHif2Er3jFlf60Ja dwf2y4WUWJwmxkdXkIPhQMcwIaOBW2ofjRgjbqOlX024q/MW7yYv0oWt/Kwv83LGUBnU JPZqChLoHKHKefw8K2BK8+SV4gitsdS2FFwP3U5pnc+8XXR/uSu5d741K7NMrsCHtWPJ 40L6Si13aJnMNJW2nZV55i9D3wE6CiAKGb5UETEmRZBBGfhyhBJnp+UokuP/6p+k8lLI Mxf+zThTh7mmX7Qh4PFniUzRrQs9min07paAsmU4KTmCJ635creC5bfvTIET8pfUSVtz SXOA== 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id j186si2299927pge.177.2018.02.08.03.37.33; Thu, 08 Feb 2018 03:37:48 -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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752222AbeBHLgv (ORCPT + 99 others); Thu, 8 Feb 2018 06:36:51 -0500 Received: from usa-sjc-mx-foss1.foss.arm.com ([217.140.101.70]:33524 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752117AbeBHLgt (ORCPT ); Thu, 8 Feb 2018 06:36:49 -0500 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 7FB1E1435; Thu, 8 Feb 2018 03:36:49 -0800 (PST) Received: from [10.1.210.88] (e110467-lin.cambridge.arm.com [10.1.210.88]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id BF9233F24D; Thu, 8 Feb 2018 03:36:46 -0800 (PST) Subject: Re: [PATCH v1 02/16] irqchip: gicv3-its: Add helpers for handling 52bit address To: Suzuki K Poulose , Christoffer Dall Cc: mark.rutland@arm.com, peter.maydell@linaro.org, kvm@vger.kernel.org, rkrcmar@redhat.com, marc.zyngier@arm.com, catalin.marinas@arm.com, ard.biesheuvel@linaro.org, will.deacon@arm.com, linux-kernel@vger.kernel.org, kristina.martsenko@arm.com, Shanker Donthineni , pbonzini@redhat.com, kvmarm@lists.cs.columbia.edu, linux-arm-kernel@lists.infradead.org References: <20180109190414.4017-1-suzuki.poulose@arm.com> <20180109190414.4017-3-suzuki.poulose@arm.com> <20180207151023.GD29286@cbox> From: Robin Murphy Message-ID: <11d269bd-2cb3-5aa3-fa0d-44fca2d3373e@arm.com> Date: Thu, 8 Feb 2018 11:36:45 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.6.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-GB Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 08/02/18 11:20, Suzuki K Poulose wrote: > On 07/02/18 15:10, Christoffer Dall wrote: >> Hi Suzuki, >> >> On Tue, Jan 09, 2018 at 07:03:57PM +0000, Suzuki K Poulose wrote: >>> Add helpers for encoding/decoding 52bit address in GICv3 ITS BASER >>> register. When ITS uses 64K page size, the 52bits of physical address >>> are encoded in BASER[47:12] as follows : >>> >>>   Bits[47:16] of the register => bits[47:16] of the physical address >>>   Bits[15:12] of the register => bits[51:48] of the physical address >>>                                  bits[15:0] of the physical address >>> are 0. >>> >>> Also adds a mask for CBASER address. This will be used for adding 52bit >>> support for VGIC ITS. More importantly ignore the upper bits if 52bit >>> support is not enabled. >>> >>> Cc: Shanker Donthineni >>> Cc: Marc Zyngier >>> Signed-off-by: Suzuki K Poulose >>> --- > > >>> + >>> +/* >>> + * With 64K page size, the physical address can be upto 52bit and >>> + * uses the following encoding in the GITS_BASER[47:12]: >>> + * >>> + * Bits[47:16] of the register => bits[47:16] of the base physical >>> address. >>> + * Bits[15:12] of the register => bits[51:48] of the base physical >>> address. >>> + *                                bits[15:0] of the base physical >>> address are 0. >>> + * Clear the upper bits if the kernel doesn't support 52bits. >>> + */ >>> +#define GITS_BASER_ADDR64K_LO_MASK    GENMASK_ULL(47, 16) >>> +#define GITS_BASER_ADDR64K_HI_SHIFT    12 >>> +#define GITS_BASER_ADDR64K_HI_MOVE    (48 - >>> GITS_BASER_ADDR64K_HI_SHIFT) >>> +#define GITS_BASER_ADDR64K_HI_MASK    (GITS_PA_HI_MASK << >>> GITS_BASER_ADDR64K_HI_SHIFT) >>> +#define GITS_BASER_ADDR64K_TO_PHYS(x)                    \ >>> +    (((x) & GITS_BASER_ADDR64K_LO_MASK) |                 \ >>> +     (((x) & GITS_BASER_ADDR64K_HI_MASK) << >>> GITS_BASER_ADDR64K_HI_MOVE)) >>> +#define GITS_BASER_ADDR64K_FROM_PHYS(p)                    \ >>> +    (((p) & GITS_BASER_ADDR64K_LO_MASK) |                 \ >>> +     (((p) >> GITS_BASER_ADDR64K_HI_MOVE) & >>> GITS_BASER_ADDR64K_HI_MASK)) >> >> I don't understand why you need this masking logic embedded in these >> macros?  Isn't it strictly an error if anyone passes a physical address >> with any of bits [51:48] set to the ITS on a system that doesn't support >> 52 bit PAs, and just silently masking off those bits could lead to some >> interesting cases. > > What do you think is the best way to handle such cases ? May be I could add > some checks where we get those addresses and handle it before we use this > macro ? > >> >> This is also notably more difficult to read than the existing macro. >> >> If anything, I think it would be more useful to have >> GITS_BASER_TO_PHYS(x) and GITS_PHYS_TO_BASER(x) which takes into account >> CONFIG_ARM64_64K_PAGES. > > I thought the 64K_PAGES is not kernel page size, but the page-size > configured > by the "requester" for ITS. So, it doesn't really mean > CONFIG_ARM64_64K_PAGES. > But the other way around, we can't handle 52bit address unless > CONFIG_ARM64_64K_PAGES > is selected. Also, if the guest uses a 4K page size and uses a 48 bit > address, > we could potentially mask Bits[15:12] to 0, which is not nice. > > So I still think we need to have a special macro for handling addresses > with 64K > page size in ITS. If it's allowed to go wrong for invalid input, then you don't even need to consider the page size at all, except if you care about micro-optimising out a couple of instructions. For valid page-aligned addresses, [51:48] and [15:12] can never *both* be nonzero, therefore just this should be fine for all granules: - (((phys) & GENMASK_ULL(47, 16)) | (((phys) >> 48) & 0xf) << 12) + (((phys) & GENMASK_ULL(47, 0)) | (((phys) >> 48) & 0xf) << 12) Robin.