Received: by 10.192.165.148 with SMTP id m20csp582923imm; Fri, 27 Apr 2018 04:16:27 -0700 (PDT) X-Google-Smtp-Source: AB8JxZq07C3XMW9WUYRgW4mSi4swvafmphkrsXVy7lHxsir5la5CO8P6BlM2X0sT0Z2eYHUBnAo7 X-Received: by 10.167.130.22 with SMTP id k22mr1847774pfi.73.1524827787755; Fri, 27 Apr 2018 04:16:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1524827787; cv=none; d=google.com; s=arc-20160816; b=vxB+llGgVgOdU3Gf+EbJp44X8LVidlJJn5pZK8y/1IIfKFAqlDoVjSNvteFw9N8DZS CCPrI2J9ZGwbVNgHun0lyH4Kqh/REfo+x9TeP/J3BTfUl0vl4rkTkIw17HfDivoE/Bz1 9LilvBpkum0GGsKRc7PJ5KQqjEx4q7N3u7HAi6KQUM6StB0V+ndlg/2mKp2/hR5bOUlW y2Di19C4QxJGejFE5gGFBDFv3qxGR0e03GSySNLWeyYpccuP7yx8CTVLqIxXhPUYxKBF CTRbLpJvDBGEmZzTUOnUyEUnvbfuqFQHvKldiUxBV/x+X/VTCBNnsDgS1fVFcQ7hSWcY nVTQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:arc-authentication-results; bh=ua5fapFHGnBJzM2b13gd+99ZUupCverMLGD1//f2/l0=; b=UtxhVdWZcLdICEa4E6iASPY/0wv2VxpWz0Tsl+w7YYssPEeFvR6b0l2f7aRm/ExIac Kv0Wg9FO3qyWZsGI8M8SrP+lI9MjDy90g6fFeK6DZ8BAXshE69ftGC30Jn9nRwKyAj+p dbiq1v0gZKPX19u7460xSbsXOOse7q21LbLJU0teL+Uw4Ky7jFgfFOFQ1/lm/uwmuDqj y3yX+0jpt/Au6yn1ZZBpHxYVLO1iwmBwnJWsG7H4+RgPup6LGzHYhwf6XkEaV8Mx1loE ZhCpYxolIIHalR9+eWrfI0HQUuQdQ2Y8FejcAqaBH8dex8wBLUfOdMLLtMfmKJXNpCs1 /gOw== 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 b65-v6si1063033plb.162.2018.04.27.04.16.13; Fri, 27 Apr 2018 04:16:27 -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 S1757462AbeD0LOz (ORCPT + 99 others); Fri, 27 Apr 2018 07:14:55 -0400 Received: from usa-sjc-mx-foss1.foss.arm.com ([217.140.101.70]:38660 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751464AbeD0LOx (ORCPT ); Fri, 27 Apr 2018 07:14:53 -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 239DA165D; Fri, 27 Apr 2018 04:14:53 -0700 (PDT) Received: from localhost (unknown [10.37.9.163]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 82E293F4FF; Fri, 27 Apr 2018 04:14:52 -0700 (PDT) Date: Fri, 27 Apr 2018 13:14:50 +0200 From: Christoffer Dall To: Punit Agrawal Cc: kvmarm@lists.cs.columbia.edu, linux-arm-kernel@lists.infradead.org, marc.zyngier@arm.com, linux-kernel@vger.kernel.org, suzuki.poulose@arm.com, Russell King , Catalin Marinas , Will Deacon Subject: Re: [PATCH 3/4] KVM: arm64: Support dirty page tracking for PUD hugepages Message-ID: <20180427111450.GN13249@C02W217FHV2R.local> References: <20180420145409.24485-1-punit.agrawal@arm.com> <20180420145409.24485-4-punit.agrawal@arm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20180420145409.24485-4-punit.agrawal@arm.com> User-Agent: Mutt/1.9.4 (2018-02-28) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Apr 20, 2018 at 03:54:08PM +0100, Punit Agrawal wrote: > In preparation for creating PUD hugepages at stage 2, add support for > write protecting PUD hugepages when they are encountered. Write > protecting guest tables is used to track dirty pages when migrating > VMs. > > Also, provide trivial implementations of required kvm_s2pud_* helpers > to allow sharing of code with arm32. > > Signed-off-by: Punit Agrawal > Cc: Christoffer Dall > Cc: Marc Zyngier > Cc: Russell King > Cc: Catalin Marinas > Cc: Will Deacon > --- > arch/arm/include/asm/kvm_mmu.h | 16 ++++++++++++++++ > arch/arm64/include/asm/kvm_mmu.h | 10 ++++++++++ > virt/kvm/arm/mmu.c | 9 ++++++--- > 3 files changed, 32 insertions(+), 3 deletions(-) > > diff --git a/arch/arm/include/asm/kvm_mmu.h b/arch/arm/include/asm/kvm_mmu.h > index 5907a81ad5c1..224c22c0a69c 100644 > --- a/arch/arm/include/asm/kvm_mmu.h > +++ b/arch/arm/include/asm/kvm_mmu.h > @@ -80,6 +80,22 @@ void kvm_clear_hyp_idmap(void); > > #define kvm_pmd_mkhuge(pmd) pmd_mkhuge(pmd) > > +/* > + * The following kvm_*pud*() functionas are provided strictly to allow > + * sharing code with arm64. They should never be called in practice. > + */ > +static inline void kvm_set_s2pud_readonly(pud_t *pud) > +{ > + BUG(); > +} > + > +static inline bool kvm_s2pud_readonly(pud_t *pud) > +{ > + BUG(); > + return false; > +} > + > + > static inline void kvm_set_pmd(pmd_t *pmd, pmd_t new_pmd) > { > *pmd = new_pmd; > diff --git a/arch/arm64/include/asm/kvm_mmu.h b/arch/arm64/include/asm/kvm_mmu.h > index d962508ce4b3..f440cf216a23 100644 > --- a/arch/arm64/include/asm/kvm_mmu.h > +++ b/arch/arm64/include/asm/kvm_mmu.h > @@ -240,6 +240,16 @@ static inline bool kvm_s2pmd_exec(pmd_t *pmdp) > return !(READ_ONCE(pmd_val(*pmdp)) & PMD_S2_XN); > } > > +static inline void kvm_set_s2pud_readonly(pud_t *pudp) > +{ > + kvm_set_s2pte_readonly((pte_t *)pudp); > +} > + > +static inline bool kvm_s2pud_readonly(pud_t *pudp) > +{ > + return kvm_s2pte_readonly((pte_t *)pudp); > +} > + > static inline bool kvm_page_empty(void *ptr) > { > struct page *ptr_page = virt_to_page(ptr); > diff --git a/virt/kvm/arm/mmu.c b/virt/kvm/arm/mmu.c > index f72ae7a6dea0..5f53909da90e 100644 > --- a/virt/kvm/arm/mmu.c > +++ b/virt/kvm/arm/mmu.c > @@ -1286,9 +1286,12 @@ static void stage2_wp_puds(pgd_t *pgd, phys_addr_t addr, phys_addr_t end) > do { > next = stage2_pud_addr_end(addr, end); > if (!stage2_pud_none(*pud)) { > - /* TODO:PUD not supported, revisit later if supported */ > - BUG_ON(stage2_pud_huge(*pud)); > - stage2_wp_pmds(pud, addr, next); > + if (stage2_pud_huge(*pud)) { > + if (!kvm_s2pud_readonly(pud)) > + kvm_set_s2pud_readonly(pud); > + } else { > + stage2_wp_pmds(pud, addr, next); > + } > } > } while (pud++, addr = next, addr != end); > } > -- > 2.17.0 > Reviewed-by: Christoffer Dall