From: Jason Wang <jasowang@xxxxxxxxxx> Date: Wed, 16 Jan 2019 16:54:42 +0800 > Vhost dirty page logging API is designed to sync through GPA. But we > try to log GIOVA when device IOTLB is enabled. This is wrong and may > lead to missing data after migration. > > To solve this issue, when logging with device IOTLB enabled, we will: > > 1) reuse the device IOTLB translation result of GIOVA->HVA mapping to > get HVA, for writable descriptor, get HVA through iovec. For used > ring update, translate its GIOVA to HVA > 2) traverse the GPA->HVA mapping to get the possible GPA and log > through GPA. Pay attention this reverse mapping is not guaranteed > to be unique, so we should log each possible GPA in this case. > > This fix the failure of scp to guest during migration. In -next, we > will probably support passing GIOVA->GPA instead of GIOVA->HVA. > > Fixes: 6b1e6cc7855b ("vhost: new device IOTLB API") > Reported-by: Jintack Lim <jintack@xxxxxxxxxxxxxxx> > Cc: Jintack Lim <jintack@xxxxxxxxxxxxxxx> > Signed-off-by: Jason Wang <jasowang@xxxxxxxxxx> Applied and queued up for -stable.