From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
To: Peter Xu <peterx@redhat.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>,
qemu-devel@nongnu.org, "Michael S . Tsirkin" <mst@redhat.com>
Subject: Re: [PATCH RFC 4/9] KVM: Create the KVMSlot dirty bitmap on flag changes
Date: Wed, 25 Mar 2020 17:44:24 +0000 [thread overview]
Message-ID: <20200325174424.GC2635@work-vm> (raw)
In-Reply-To: <20200205141749.378044-5-peterx@redhat.com>
* Peter Xu (peterx@redhat.com) wrote:
> Previously we have two places that will create the per KVMSlot dirty
> bitmap:
>
> 1. When a newly created KVMSlot has dirty logging enabled,
> 2. When the first log_sync() happens for a memory slot.
>
> The 2nd case is lazy-init, while the 1st case is not (which is a fix
> of what the 2nd case missed).
>
> To do explicit initialization of dirty bitmaps, what we're missing is
> to create the dirty bitmap when the slot changed from not-dirty-track
> to dirty-track. Do that in kvm_slot_update_flags().
>
> With that, we can safely remove the 2nd lazy-init.
>
> This change will be needed for kvm dirty ring because kvm dirty ring
> does not use the log_sync() interface at all.
>
> Since at it, move all the pre-checks into kvm_slot_init_dirty_bitmap().
'While at it' or just Also
> Signed-off-by: Peter Xu <peterx@redhat.com>
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
> ---
> accel/kvm/kvm-all.c | 23 +++++++++--------------
> 1 file changed, 9 insertions(+), 14 deletions(-)
>
> diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c
> index 4be3cd2352..bb635c775f 100644
> --- a/accel/kvm/kvm-all.c
> +++ b/accel/kvm/kvm-all.c
> @@ -162,6 +162,8 @@ static NotifierList kvm_irqchip_change_notifiers =
> #define kvm_slots_lock(kml) qemu_mutex_lock(&(kml)->slots_lock)
> #define kvm_slots_unlock(kml) qemu_mutex_unlock(&(kml)->slots_lock)
>
> +static void kvm_slot_init_dirty_bitmap(KVMSlot *mem);
> +
> int kvm_get_max_memslots(void)
> {
> KVMState *s = KVM_STATE(current_accel());
> @@ -442,6 +444,7 @@ static int kvm_slot_update_flags(KVMMemoryListener *kml, KVMSlot *mem,
> return 0;
> }
>
> + kvm_slot_init_dirty_bitmap(mem);
> return kvm_set_user_memory_region(kml, mem, false);
> }
>
> @@ -526,8 +529,12 @@ static int kvm_get_dirty_pages_log_range(MemoryRegionSection *section,
> #define ALIGN(x, y) (((x)+(y)-1) & ~((y)-1))
>
> /* Allocate the dirty bitmap for a slot */
> -static void kvm_memslot_init_dirty_bitmap(KVMSlot *mem)
> +static void kvm_slot_init_dirty_bitmap(KVMSlot *mem)
> {
> + if (!(mem->flags & KVM_MEM_LOG_DIRTY_PAGES) || mem->dirty_bmap) {
> + return;
> + }
> +
> /*
> * XXX bad kernel interface alert
> * For dirty bitmap, kernel allocates array of size aligned to
> @@ -578,11 +585,6 @@ static int kvm_physical_sync_dirty_bitmap(KVMMemoryListener *kml,
> goto out;
> }
>
> - if (!mem->dirty_bmap) {
> - /* Allocate on the first log_sync, once and for all */
> - kvm_memslot_init_dirty_bitmap(mem);
> - }
> -
> d.dirty_bitmap = mem->dirty_bmap;
> d.slot = mem->slot | (kml->as_id << 16);
> if (kvm_vm_ioctl(s, KVM_GET_DIRTY_LOG, &d) == -1) {
> @@ -1079,14 +1081,7 @@ static void kvm_set_phys_mem(KVMMemoryListener *kml,
> mem->start_addr = start_addr;
> mem->ram = ram;
> mem->flags = kvm_mem_flags(mr);
> -
> - if (mem->flags & KVM_MEM_LOG_DIRTY_PAGES) {
> - /*
> - * Reallocate the bmap; it means it doesn't disappear in
> - * middle of a migrate.
> - */
> - kvm_memslot_init_dirty_bitmap(mem);
> - }
> + kvm_slot_init_dirty_bitmap(mem);
> err = kvm_set_user_memory_region(kml, mem, true);
> if (err) {
> fprintf(stderr, "%s: error registering slot: %s\n", __func__,
> --
> 2.24.1
>
>
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
next prev parent reply other threads:[~2020-03-25 17:47 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-02-05 14:17 [PATCH RFC 0/9] KVM: Dirty ring support (QEMU part) Peter Xu
2020-02-05 14:17 ` [PATCH RFC 1/9] KVM: Fixup kvm_log_clear_one_slot() ioctl return check Peter Xu
2020-03-25 16:34 ` Dr. David Alan Gilbert
2020-03-25 17:43 ` Peter Xu
2020-02-05 14:17 ` [PATCH RFC 2/9] linux-headers: Update Peter Xu
2020-02-05 14:17 ` [PATCH RFC 3/9] memory: Introduce log_sync_global() to memory listener Peter Xu
2020-03-25 16:52 ` Dr. David Alan Gilbert
2020-03-25 17:02 ` Peter Xu
2020-02-05 14:17 ` [PATCH RFC 4/9] KVM: Create the KVMSlot dirty bitmap on flag changes Peter Xu
2020-03-25 17:44 ` Dr. David Alan Gilbert [this message]
2020-02-05 14:17 ` [PATCH RFC 5/9] KVM: Provide helper to get kvm dirty log Peter Xu
2020-03-25 17:52 ` Dr. David Alan Gilbert
2020-03-25 18:15 ` Peter Xu
2020-02-05 14:17 ` [PATCH RFC 6/9] KVM: Provide helper to sync dirty bitmap from slot to ramblock Peter Xu
2020-03-25 18:47 ` Dr. David Alan Gilbert
2020-02-05 14:17 ` [PATCH RFC 7/9] KVM: Cache kvm slot dirty bitmap size Peter Xu
2020-03-25 18:49 ` Dr. David Alan Gilbert
2020-02-05 14:17 ` [PATCH RFC 8/9] KVM: Add dirty-ring-size property Peter Xu
2020-03-25 20:00 ` Dr. David Alan Gilbert
2020-03-25 20:42 ` Peter Xu
2020-03-26 13:41 ` Dr. David Alan Gilbert
2020-03-26 16:03 ` Peter Xu
2020-03-25 20:14 ` Dr. David Alan Gilbert
2020-03-25 20:48 ` Peter Xu
2020-02-05 14:17 ` [PATCH RFC 9/9] KVM: Dirty ring support Peter Xu
2020-03-25 20:41 ` Dr. David Alan Gilbert
2020-03-25 21:32 ` Peter Xu
2020-03-26 14:14 ` Dr. David Alan Gilbert
2020-03-26 16:10 ` Peter Xu
2020-02-05 14:51 ` [PATCH RFC 0/9] KVM: Dirty ring support (QEMU part) no-reply
2020-03-03 17:32 ` Peter Xu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200325174424.GC2635@work-vm \
--to=dgilbert@redhat.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peterx@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.