On 10/11/2016 08:32 PM, Igor Mammedov wrote:
Of course, @fit and @current_number should be persistent during live migration.you can drop RCU and @current_number, and @fit could be exactly recreated on target side from -device nvdim ... set of options, which must include all currently present (including hotplugged) devices from source side. It's sufficient to invalidate and restart DMA transfer in flight. i.e. pc_dimm_memory_plug () -> regenerate_fit() -> set local flag @fit-dirty -> start QEMU.fit_read() -> if offset == 0 ? clear @fit-dirty make sure fit_read() won't conflict with regenerate_fit() either plain mutex or RCU would do the job ... OSPM.rfit() ... if (@fit-dirty) abort/restart DMA from start In migration case, the target would have @fit-dirty set thanks to pc_dimm_memory_plug () -> regenerate_fit() and any DMA in flight would be restarted. That's a little bit inefficient as source_fit exactly matches target_fit and DMA could continue, but it would save us from having fit specific migration state to transfer and maintain.
Nice, that works. :-) Thanks!
