Avi Kivity wrote: > Earlier we check if the accessed bit is off, and if so, we > don't set the > shadow pte. This won't happen in practice because the guest's page > fault handler will set the accessed bit when it modifies a pte > to avoid > an RMW cycle by the hardware page table walker. > Thanks! That is good enough. BTW, in kvm_mmu_pte_write, I feel a little bit stranger for following code:
> level = page->role.level; > npte = 1; > if (page->role.glevels == PT32_ROOT_LEVEL) { > page_offset <<= 1; /* 32->64 */ > /* > * A 32-bit pde maps 4MB while the shadow pdes > map > * only 2MB. So we need to double the offset > again > * and zap two pdes instead of one. > */ if (level == PT32_ROOT_LEVEL) { > page_offset &= ~7; /* kill rounding > error */ page_offset <<= 1; > npte = 2; 1st of all, do we have 2MB pde in shadow PT? I think we don't provide contiguous physical mfn for shadow PT. If page->role.level == PT32_ROOT_LEVEL, sequencial call of mmu_pte_write_new_pte will simply return w/o any real spte operation. Does this ever happen w/ a real spte write? I tried a 32 bits FC5 with no found of this combination till Linux boot. > } > quadrant = page_offset >> PAGE_SHIFT; > page_offset &= ~PAGE_MASK; > if (quadrant != page->role.quadrant) > continue; > } > spte = &page->spt[page_offset / sizeof(*spte)]; > while (npte--) { > mmu_pte_write_zap_pte(vcpu, page, spte); > mmu_pte_write_new_pte(vcpu, page, > spte, new, bytes); If above comments is correct, we need to provide an increased (gfn) gpte so that the next 2MB spte can have right gfn from gpte. Am I missing something? > ++spte; > } Thx,eddie ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ _______________________________________________ kvm-devel mailing list kvm-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/kvm-devel