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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id BDB71C41535 for ; Tue, 19 Dec 2023 11:52:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=ryD32aKzS+OyMT37+S7vsPWxkSQq6Umsh/Mwq6kQ5EU=; b=Mr+j6Cad1kzq6z xEdomzxicg+drZ57nL7bhZ9W3ZagfVaQqTB/2zIXF3HUxMK5uWasKWC09UJyAADh9APpzdLhQxOO5 CQ56xVS7fOnf6HyW7nME+k1CCux03MZLoILeX8hx+9XIFepm9NhDMe1Yn/jifdQbyKHsNDS5fxFhs xd5z2d98ixTTrigOMueXMsuTWiX1b54O2YqPD2xYJPisspgoBNZygzCVNKXD8AScJqS+ooKcxMD1+ Fq565QJ3UWYW0XMqKM6Kw0ycqZWDAv3zl4ZjNZYqmDYGUKEt89MgNeZwG/QDyNFrVFV2AEUNqCLj/ +2iWOf5qxhjf6BP8IcWg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1rFYeF-00Dumu-1v; Tue, 19 Dec 2023 11:52:31 +0000 Received: from mail-wm1-x331.google.com ([2a00:1450:4864:20::331]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1rFYeD-00DumB-0t for linux-arm-kernel@lists.infradead.org; Tue, 19 Dec 2023 11:52:30 +0000 Received: by mail-wm1-x331.google.com with SMTP id 5b1f17b1804b1-40d2f67b930so235e9.0 for ; Tue, 19 Dec 2023 03:52:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1702986745; x=1703591545; darn=lists.infradead.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=6+saTyDFu3JKkTgh9+qAoCNDwyD6uD6EvbbNk9+tb9w=; b=ghxOupKYxRYFvREr1H2YgN7Was+Ud3vBKbrNVU4O90IiEOV8X9Pf4qtDxl0/qIC9gf ORShE/5XMb5BU3OcdD6TGgKDSn2RwSmVpaUmGE3+/e+6hJ+HnqFCLlbLCeeyVYxX56qW P4Q/W8hRw4PVQlpRPvqRqx1NYYXf2lWUHyo4VdKCECJgqcbKj2ZVvb0zHpOqbE+eNVAQ /dkg6+r9MG0Z5vq9ORm84ajshNYa/8PlfYvGfrn+aEf6kGV6YbFc+3dc3F208Xvn5eUx JrkyAq27dlORL9I56fOuaHZgizXa7YlFzu7+2HUYgwMGd3p1xjPghEt3pjsCoMLg87bu RXfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1702986745; x=1703591545; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=6+saTyDFu3JKkTgh9+qAoCNDwyD6uD6EvbbNk9+tb9w=; b=Skc3KXvYKLto7hpZPYPNXjUdP7wMeIpetlsPwvjZ4e+nFsPPY3OnsGQW4TTBgM4Qmz M0gBWqJ/MSUv6u626ID1I3MGDjffT9uYiDcbUkJALyCeGevrUfMWdSyT3ihNfhTTr8SB qaKKHg5pyEb1AsViAbw7CjbYKPUyxBI6m5Sp1H1Do56ZtlwjCxSNCEO4HiB73GzXim5l 3i2TaMSHOg1LM0+xX55KLC/qtajUNItZGjA9xvZKL5Tuc7hGPRqXnpREOtkysBWqJyHb taFUz0mj/bbcD0vQ4MbTsMsJUNNo1Fkt8NLImMVAchyg+ZP0agNrisYRzrMSzVyGBOr3 zLrQ== X-Gm-Message-State: AOJu0YwkyzjOPfunUHMiX/9MtAs+RRPCWEUUB6daUPsNDbest//pPnjK kiI7MpSo980ELIo9jN8HDK8UN7A7k+lf X-Google-Smtp-Source: AGHT+IEfwvB6yLTkW6Xj0KhpdwlCUZwWV8uL2NQqpHJVv121xmqn1IfvV6Yhn2ElHeo9GVfaU0O9zw== X-Received: by 2002:a1c:4b14:0:b0:40d:27c5:9c16 with SMTP id y20-20020a1c4b14000000b0040d27c59c16mr65533wma.0.1702986745036; Tue, 19 Dec 2023 03:52:25 -0800 (PST) Received: from google.com (185.83.140.34.bc.googleusercontent.com. [34.140.83.185]) by smtp.gmail.com with ESMTPSA id v14-20020a05600c444e00b0040c58e410a3sm2541375wmn.14.2023.12.19.03.52.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 Dec 2023 03:52:24 -0800 (PST) Date: Tue, 19 Dec 2023 11:52:22 +0000 From: Sebastian Ene To: will@kernel.org, Oliver Upton , James Morse , Suzuki K Poulose , Zenghui Yu , catalin.marinas@arm.com, mark.rutland@arm.com, akpm@linux-foundation.org, maz@kernel.org Cc: kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, kernel-team@android.com, vdonnefort@google.com, qperret@google.com, smostafa@google.com Subject: Re: [PATCH v4 10/10] arm64: ptdump: Add guest stage-2 pagetables dumping Message-ID: References: <20231218135859.2513568-2-sebastianene@google.com> <20231218135859.2513568-12-sebastianene@google.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20231218135859.2513568-12-sebastianene@google.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231219_035229_311639_3F820CDA X-CRM114-Status: GOOD ( 24.92 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org On Mon, Dec 18, 2023 at 01:59:00PM +0000, Sebastian Ene wrote: > Register a debugfs file on guest creation to be able to view their > second translation tables with ptdump. This assumes that the host is in > control of the guest stage-2 and has direct access to the pagetables. > > Signed-off-by: Sebastian Ene > --- > arch/arm64/kvm/debug.c | 6 ++++++ > arch/arm64/kvm/kvm_ptdump.h | 3 +++ > arch/arm64/kvm/ptdump.c | 35 ++++++++++++++++++++++++++++++++--- > 3 files changed, 41 insertions(+), 3 deletions(-) > > diff --git a/arch/arm64/kvm/debug.c b/arch/arm64/kvm/debug.c > index 8725291cb..7c4c2902d 100644 > --- a/arch/arm64/kvm/debug.c > +++ b/arch/arm64/kvm/debug.c > @@ -13,6 +13,7 @@ > #include > #include > #include > +#include > > #include "trace.h" > > @@ -342,3 +343,8 @@ void kvm_arch_vcpu_put_debug_state_flags(struct kvm_vcpu *vcpu) > vcpu_clear_flag(vcpu, DEBUG_STATE_SAVE_SPE); > vcpu_clear_flag(vcpu, DEBUG_STATE_SAVE_TRBE); > } > + > +int kvm_arch_create_vm_debugfs(struct kvm *kvm) > +{ > + return kvm_ptdump_register_guest(kvm); > +} > diff --git a/arch/arm64/kvm/kvm_ptdump.h b/arch/arm64/kvm/kvm_ptdump.h > index 98b595ce8..5f5a455d0 100644 > --- a/arch/arm64/kvm/kvm_ptdump.h > +++ b/arch/arm64/kvm/kvm_ptdump.h > @@ -6,13 +6,16 @@ > #ifndef __KVM_PTDUMP_H > #define __KVM_PTDUMP_H > > +#include > #include > > > #ifdef CONFIG_PTDUMP_STAGE2_DEBUGFS > void kvm_ptdump_register_host(void); > +int kvm_ptdump_register_guest(struct kvm *kvm); > #else > static inline void kvm_ptdump_register_host(void) { } > +static inline int kvm_ptdump_register_guest(struct kvm *kvm) { return -1; } > #endif /* CONFIG_PTDUMP_STAGE2_DEBUGFS */ > > #endif /* __KVM_PTDUMP_H */ > diff --git a/arch/arm64/kvm/ptdump.c b/arch/arm64/kvm/ptdump.c > index 4296e739f..62a753d6b 100644 > --- a/arch/arm64/kvm/ptdump.c > +++ b/arch/arm64/kvm/ptdump.c > @@ -181,6 +181,8 @@ static int kvm_ptdump_open(struct inode *inode, struct file *file) > info = reg->get_ptdump_info(reg); > if (!info) > return -ENOMEM; > + } else { > + info = inode->i_private; FIXME: Don't call kvm_ptdump_release with this ^ argument. > } > > if (!reg->show_ptdump_info) > @@ -239,15 +241,14 @@ static int kvm_ptdump_visitor(const struct kvm_pgtable_visit_ctx *ctx, > return 0; > } > > -static int kvm_ptdump_show(struct seq_file *m, void *) > +static int kvm_ptdump_show_common(struct seq_file *m, > + struct kvm_pgtable *pgtable) > { > u64 ipa_size; > char ipa_description[32]; > struct pg_state st; > struct addr_marker ipa_addr_markers[3] = {0}; > struct pg_level pg_level_descr[KVM_PGTABLE_MAX_LEVELS] = {0}; > - struct kvm_pgtable_snapshot *snapshot = m->private; > - struct kvm_pgtable *pgtable = &snapshot->pgtable; > struct kvm_pgtable_walker walker = (struct kvm_pgtable_walker) { > .cb = kvm_ptdump_visitor, > .arg = &st, > @@ -282,6 +283,26 @@ static int kvm_ptdump_show(struct seq_file *m, void *) > return kvm_pgtable_walk(pgtable, 0, ipa_size, &walker); > } > > +static int kvm_host_ptdump_show(struct seq_file *m, void *) > +{ > + struct kvm_pgtable_snapshot *snapshot = m->private; > + > + return kvm_ptdump_show_common(m, &snapshot->pgtable); > +} > + > +static int kvm_ptdump_show(struct seq_file *m, void *) > +{ > + struct kvm *guest_kvm = m->private; > + struct kvm_s2_mmu *mmu = &guest_kvm->arch.mmu; > + int ret; > + > + write_lock(&guest_kvm->mmu_lock); > + ret = kvm_ptdump_show_common(m, mmu->pgt); > + write_unlock(&guest_kvm->mmu_lock); > + > + return ret; > +} > + > static void kvm_ptdump_debugfs_register(struct kvm_ptdump_register *reg, > const char *name, struct dentry *parent) > { > @@ -393,11 +414,19 @@ void kvm_ptdump_register_host(void) > > host_reg.get_ptdump_info = kvm_host_get_ptdump_info; > host_reg.put_ptdump_info = kvm_host_put_ptdump_info; > + host_reg.show_ptdump_info = kvm_host_ptdump_show; > > kvm_ptdump_debugfs_register(&host_reg, "host_page_tables", > kvm_debugfs_dir); > } > > +int kvm_ptdump_register_guest(struct kvm *kvm) > +{ > + debugfs_create_file("stage2_page_tables", 0400, kvm->debugfs_dentry, > + kvm, &kvm_ptdump_fops); > + return 0; > +} > + > static int __init kvm_host_ptdump_init(void) > { > host_reg.priv = (void *)host_s2_pgtable_pages(); > -- > 2.43.0.472.g3155946c3a-goog > _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel