+static u64 kvm_get_max_gfn(struct kvm *kvm)
+{
+ int num_gfn = -1;
+ struct kvm_memslots *slots = kvm_memslots(kvm);
+ struct kvm_memory_slot *memslot;
+ int gfn;
+
+ kvm_for_each_memslot(memslot, slots) {
+ gfn = memslot->base_gfn + memslot->npages;
+ if (gfn > num_gfn)
+ num_gfn = gfn;
+ }
+ return num_gfn - 1;
+}
This might be wrong if there are devices assigned to the guest, as each
assigned resource also occupies a memory slot. I assume you don't want
to monitor assigned resources, do you?
max gfn is only used for sanity check. When we are told to mark a page dirty,
or to reset the write trap for a page, we make sure that the gfn is valid.
When you were saying 'sanity check', I think you were meaning 'sanity
check' whether the gfn is guest memory, from which point your above code
might get a much *bigger* max_gfn than real one, as I explained above,
which basically makes your 'sanity check' meaningless, therefore you can
probably remove this code.
Btw 'gfn is valid' is very vague as gfn for assigned resource is
certainly valid as well.
Thanks,
-Kai
--
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