On Mon, Sep 21, 2015 at 12:02:20PM +0300, Michael S. Tsirkin wrote: > On Mon, Sep 21, 2015 at 10:22:52AM +0800, Yuanhan Liu wrote: > > On Sun, Sep 20, 2015 at 12:37:35PM +0300, Michael S. Tsirkin wrote: > > > On Fri, Sep 18, 2015 at 11:10:54PM +0800, Yuanhan Liu wrote: > > > > From: Changchun Ouyang <changchun.ouyang at intel.com> > > > > > > > > This message is used to enable/disable a specific vring queue pair. > > > > The first queue pair is enabled by default. > > > > > > > > Signed-off-by: Changchun Ouyang <changchun.ouyang at intel.com> > > > > Signed-off-by: Yuanhan Liu <yuanhan.liu at linux.intel.com> > > > > --- > > [snip...] > > > > void > > > > user_destroy_device(struct vhost_device_ctx ctx) > > > > { > > > > > > It might be a good idea to flush any packets being processed > > > on relevant cores at this point. > > > > They are offloaded to the application (examples/vhost/vhost-switch in > > this case). > > > > user_destroy_device will invoke the application's "destroy_device()" > > callback in the end, which, in our case, will set "remove" flag. The > > core worker will then drain and free the RX queue and free TX queue > > once the "remove" flag is set. > > > > --yliu > > > Oh, I really meant user_set_vring_enable.
Will a per-vring callback help then? We may prototype the callback to "vring_state_changed(dev, vring_index)" so that the application could either, as you suggested, flushes any packets haven't been processed yet, or simply drops them. --yliu