PTRS_PER_PMD
BUILD_BUG_ON((PTRS_PER_PMD * sizeof(pmd_t)) > PAGE_SIZE);
for (i = 0; i < PTRS_PER_PMD; i++, pmd++) {
if (PTRS_PER_PMD != 1)
PTRS_PER_PMD * sizeof(pmd_t));
pmd_t tmp_pmd_table[PTRS_PER_PMD] __page_aligned_bss;
PTRS_PER_PGD * PTRS_PER_PMD * sizeof(pmd_t))
clean_dcache_area(new_pmd, PTRS_PER_PMD * sizeof(pmd_t));
pfn &= ~(PTRS_PER_PMD - 1);
static pmd_t bm_pmd[PTRS_PER_PMD] __page_aligned_bss __maybe_unused;
for (i = 0; i < PTRS_PER_PMD; i++) {
for (i = 0; i < PTRS_PER_PMD; i++, pmdp++, pfn += step)
for (; (k < PTRS_PER_PMD) && (vaddr != end); pmd++, k++) {
min(PTRS_PER_PGD * PTRS_PER_PUD * PTRS_PER_PMD * PTRS_PER_PTE * PAGE_SIZE, (1UL << cpu_vabits)) - PMD_SIZE - VMEMMAP_SIZE - KFENCE_AREA_SIZE)
min(PTRS_PER_PGD * PTRS_PER_PUD * PTRS_PER_PMD * PTRS_PER_PTE * PAGE_SIZE, (1UL << cpu_vabits) / 2) - PMD_SIZE - VMEMMAP_SIZE - KFENCE_AREA_SIZE)
extern pmd_t invalid_pmd_table[PTRS_PER_PMD];
DEFINE(_PTRS_PER_PMD, PTRS_PER_PMD);
pmd_t invalid_pmd_table[PTRS_PER_PMD] __page_aligned_bss;
end = p + PTRS_PER_PMD;
for (j = 0; j < PTRS_PER_PMD; j++) {
last_pmd_table += PTRS_PER_PMD;
min(PTRS_PER_PGD * PTRS_PER_PUD * PTRS_PER_PMD * PTRS_PER_PTE * PAGE_SIZE, \
extern pmd_t invalid_pmd_table[PTRS_PER_PMD];
DEFINE(_PTRS_PER_PMD, PTRS_PER_PMD);
bool safe_to_remove = (i_min == 0 && i_max == PTRS_PER_PMD - 1);
for (; (k < PTRS_PER_PMD) && (vaddr < end); pmd++, k++) {
pmd_t invalid_pmd_table[PTRS_PER_PMD] __page_aligned_bss;
end = p + PTRS_PER_PMD;
uasm_i_andi(p, scratch, scratch, (PTRS_PER_PMD - 1) << 3);
pwsize |= ilog2(PTRS_PER_PMD) << MIPS_PWSIZE_MDW_SHIFT;
uasm_i_andi(p, tmp, tmp, (PTRS_PER_PMD - 1)<<3);
(((address) >> PMD_SHIFT) & (PTRS_PER_PMD-1))
start_pmd = ((start_vaddr >> PMD_SHIFT) & (PTRS_PER_PMD - 1));
for (tmp1 = start_pmd; tmp1 < PTRS_PER_PMD; tmp1++, pmd++) {
pmd_t pmd0[PTRS_PER_PMD] __section(".data..vm0.pmd") __attribute__ ((aligned(PAGE_SIZE)));
BUILD_BUG_ON(PT_INITIAL > PTRS_PER_PMD);
return *(char **)(pmdp + PTRS_PER_PMD);
for (im = 0; im < PTRS_PER_PMD; ++im, ++p) {
pgtable_slot = (pgtable_t *)pmdp + PTRS_PER_PMD;
pgtable_slot = (pgtable_t *)pmdp + PTRS_PER_PMD;
pgtable_slot = (pgtable_t *)pmdp + PTRS_PER_PMD;
offset = PTRS_PER_PMD;
offset = PTRS_PER_PMD;
for (i = 0; i < PTRS_PER_PMD; i++) {
for (i = 0; i < PTRS_PER_PMD; i++) {
for (i = 0; i < PTRS_PER_PMD; i++)
for (i = 0; i < PTRS_PER_PMD; i++)
for (i = 0; i < PTRS_PER_PMD; i++, pmd++) {
#define pmd_index(addr) (((addr) >> PMD_SHIFT) & (PTRS_PER_PMD - 1))
hfn &= ~(PTRS_PER_PMD - 1);
for (i = 0; i < PTRS_PER_PMD; i++) {
static pmd_t trampoline_pmd[PTRS_PER_PMD] __page_aligned_bss;
static pmd_t fixmap_pmd[PTRS_PER_PMD] __page_aligned_bss;
static pmd_t early_pmd[PTRS_PER_PMD] __initdata __aligned(PAGE_SIZE);
for (i = 0; i < PTRS_PER_PMD; ++i)
p = memblock_alloc_or_panic(PTRS_PER_PMD * sizeof(pmd_t), PAGE_SIZE);
for (i = 0; i < PTRS_PER_PMD; ++i, ++pmdp_new)
for (i = 0; i < PTRS_PER_PMD; i++) {
#define pmd_index(address) (((address) >> PMD_SHIFT) & (PTRS_PER_PMD-1))
for (i = 0; i < PTRS_PER_PMD; i++) {
update_page_count(PG_DIRECT_MAP_1M, PTRS_PER_PMD);
mask = ~(PTRS_PER_PMD * sizeof(pmd_t) - 1);
for (i = 0; i < PTRS_PER_PMD; i++, pmd++)
if (PTRS_PER_PMD != 1)
for (; (k < PTRS_PER_PMD) && (vaddr != end); pmd++, k++) {
PTRS_PER_PMD * (1<<PTE_MAGNITUDE),
#define SRMMU_PMD_TABLE_SIZE (PTRS_PER_PMD*4)
for (i = 0; i < PTRS_PER_PMD; i++) {
extern pmd_t early_dynamic_pgts[EARLY_DYNAMIC_PAGE_TABLES][PTRS_PER_PMD];
pmd[idx % PTRS_PER_PMD] = pmd_entry + i * PMD_SIZE;
for (; i < PTRS_PER_PMD; i++)
early_snp_set_memory_shared(paddr, paddr, PTRS_PER_PMD);
pmd_t (*early_pgts)[PTRS_PER_PMD] = rip_rel_ptr(early_dynamic_pgts);
memset(pmd, 0, sizeof(*pmd) * PTRS_PER_PMD);
ppd->pgtable_area += sizeof(*pmd) * PTRS_PER_PMD;
entries += (DIV_ROUND_UP(len, PUD_SIZE) + 1) * sizeof(pmd_t) * PTRS_PER_PMD;
tables += DIV_ROUND_UP(entries, PUD_SIZE) * sizeof(pmd_t) * PTRS_PER_PMD;
#if PTRS_PER_PMD > 1
#define PAGE_TABLE_SIZE(pages) (((pages) / PTRS_PER_PMD) + PTRS_PER_PGD)
#define ESPFIX_PMD_CLONES PTRS_PER_PMD
memset(pmd_p, 0, sizeof(*pmd_p) * PTRS_PER_PMD);
extern pmd_t early_dynamic_pgts[EARLY_DYNAMIC_PAGE_TABLES][PTRS_PER_PMD];
if (IS_ALIGNED(pfn, PTRS_PER_PMD))
kvm_zap_gfn_range(kvm, gfn, gfn + PTRS_PER_PMD);
kvm_pfn_t pfn_aligned = ALIGN_DOWN(pfn, PTRS_PER_PMD);
is_pfn_range_shared(pfn_aligned, pfn_aligned + PTRS_PER_PMD))
pfn_aligned = ALIGN_DOWN(pfn, PTRS_PER_PMD);
gfn_aligned = ALIGN_DOWN(gfn, PTRS_PER_PMD);
use_2m_update = IS_ALIGNED(pfn, PTRS_PER_PMD) &&
end >= (pfn + PTRS_PER_PMD) &&
pfn += use_2m_update ? PTRS_PER_PMD : 1;
#define PUD_LEVEL_MULT (PTRS_PER_PMD * PMD_LEVEL_MULT)
for (i = 0; i < PTRS_PER_PMD; i++) {
for (; (pmd_idx < PTRS_PER_PMD) && (vaddr != end);
for (; (pmd_idx < PTRS_PER_PMD) && (vaddr != end);
for (; pmd_idx < PTRS_PER_PMD && pfn < end_pfn;
for (i = 0; i < PTRS_PER_PMD; i++) {
for (; i < PTRS_PER_PMD; i++, paddr = paddr_next) {
for (i = 0; i < PTRS_PER_PMD; i++)
for (i = 1, pmd++; i < PTRS_PER_PMD; i++, pmd++) {
for (i = 0; i < PTRS_PER_PMD; i++)
sizeof(pmd_t) * PTRS_PER_PMD);
sizeof(pmd_t) * PTRS_PER_PMD);
for (i = 0; i < PTRS_PER_PMD; i++) {
for (i = 0; i < PTRS_PER_PMD; i++) {
for (pmd_idx = 0; pmd_idx < PTRS_PER_PMD; pmd++, pmd_idx++) {
pfn_i = ALIGN_DOWN(pfn, PTRS_PER_PMD);
pfn_end = pfn_i + PTRS_PER_PMD;
(!IS_ALIGNED(pfn, PTRS_PER_PMD) || !pfn_valid(pfn + PTRS_PER_PMD - 1)))
for (; vaddr <= vaddr_end && (pmd < (level2_kernel_pgt + PTRS_PER_PMD));
static pmd_t level2_ident_pgt[PTRS_PER_PMD] __page_aligned_bss;
for (i = 0; i < PTRS_PER_PMD; i++) {
for (i = 0; i < PTRS_PER_PMD; ++i) {
for (idx_pt = 0; idx_pt < min(n_pt, PTRS_PER_PMD);
n_pt -= PTRS_PER_PMD;
nr = last ? pmd_index(limit) + 1 : PTRS_PER_PMD;
if (PTRS_PER_PMD > 1)
#define MSHV_MAP_FAULT_IN_PAGES PTRS_PER_PMD
!IS_ALIGNED(gfn, PTRS_PER_PMD) ||
!IS_ALIGNED(page_count, PTRS_PER_PMD))
if (!(pfn % PTRS_PER_PMD)) {
atomic_long_add(PTRS_PER_PMD * sizeof(pmd_t), &mm->pgtables_bytes);
atomic_long_sub(PTRS_PER_PMD * sizeof(pmd_t), &mm->pgtables_bytes);
unsigned long mask = ~(PTRS_PER_PMD * sizeof(pmd_t) - 1);
#define MAX_PTRS_PER_PMD PTRS_PER_PMD
return (address >> PMD_SHIFT) & (PTRS_PER_PMD - 1);
for (i = 0; i < PTRS_PER_PMD; i++) {
if (depth == 3 && PTRS_PER_PMD == 1)
if (i < PTRS_PER_PMD && get_next_vma(PUD_MASK, PMD_SIZE, args, &start, &end))