1typedef struct { 2 unsigned long pmd0; 3 unsigned long pmd1; 4} pmd_t; 5typedef unsigned int pgd_t; 6struct mm_struct { 7 pgd_t * pgd; 8}; 9extern inline int pmd_bad(pmd_t pmd) 10{ 11} 12extern inline void pmd_clear(pmd_t * pmdp) 13{ 14 ((*pmdp).pmd0) = 0x20 | 0x00; 15 ((*pmdp).pmd1) = 0x20 | 0x00; 16} 17static inline void free_one_pmd(pmd_t * dir) 18{ 19 if (pmd_bad(*dir)) { 20 pmd_clear(dir); 21 } 22} 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} 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