From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id AE675C43334 for ; Tue, 28 Jun 2022 18:54:05 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id ED5B28E0001; Tue, 28 Jun 2022 14:54:04 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id E85CA6B0072; Tue, 28 Jun 2022 14:54:04 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D758F8E0001; Tue, 28 Jun 2022 14:54:04 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id CBC0D6B0071 for ; Tue, 28 Jun 2022 14:54:04 -0400 (EDT) Received: from smtpin15.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 9932736CE3 for ; Tue, 28 Jun 2022 18:54:04 +0000 (UTC) X-FDA: 79628544408.15.E5877AB Received: from out2.migadu.com (out2.migadu.com [188.165.223.204]) by imf18.hostedemail.com (Postfix) with ESMTP id CD9301C0012 for ; Tue, 28 Jun 2022 18:54:03 +0000 (UTC) Date: Tue, 28 Jun 2022 18:53:55 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1656442441; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=htPFhHOsa3d7/VGnFqnbz5VFkkx8xDdtzMvjjntEVQQ=; b=d6djTxUwEkHGAYEqJ+FSn4G/FZeJSZoQaoOZxxQhJaqcI2qvYIgXT+trdlZ0GWC661TwyO 1oiSHS8oHUyMAMhElHKJhcjJFylgZXvccpHWWmhbSO2Tv35HgJpLHoM6RfUaZ/baIXg/yK KB8JzslXVDM8K4q77AikRR+g7gpG87A= X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. From: Oliver Upton To: Yosry Ahmed Cc: Tejun Heo , Johannes Weiner , Zefan Li , Marc Zyngier , James Morse , Alexandru Elisei , Suzuki K Poulose , Paolo Bonzini , Sean Christopherson , Vitaly Kuznetsov , Wanpeng Li , Jim Mattson , Joerg Roedel , Andrew Morton , Michal Hocko , Roman Gushchin , Shakeel Butt , kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, cgroups@vger.kernel.org, kvmarm@lists.cs.columbia.edu, linux-arm-kernel@lists.infradead.org Subject: Re: [PATCH v5 4/4] KVM: arm64/mmu: count KVM s2 mmu usage in secondary pagetable stats Message-ID: References: <20220606222058.86688-1-yosryahmed@google.com> <20220606222058.86688-5-yosryahmed@google.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20220606222058.86688-5-yosryahmed@google.com> X-Migadu-Flow: FLOW_OUT X-Migadu-Auth-User: linux.dev ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1656442444; a=rsa-sha256; cv=none; b=GHtSZY0EmFdYM+hYBXXio2q2dnXEnfU9nWbH5+hdxFhARzA/DhQBjYTKMbPxQph409OGzh xHmRDSdtjNL1rCjjEqbOcUCIu/IfShI2M6lEkYFSc7BJzXMK5Liv3dg5Zr3CyzSh16DZiX uDt2gV4lWOQrday9i5yriNnaYNO2gAU= ARC-Authentication-Results: i=1; imf18.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=d6djTxUw; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf18.hostedemail.com: domain of oliver.upton@linux.dev designates 188.165.223.204 as permitted sender) smtp.mailfrom=oliver.upton@linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1656442444; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=htPFhHOsa3d7/VGnFqnbz5VFkkx8xDdtzMvjjntEVQQ=; b=hdmpx/VF8R1hn8z2mWQGpEiTnSUAkbLKiAOyAqO8x1i7yovN6toDIIWgN2EAkak5vAjl5U m85FyhqCvw2vH7OEVNcLE6FfIrzKnsxE2Xrz+9IECQQ6dvJu6N8ZtOjGIIvDB2nLjcgr4N oPoXETkCo0YTPLECtdQzClJtaj1lvMw= X-Stat-Signature: 1ff3g814mq5paf8c1hog65rd9cprf6h9 X-Rspam-User: X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: CD9301C0012 Authentication-Results: imf18.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=d6djTxUw; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf18.hostedemail.com: domain of oliver.upton@linux.dev designates 188.165.223.204 as permitted sender) smtp.mailfrom=oliver.upton@linux.dev X-HE-Tag: 1656442443-336270 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Hi Yosry, On Mon, Jun 06, 2022 at 10:20:58PM +0000, Yosry Ahmed wrote: > Count the pages used by KVM in arm64 for stage2 mmu in secondary pagetable > stats. You could probably benefit from being a bit more verbose in the commit message here as well, per Sean's feedback. > Signed-off-by: Yosry Ahmed > --- > arch/arm64/kvm/mmu.c | 36 ++++++++++++++++++++++++++++++++---- > 1 file changed, 32 insertions(+), 4 deletions(-) > > diff --git a/arch/arm64/kvm/mmu.c b/arch/arm64/kvm/mmu.c > index f5651a05b6a85..80bc92601fd96 100644 > --- a/arch/arm64/kvm/mmu.c > +++ b/arch/arm64/kvm/mmu.c > @@ -92,9 +92,13 @@ static bool kvm_is_device_pfn(unsigned long pfn) > static void *stage2_memcache_zalloc_page(void *arg) > { > struct kvm_mmu_memory_cache *mc = arg; > + void *virt; > > /* Allocated with __GFP_ZERO, so no need to zero */ > - return kvm_mmu_memory_cache_alloc(mc); > + virt = kvm_mmu_memory_cache_alloc(mc); > + if (virt) > + kvm_account_pgtable_pages(virt, 1); > + return virt; > } > > static void *kvm_host_zalloc_pages_exact(size_t size) > @@ -102,6 +106,21 @@ static void *kvm_host_zalloc_pages_exact(size_t size) > return alloc_pages_exact(size, GFP_KERNEL_ACCOUNT | __GFP_ZERO); > } > > +static void *kvm_s2_zalloc_pages_exact(size_t size) > +{ > + void *virt = kvm_host_zalloc_pages_exact(size); > + > + if (virt) > + kvm_account_pgtable_pages(virt, (size >> PAGE_SHIFT)); > + return virt; > +} > + > +static void kvm_s2_free_pages_exact(void *virt, size_t size) > +{ > + kvm_account_pgtable_pages(virt, -(size >> PAGE_SHIFT)); > + free_pages_exact(virt, size); > +} > + > static void kvm_host_get_page(void *addr) > { > get_page(virt_to_page(addr)); > @@ -112,6 +131,15 @@ static void kvm_host_put_page(void *addr) > put_page(virt_to_page(addr)); > } > > +static void kvm_s2_put_page(void *addr) > +{ > + struct page *p = virt_to_page(addr); > + /* Dropping last refcount, the page will be freed */ > + if (page_count(p) == 1) > + kvm_account_pgtable_pages(addr, -1); > + put_page(p); Probably more of a note to myself with the parallel fault series, but this is a race waiting to happen. This only works because stage 2 pages are dropped behind the write lock. Besides the commit message nit: Reviewed-by: Oliver Upton