[PATCH v7 6/6] KVM: arm64: Expose guest stage-2 pagetable config to debugfs

Oliver Upton oliver.upton at linux.dev
Fri Jun 28 13:49:19 PDT 2024


On Fri, Jun 21, 2024 at 12:32:30PM +0000, Sebastian Ene wrote:
> Make the start level and the IPA bits properties available in the
> virtual machine debugfs directory. Make sure that the KVM structure
> doesn't disappear behind our back and keep a reference to the KVM struct
> while these files are opened.
> 
> Signed-off-by: Sebastian Ene <sebastianene at google.com>
> ---
>  arch/arm64/kvm/ptdump.c | 50 +++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 50 insertions(+)
> 
> diff --git a/arch/arm64/kvm/ptdump.c b/arch/arm64/kvm/ptdump.c
> index cc1d4fdddc6e..17649e3cbc8f 100644
> --- a/arch/arm64/kvm/ptdump.c
> +++ b/arch/arm64/kvm/ptdump.c
> @@ -215,8 +215,58 @@ static const struct file_operations kvm_ptdump_guest_fops = {
>  	.release	= kvm_ptdump_guest_close,
>  };
>  
> +static int kvm_pgtable_debugfs_show(struct seq_file *m, void *unused)
> +{
> +	const struct file *file = m->file;
> +	struct kvm_pgtable *pgtable = m->private;
> +
> +	if (!strcmp(file_dentry(file)->d_iname, "ipa_range"))
> +		seq_printf(m, "%2u\n", pgtable->ia_bits);
> +	else if (!strcmp(file_dentry(file)->d_iname, "stage2_levels"))
> +		seq_printf(m, "%1d\n", pgtable->start_level);

The name of the file suggests sounds like this is the number of page
table levels instead of the starting level of the walk.

So instead:

		seq_printf(m, "%1d\n",
			   KVM_PGTABLE_LAST_LEVEL - pgtable->start_level + 1);

> +	return 0;
> +}
> +
> +static int kvm_pgtable_debugfs_open(struct inode *m, struct file *file)
> +{
> +	struct kvm *kvm = m->i_private;
> +	struct kvm_s2_mmu *mmu;
> +	struct kvm_pgtable *pgtable;
> +	int ret;
> +
> +	if (!kvm_get_kvm_safe(kvm))
> +		return -ENOENT;
> +
> +	mmu = &kvm->arch.mmu;
> +	pgtable = mmu->pgt;

nitpick: pgtable = &kvm->arch.mmu.pgt

-- 
Thanks,
Oliver



More information about the linux-arm-kernel mailing list