pg_level
static struct pg_level pg_level[] = {
if ((st->current_prot & pg_level[st->level].ro_bit->mask) ==
pg_level[st->level].ro_bit->val)
if ((st->current_prot & pg_level[st->level].nx_bit->mask) ==
pg_level[st->level].nx_bit->val)
u64 prot = val & pg_level[level].mask;
pg_level[st->level].name);
if (pg_level[st->level].bits)
dump_prot(st, pg_level[st->level].bits, pg_level[st->level].num);
for (i = 0; i < ARRAY_SIZE(pg_level); i++)
if (pg_level[i].bits)
for (j = 0; j < pg_level[i].num; j++) {
pg_level[i].mask |= pg_level[i].bits[j].mask;
if (pg_level[i].bits[j].ro_bit)
pg_level[i].ro_bit = &pg_level[i].bits[j];
if (pg_level[i].bits[j].nx_bit)
pg_level[i].nx_bit = &pg_level[i].bits[j];
struct ptdump_pg_level *pg_level;
.pg_level = &st->level[0],
struct ptdump_pg_level *pg_level = st->pg_level;
prot = val & pg_level[level].mask;
pg_level[st->level].name);
if (st->current_prot && pg_level[st->level].bits)
dump_prot(st, pg_level[st->level].bits,
pg_level[st->level].num);
.pg_level = &kernel_pg_levels[0],
.pg_level = &kernel_pg_levels[0],
struct ptdump_pg_level pg_level[5] = {
struct ptdump_pg_level pg_level[5] = {
pt_dump_seq_printf(st->seq, "%s ", pg_level[st->level].name);
u64 flag = level >= 0 ? val & pg_level[level].mask : 0;
u64 flag = level >= 0 ? val & pg_level[level].mask : 0;
if (pg_level[st->level].flag)
dump_flag_info(st, pg_level[st->level].flag,
pg_level[st->level].num);
for (i = 0; i < ARRAY_SIZE(pg_level); i++)
if (pg_level[i].flag)
for (j = 0; j < pg_level[i].num; j++)
pg_level[i].mask |= pg_level[i].flag[j].mask;
extern struct ptdump_pg_level pg_level[5];
struct ptdump_pg_level pg_level[5] = {
static struct pg_level pg_level[] = {
pg_level[st->level].name);
prot = val & pg_level[level].mask;
pg_level[1].name = pgtable_l5_enabled ? "P4D" : "PGD";
pg_level[2].name = pgtable_l4_enabled ? "PUD" : "PGD";
for (i = 0; i < ARRAY_SIZE(pg_level); i++)
pg_level[i].mask |= pte_bits[j].mask;
switch (pg_level) {
enum pg_level pg_level)
unsigned long accept_size = page_level_size(pg_level);
int (*link_external_spt)(struct kvm *kvm, gfn_t gfn, enum pg_level level,
int (*set_external_spte)(struct kvm *kvm, gfn_t gfn, enum pg_level level,
int (*free_external_spt)(struct kvm *kvm, gfn_t gfn, enum pg_level level,
void (*remove_external_spte)(struct kvm *kvm, gfn_t gfn, enum pg_level level,
static inline int page_level_shift(enum pg_level level)
static inline unsigned long page_level_size(enum pg_level level)
static inline unsigned long page_level_mask(enum pg_level level)
int rmp_make_private(u64 pfn, u64 gpa, enum pg_level level, u32 asid, bool immutable);
int rmp_make_shared(u64 pfn, enum pg_level level);
static inline int rmp_make_private(u64 pfn, u64 gpa, enum pg_level level, u32 asid,
static inline int rmp_make_shared(u64 pfn, enum pg_level level) { return -ENODEV; }
static inline int pg_level_to_tdx_sept_level(enum pg_level level)
static int kvm_rmp_make_shared(struct kvm *kvm, u64 pfn, enum pg_level level)
static int tdx_mem_page_add(struct kvm *kvm, gfn_t gfn, enum pg_level level,
enum pg_level level, kvm_pfn_t pfn)
enum pg_level level, u64 mirror_spte)
enum pg_level level, void *private_spt)
enum pg_level level, void *private_spt)
enum pg_level level, u64 mirror_spte)
enum pg_level level;
enum pg_level level;
int rmp_make_private(u64 pfn, u64 gpa, enum pg_level level, u32 asid, bool immutable)
int rmp_make_shared(u64 pfn, enum pg_level level)