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