On 04/29/2010 09:09 PM, Marcelo Tosatti wrote:
You missed quadrant on 4mb large page emulation with shadow (see updated patch below).
Good catch.
Also for some reason i can't understand the assumption does not hold for large sptes with TDP, so reverted for now.
It's unrelated to TDP, same issue with shadow. I think the calculation is correct. For example the 4th spte for a level=2 page will yield gfn=4*512.
@@ -393,6 +393,27 @@ static void mmu_free_rmap_desc(struct kvm_rmap_desc *rd) kfree(rd); } +static gfn_t kvm_mmu_page_get_gfn(struct kvm_mmu_page *sp, int index) +{ + gfn_t gfn; + + if (!sp->role.direct) + return sp->gfns[index]; + + gfn = sp->gfn + index * (1<< (sp->role.level - 1) * PT64_LEVEL_BITS); + gfn += sp->role.quadrant<< PT64_LEVEL_BITS;
PT64_LEVEL_BITS * level
+ + return gfn; +} +
-- I have a truly marvellous patch that fixes the bug which this signature is too narrow to contain. -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html