Re: [PATCH v3 07/16] KVM: selftests: Move PTE bitmasks to kvm_mmu
From: Sean Christopherson
Date: Tue Dec 23 2025 - 17:31:40 EST
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)))