[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <56C6FE6C.5050305@redhat.com>
Date: Fri, 19 Feb 2016 12:37:16 +0100
From: Paolo Bonzini <pbonzini@...hat.com>
To: Xiao Guangrong <guangrong.xiao@...ux.intel.com>
Cc: gleb@...nel.org, mtosatti@...hat.com, kvm@...r.kernel.org,
linux-kernel@...r.kernel.org, kai.huang@...ux.intel.com,
jike.song@...el.com
Subject: Re: [PATCH v3 05/11] KVM: page track: introduce
kvm_page_track_{add,remove}_page
On 14/02/2016 12:31, Xiao Guangrong wrote:
> + /* does tracking count wrap? */
> + WARN_ON((count > 0) && (val + count < val));
This doesn't work, because "val + count" is an int.
> + /* the last tracker has already gone? */
> + WARN_ON((count < 0) && (val < !count));
Also, here any underflow should warn.
You can actually use the fact that val + count is an int like this:
WARN_ON(val + count < 0 || val + count > USHRT_MAX)
and also please return if the warning fires.
> +void kvm_page_track_add_page(struct kvm *kvm, gfn_t gfn,
> + enum kvm_page_track_mode mode)
> +{
> + struct kvm_memslots *slots;
> + struct kvm_memory_slot *slot;
> + int i;
> +
> + for (i = 0; i < KVM_ADDRESS_SPACE_NUM; i++) {
> + slots = __kvm_memslots(kvm, i);
> +
> + slot = __gfn_to_memslot(slots, gfn);
> + if (!slot)
> + continue;
> +
> + spin_lock(&kvm->mmu_lock);
> + kvm_slot_page_track_add_page_nolock(kvm, slot, gfn, mode);
> + spin_unlock(&kvm->mmu_lock);
> + }
> +}
I don't think it is right to walk all address spaces. The good news is
that you're not using kvm_page_track_{add,remove}_page at all as far as
I can see, so you can just remove them.
Also, when you will need it, I think it's better to move the
spin_lock/spin_unlock pair outside the for loop. With this change,
perhaps it's better to leave it to the caller completely---but I cannot
say until I see the caller.
In the meanwhile, please leave out _nolock from the other functions' name.
Paolo
Powered by blists - more mailing lists