On 05/11/14 18:57, Alexander Graf wrote:
> 
> 
> On 05.11.14 07:17, Samuel Mendoza-Jonas wrote:
>> If a guest reboots during a running migration, changes to the
>> hash page table are not necessarily updated on the destination.
>> Opening a new file descriptor to the HTAB forces the migration
>> handler to resend the entire table.
>>
>> Signed-off-by: Samuel Mendoza-Jonas <sam...@au1.ibm.com>
>> ---
>>  hw/ppc/spapr.c         | 47 +++++++++++++++++++++++++++++++++++++++++++++++
>>  include/hw/ppc/spapr.h |  2 ++
>>  2 files changed, 49 insertions(+)
>>
>> diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
>> index 0a2bfe6..1610c28 100644
>> --- a/hw/ppc/spapr.c
>> +++ b/hw/ppc/spapr.c
>> @@ -833,6 +833,13 @@ static void spapr_reset_htab(sPAPREnvironment *spapr)
>>          /* Kernel handles htab, we don't need to allocate one */
>>          spapr->htab_shift = shift;
>>          kvmppc_kern_htab = true;
>> +
>> +        /* Tell readers to update their file descriptor */
>> +        pthread_mutex_lock(&spapr->htab_mutex);
> 
> I don't think you can directly use pthread functions in hw/. These files
> could be compiled on Windows which doesn't have pthread. Instead, please
> use the QEMU wrappers from util/qemu-thread-posix.c.

Thanks for catching this!
> 
> Or maybe try and find out whether you actually do need the lock. Reboots
> can only happen when triggered via a HCALL which takes the BQL. I don't
> quite know how much the migration code became threaded, but I'd assume
> that at least device migration would happen under the BQL or after
> stopping the VM, but in a consistent place.
> 
> So as long as we're guaranteed that the htab_fd_stale variable is set at
> the final "send all device contents" phase, we should automatically
> catch any reset that happened in between - even without a lock, no?

Good point, we only really *need* the flag to be set at least before the
call to save_live_complete(). I'll double check but yes, that should work.
> 
> 
> Alex
> 


-- 
-----------
LTC Ozlabs
IBM


Reply via email to