> From: Yishai Hadas <yishaih@xxxxxxxxxx> > Sent: Thursday, December 1, 2022 11:29 PM > > +/** > + * VFIO_MIG_GET_PRECOPY_INFO - _IO(VFIO_TYPE, VFIO_BASE + 21) > + * > + * This ioctl is used on the migration data FD in the precopy phase of the > + * migration data transfer. It returns an estimate of the current data sizes > + * remaining to be transferred. It allows the user to judge when it is > + * appropriate to leave PRE_COPY for STOP_COPY. > + * > + * This ioctl is valid only in PRE_COPY states and kernel driver should > + * return -EINVAL from any other migration state. > + * > + * The vfio_precopy_info data structure returned by this ioctl provides > + * estimates of data available from the device during the PRE_COPY states. > + * This estimate is split into two categories, initial_bytes and > + * dirty_bytes. > + * > + * The initial_bytes field indicates the amount of initial precopy > + * data available from the device. This field should have a non-zero initial > + * value and decrease as migration data is read from the device. > + * It is recommended to leave PRE_COPY for STOP_COPY only after this field > + * reaches zero. Leaving PRE_COPY earlier might make things slower. 'slower' because partially transferred initial state is wasted and a full state transfer is still required in STOP_COPY? > + * > + * The dirty_bytes field tracks device state changes relative to data > + * previously retrieved. This field starts at zero and may increase as > + * the internal device state is modified or decrease as that modified > + * state is read from the device. > + * > + * Userspace may use the combination of these fields to estimate the > + * potential data size available during the PRE_COPY phases, as well as > + * trends relative to the rate the device is dirtying its internal > + * state, but these fields are not required to have any bearing relative > + * to the data size available during the STOP_COPY phase. I didn't get what the last sentence is trying to say. By definition those fields have nothing to do with the transferred data in STOP_COPY. is there an example what a silly driver might do w/o this caveat? Except above this looks good to me: Reviewed-by: Kevin Tian <kevin.tian@xxxxxxxxx>