On Wed, Mar 29, 2017 at 03:27:28PM +0800, Tan, Jianfeng wrote: > > > On 3/29/2017 3:09 PM, Yuanhan Liu wrote: > >On Wed, Mar 29, 2017 at 03:03:16PM +0800, Tan, Jianfeng wrote: > >> > >>On 3/29/2017 2:27 PM, Yuanhan Liu wrote: > >>>On Tue, Mar 28, 2017 at 08:21:53AM +0000, Jianfeng Tan wrote: > >>>>For virtio PCI devices, interrupt should be configured before setting > >>>>VIRTIO_CONFIG_STATUS_DRIVER_OK so that QEMU can properly set eventfds > >>>>in the host. > >>>> > >>>>For virtio virtual devices, VIRTIO_CONFIG_STATUS_DRIVER_OK should be > >>>>set firstly, so that intr_handle is initialized in > >>>>virtio_user_start_device(). > >>>I'm wondering why can't you let virtio-user follow virtio-pci? > >>It's because that virtio-user not only counts on virtio_user_start_device() > >>to allocate intr_handle, it also needs the information in this function to > >>initialize this struct. For virtio-pci, similar information is from > >>rte_intr_enable/rte_intr_efd_enable. > >> > >>Or do you mean we can move calling virtio_user_start_device() ahead? I can > >>hardly find other place instead of DRIVER_OK. > >For example, virtio_user_dev_init()? > > > > > But in that way, there is only one chance to negotiate features with the > backend. What if we change the configuration through > rte_eth_dev_configure()?
Then there will be a reset; everything should be reset properly in the device. --yliu > > Yes, we can just put callfd/kickfd creation and intr_handle initialization > into virtio_user_dev_init(), and its destructor into > virtio_user_dev_uninit(). It sounds like a feasible way to go. > > Thanks, > Jianfeng