On Thu, 11 Aug 2016 14:09:53 +0200 Vitaly Kuznetsov <vkuznets@xxxxxxxxxx> wrote: > Yuval Mintz <Yuval.Mintz@xxxxxxxxxx> writes: > > >> +static void netvsc_inject_enable(struct net_device_context > >> +*net_device_ctx) { > >> + net_device_ctx->vf_inject = true; > >> +} > >> + > >> +static void netvsc_inject_disable(struct net_device_context > >> +*net_device_ctx) { > >> + net_device_ctx->vf_inject = false; > >> + > >> + /* Wait for currently active users to drain out. */ > >> + while (atomic_read(&net_device_ctx->vf_use_cnt) != 0) > >> + udelay(50); > >> +} > > > > That was already the behavior before, but are you certain you > > want to unconditionally block without any possible timeout? > > Yes, this is OK. After PATCH4 of this series there is only one place > which takes the vf_use_cnt (netvsc_recv_callback()) and it is an > interrupt handler, there are no sleepable operations there. > Since network devices are protected by RCU, it looks like the refcount is not necessary. I think vf_inject flag and vf_use_cnt could just be replaced by doing RCU on vf_netdev. The callback is invoked from tasklet (softirq) context. _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel