#ifndef __ASSEMBLY__ /* * Page size definition * * shift : is the "PAGE_SHIFT" value for that page size * sllp : is a bit mask with the value of SLB L || LP to be or'ed * directly to a slbmte "vsid" value * penc : is the HPTE encoding mask for the "LP" field: *
*/ struct mmu_psize_def { unsignedint shift; /* number of bits */ int penc[MMU_PAGE_COUNT]; /* HPTE encoding */ unsignedint tlbiel; /* tlbiel supported for that page size */ unsignedlong avpnm; /* bits to mask out in AVPN in the HPTE */ unsignedlong h_rpt_pgsize; /* H_RPT_INVALIDATE page size encoding */ union { unsignedlong sllp; /* SLB L||LP (exact mask to use in slbmte) */ unsignedlong ap; /* Ap encoding used by PowerISA 3.0 */
};
}; externstruct mmu_psize_def mmu_psize_defs[MMU_PAGE_COUNT]; #endif/* __ASSEMBLY__ */
/* Maximum possible number of NPUs in a system. */ #define NV_MAX_NPUS 8
typedefstruct { union { /* * We use id as the PIDR content for radix. On hash we can use * more than one id. The extended ids are used when we start * having address above 512TB. We allocate one extended id * for each 512TB. The new id is then used with the 49 bit * EA to build a new VA. We always use ESID_BITS_1T_MASK bits * from EA and new context ids to build the new VAs.
*/
mm_context_id_t id; #ifdef CONFIG_PPC_64S_HASH_MMU
mm_context_id_t extended_id[TASK_SIZE_USER64/TASK_CONTEXT_SIZE]; #endif
};
/* Number of bits in the mm_cpumask */
atomic_t active_cpus;
/* Number of users of the external (Nest) MMU */
atomic_t copros;
/* Number of user space windows opened in process mm_context */
atomic_t vas_windows;
void __user *vdso; /* * pagetable fragment support
*/ void *pte_frag; void *pmd_frag; #ifdef CONFIG_SPAPR_TCE_IOMMU struct list_head iommu_group_mem_list; #endif
#ifdef CONFIG_PPC_MEM_KEYS /* * Each bit represents one protection key. * bit set -> key allocated * bit unset -> key available for allocation
*/
u32 pkey_allocation_map;
s16 execute_only_pkey; /* key holding execute-only protection */ #endif
} mm_context_t;
externvoid hash__setup_initial_memory_limit(phys_addr_t first_memblock_base,
phys_addr_t first_memblock_size); staticinlinevoid setup_initial_memory_limit(phys_addr_t first_memblock_base,
phys_addr_t first_memblock_size)
{ /* * Hash has more strict restrictions. At this point we don't * know which translations we will pick. Hence go with hash * restrictions.
*/ if (!early_radix_enabled())
hash__setup_initial_memory_limit(first_memblock_base,
first_memblock_size);
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.