On Fri, Jun 25, 2021 at 11:09 AM Jason Wang <jasowang@xxxxxxxxxx> wrote: > > > 在 2021/6/24 下午5:16, Yongji Xie 写道: > > On Thu, Jun 24, 2021 at 4:14 PM Jason Wang <jasowang@xxxxxxxxxx> wrote: > >> > >> 在 2021/6/24 下午12:46, Yongji Xie 写道: > >>>> So we need to deal with both FEATURES_OK and reset, but probably not > >>>> DRIVER_OK. > >>>> > >>> OK, I see. Thanks for the explanation. One more question is how about > >>> clearing the corresponding status bit in get_status() rather than > >>> making set_status() fail. Since the spec recommends this way for > >>> validation which is done in virtio_dev_remove() and > >>> virtio_finalize_features(). > >>> > >>> Thanks, > >>> Yongji > >>> > >> I think you can. Or it would be even better that we just don't set the > >> bit during set_status(). > >> > > Yes, that's what I mean. > > > >> I just realize that in vdpa_reset() we had: > >> > >> static inline void vdpa_reset(struct vdpa_device *vdev) > >> { > >> const struct vdpa_config_ops *ops = vdev->config; > >> > >> vdev->features_valid = false; > >> ops->set_status(vdev, 0); > >> } > >> > >> We probably need to add the synchronization here. E.g re-read with a > >> timeout. > >> > > Looks like the timeout is already in set_status(). > > > Do you mean the VDUSE's implementation? > Yes. > > > Do we really need a > > duplicated one here? > > > 1) this is the timeout at the vDPA layer instead of the VDUSE layer. OK, I get it. > 2) it really depends on what's the meaning of the timeout for set_status > of VDUSE. > > Do we want: > > 2a) for set_status(): relay the message to userspace and wait for the > userspace to quiescence the datapath > > or > > 2b) for set_status(): simply relay the message to userspace, reply is no > needed. Userspace will use a command to update the status when the > datapath is stop. The the status could be fetched via get_stats(). > > 2b looks more spec complaint. > Looks good to me. And I think we can use the reply of the message to update the status instead of introducing a new command. > > And how to handle failure? Adding a return value > > to virtio_config_ops->reset() and passing the error to the upper > > layer? > > > Something like this. > OK. Thanks, Yongji