CnUnix

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ CnUnix ] in KIDS
글 쓴 이(By): sang (Grid)
날 짜 (Date): 2007년 12월 11일 화요일 오전 09시 17분 11초
제 목(Title): [Q] Linux page table



kernel 2.4까지는 simple하게 pgd->pmd->pte 찾아서 32bit physical address를 
잘 찾아서 써 왔었는데, kernel 2.6으로 porting하려다보니 몇가지 문제가 
발생합니다. 주 원인이 PAE, HIGHMEM64 때문인 것 같은데 어떻게 대처해야 할지
난감하네요.

제가 원하는 것은 user process가 malloc으로 할당받은 memory에 대해서 
page lock을 걸고, 해당 page의 physical address를 알아낸 후 PCI bus에 
물려있는 특정 device에게 알려주는 것입니다. 그런데, PAE+HIGHMEM64가 되면서
pte entry가 64bit이 되어버렸고, matching되는 pte entry를 찾았다 하더라도
pte.pte_high, pte.pte_low 라는 2개의 32bit address를 어떻게 써야 할지..

어차피 32bit machine이니까 pte.pte_low만 가지고도 되지 않을까 싶어서(-_-) 
pa = pte.pte_low & PAGE_MASK로 시도해 보았으나 안 먹히는거 같네요.
PAE를 썼어도 운좋게 몇번 돌아가면 필요한 데이터만 뽑아 쓸려고 했는데..흑..

미리 감사드리며...

추신.
target은 x86 32bit Xeon with 4GB RAM 입니다. 

[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.