/* * Having the pmd type consist of a pud gets the size right, and allows * us to conceptually access the pud entry that this pmd is folded into * without casting.
*/ typedefstruct { pud_t pud; } pmd_t;
/* * The "pud_xxx()" functions here are trivial for a folded two-level * setup: the pmd is never bad, and a pmd always exists (as it's folded * into the pud entry)
*/ staticinlineint pud_none(pud_t pud) { return 0; } staticinlineint pud_bad(pud_t pud) { return 0; } staticinlineint pud_present(pud_t pud) { return 1; } staticinlineint pud_user(pud_t pud) { return 0; } staticinlineint pud_leaf(pud_t pud) { return 0; } staticinlinevoid pud_clear(pud_t *pud) { } #define pmd_ERROR(pmd) (pud_ERROR((pmd).pud))
#define pud_populate(mm, pmd, pte) do { } while (0)
/* * (pmds are folded into puds so this doesn't get actually called, * but the define is needed for a generic inline function.)
*/ #define set_pud(pudptr, pudval) set_pmd((pmd_t *)(pudptr), (pmd_t) { pudval })
/* * allocating and freeing a pmd is trivial: the 1-entry pmd is * inside the pud, so has no extra memory associated with it.
*/ #define pmd_alloc_one(mm, address) NULL staticinlinevoid pmd_free(struct mm_struct *mm, pmd_t *pmd)
{
} #define pmd_free_tlb(tlb, x, a) do { } while (0)
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.