1 typedef struct { 2 unsigned long pmd0; 3 unsigned long pmd1; 4 } pmd_t; 5 typedef unsigned int pgd_t; 6 struct mm_struct { 7 pgd_t * pgd; 8 }; pmd_bad(pmd_t pmd)9extern inline int pmd_bad(pmd_t pmd) 10 { 11 } pmd_clear(pmd_t * pmdp)12extern inline void pmd_clear(pmd_t * pmdp) 13 { 14 ((*pmdp).pmd0) = 0x20 | 0x00; 15 ((*pmdp).pmd1) = 0x20 | 0x00; 16 } free_one_pmd(pmd_t * dir)17static inline void free_one_pmd(pmd_t * dir) 18 { 19 if (pmd_bad(*dir)) { 20 pmd_clear(dir); 21 } 22 } free_one_pgd(pgd_t * dir)23static inline void free_one_pgd(pgd_t * dir) 24 { 25 int j; 26 pmd_t * pmd; 27 pmd = ((pmd_t *) ((unsigned long) (void *)(__pgd_val(dir) & (~((1UL << 12)-1)))) + (((0) >> 21) & (512 - 1))); 28 for (j = 0; j < 512 ; j++) { 29 free_one_pmd(pmd+j); 30 } 31 } clear_page_tables(struct mm_struct * mm,unsigned long first,int nr)32void clear_page_tables(struct mm_struct *mm, unsigned long first, int nr) 33 { 34 pgd_t * page_dir = mm->pgd; 35 do { 36 free_one_pgd(page_dir); 37 } while (--nr); 38 } 39