Received: by 2002:ac0:a581:0:0:0:0:0 with SMTP id m1-v6csp3837583imm; Mon, 2 Jul 2018 06:30:41 -0700 (PDT) X-Google-Smtp-Source: ADUXVKIESbFJ5avueOmGnd4IrP+QSM2jhCWKmdsoc/w0yiM2Z5M3bnAeeql8T2aL/4mpgGED26ds X-Received: by 2002:a63:8749:: with SMTP id i70-v6mr22163833pge.325.1530538241303; Mon, 02 Jul 2018 06:30:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1530538241; cv=none; d=google.com; s=arc-20160816; b=ZBZwGro/g/J6jggcFG2aRqgiS/3dchb+OTTo/2xqCsJ+ynf/tnjTbn19USK5gC9DI+ jP42pINBiOOBrnW8S8lgLY/fQC1EtsMynPUZSPYDr30odqNGqOC/4Yy8T5R51EXiOrlI Ibigl7ZgxPqvsA7UQzYriNsCjdc//sZ4i7Hsb7yLpEChKdw+yHl+0zuLUGxu1b/Q46uP Y0p7vMaIV6OorHcCI1U9MBmmGHqRXqihvSzOfXLu00dgnSj6ZlkbDqi2C+AlusdPj/YU oOKHMpcNWjF81Ypx+hUzfIFABCSkBfUYqUWZsARbZYW3M3Loqk0vHdJgSODeY4dLIA5b UwWw== 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=JBZcrsu/nCL5JusbYzOYTaYRhAgPr8MUpS+0l+zqim8=; b=S4ThgjmXPzIlJEoSpB9ezQJprhKnp4y6Xbzd2VTRsObugk+spm7V7XLOKJ5cc+yAa7 udLPWAxtx2DiVTCL1gLfBTQOQMHRntW58zrmQTsyso66Ed6vNwmwRg1fEGDo82bsp4QY B0/VgVew8Kvz4Eq4UcPUY2SF/RG7TCq+9d87C2KKotkpNaIq2wz6pRCIOeYu46oult1B 3nK65O+u9N+2qOU9NReWpGi5NNHY0EJ75fVeSYArlMB6SK6i60DWA8liGzhlScffxXQN duWeerlqKYrT9Dfie0N8Hljigoevr8fP7mXjMZRQB1gspHTmGFS81W7M53qi7cPOwxRQ MjGQ== 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 f9-v6si16016477plo.206.2018.07.02.06.30.14; Mon, 02 Jul 2018 06:30:41 -0700 (PDT) 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 S1752252AbeGBNYz (ORCPT + 99 others); Mon, 2 Jul 2018 09:24:55 -0400 Received: from foss.arm.com ([217.140.101.70]:60364 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751415AbeGBNYw (ORCPT ); Mon, 2 Jul 2018 09:24:52 -0400 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 A7CE718A; Mon, 2 Jul 2018 06:24:51 -0700 (PDT) Received: from [10.1.206.73] (en101.cambridge.arm.com [10.1.206.73]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 8FAA53F5AD; Mon, 2 Jul 2018 06:24:49 -0700 (PDT) Subject: Re: [PATCH v3 09/20] kvm: arm64: Make stage2 page table layout dynamic To: Auger Eric , linux-arm-kernel@lists.infradead.org Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, kvmarm@lists.cs.columbia.edu, james.morse@arm.com, marc.zyngier@arm.com, cdall@kernel.org, julien.grall@arm.com, will.deacon@arm.com, catalin.marinas@arm.com, punit.agrawal@arm.com, qemu-devel@nongnu.org References: <1530270944-11351-1-git-send-email-suzuki.poulose@arm.com> <1530270944-11351-10-git-send-email-suzuki.poulose@arm.com> <65475ac0-d156-c16e-bd91-438377326143@redhat.com> From: Suzuki K Poulose Message-ID: <22c070c4-aede-d699-774f-6212d05f7a59@arm.com> Date: Mon, 2 Jul 2018 14:24:47 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.8.0 MIME-Version: 1.0 In-Reply-To: <65475ac0-d156-c16e-bd91-438377326143@redhat.com> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Eric, On 02/07/18 13:14, Auger Eric wrote: > Hi Suzuki, > > On 06/29/2018 01:15 PM, Suzuki K Poulose wrote: >> So far we had a static stage2 page table handling code, based on a >> fixed IPA of 40bits. As we prepare for a configurable IPA size per >> VM, make our stage2 page table code dynamic, to do the right thing >> for a given VM. We ensure the existing condition is always true even >> when we lift the limit on the IPA. i.e, >> >> page table levels in stage1 >= page table levels in stage2 >> >> Support for the IPA size configuration needs other changes in the way >> we configure the EL2 registers (VTTBR and VTCR). So, the IPA is still >> fixed to 40bits. The patch also moves the kvm_page_empty() in asm/kvm_mmu.h >> to the top, before including the asm/stage2_pgtable.h to avoid a forward >> declaration. >> >> Cc: Marc Zyngier >> Cc: Christoffer Dall >> Signed-off-by: Suzuki K Poulose >> --- >> Changes since V2 >> - Restrict the stage2 page table to allow reusing the host page table >> helpers for now, until we get stage1 independent page table helpers. > I would move this up in the commit msg to motivate the fact we enforce > the able condition. This is mentioned in the commit message for the patch which lifts the limitation on the IPA. This patch only deals with the dynamic page table level handling, with the restriction on the levels. Nevertheless, I could add it to the description. >> --- >> arch/arm64/include/asm/kvm_mmu.h | 14 +- >> arch/arm64/include/asm/stage2_pgtable-nopmd.h | 42 ------ >> arch/arm64/include/asm/stage2_pgtable-nopud.h | 39 ----- >> arch/arm64/include/asm/stage2_pgtable.h | 207 +++++++++++++++++++------- >> 4 files changed, 159 insertions(+), 143 deletions(-) >> delete mode 100644 arch/arm64/include/asm/stage2_pgtable-nopmd.h >> delete mode 100644 arch/arm64/include/asm/stage2_pgtable-nopud.h > > with my very limited knowledge of S2 page table walkers I fail to > understand why we now can get rid of stage2_pgtable-nopmd.h and > stage2_pgtable-nopud.h and associated FOLDED config. Please could you > explain it in the commit message? As mentioned above, we have static page table helpers, which are decided at compile time (just like the stage1). So these files hold the definitions for the cases where PUD/PMD is folded and included for a given stage1 VA. But since we are now doing this check per VM, we make the decision by checking the kvm_stage2_levels(), instead of hard coding it. Does that help ? A short version of that is already there. May be I could elaborate that a bit. >> - >> -#define stage2_pgd_index(kvm, addr) \ >> - (((addr) >> S2_PGDIR_SHIFT) & (PTRS_PER_S2_PGD - 1)) >> +static inline unsigned long stage2_pgd_index(struct kvm *kvm, phys_addr_t addr) >> +{ >> + return (addr >> stage2_pgdir_shift(kvm)) & (stage2_pgd_ptrs(kvm) - 1); >> +} >> >> static inline phys_addr_t >> stage2_pgd_addr_end(struct kvm *kvm, phys_addr_t addr, phys_addr_t end) >> { >> - phys_addr_t boundary = (addr + S2_PGDIR_SIZE) & S2_PGDIR_MASK; >> + phys_addr_t boundary; >> >> + boundary = (addr + stage2_pgdir_size(kvm)) & stage2_pgdir_mask(kvm); >> return (boundary - 1 < end - 1) ? boundary : end; >> } >> >> > > Globally this patch is pretty hard to review. I don't know if it is > possible to split into 2. 1) Addition of some helper macros. 2) removal > of nopud and nopmd and implementation of the corresponding macros? I acknowledge that. The patch redefines the "existing" macros to make the decision at runtime based on the VM's setting. I will see if there is a better way to do it. Cheers Suzuki