[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <aUsYSvd2gBOKt9fo@google.com>
Date: Tue, 23 Dec 2025 14:31:38 -0800
From: Sean Christopherson <seanjc@...gle.com>
To: Yosry Ahmed <yosry.ahmed@...ux.dev>
Cc: Paolo Bonzini <pbonzini@...hat.com>, kvm@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH v3 07/16] KVM: selftests: Move PTE bitmasks to kvm_mmu
On Thu, Nov 27, 2025, Yosry Ahmed wrote:
> @@ -1449,11 +1439,44 @@ enum pg_level {
> #define PG_SIZE_2M PG_LEVEL_SIZE(PG_LEVEL_2M)
> #define PG_SIZE_1G PG_LEVEL_SIZE(PG_LEVEL_1G)
>
> +struct pte_masks {
> + uint64_t present;
> + uint64_t writable;
> + uint64_t user;
> + uint64_t accessed;
> + uint64_t dirty;
> + uint64_t huge;
> + uint64_t nx;
> + uint64_t c;
> + uint64_t s;
> +};
> +
> struct kvm_mmu {
> uint64_t root_gpa;
> int pgtable_levels;
> + struct pte_masks pte_masks;
And then introduce kvm_mmu_arch so that x86 can shove pte_masks into the mmu.
> };
>
> +#define PTE_PRESENT_MASK(mmu) ((mmu)->pte_masks.present)
> +#define PTE_WRITABLE_MASK(mmu) ((mmu)->pte_masks.writable)
> +#define PTE_USER_MASK(mmu) ((mmu)->pte_masks.user)
> +#define PTE_ACCESSED_MASK(mmu) ((mmu)->pte_masks.accessed)
> +#define PTE_DIRTY_MASK(mmu) ((mmu)->pte_masks.dirty)
> +#define PTE_HUGE_MASK(mmu) ((mmu)->pte_masks.huge)
> +#define PTE_NX_MASK(mmu) ((mmu)->pte_masks.nx)
> +#define PTE_C_MASK(mmu) ((mmu)->pte_masks.c)
> +#define PTE_S_MASK(mmu) ((mmu)->pte_masks.s)
> +
> +#define pte_present(mmu, pte) (!!(*(pte) & PTE_PRESENT_MASK(mmu)))
I very, very strongly prefer is_present_pte(), is_huge_pte(), etc.
> +#define pte_writable(mmu, pte) (!!(*(pte) & PTE_WRITABLE_MASK(mmu)))
> +#define pte_user(mmu, pte) (!!(*(pte) & PTE_USER_MASK(mmu)))
> +#define pte_accessed(mmu, pte) (!!(*(pte) & PTE_ACCESSED_MASK(mmu)))
> +#define pte_dirty(mmu, pte) (!!(*(pte) & PTE_DIRTY_MASK(mmu)))
> +#define pte_huge(mmu, pte) (!!(*(pte) & PTE_HUGE_MASK(mmu)))
> +#define pte_nx(mmu, pte) (!!(*(pte) & PTE_NX_MASK(mmu)))
> +#define pte_c(mmu, pte) (!!(*(pte) & PTE_C_MASK(mmu)))
> +#define pte_s(mmu, pte) (!!(*(pte) & PTE_S_MASK(mmu)))
Powered by blists - more mailing lists