Prasad Pandit <ppan...@redhat.com> writes:

> From: Prasad Pandit <p...@fedoraproject.org>
>
> During multifd migration, zero pages are are written if
> they are migrated more than ones.

s/ones/once/

>
> This may result in a migration hang issue when Multifd
> and Postcopy are enabled together.
>
> When Postcopy is enabled, always write zero pages as and
> when they are migrated.
>
> Signed-off-by: Prasad Pandit <p...@fedoraproject.org>

This patch should come before 1/3, otherwise it'll break bisect.

> ---
>  migration/multifd-zero-page.c | 22 ++++++++++++++++++++--
>  1 file changed, 20 insertions(+), 2 deletions(-)
>
> v10: new patch, not present in v9 or earlier versions.
>
> diff --git a/migration/multifd-zero-page.c b/migration/multifd-zero-page.c
> index dbc1184921..9bfb3ef803 100644
> --- a/migration/multifd-zero-page.c
> +++ b/migration/multifd-zero-page.c
> @@ -85,9 +85,27 @@ void multifd_recv_zero_page_process(MultiFDRecvParams *p)
>  {
>      for (int i = 0; i < p->zero_num; i++) {
>          void *page = p->host + p->zero[i];
> -        if (ramblock_recv_bitmap_test_byte_offset(p->block, p->zero[i])) {
> +
> +        /*
> +         * During multifd migration zero page is written to the memory
> +         * only if it is migrated more than ones.

s/ones/once/

> +         *
> +         * It becomes a problem when both Multifd & Postcopy options are
> +         * enabled. If the zero page which was skipped during multifd phase,
> +         * is accessed during the Postcopy phase of the migration, a page
> +         * fault occurs. But this page fault is not served because the
> +         * 'receivedmap' says the zero page is already received. Thus the
> +         * migration hangs.
> +         *
> +         * When Postcopy is enabled, always write the zero page as and when
> +         * it is migrated.
> +         *

extra blank line here^

> +         */

nit: Inconsistent use of capitalization for the feature names. I'd keep
it all lowercase.

> +        if (migrate_postcopy_ram() ||
> +            ramblock_recv_bitmap_test_byte_offset(p->block, p->zero[i])) {
>              memset(page, 0, multifd_ram_page_size());
> -        } else {
> +        }
> +        if (!ramblock_recv_bitmap_test_byte_offset(p->block, p->zero[i])) {
>              ramblock_recv_bitmap_set_offset(p->block, p->zero[i]);
>          }
>      }

Reply via email to