Current send thread could work while the sync mechanism has some problem:
* has spuriously wakeup
* number of channels_ready will *overflow* the number of real channels
The reason is:
* if MULTIFD_FLAG_SYNC is set in the middle of send thread running, there
is one more spurious wakeup
* if MULTIFD_FLAG_SYNC is set when send thread is not running, there is one
more channels_ready be triggered
To solve this situation, one new mechanism is introduced to synchronize send
threads. The idea is simple, a new field *sync* is introduced to indicate a
synchronization is required.
Wei Yang (6):
migration/multifd: move MultiFDSendParams handling into
multifd_send_fill_packet()
migration/multifd: notify channels_ready when send thread starts
migration/multifd: use sync field to synchronize send threads
migration/multifd: used must not be 0 for a pending job
migration/multifd: use boolean for pending_job is enough
migration/multifd: there is no spurious wakeup now
migration/ram.c | 62 +++++++++++++++++++++++++++++++------------------
1 file changed, 39 insertions(+), 23 deletions(-)
--
2.19.1