Re: kvm memslot questions

Radim Krčmář
2016-12-12T15:17:23Z

2016-12-12 17:18+0800, jack.chen:
> hello,now I want to know which GFN of VM is available,so I set
> kvm_userspace_mem->flags |= 0x1; in kvm_vm_ioctl function ,so KVM can
> create dirty_bitmap for slots

The caller of KVM_SET_USER_MEMORY_REGION knows which GFNs are
"available", because it configures that into
kvm_userspace_mem->guest_phys_addr and kvm_userspace_mem->size.

KVM knows which GFNs are "available", because it remembers all memory
regions that were configured.

> case KVM_SET_USER_MEMORY_REGION: {
> struct kvm_userspace_memory_region kvm_userspace_mem;
>
> ……
> kvm_userspace_mem->flags |= 0x1;

Why do you want to use the dirty page bitmap in KVM?

> r = kvm_vm_ioctl_set_memory_region(kvm, &kvm_userspace_mem);
> break;
>
> and I have 2 questions:
> 1.
> if corresponding bit is setted,the GFN is used by VM,other than it is
> available!right?

The GFN is always available.
If the corresponding bit in dirty log is set, then the GFN was modified
since userspace did the last KVM_GET_DIRTY_LOG ioctl.

> 2、
> how to check wheather the bit is 1 or not,the test_bit function
> returns -1 to me,I do not know if I use wrong function!
> thanks in advance!!!

test_bit() from arch/x86/include/asm/bitops.h returns bool so there is
something wrong with your test_bit().

In any case, see kvm_vm_ioctl_get_dirty_log() for what is needed to
access the dirty log.