pgdval_t
#define PMD_APTABLE (_AT(pgdval_t, 3) << PGD_APTABLE_SHIFT)
#define PMD_PXNTABLE (_AT(pgdval_t, 1) << 59)
typedef struct { pgdval_t pgd; } pgd_t;
typedef pgdval_t pgd_t;
#define L_PGD_SWAPPER (_AT(pgdval_t, 1) << 55) /* swapper_pg_dir entry */
static inline void __pgd_populate(pgd_t *pgdp, phys_addr_t p4dp, pgdval_t prot)
pgdval_t pgdval = PGD_TYPE_TABLE | PGD_TABLE_AF;
static inline void __pgd_populate(pgd_t *pgdp, phys_addr_t p4dp, pgdval_t prot)
#define PGD_TYPE_TABLE (_AT(pgdval_t, 3) << 0)
#define PGD_TYPE_MASK (_AT(pgdval_t, 3) << 0)
#define PGD_TABLE_AF (_AT(pgdval_t, 1) << 10) /* Ignored if no FEAT_HAFT */
#define PGD_TABLE_PXN (_AT(pgdval_t, 1) << 59)
#define PGD_TABLE_UXN (_AT(pgdval_t, 1) << 60)
typedef struct { pgdval_t pgd; } pgd_t;
pgdval_t pgdval = PGD_TYPE_TABLE | PGD_TABLE_UXN | PGD_TABLE_AF;
pgd[pgd_index(__START_KERNEL_map)] = (pgdval_t)p4d | _PAGE_TABLE;
pgd[i + 0] = (pgdval_t)p4d + pgtable_flags;
pgd[i + 1] = (pgdval_t)p4d + pgtable_flags;
p4d[(i + 0) % PTRS_PER_P4D] = (pgdval_t)pud + pgtable_flags;
p4d[(i + 1) % PTRS_PER_P4D] = (pgdval_t)pud + pgtable_flags;
pgd[i + 0] = (pgdval_t)pud + pgtable_flags;
pgd[i + 1] = (pgdval_t)pud + pgtable_flags;
pgdval_t *pgd;
static inline pgd_t __pgd(pgdval_t val)
return (pgd_t) { PVOP_ALT_CALLEE1(pgdval_t, pv_ops, mmu.make_pgd, val,
static inline pgdval_t pgd_val(pgd_t pgd)
return PVOP_ALT_CALLEE1(pgdval_t, pv_ops, mmu.pgd_val, pgd.pgd,
typedef struct { pgdval_t pgd; } pgd_t;
static inline pgd_t native_make_pgd(pgdval_t val)
static inline pgdval_t native_pgd_val(pgd_t pgd)
static inline pgdval_t pgd_flags(pgd_t pgd)
return (p4d_t) { .pgd = native_make_pgd((pgdval_t)val) };
*pgd_p = (pgdval_t)p4d_p - __START_KERNEL_map + phys_base + _KERNPG_TABLE;
pgdval_t pgd, *pgd_p;
pgdval_t xen_pgd_val(pgd_t pgd);
pgd_t xen_make_pgd(pgdval_t pgd);
__visible pgdval_t xen_pgd_val(pgd_t pgd)
__visible pgd_t xen_make_pgd(pgdval_t pgd)