2017-10-25 0:27 GMT+09:00 Paolo Bonzini <pbonzini@xxxxxxxxxx>: > On 24/10/2017 15:49, Ren Kimura wrote: >> Hi. >> I'm using KVM guest page tracking API like, >> kvm_page_track_register_notifier/kvm_page_track_add_page for my >> project. >> https://lwn.net/Articles/675571/ >> >> But I can't catch some points about these API. So would anyone help me? >> >> My primary question is how track_write is called? >> track_write hook function seems to be called by kvm_page_track_write >> from emulator_write_phys. >> >> https://github.com/torvalds/linux/blob/3206e7d5e25ef94b5a29e2c81e6fb8d5fb48422f/arch/x86/kvm/x86.c#L4601 >> >> But page hook is set by removing write permission from spte. (assuming >> direct shadow paging case) >> When EPT violation happen due to writing this page, how is >> emulator_write_phys called? > > When kvm_mmu_page_fault calls vcpu->arch.mmu.page_fault, the > implementation of the function (tdp_page_fault for EPT) calls > page_fault_handle_page_track. > > If page_fault_handle_page_track says that the page is being tracked, > tdp_page_fault returns 1 which causes emulation to run. (As an aside, > the magic "1" will change to RET_PF_EMULATE in 4.15, which is more > self-explanatory). > > Paolo Aha. I see!! Thank you so much:) Ren