Received: by 2002:a25:683:0:0:0:0:0 with SMTP id 125csp646405ybg; Fri, 12 Jun 2020 10:45:35 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw8Dh2aZjdoZ/sbaAWNUrNcppkbZvTYXw/c1st9NYj/q4Rwri5GL9NRgeNXyyLj+QpzNWGE X-Received: by 2002:a17:906:7f94:: with SMTP id f20mr1796842ejr.394.1591983935081; Fri, 12 Jun 2020 10:45:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1591983935; cv=none; d=google.com; s=arc-20160816; b=E0pdGK06UOHRX/OS+AG+qy06nuhV5k/O8SW5YKb4FBhfcmKo3ngB516I3zOZF4LXtQ ae6W5OYb8fKwJiq8KUkX60BxBIxFzdcFiwyoGi2Hbwaf8Zm/ls6zBTxld82ZBmUiOiqb nwQokjdEdqrT1Y9vKbZbGICdw65bpOLHQysIYimPxrkhRI9ne4epiOkRxW7uF3bqooza pGIZbymjq/x4klsAe6SK87ly91WbFZdnZe9xwFfEzhxWlE8tdpOTALdat7Gpe+41cPxx kfAr08RrdGSqKN9QWpHENbuaQwBInuMm+I9DB+XHCpSSangcnfQoIN+/jea9tAq1vnkZ UUYw== 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:cc:to:subject :message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=QDcRIpXupE0ceUCNKmt0N8h7jAXuVdBg0byQ2XOXOwA=; b=ArGqiMTQnJR6TAmHNMBc7NeMzx/slqafPrJblawmcObH8dkUmoIBi8A26u+7J4+Ym5 ulmFqbJSwZQ48/bbQp+m/mkdouXQHcJsIKdCobj/U3EWUI6szlMjsg9lqizV6MIOAVvq K5gUaYDoh30vQ6QAOXfX2pZ4jGmmSIqfL0SBUha2HyCrr5K+2/FbXDHxXbaKi1DgXgNX oB8FYmVl3qZYDcmbh0AFhFVGtc5niE6wm5tpRcYYu7O815J51mppP5dof0RCZuNdgGKI 6hdrWjMXDISltwJ71FWzmej4OH0gNVSV/XRzF9kpYGStyn3gWnCChVuWKOztx8Gwj5IT W1WA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@atishpatra.org header.s=google header.b=EEDwnHM7; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id o4si4248153eja.704.2020.06.12.10.45.12; Fri, 12 Jun 2020 10:45:35 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@atishpatra.org header.s=google header.b=EEDwnHM7; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726308AbgFLRnO (ORCPT + 99 others); Fri, 12 Jun 2020 13:43:14 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57558 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726085AbgFLRnO (ORCPT ); Fri, 12 Jun 2020 13:43:14 -0400 Received: from mail-wm1-x344.google.com (mail-wm1-x344.google.com [IPv6:2a00:1450:4864:20::344]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AA90AC03E96F for ; Fri, 12 Jun 2020 10:43:13 -0700 (PDT) Received: by mail-wm1-x344.google.com with SMTP id d128so9044095wmc.1 for ; Fri, 12 Jun 2020 10:43:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=atishpatra.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=QDcRIpXupE0ceUCNKmt0N8h7jAXuVdBg0byQ2XOXOwA=; b=EEDwnHM7jEpcxXM5UWzDIuEAmvX/9nJFqz423nqBjytBRolI4MHoMpzNLHPK+ZQuMW ZJFl5rPFZ9sgsJW+WuilyyJhK8zaoIPCErD/ZJeC0hhwXty6lr2c1angrf2fb481J89M EFxmh/r8RDX9FKQt8aWGccUIjr90397zCJrb4= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=QDcRIpXupE0ceUCNKmt0N8h7jAXuVdBg0byQ2XOXOwA=; b=ggTpTRWPR0IGVC1yM481k9Rntb2GsYA/UpK217xZv3JnWYbd3Jh3v0cghy4782g8CO 9y4RvRXl1ZgrKc/CaC2+8pQu6pbskarRtS485xQKydr5KfgPymV57F/5k6KqTPfMkcvI OWjiqrB6NKBZPTaL4poICEwgIjFyEGA5/wd2qkTWHH8QhV+Y0ayoWKgVSmyfPvYdXv55 O5cVquWSgaK1uaE/m1Jo0q/1eQq2jL9FX7wnkdWwjp7bMAzinw9mTC8lXU/oAZa9Q+Gt F1XwnRqju3WsmY5z8WxIDVLm7OTucZp4P20Lvpe1OCiYs84stB3k3z7Ow1rUKgc/FCo+ d8WA== X-Gm-Message-State: AOAM533vZqw9Pi4cyR2EnlFnEcLmrynjggwEhlFoWynN4APOPmKScyTh SOv0YZYCb1F9BA7iq3a8c264d3gu6gyoNIHF8pp3 X-Received: by 2002:a1c:23d2:: with SMTP id j201mr61345wmj.186.1591983792118; Fri, 12 Jun 2020 10:43:12 -0700 (PDT) MIME-Version: 1.0 References: <20200603153608.30056-1-alex@ghiti.fr> <7ad7057e-fdab-14ef-9bdb-c77ccefd208a@ghiti.fr> <36739fc4-21ea-14f4-f2a6-52614b602dea@ghiti.fr> <8867b8d5-4a15-fbc1-67e1-7fc48be6eae3@ghiti.fr> In-Reply-To: <8867b8d5-4a15-fbc1-67e1-7fc48be6eae3@ghiti.fr> From: Atish Patra Date: Fri, 12 Jun 2020 10:43:00 -0700 Message-ID: Subject: Re: [PATCH 0/2] PUD/PGDIR entries for linear mapping To: Alex Ghiti , Palmer Dabbelt Cc: Anup Patel , "linux-kernel@vger.kernel.org List" , Atish Patra , Paul Walmsley , linux-riscv Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Jun 12, 2020 at 6:17 AM Alex Ghiti wrote: > > Le 6/12/20 =C3=A0 8:59 AM, Alex Ghiti a =C3=A9crit : > > Hi Atish, > > > > Le 6/11/20 =C3=A0 1:29 PM, Atish Patra a =C3=A9crit : > >> On Wed, Jun 10, 2020 at 11:51 PM Alex Ghiti wrote: > >>> Hi Atish, > >>> > >>> Le 6/10/20 =C3=A0 2:32 PM, Atish Patra a =C3=A9crit : > >>>> On Wed, Jun 3, 2020 at 8:36 AM Alexandre Ghiti wrote= : > >>>>> This small patchset intends to use PUD/PGDIR entries for linear > >>>>> mapping > >>>>> in order to better utilize TLB. > >>>>> > >>>>> At the moment, only PMD entries can be used since on common platfor= ms > >>>>> (qemu/unleashed), the kernel is loaded at DRAM + 2MB which > >>>>> dealigns virtual > >>>>> and physical addresses and then prevents the use of PUD/PGDIR > >>>>> entries. > >>>>> So the kernel must be able to get those 2MB for PAGE_OFFSET to map > >>>>> the > >>>>> beginning of the DRAM: this is achieved in patch 1. > >>>>> > >>>> I don't have in depth knowledge of how mm code works so this questio= n > >>>> may be a completely > >>>> stupid one :). Just for my understanding, > >>>> As per my understanding, kernel will map those 2MB of memory but > >>>> never use it. > >>>> How does the kernel ensure that it doesn't allocate any memory from > >>>> those 2MB > >>>> memory if it is not marked as reserved? > >>> Yes, a 1GB hugepage will cover those 2MB: I rely on the previous boot > >>> stage to mark this region > >>> as reserved if there is something there (like opensbi). Otherwise, th= e > >>> kernel will indeed try to > >>> allocate memory from there :) > >>> > >> In that case, this patch mandates that the firmware region has to be > >> mark "reserved" > >> the device tree so that the Linux kernel doesn't try to allocate > >> memory from there. > >> OpenSBI is already doing it from v0.7. Thus, any user using latest > >> OpenSBI can leverage > >> this patch for a better TLB utilization. > > > > > > Note that *currently* OpenSBI v0.7 still adds the "no-map" property > > which prevents such optimization. > > Thanks for the clarification. When I said latest, I meant including your patch in the mailing list. > >> However, legacy previous boot stages(BBL) do not reserve this area via > >> DT which may > >> result in an unexpected crash. I am not sure how many developers still > >> use BBL though. > >> > >> Few general suggestions to tackle this problem: > >> 1. This mandatory requirement should be added to the booting document > >> so that any other > >> SBI implementation is also aware of it. > >> 2. You may have to move the patch1 to a separate config so that any > >> users of legacy boot stages > >> can disable this feature. > > > > > > IMHO, the region occupied by runtime services should be marked as > > reserved in the device-tree. So it seems redundant to add this as a > > requirement, I would rather consider its absence as a bug. > > I agree. I was just suggesting to document this bug :). > > Even if I understand that this might break some system, I don't like > > the idea of a new config to support old "buggy" bootloaders: when will > > we be able to remove it ? We'll never know when people will stop using > > those bootloaders, so it will stay here forever...Where can I find the Personally, I am fine with that. However, there were few concerns in the pa= st. I am leaving it to Palmer to decide. @Palmer Dabbelt : Any thoughts ? > > boot document you are talking about ? Can we simply state here that > > this kernel version will not be compatible with those bootloaders > > (we'll draw an exhaustive list here) ? > Yes. > > Ok, I have just found Documentation/riscv/boot-image-header.rst: could > we imagine doing something like incrementing the version and use that as > a hint in the kernel not to map the 2MB offset ? That's still legacy, > but at least it does not require to recompile a kernel as the check > would be done at runtime. > I was suggesting to add a risc-v specific booting document and document this "bug". Documentation/riscv/boot-image-header.rst can be linked from that document = or the boot hader content can be included in that. No changes in code is neces= sary. Eventually, this booting document will also include other additional booting constraints for RISC-V such as minimum extension required to boot Linux, csr state upon entering S-mode, mmu state. > > > > > Alex > > > > > >>> Alex > >>> > >>> > >>>>> But furthermore, at the moment, the firmware (opensbi) explicitly > >>>>> asks the > >>>>> kernel not to map the region it occupies, which is on those common > >>>>> platforms at the very beginning of the DRAM and then it also dealig= ns > >>>>> virtual and physical addresses. I proposed a patch here: > >>>>> > >>>>> https://github.com/riscv/opensbi/pull/167 > >>>>> > >>>>> that removes this 'constraint' but *not* all the time as it offers > >>>>> some > >>>>> kind of protection in case PMP is not available. So sometimes, we m= ay > >>>>> have a part of the memory below the kernel that is removed creating= a > >>>>> misalignment between virtual and physical addresses. So for > >>>>> performance > >>>>> reasons, we must at least make sure that PMD entries can be used: > >>>>> that > >>>>> is guaranteed by patch 1 too. > >>>>> > >>>>> Finally the second patch simply improves best_map_size so that > >>>>> whenever > >>>>> possible, PUD/PGDIR entries are used. > >>>>> > >>>>> Below is the kernel page table without this patch on a 6G platform: > >>>>> > >>>>> ---[ Linear mapping ]--- > >>>>> 0xffffc00000000000-0xffffc00176e00000 0x0000000080200000 5998M > >>>>> PMD D A . . . W R V > >>>>> > >>>>> And with this patchset + opensbi patch: > >>>>> > >>>>> ---[ Linear mapping ]--- > >>>>> 0xffffc00000000000-0xffffc00140000000 0x0000000080000000 > >>>>> 5G PUD D A . . . W R V > >>>>> 0xffffc00140000000-0xffffc00177000000 0x00000001c0000000 880M > >>>>> PMD D A . . . W R V > >>>>> > >>>>> Alexandre Ghiti (2): > >>>>> riscv: Get memory below load_pa while ensuring linear mapping > >>>>> is PMD > >>>>> aligned > >>>>> riscv: Use PUD/PGDIR entries for linear mapping when possible > >>>>> > >>>>> arch/riscv/include/asm/page.h | 8 ++++ > >>>>> arch/riscv/mm/init.c | 69 > >>>>> +++++++++++++++++++++++++++++------ > >>>>> 2 files changed, 65 insertions(+), 12 deletions(-) > >>>>> > >>>>> -- > >>>>> 2.20.1 > >>>>> > >>>>> > >> > > --=20 Regards, Atish