*参照元 [#a26b2e5d] #backlinks *説明 [#a1d06f23] -パス: [[linux-4.4.1/]] -パス: [[linux-4.4.1/mm/memory.c]] -FIXME: これは何? --説明 **引数 [#q527db35] -struct mm_struct *mm -- --[[linux-4.4.1/mm_struct]] -pud_t *pud -- --[[linux-4.4.1/pud_t]] -unsigned long addr -- -unsigned long end -- -unsigned long pfn -- -pgprot_t prot -- --[[linux-4.4.1/pgprot_t]] **返り値 [#wa01fd4b] -int -- **参考 [#j7637401] *実装 [#w273b3b9] static inline int remap_pmd_range(struct mm_struct *mm, pud_t *pud, unsigned long addr, unsigned long end, unsigned long pfn, pgprot_t prot) { pmd_t *pmd; unsigned long next; pfn -= addr >> PAGE_SHIFT; pmd = pmd_alloc(mm, pud, addr); if (!pmd) return -ENOMEM; - --[[linux-4.4.1/PAGE_SHIFT]] --[[linux-4.4.1/pmd_alloc()]] VM_BUG_ON(pmd_trans_huge(*pmd)); - --[[linux-4.4.1/VM_BUG_ON()]] --[[linux-4.4.1/pmd_trans_huge()]] do { next = pmd_addr_end(addr, end); - --[[linux-4.4.1/pmd_addr_end()]] if (remap_pte_range(mm, pmd, addr, next, pfn + (addr >> PAGE_SHIFT), prot)) return -ENOMEM; - --[[linux-4.4.1/remap_pte_range()]] } while (pmd++, addr = next, addr != end); return 0; } *コメント [#kab5793e]