4.4 do_swap_page
仍然有很多參數:http://lxr.free-electrons.com/source/mm/memory.c?v=4.4#L2439
2446 static int do_swap_page(struct mm_struct *mm, struct vm_area_struct *vma,
2447 unsigned long address, pte_t *page_table, pmd_t *pmd,
2448 unsigned int flags, pte_t orig_pte)
,這是called從handle_pte_fault
功能http://lxr.free-electrons.com/source/mm/memory.c?v=4.4#L3257
3272 static int handle_pte_fault(struct mm_struct *mm,
3273 struct vm_area_struct *vma, unsigned long address,
3274 pte_t *pte, pmd_t *pmd, unsigned int flags)
3275 {
3276 pte_t entry;
3287 entry = *pte;
3289 if (!pte_present(entry)) {
3298 return do_swap_page(mm, vma, address,
3299 pte, pmd, flags, entry);
所以,第二pte_t orig_pte
只是原來PTE的副本, pte_t *page_table
是指向將是mod的pte條目的指針指明分數與新PTE(實際的代碼將是這樣*page_table = pte
):
2560 pte = mk_pte(page, vma->vm_page_prot);
2570 set_pte_at(mm, address, page_table, pte);
最新[do_swap_page](http://lxr.free-electrons.com/source/mm/memory.c#L2534)接受單指針到'struct vm_fault'。該結構的每個字段都用[struct的定義](http://lxr.free-electrons.com/source/include/linux/mm.h#L294)本身來描述。可能,你會發現它對你的目的有用。 – Tsyvarev
感謝您的回覆@Tsyvarev。你的答案是有幫助的,但我仍然不需要傳遞這兩個參數或它們之間的差異。 –