From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752372AbcHLOrT (ORCPT ); Fri, 12 Aug 2016 10:47:19 -0400 Received: from mail-pf0-f174.google.com ([209.85.192.174]:36219 "EHLO mail-pf0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751953AbcHLOrS (ORCPT ); Fri, 12 Aug 2016 10:47:18 -0400 Date: Fri, 12 Aug 2016 07:47:27 -0700 From: Stephen Hemminger To: Vitaly Kuznetsov Cc: Yuval Mintz , netdev , Haiyang Zhang , linux-kernel , "devel@linuxdriverproject.org" Subject: Re: [PATCH net 2/4] hv_netvsc: reset vf_inject on VF removal Message-ID: <20160812074727.3b94baac@xeon-e3> In-Reply-To: <87lh038q26.fsf@vitty.brq.redhat.com> References: <1470913137-29167-1-git-send-email-vkuznets@redhat.com> <1470913137-29167-3-git-send-email-vkuznets@redhat.com> <87lh038q26.fsf@vitty.brq.redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, 11 Aug 2016 14:09:53 +0200 Vitaly Kuznetsov wrote: > Yuval Mintz 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.