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
[email protected]
https://lists.sourceforge.net/lists/listinfo/kvm-devel