pgd_offset이 약간 이상하여 질문드립니다.
글쓴이: lmk378 / 작성시간: 화, 2011/04/12 - 4:15오후
다음은 pgd_offset 메크로 입니다.
// arch/arm/include/asm/pgtable.h
110 #define PGDIR_SHIFT 21
...
376 #define pgd_index(addr) ((addr) >> PGDIR_SHIFT)
377
378 #define pgd_offset(mm, addr) ((mm)->pgd+pgd_index(addr))
즉 가상주소를 21만큼 right shift시켜 mm->pgd에 더해주는 작업을 하는 메크로 입니다.
헌데 실제 동작하는 것을 보면 다음과 같습니다.(제가 테스트용으로 만든 module의 출력메시지 입니다.)
// pgd_module.c
62 pgd = pgd_offset(current->mm, vaddr);
//실행
vaddr : be8917d0
[ 500.842212] mm->pgd : 0xecc48000
[ 500.845354] pgd : 0xecc4afa0
헌데 메크로와 같이 vaddr(0xbe8917d0)를 21번 right shift해서 mm->pgd(0xecc48000)와 더해서 나온 pgd 값은 0xecc4afa0이 아닌
0xecc485f4 가 나와야 정상인데요. 왜 저렇게 나오는걸까요?
arm을 제외한 다른 arch 소스를 지우고 태킹을 한거라 잘못찾아간것 같지도 않습니다.
Forums:
댓글 달기