On Tue, Oct 19, 2021 at 09:59:03AM +0000, Shameerali Kolothum Thodi wrote: > > + /* Saving switches on */ > > + if ((old_state & VFIO_DEVICE_STATE_SAVING) != > > + (state & VFIO_DEVICE_STATE_SAVING) && > > + (state & VFIO_DEVICE_STATE_SAVING)) { > > + if (!(state & VFIO_DEVICE_STATE_RUNNING)) { > > + /* serialize post copy */ > > + ret = mlx5vf_pci_save_device_data(mvdev); > > Does it actually get into post-copy here? The pre-copy state(old_state) > has the _SAVING bit set already and post-copy state( new state) also > has _SAVING set. It looks like we need to handle the post copy in the above > "Running switches off" and check for (state & _SAVING). Right, if statements cannot be nested like this. Probably like this: if ((new_state ^ old_state) & (VFIO_DEVICE_STATE_SAVING|VFIO_DEVICE_STATE_RUNNING) != (new_state & (VFIO_DEVICE_STATE_SAVING|VFIO_DEVICE_STATE_RUNNING)) == (VFIO_DEVICE_STATE_SAVING) Jason