From: "Wang, Lei" <lei4.wang@intel.com>
To: Peter Xu <peterx@redhat.com>, Wei Wang <wei.w.wang@intel.com>
Cc: farosas@suse.de, qemu-devel@nongnu.org
Subject: Re: [PATCH v2] migration/postcopy: ensure preempt channel is ready before loading states
Date: Sun, 7 Apr 2024 09:59:54 +0800 [thread overview]
Message-ID: <39fb6acc-a285-49c8-a7bb-c17abf383f45@intel.com> (raw)
In-Reply-To: <ZhByy4YvYl9xLmRP@x1n>
On 4/6/2024 5:53, Peter Xu wrote:> On Fri, Apr 05, 2024 at 11:40:56AM +0800, Wei
Wang wrote:
>> Before loading the guest states, ensure that the preempt channel has been
>> ready to use, as some of the states (e.g. via virtio_load) might trigger
>> page faults that will be handled through the preempt channel. So yield to
>> the main thread in the case that the channel create event hasn't been
>> dispatched.
>>
>> Originally-by: Lei Wang <lei4.wang@intel.com>
>> Link: https://lore.kernel.org/all/9aa5d1be-7801-40dd-83fd-f7e041ced249@intel.com/T/
>> Suggested-by: Peter Xu <peterx@redhat.com>
>
> The current version doesn't have any of my credits. :) Thanks, but I'll
> just drop it to reflect reality, so we keep the credit to the right ones.
>
>> Signed-off-by: Lei Wang <lei4.wang@intel.com>
>> Signed-off-by: Wei Wang <wei.w.wang@intel.com>
>> ---
>> migration/savevm.c | 17 +++++++++++++++++
>> 1 file changed, 17 insertions(+)
>>
>> diff --git a/migration/savevm.c b/migration/savevm.c
>> index 388d7af7cd..63f9991a8a 100644
>> --- a/migration/savevm.c
>> +++ b/migration/savevm.c
>> @@ -2342,6 +2342,23 @@ static int loadvm_handle_cmd_packaged(MigrationIncomingState *mis)
>>
>> QEMUFile *packf = qemu_file_new_input(QIO_CHANNEL(bioc));
>>
>> + /*
>> + * Before loading the guest states, ensure that the preempt channel has
>> + * been ready to use, as some of the states (e.g. via virtio_load) might
>> + * trigger page faults that will be handled through the preempt channel.
>> + * So yield to the main thread in the case that the channel create event
>> + * hasn't been dispatched.
>
> I'll squash below into it. If any of you disagree please shoot: valid
> until this Sunday.
I'm OK with it.
>
> + * TODO: if we can move migration loadvm out of main thread, then we
> + * won't block main thread from polling the accept() fds. We can drop
> + * this as a whole when that is done.
>
> Huge thanks to both!
Thank you Peter :)
>
>> + */
>> + do {
>> + if (!migrate_postcopy_preempt() || !qemu_in_coroutine() ||
>> + mis->postcopy_qemufile_dst) {
>> + break;
>> + }
>> +
>> + aio_co_schedule(qemu_get_current_aio_context(), qemu_coroutine_self());
>> + qemu_coroutine_yield();
>> + } while (1);
>> +
>> ret = qemu_loadvm_state_main(packf, mis);
>> trace_loadvm_handle_cmd_packaged_main(ret);
>> qemu_fclose(packf);
>> --
>> 2.27.0
>>
>
prev parent reply other threads:[~2024-04-07 2:01 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-05 3:40 [PATCH v2] migration/postcopy: ensure preempt channel is ready before loading states Wei Wang
2024-04-05 3:46 ` Wang, Wei W
2024-04-05 21:53 ` Peter Xu
2024-04-07 1:11 ` Wang, Wei W
2024-04-07 1:59 ` Wang, Lei [this message]
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=39fb6acc-a285-49c8-a7bb-c17abf383f45@intel.com \
--to=lei4.wang@intel.com \
--cc=farosas@suse.de \
--cc=peterx@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=wei.w.wang@intel.com \
/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.