On Thu, Nov 11, 2010 at 06:38:47PM +0000, Prasad Joshi wrote: > Hello All, > > I have question on code of rmap_add > > Here is the code of the function > > 613 static int rmap_add(struct kvm_vcpu *vcpu, u64 *spte, gfn_t gfn) > 614 { > > 624 rmapp = gfn_to_rmap(vcpu->kvm, gfn, sp->role.level); > 625 if (!*rmapp) { > 626 rmap_printk("rmap_add: %p %llx 0->1\n", spte, *spte); > 627 *rmapp = (unsigned long)spte; > 628 } else if (!(*rmapp & 1)) { > 629 rmap_printk("rmap_add: %p %llx 1->many\n", spte, *spte); > 630 desc = mmu_alloc_rmap_desc(vcpu); > 631 desc->sptes[0] = (u64 *)*rmapp; > 632 desc->sptes[1] = spte; > 633 *rmapp = (unsigned long)desc | 1; > 634 ++count; > 635 } else { > > The line 628 checks whether the last bit of the rmapp is 1. > If it is one then line 633 assigns a new value to rmapp with and sets > the last bit to 1. No, line 628 checks if the last bit is not 1, so the check works. Joerg -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html