[PATCH V2 04/11] migration: remove migration_in_postcopy parameter

Steve Sistare posted 11 patches 8 months, 1 week ago
Maintainers: "Michael S. Tsirkin" <mst@redhat.com>, Jason Wang <jasowang@redhat.com>, Alex Williamson <alex.williamson@redhat.com>, "Cédric Le Goater" <clg@redhat.com>, David Hildenbrand <david@redhat.com>, Peter Xu <peterx@redhat.com>, Fabiano Rosas <farosas@suse.de>, Gerd Hoffmann <kraxel@redhat.com>, "Marc-André Lureau" <marcandre.lureau@redhat.com>
There is a newer version of this series
[PATCH V2 04/11] migration: remove migration_in_postcopy parameter
Posted by Steve Sistare 8 months, 1 week ago
Delete the explicit MigrationState parameter from migration_in_postcopy,
so we can eliminate MigrationState from notifiers in a later patch.
No functional change.

Signed-off-by: Steve Sistare <steven.sistare@oracle.com>
---
 include/migration/misc.h |  2 +-
 migration/migration.c    | 27 ++++++++++++++++-----------
 ui/spice-core.c          |  2 +-
 3 files changed, 18 insertions(+), 13 deletions(-)

diff --git a/include/migration/misc.h b/include/migration/misc.h
index b62e351..dcc98bb 100644
--- a/include/migration/misc.h
+++ b/include/migration/misc.h
@@ -68,7 +68,7 @@ bool migration_in_setup(MigrationState *);
 bool migration_has_finished(MigrationState *);
 bool migration_has_failed(MigrationState *);
 /* ...and after the device transmission */
-bool migration_in_postcopy_after_devices(MigrationState *);
+bool migration_in_postcopy_after_devices(void);
 /* True if incoming migration entered POSTCOPY_INCOMING_DISCARD */
 bool migration_in_incoming_postcopy(void);
 /* True if incoming migration entered POSTCOPY_INCOMING_ADVISE */
diff --git a/migration/migration.c b/migration/migration.c
index fa662a5..ad3acd1 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -1460,18 +1460,22 @@ bool migration_has_failed(MigrationState *s)
             s->state == MIGRATION_STATUS_FAILED);
 }
 
+static bool migration_state_in_postcopy(MigrationState *s)
+{
+    switch (s->state) {
+    case MIGRATION_STATUS_POSTCOPY_ACTIVE:
+    case MIGRATION_STATUS_POSTCOPY_PAUSED:
+    case MIGRATION_STATUS_POSTCOPY_RECOVER:
+        return true;
+    default:
+        return false;
+    }
+}
+
 bool migration_in_postcopy(void)
 {
     MigrationState *s = migrate_get_current();
-
-    switch (s->state) {
-    case MIGRATION_STATUS_POSTCOPY_ACTIVE:
-    case MIGRATION_STATUS_POSTCOPY_PAUSED:
-    case MIGRATION_STATUS_POSTCOPY_RECOVER:
-        return true;
-    default:
-        return false;
-    }
+    return migration_state_in_postcopy(s);
 }
 
 bool migration_postcopy_is_alive(int state)
@@ -1485,9 +1489,10 @@ bool migration_postcopy_is_alive(int state)
     }
 }
 
-bool migration_in_postcopy_after_devices(MigrationState *s)
+bool migration_in_postcopy_after_devices(void)
 {
-    return migration_in_postcopy() && s->postcopy_after_devices;
+    MigrationState *s = migrate_get_current();
+    return migration_state_in_postcopy(s) && s->postcopy_after_devices;
 }
 
 bool migration_in_incoming_postcopy(void)
diff --git a/ui/spice-core.c b/ui/spice-core.c
index b3cd229..e43a93f 100644
--- a/ui/spice-core.c
+++ b/ui/spice-core.c
@@ -580,7 +580,7 @@ static int migration_state_notifier(NotifierWithReturn *notifier,
     if (migration_in_setup(s)) {
         spice_server_migrate_start(spice_server);
     } else if (migration_has_finished(s) ||
-               migration_in_postcopy_after_devices(s)) {
+               migration_in_postcopy_after_devices()) {
         spice_server_migrate_end(spice_server, true);
         spice_have_target_host = false;
     } else if (migration_has_failed(s)) {
-- 
1.8.3.1
Re: [PATCH V2 04/11] migration: remove migration_in_postcopy parameter
Posted by Peter Xu 8 months, 1 week ago
On Fri, Jan 12, 2024 at 07:05:03AM -0800, Steve Sistare wrote:
>  bool migration_in_incoming_postcopy(void)
> diff --git a/ui/spice-core.c b/ui/spice-core.c
> index b3cd229..e43a93f 100644
> --- a/ui/spice-core.c
> +++ b/ui/spice-core.c
> @@ -580,7 +580,7 @@ static int migration_state_notifier(NotifierWithReturn *notifier,
>      if (migration_in_setup(s)) {
>          spice_server_migrate_start(spice_server);
>      } else if (migration_has_finished(s) ||
> -               migration_in_postcopy_after_devices(s)) {
> +               migration_in_postcopy_after_devices()) {

This can be a reply also to your other email: my previous suggestion of
using PRECOPY_DONE should apply here, where we can convert this chunk into:

  } else if (event == MIG_EVENT_PRECOPY_DONE) {...}

Because PRECOPY_DONE should also cover the notification from
postcopy_start(), then we can drop migration_in_postcopy_after_devices()
completely, I think.

-- 
Peter Xu
Re: [PATCH V2 04/11] migration: remove migration_in_postcopy parameter
Posted by Steven Sistare 8 months, 1 week ago
On 1/15/2024 1:48 AM, Peter Xu wrote:
> On Fri, Jan 12, 2024 at 07:05:03AM -0800, Steve Sistare wrote:
>>  bool migration_in_incoming_postcopy(void)
>> diff --git a/ui/spice-core.c b/ui/spice-core.c
>> index b3cd229..e43a93f 100644
>> --- a/ui/spice-core.c
>> +++ b/ui/spice-core.c
>> @@ -580,7 +580,7 @@ static int migration_state_notifier(NotifierWithReturn *notifier,
>>      if (migration_in_setup(s)) {
>>          spice_server_migrate_start(spice_server);
>>      } else if (migration_has_finished(s) ||
>> -               migration_in_postcopy_after_devices(s)) {
>> +               migration_in_postcopy_after_devices()) {
> 
> This can be a reply also to your other email: my previous suggestion of
> using PRECOPY_DONE should apply here, where we can convert this chunk into:
> 
>   } else if (event == MIG_EVENT_PRECOPY_DONE) {...}
> 
> Because PRECOPY_DONE should also cover the notification from
> postcopy_start(), then we can drop migration_in_postcopy_after_devices()
> completely, I think.

Yes, that works.  I will define and use MIG_EVENT_PRECOPY_DONE and friends in 
"MigrationEvent for notifiers".

- Steve