From patchwork Thu Mar 1 18:27:48 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 879990 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=networkplumber.org Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=networkplumber-org.20150623.gappssmtp.com header.i=@networkplumber-org.20150623.gappssmtp.com header.b="haizJEl+"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zsgsm3SRsz9s3L for ; Fri, 2 Mar 2018 05:28:12 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1033931AbeCAS2I (ORCPT ); Thu, 1 Mar 2018 13:28:08 -0500 Received: from mail-pl0-f67.google.com ([209.85.160.67]:44861 "EHLO mail-pl0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1033892AbeCAS2F (ORCPT ); Thu, 1 Mar 2018 13:28:05 -0500 Received: by mail-pl0-f67.google.com with SMTP id w21-v6so4123628plp.11 for ; Thu, 01 Mar 2018 10:28:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=C1s5w4IKC06rsZO2ENUcV/+cgG9T47q9Eg/ARyRRj+U=; b=haizJEl+9uaopVmIAcbTPrhDqWA6yVrOEJ6VSFc13QiSvls/kImWAgWIDpBc86Rb1J bm9S4FoJx3FZ5sOONkMYgj3Tlz2StBSNsSr+cdPQIdlJdJxw0YGSP+4Z26pwjOzRCIQC moDyoFz53DlKVe0akzyjgoUhq3yZWUI4P6E6fA1/CSV5mC7GXaaDCq5CLZdthLbzuEX7 0ISCjgso479PBIVgjsXLNtpRn+JNIvAsRbj0sJFwP3mJWWi2DytPiha1emME8BIk7d3z 6Jhsb7oN7qKmGa369/GZCerTxgT7iFd+XCal7MdShgZjFaCnAyZgwXuqQ8gSbHoIyOWa kwtg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=C1s5w4IKC06rsZO2ENUcV/+cgG9T47q9Eg/ARyRRj+U=; b=Ft1ZDziOoJKP9FcRGENIlyRYG+QB6qETMOsqiSMW1gtNh+zmmOS+VgLADLzk0wJaBW 11cBtt9CSdLBxPtAtfOo8SDyZ/U2OPAIc8QkoBYEpGJ9ZuOOlyWPUWNyhNSP/rsL1XLQ BtOVfjag2CxiF33HxeBaE0jX5eAxx+7n6ZV0RuN1rJwK1poST81W4vLTBIWWW0rKDZwS jljBFARbz3eXCSP4T514HUTsOEf1K52tsqkadPSrnI9458QngjllAWbzZvlnASF/ERAF 2HCHVYe7hWxm/GopePy6pUXUd3jpcVVxIwuyTNAPEy9TodCS7xc28I7CQtwQSL25ohd/ YUmQ== X-Gm-Message-State: APf1xPBDklD/4/Kl8in4fjgAM9BiDn6Sjjr94qcuN5SfjNAQLMWxgbVe BrlxI7SIwlxgfzkvdD0uLqg2XA== X-Google-Smtp-Source: AG47ELt+p0EKTJvA5U3fX/BEuNj0lJ4VU0ZNXp7xsoimp5cWMmtcSem6oKzn2M0hHj2Or0ILceGUrg== X-Received: by 2002:a17:902:5797:: with SMTP id l23-v6mr2709262pli.56.1519928885337; Thu, 01 Mar 2018 10:28:05 -0800 (PST) Received: from xeon-e3.lan (204-195-71-95.wavecable.com. [204.195.71.95]) by smtp.gmail.com with ESMTPSA id j64sm10792314pfe.68.2018.03.01.10.28.04 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 01 Mar 2018 10:28:04 -0800 (PST) From: Stephen Hemminger X-Google-Original-From: Stephen Hemminger To: kys@microsoft.com, haiyangz@microsoft.com, sthemmin@microsoft.com Cc: devel@linuxdriverproject.org, netdev@vger.kernel.org Subject: [PATCH net 1/9] hv_netvsc: avoid retry on send during shutdown Date: Thu, 1 Mar 2018 10:27:48 -0800 Message-Id: <20180301182756.23027-2-sthemmin@microsoft.com> X-Mailer: git-send-email 2.16.1 In-Reply-To: <20180301182756.23027-1-sthemmin@microsoft.com> References: <20180301182756.23027-1-sthemmin@microsoft.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Change the initialization order so that the device is ready to transmit (ie connect vsp is completed) before setting the internal reference to the device with RCU. This avoids any races on initialization and prevents retry issues on shutdown. Signed-off-by: Stephen Hemminger --- drivers/net/hyperv/netvsc.c | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/drivers/net/hyperv/netvsc.c b/drivers/net/hyperv/netvsc.c index 17e529af79dc..686900d61374 100644 --- a/drivers/net/hyperv/netvsc.c +++ b/drivers/net/hyperv/netvsc.c @@ -852,13 +852,6 @@ int netvsc_send(struct net_device *ndev, if (unlikely(!net_device || net_device->destroy)) return -ENODEV; - /* We may race with netvsc_connect_vsp()/netvsc_init_buf() and get - * here before the negotiation with the host is finished and - * send_section_map may not be allocated yet. - */ - if (unlikely(!net_device->send_section_map)) - return -EAGAIN; - nvchan = &net_device->chan_table[packet->q_idx]; packet->send_buf_index = NETVSC_INVALID_INDEX; packet->cp_partial = false; @@ -866,10 +859,8 @@ int netvsc_send(struct net_device *ndev, /* Send control message directly without accessing msd (Multi-Send * Data) field which may be changed during data packet processing. */ - if (!skb) { - cur_send = packet; - goto send_now; - } + if (!skb) + return netvsc_send_pkt(device, packet, net_device, pb, skb); /* batch packets in send buffer if possible */ msdp = &nvchan->msd; @@ -953,7 +944,6 @@ int netvsc_send(struct net_device *ndev, } } -send_now: if (cur_send) ret = netvsc_send_pkt(device, cur_send, net_device, pb, skb); @@ -1306,11 +1296,6 @@ struct netvsc_device *netvsc_device_add(struct hv_device *device, napi_enable(&net_device->chan_table[0].napi); - /* Writing nvdev pointer unlocks netvsc_send(), make sure chn_table is - * populated. - */ - rcu_assign_pointer(net_device_ctx->nvdev, net_device); - /* Connect with the NetVsp */ ret = netvsc_connect_vsp(device, net_device, device_info); if (ret != 0) { @@ -1319,6 +1304,11 @@ struct netvsc_device *netvsc_device_add(struct hv_device *device, goto close; } + /* Writing nvdev pointer unlocks netvsc_send(), make sure chn_table is + * populated. + */ + rcu_assign_pointer(net_device_ctx->nvdev, net_device); + return net_device; close: From patchwork Thu Mar 1 18:27:49 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 879992 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=networkplumber.org Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=networkplumber-org.20150623.gappssmtp.com header.i=@networkplumber-org.20150623.gappssmtp.com header.b="cRBShxAL"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zsgsv4p8Qz9s3L for ; Fri, 2 Mar 2018 05:28:19 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1033964AbeCAS2Q (ORCPT ); Thu, 1 Mar 2018 13:28:16 -0500 Received: from mail-pl0-f65.google.com ([209.85.160.65]:33554 "EHLO mail-pl0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1033907AbeCAS2H (ORCPT ); Thu, 1 Mar 2018 13:28:07 -0500 Received: by mail-pl0-f65.google.com with SMTP id c11-v6so4146128plo.0 for ; Thu, 01 Mar 2018 10:28:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=vAekl40iYv8ynYW8SUEnv4sFywxAUb6RRjIJuxeofss=; b=cRBShxAL/kjdDUqmDs5hoWY7WBeWG6/QSb0eb0l/hEs57BShv7mWORlotrk8tBXnW9 xt0nnhwNZRsm15S+IBBDjtIt1vfKo7clyAN/1qC+APdCSe/3Ij7O8myrOs8lvT53vbii aKbzn0bipjBK3nXVHH0l0XlYvJLE6kz3sZpjuSmJzVwInSoGyu/EUwh43ZHdGZm4SZ2T SCUGadMPLFzVuH0mhTPae2ybiVxM6UXIY3PxQ735c8h1D457uTK14umU/WqqqXuLAtmS yIOBKIbalMDNhC9Gz5iyCJBxDKTVQv6fCIJ165Em9YGiKs+J7Q5BQOQMLgC2uMyBqwGu LokA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=vAekl40iYv8ynYW8SUEnv4sFywxAUb6RRjIJuxeofss=; b=jBIjrIKgkGO/CWEHf01HkSoXn8Tuyqwn4wK/4isrVYZF/vV8cnxsgQOY5ZMdOK94Kc Jti0S4MmBLpIxOqOXoM5tg7OyBxPIjdoaRBCCVxKX+v3AN81taIyo3Mr6W8DEd8AV+75 l3edkobSUon3uW1uaEKK8+Zry6cm1mb3vm6QQnAS4LmCqNgZ68/l7GEq/ecmOMx7WKRk VkAvS8qEArGApmlezhh12/gZ21wAR+8dyBMnHTiREwUIv+HSmah/KYmNLfZYo8zLnxIL NGsvSZep4+noF5oJp+7o4r7qCEG+1c/POKOemMXX4MVV0Wb7Y/pHZp5z0cxlca7JNzsg omFQ== X-Gm-Message-State: APf1xPBCxqkAwhHETUAzBaZuGaIwDSNmp3xI4+hVukdN9ziivzuld506 xlfu69b8czlXdEwlUw8TJc+7+g== X-Google-Smtp-Source: AG47ELufYk24FqZ1+0ab9o2eiGprmqwS0qkaWjn+K8ayvcjj1kByozKpsWoFv5lV5sARkUFj+DbOsw== X-Received: by 2002:a17:902:b901:: with SMTP id bf1-v6mr2747462plb.175.1519928886542; Thu, 01 Mar 2018 10:28:06 -0800 (PST) Received: from xeon-e3.lan (204-195-71-95.wavecable.com. [204.195.71.95]) by smtp.gmail.com with ESMTPSA id j64sm10792314pfe.68.2018.03.01.10.28.05 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 01 Mar 2018 10:28:05 -0800 (PST) From: Stephen Hemminger X-Google-Original-From: Stephen Hemminger To: kys@microsoft.com, haiyangz@microsoft.com, sthemmin@microsoft.com Cc: devel@linuxdriverproject.org, netdev@vger.kernel.org Subject: [PATCH net 2/9] hv_netvsc: only wake transmit queue if link is up Date: Thu, 1 Mar 2018 10:27:49 -0800 Message-Id: <20180301182756.23027-3-sthemmin@microsoft.com> X-Mailer: git-send-email 2.16.1 In-Reply-To: <20180301182756.23027-1-sthemmin@microsoft.com> References: <20180301182756.23027-1-sthemmin@microsoft.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Don't wake transmit queues if link is not up yet. Signed-off-by: Stephen Hemminger --- drivers/net/hyperv/netvsc_drv.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c index c5584c2d440e..fa6cf18e7719 100644 --- a/drivers/net/hyperv/netvsc_drv.c +++ b/drivers/net/hyperv/netvsc_drv.c @@ -91,12 +91,11 @@ static int netvsc_open(struct net_device *net) return ret; } - netif_tx_wake_all_queues(net); - rdev = nvdev->extension; - - if (!rdev->link_state) + if (!rdev->link_state) { netif_carrier_on(net); + netif_tx_wake_all_queues(net); + } if (vf_netdev) { /* Setting synthetic device up transparently sets From patchwork Thu Mar 1 18:27:50 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 879991 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=networkplumber.org Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=networkplumber-org.20150623.gappssmtp.com header.i=@networkplumber-org.20150623.gappssmtp.com header.b="eHD8M6hp"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zsgss0przz9s3L for ; Fri, 2 Mar 2018 05:28:17 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1033958AbeCAS2O (ORCPT ); Thu, 1 Mar 2018 13:28:14 -0500 Received: from mail-pl0-f66.google.com ([209.85.160.66]:36603 "EHLO mail-pl0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1033923AbeCAS2I (ORCPT ); Thu, 1 Mar 2018 13:28:08 -0500 Received: by mail-pl0-f66.google.com with SMTP id 61-v6so4135975plf.3 for ; Thu, 01 Mar 2018 10:28:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=hnr70zTideOT14j+2h2UQq7yGEMSFs2pfTMch12gIxY=; b=eHD8M6hp2nEPg6OKRj4K6rbwSb1ldVhmL3tNbrI5Y9ieyIRkmvLiAReZ2mAoJDm8M/ qe4FLFsTBg6ztxQo3oFFZuBfUeXMIx0ZSte6trQtk/PMwbtaY2qGHawbiy36euDWj2Cl dWmEfClr+uEVXEzbeBRslz4xsDtOXlqEkPVUqF/q8YI9glsqbHWHddnIWNktoBDATMX2 jK2ypVXcT8xpwFS6tW614cmvyRYNjIMVTKzFfsOQUmIoxaZBkTz4LhhpE0tr+h8jJAa5 cZYSNdUaAU0khkIM20DWj7+UNfNUIO0PlpCkFU9aQs/bN4ggFhcmIAvopArajPflRgLn 1c6w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=hnr70zTideOT14j+2h2UQq7yGEMSFs2pfTMch12gIxY=; b=cAhVcHhND9T6csmwhLuepimhRO49Ryd5lkamX5EEC+AuL6tyTMRyrFRQPx0jB+ObLx HCoNuFKVebQ5OLgulS7065JI3ml5ytmmSmFvo5DwdMMjaPnZw9sgkfsGfTpWEPMkIGnH 5uEpDGQuy5emjPvKubMQhbtHF1fzmnp1IMbwzE8R1BBb6FK/FDunc0MoAKQQ9DLvxmF0 hHIqYmRWDBqzVfOpX6EFWvtQ4qWGEuAtWz8EQ+uNN7XyqMeihouEF1owSKT4F/q+6oNE Weild9e+YvLKRD+zLYi9DlzBe/0oly+nrGFFEB8DOxyZUfClIIlbSJQqVvm0xzaFWmTb 2X9A== X-Gm-Message-State: APf1xPC6hBm3HCAm9wOCnU+YLCr2CGrkT7+h17l2Db8R9Y6F+tbYPHR7 Q5IqMrhhloGe0YGURtt/cleEvCu1wEE= X-Google-Smtp-Source: AG47ELuihcbZj9Emjr67MnXqEHh1Moma9JzxraE5OPtDd+09QDgvp6GUu/IvRZ1lHncaWMqgtLTsHQ== X-Received: by 2002:a17:902:128c:: with SMTP id g12-v6mr2738080pla.85.1519928887887; Thu, 01 Mar 2018 10:28:07 -0800 (PST) Received: from xeon-e3.lan (204-195-71-95.wavecable.com. [204.195.71.95]) by smtp.gmail.com with ESMTPSA id j64sm10792314pfe.68.2018.03.01.10.28.06 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 01 Mar 2018 10:28:06 -0800 (PST) From: Stephen Hemminger X-Google-Original-From: Stephen Hemminger To: kys@microsoft.com, haiyangz@microsoft.com, sthemmin@microsoft.com Cc: devel@linuxdriverproject.org, netdev@vger.kernel.org Subject: [PATCH net 3/9] hv_netvsc: fix error unwind handling if vmbus_open fails Date: Thu, 1 Mar 2018 10:27:50 -0800 Message-Id: <20180301182756.23027-4-sthemmin@microsoft.com> X-Mailer: git-send-email 2.16.1 In-Reply-To: <20180301182756.23027-1-sthemmin@microsoft.com> References: <20180301182756.23027-1-sthemmin@microsoft.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Need to delete NAPI association if vmbus_open fails. Signed-off-by: Stephen Hemminger --- drivers/net/hyperv/netvsc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/hyperv/netvsc.c b/drivers/net/hyperv/netvsc.c index 686900d61374..ff97a85b2e9d 100644 --- a/drivers/net/hyperv/netvsc.c +++ b/drivers/net/hyperv/netvsc.c @@ -1286,7 +1286,6 @@ struct netvsc_device *netvsc_device_add(struct hv_device *device, netvsc_channel_cb, net_device->chan_table); if (ret != 0) { - netif_napi_del(&net_device->chan_table[0].napi); netdev_err(ndev, "unable to open channel: %d\n", ret); goto cleanup; } @@ -1319,6 +1318,7 @@ struct netvsc_device *netvsc_device_add(struct hv_device *device, vmbus_close(device->channel); cleanup: + netif_napi_del(&net_device->chan_table[0].napi); free_netvsc_device(&net_device->rcu); return ERR_PTR(ret); From patchwork Thu Mar 1 18:27:51 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 879997 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=networkplumber.org Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=networkplumber-org.20150623.gappssmtp.com header.i=@networkplumber-org.20150623.gappssmtp.com header.b="o7xitb2q"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zsgtm5BYJz9s3L for ; Fri, 2 Mar 2018 05:29:04 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1033998AbeCAS3A (ORCPT ); Thu, 1 Mar 2018 13:29:00 -0500 Received: from mail-pl0-f68.google.com ([209.85.160.68]:40358 "EHLO mail-pl0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1033892AbeCAS2J (ORCPT ); Thu, 1 Mar 2018 13:28:09 -0500 Received: by mail-pl0-f68.google.com with SMTP id i6-v6so4128533plt.7 for ; Thu, 01 Mar 2018 10:28:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=QKgcxckfRmdvilb3Tow+CxfLSkLJ2QkEwWWgu7lCKcs=; b=o7xitb2qSo96CQYQNrZmFIzQ9QVg0e1k0hbUZW9cLDPL15pET9cyZFeTARR/3FbM0y 9lkus+STD1oFRvEkFJtGHST/ZbeOtyK7sjsN+sFvhSfLza3GpdpKTd5D6BsactcwXSvr fdAjkRzmhcv3R8WMcl0y8Y2VgjaF6QWa+5M5+D5svFovnEtrrl2LEEbO3U2gyz5uIbY/ 6s3YJoEnqgt88dbNt2uAuLjjl4+T+hIUzUK56Acg2f+I1kdfQj9qDXHRbWn9B5exsm/y j4RjLAafZa/xrsnfyGrjhdMMCohqQi/GDYlL1W1jMZChgPsIjlgK0lB+2q0KD64avUcA XDgQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=QKgcxckfRmdvilb3Tow+CxfLSkLJ2QkEwWWgu7lCKcs=; b=D5oXP8C2xG4FGOcSdEbYoL5d1t31FS34mTjyxoZxedvKvCDbXfb4mtOpGTzlqHcFY6 noqxaYaEzWWX2fhA7AKeYGr7Zc+fzyNnyj3BVAsvm8kreJp9aBh7FF2mEl9LJNM5A+K6 N1LVwXELGEl9Gq3YpQMZLTioC9lyWzhH5Qd8LcDei9Bu3g1m9aWrVZlJuQI786IEoFrl Q9VZfuvf40Nz6hQm+s7Tb24wAsnVjTe8rsekSjVSVKtQ++VbFvHdwwhMLmAWPljUBWNl itbIJ5fvs6muTE+rqpbTEuojXBvy8s8v95u57w5qjzIWEVOqcKmMLn8VRwdfuUjiaBh7 4S3A== X-Gm-Message-State: APf1xPAVRPySInyFjAggHcGOEJpsZXYKmk3/MIK8D5Li1/ufXndv8/Sb h+7r5nBzn0gN1L8myfhnRAgutQ== X-Google-Smtp-Source: AG47ELuJPvHsFYa1fBEI81XQdN6+IfWoCpSXqONA9a4XWmfJu41U/fMLyv788nvsbyP4eqf/hlO6DQ== X-Received: by 2002:a17:902:183:: with SMTP id b3-v6mr2734398plb.80.1519928889013; Thu, 01 Mar 2018 10:28:09 -0800 (PST) Received: from xeon-e3.lan (204-195-71-95.wavecable.com. [204.195.71.95]) by smtp.gmail.com with ESMTPSA id j64sm10792314pfe.68.2018.03.01.10.28.07 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 01 Mar 2018 10:28:08 -0800 (PST) From: Stephen Hemminger X-Google-Original-From: Stephen Hemminger To: kys@microsoft.com, haiyangz@microsoft.com, sthemmin@microsoft.com Cc: devel@linuxdriverproject.org, netdev@vger.kernel.org Subject: [PATCH net 4/9] hv_netvsc: cancel subchannel setup before halting device Date: Thu, 1 Mar 2018 10:27:51 -0800 Message-Id: <20180301182756.23027-5-sthemmin@microsoft.com> X-Mailer: git-send-email 2.16.1 In-Reply-To: <20180301182756.23027-1-sthemmin@microsoft.com> References: <20180301182756.23027-1-sthemmin@microsoft.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Block setup of multiple channels earlier in the teardown process. This avoids possible races between halt and subchannel initialization. Suggested-by: Haiyang Zhang Signed-off-by: Stephen Hemminger --- drivers/net/hyperv/rndis_filter.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/net/hyperv/rndis_filter.c b/drivers/net/hyperv/rndis_filter.c index c3ca191fea7f..1cba767c6453 100644 --- a/drivers/net/hyperv/rndis_filter.c +++ b/drivers/net/hyperv/rndis_filter.c @@ -1340,6 +1340,9 @@ void rndis_filter_device_remove(struct hv_device *dev, { struct rndis_device *rndis_dev = net_dev->extension; + /* Don't try and setup sub channels if about to halt */ + cancel_work_sync(&net_dev->subchan_work); + /* Halt and release the rndis device */ rndis_filter_halt_device(rndis_dev); From patchwork Thu Mar 1 18:27:52 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 879996 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=networkplumber.org Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=networkplumber-org.20150623.gappssmtp.com header.i=@networkplumber-org.20150623.gappssmtp.com header.b="FEjRKBpe"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zsgtl1sRxz9s3L for ; Fri, 2 Mar 2018 05:29:03 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1033994AbeCAS27 (ORCPT ); Thu, 1 Mar 2018 13:28:59 -0500 Received: from mail-pg0-f67.google.com ([74.125.83.67]:39789 "EHLO mail-pg0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1033933AbeCAS2L (ORCPT ); Thu, 1 Mar 2018 13:28:11 -0500 Received: by mail-pg0-f67.google.com with SMTP id w16so1759542pgv.6 for ; Thu, 01 Mar 2018 10:28:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=7/5PAGe738YoYIma/vFEurnHEB3dTKmG25KTEU0NsmM=; b=FEjRKBpeFnLHSKXoap9bFcb1fFh0jWaDW52B3pwLPP5HijeISC8Nltjdre/PS084G9 v6oIST6oOIxJoVv+fzCj+ChaHZoZJWJXaQvcnncvdRBrCDhRFGROaqiFQdpuEPfcAmHS pYqZlX3gXGfccm1ArHbsJhhtsRS+JMuJUCdPF3Y2VtAYHIppD49LeQ95ocbT/LXb1bX9 hUSK6C8+fmo40/MISAnw5mB3xAko49YJftDD1UoymDOgB/l9TOqqZFR2xx+PpKGllFUa lJhkx9vL1/hSHu+PX9RWGWeAt/LUZqmF7O3bErIH3XbBBqxWDCggxwW3o5dqqeGZzf9n ZrTw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=7/5PAGe738YoYIma/vFEurnHEB3dTKmG25KTEU0NsmM=; b=Uu0hVHjAhvNA8hErUN2kXBcWNHuMvuCGshiogdyhanVT2rZKP0d7QdLgxN5CzYN6h+ 73s3prQ6A9ccDAk17NkiC84FLRU2zamyFmd5Td6eH+gQ0SzAYM1TF01bTyxqzsWshiPx evj/qM8vm+2kZYa39uf0uQCuIrv6RiaVPHIbOWuZM0pojumxZIWpaTHBCgO4U7/jB8vr HhSIi1qEe8ap+/AQntrRF+74oWWLmjmyDVGIwYT/ScvbA2IhFHuK3jqnJ9zmYOkRtqCZ eVhAGAeNtwqpuIGA/IvEwIfFCVOQng9HmYIkozrkggidpbKzf6pOoDnHLhw6d8X9DEpx Tpsg== X-Gm-Message-State: APf1xPD1XmEpNyzQ1OnsE/eMQDCxTukQh+sY3ChGlA2AqngChNv1/YI8 XqLYDmi9kj39a2d0b1DTXPU/FQ== X-Google-Smtp-Source: AG47ELtOicFIZcPT+kjuTqbI5B/KEf0JIKOWW/45UdBGsPdKp+9d026Lv8REPjGGURtFsWJFtGlVgA== X-Received: by 10.98.202.23 with SMTP id n23mr2883814pfg.52.1519928890418; Thu, 01 Mar 2018 10:28:10 -0800 (PST) Received: from xeon-e3.lan (204-195-71-95.wavecable.com. [204.195.71.95]) by smtp.gmail.com with ESMTPSA id j64sm10792314pfe.68.2018.03.01.10.28.09 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 01 Mar 2018 10:28:09 -0800 (PST) From: Stephen Hemminger X-Google-Original-From: Stephen Hemminger To: kys@microsoft.com, haiyangz@microsoft.com, sthemmin@microsoft.com Cc: devel@linuxdriverproject.org, netdev@vger.kernel.org Subject: [PATCH net 5/9] hv_netvsc: fix race in napi poll when rescheduling Date: Thu, 1 Mar 2018 10:27:52 -0800 Message-Id: <20180301182756.23027-6-sthemmin@microsoft.com> X-Mailer: git-send-email 2.16.1 In-Reply-To: <20180301182756.23027-1-sthemmin@microsoft.com> References: <20180301182756.23027-1-sthemmin@microsoft.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org There is a race between napi_reschedule and re-enabling interrupts which could lead to missed host interrrupts. This occurs when interrupts are re-enabled (hv_end_read) and vmbus irq callback (netvsc_channel_cb) has already scheduled NAPI. Signed-off-by: Stephen Hemminger --- drivers/net/hyperv/netvsc.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/net/hyperv/netvsc.c b/drivers/net/hyperv/netvsc.c index ff97a85b2e9d..4237cedc4f08 100644 --- a/drivers/net/hyperv/netvsc.c +++ b/drivers/net/hyperv/netvsc.c @@ -1207,9 +1207,10 @@ int netvsc_poll(struct napi_struct *napi, int budget) if (send_recv_completions(ndev, net_device, nvchan) == 0 && work_done < budget && napi_complete_done(napi, work_done) && - hv_end_read(&channel->inbound)) { + hv_end_read(&channel->inbound) && + napi_schedule_prep(napi)) { hv_begin_read(&channel->inbound); - napi_reschedule(napi); + __napi_schedule(napi); } /* Driver may overshoot since multiple packets per descriptor */ From patchwork Thu Mar 1 18:27:53 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 879998 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=networkplumber.org Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=networkplumber-org.20150623.gappssmtp.com header.i=@networkplumber-org.20150623.gappssmtp.com header.b="XaO+KIoo"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zsgty6M3Sz9s3L for ; Fri, 2 Mar 2018 05:29:14 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1033990AbeCAS26 (ORCPT ); Thu, 1 Mar 2018 13:28:58 -0500 Received: from mail-pl0-f66.google.com ([209.85.160.66]:33944 "EHLO mail-pl0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1033935AbeCAS2M (ORCPT ); Thu, 1 Mar 2018 13:28:12 -0500 Received: by mail-pl0-f66.google.com with SMTP id u13-v6so4136538plq.1 for ; Thu, 01 Mar 2018 10:28:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=GF3KAEpZbQL4sJHAqzQYETzi4UhGrYiakCEq3bIoC1s=; b=XaO+KIoo1Q1dsOHLJ6KsxYun0kjkANYOGhb2YMTY3SEgXQ6sCDN8fT6YUApWJE+Ftq ZM0dSciE2aYkRQX8U7aDKSV9Ifw4Esh95QrDCaoUFTwsjzE9hDrYmxmUndmNoJzjXpPA UNSbUta4DMy2Fq8ZT2xzjBaa4WDapw+HiyT/mrR4qsxYdOt22yh7zjsR0YCQL4mi4mfY S3qLLLyKL/wNM1wT8ebIVJhiJHTKTDLI/b6WXSb6Bxa+rFNPizXWTOPWW4tXOMugdmnc 3tnLLdXKTp6+sMteIERkugyrQxf6oUrbpmuxSa51/lg97idOOlmR1tPB/LJAtbc7JOOe +29g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=GF3KAEpZbQL4sJHAqzQYETzi4UhGrYiakCEq3bIoC1s=; b=DlkUYjC/aqPT4pr1iPoNRmcPzpYs4GF+P7zZAx7oUOdFbqOMnPl9IXZfq7H1BFsgVh Hxwul1wF3HYOfklzfXrR6cdRH5DT/g94meXtN+WBf2JD08bcMOrWO3xYTd7DpjMY7TQO lQLDhA1h949IhYVIVjn0vj13zlPMFEBsagIESBndDH99jgkq+6nz7GLFLZouaThM58ce WiFZOdT7KOl67IGTzEsC3Rz0+/wVpqRXvYCANCNmJRQ/7tcxFZo6w64JYTU6aNZlrWNa 0W7YGez7W8VD87CfmFmonwaggyKwAw7CKFPzWLou/5Q+HeyKFtRWS6/6HdR9UDl36Tvs HphA== X-Gm-Message-State: APf1xPAUZ7SuKdmMwFiNU2fD9/VRkcfZsb6nfaDyYxzb59RyHzYL0yMU 1L2Lsn/Ppuy0kj7og7C+290PJQ== X-Google-Smtp-Source: AG47ELt6hKtIml1Q9+SKQRi6JuWyK84VOf2DY+m0N/N8/b36xSNPXBG34DDRm+LZSFpDCvOU4oeSmA== X-Received: by 2002:a17:902:b28b:: with SMTP id u11-v6mr2737869plr.146.1519928891588; Thu, 01 Mar 2018 10:28:11 -0800 (PST) Received: from xeon-e3.lan (204-195-71-95.wavecable.com. [204.195.71.95]) by smtp.gmail.com with ESMTPSA id j64sm10792314pfe.68.2018.03.01.10.28.10 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 01 Mar 2018 10:28:10 -0800 (PST) From: Stephen Hemminger X-Google-Original-From: Stephen Hemminger To: kys@microsoft.com, haiyangz@microsoft.com, sthemmin@microsoft.com Cc: devel@linuxdriverproject.org, netdev@vger.kernel.org Subject: [PATCH net 6/9] hv_netvsc: use napi_schedule_irqoff Date: Thu, 1 Mar 2018 10:27:53 -0800 Message-Id: <20180301182756.23027-7-sthemmin@microsoft.com> X-Mailer: git-send-email 2.16.1 In-Reply-To: <20180301182756.23027-1-sthemmin@microsoft.com> References: <20180301182756.23027-1-sthemmin@microsoft.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Since the netvsc_channel_cb is already called in interrupt context from vmbus, there is no need to do irqsave/restore. Signed-off-by: Stephen Hemminger --- drivers/net/hyperv/netvsc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/hyperv/netvsc.c b/drivers/net/hyperv/netvsc.c index 4237cedc4f08..0265d703eb03 100644 --- a/drivers/net/hyperv/netvsc.c +++ b/drivers/net/hyperv/netvsc.c @@ -1233,7 +1233,7 @@ void netvsc_channel_cb(void *context) /* disable interupts from host */ hv_begin_read(rbi); - __napi_schedule(&nvchan->napi); + __napi_schedule_irqoff(&nvchan->napi); } } From patchwork Thu Mar 1 18:27:54 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 879995 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=networkplumber.org Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=networkplumber-org.20150623.gappssmtp.com header.i=@networkplumber-org.20150623.gappssmtp.com header.b="zB+2TGvJ"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zsgtG56Pzz9s3L for ; Fri, 2 Mar 2018 05:28:38 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1033976AbeCAS2h (ORCPT ); Thu, 1 Mar 2018 13:28:37 -0500 Received: from mail-pl0-f66.google.com ([209.85.160.66]:33562 "EHLO mail-pl0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1033953AbeCAS2N (ORCPT ); Thu, 1 Mar 2018 13:28:13 -0500 Received: by mail-pl0-f66.google.com with SMTP id c11-v6so4146310plo.0 for ; Thu, 01 Mar 2018 10:28:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=vRU5ddxHavO+zx+276o+IGkzvDrLK5Cv9jmtwmX99qc=; b=zB+2TGvJOB7nyIai+T4vldhzMkjDHu2diDh2uw/99rmPjjWFA2qO6+Oh1nDuoDhgg8 KVE6K38L245NyqAzF729CqA1qefapjVwoXQFGrKRjxtADOhztfKJpAUZXM+MjH+HrFjS mHvl1VeqeIj3XimXEg4xrGCqNrXVYdwnqjMB6jSws7kBt2TgpRjIuyZfzob/Ra6/YL5f eqDNdbOGOGiL4hmwCtJ/00mNP+DjfCfRmT4waaSlfGvdLdw4+M6++nFRjTWMonza09uu VvVu1oXTY/7PhkfNpMRMxX3KQPcSBWFfFB69LfoPtAOLho0Zp1ckVViJuqtPogXt9/pB OLzA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=vRU5ddxHavO+zx+276o+IGkzvDrLK5Cv9jmtwmX99qc=; b=nYGFvYaVd/vFJ1FG1/23EAqWm7/PWqS9Jp6jqlIIXW+xrxlLoknlQJi+GGJE02SgGu A5JAty5EJYaOIYrOh8fHH90/FDWLaH/gWdDPClVlRHoBEg7NDeLGREG3gaoL+zywe4Cv DWyMrK2EvUhXeZRnn2jjjYFtdpBu/ukJrkpRaNMz0rBKUx9YapwClXgVjTU4yZTJoVT7 NUL9ToGcPB8R7k5nKY+dd7odhUDkwjdE27EkYUQp5IhMPwK+M0evXbqi2C+zJjTLlICx sv7sSPJsPiOYeTpk2+woAFvAMLj9Ge/R3fhMLZhylNg8aABKMrvx8wZAMatGTPz3lVSB sbJQ== X-Gm-Message-State: APf1xPBvcTazwmmnbVYb3UBEIzw9Z7GNVwCDWbILpmeFX96DBJwOHV7F q4iY6VEicWJDzyv66WKty8+iCw== X-Google-Smtp-Source: AG47ELsuFiS7Efw+prE9P1g900Ft752IpFticb59/a5Tyon3PPGKgTN0dIko4KzGh4/K2FKVgnHlBw== X-Received: by 2002:a17:902:6b04:: with SMTP id o4-v6mr2783138plk.260.1519928892871; Thu, 01 Mar 2018 10:28:12 -0800 (PST) Received: from xeon-e3.lan (204-195-71-95.wavecable.com. [204.195.71.95]) by smtp.gmail.com with ESMTPSA id j64sm10792314pfe.68.2018.03.01.10.28.11 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 01 Mar 2018 10:28:11 -0800 (PST) From: Stephen Hemminger X-Google-Original-From: Stephen Hemminger To: kys@microsoft.com, haiyangz@microsoft.com, sthemmin@microsoft.com Cc: devel@linuxdriverproject.org, netdev@vger.kernel.org Subject: [PATCH net 7/9] hv_netvsc: don't need full irqsave for request_lock Date: Thu, 1 Mar 2018 10:27:54 -0800 Message-Id: <20180301182756.23027-8-sthemmin@microsoft.com> X-Mailer: git-send-email 2.16.1 In-Reply-To: <20180301182756.23027-1-sthemmin@microsoft.com> References: <20180301182756.23027-1-sthemmin@microsoft.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Since the driver incoming handling is done with NAPI. This path is run in softirq (not hardirq) therefore don't need to do full local irq save/restore. Signed-off-by: Stephen Hemminger --- drivers/net/hyperv/rndis_filter.c | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/drivers/net/hyperv/rndis_filter.c b/drivers/net/hyperv/rndis_filter.c index 1cba767c6453..3ce11361634f 100644 --- a/drivers/net/hyperv/rndis_filter.c +++ b/drivers/net/hyperv/rndis_filter.c @@ -92,7 +92,6 @@ static struct rndis_request *get_rndis_request(struct rndis_device *dev, struct rndis_request *request; struct rndis_message *rndis_msg; struct rndis_set_request *set; - unsigned long flags; request = kzalloc(sizeof(struct rndis_request), GFP_KERNEL); if (!request) @@ -115,9 +114,9 @@ static struct rndis_request *get_rndis_request(struct rndis_device *dev, set->req_id = atomic_inc_return(&dev->new_req_id); /* Add to the request list */ - spin_lock_irqsave(&dev->request_lock, flags); + spin_lock_bh(&dev->request_lock); list_add_tail(&request->list_ent, &dev->req_list); - spin_unlock_irqrestore(&dev->request_lock, flags); + spin_unlock_bh(&dev->request_lock); return request; } @@ -125,11 +124,9 @@ static struct rndis_request *get_rndis_request(struct rndis_device *dev, static void put_rndis_request(struct rndis_device *dev, struct rndis_request *req) { - unsigned long flags; - - spin_lock_irqsave(&dev->request_lock, flags); + spin_lock_bh(&dev->request_lock); list_del(&req->list_ent); - spin_unlock_irqrestore(&dev->request_lock, flags); + spin_unlock_bh(&dev->request_lock); kfree(req); } @@ -269,10 +266,9 @@ static void rndis_filter_receive_response(struct rndis_device *dev, { struct rndis_request *request = NULL; bool found = false; - unsigned long flags; struct net_device *ndev = dev->ndev; - spin_lock_irqsave(&dev->request_lock, flags); + spin_lock_bh(&dev->request_lock); list_for_each_entry(request, &dev->req_list, list_ent) { /* * All request/response message contains RequestId as the 1st @@ -284,7 +280,7 @@ static void rndis_filter_receive_response(struct rndis_device *dev, break; } } - spin_unlock_irqrestore(&dev->request_lock, flags); + spin_unlock_bh(&dev->request_lock); if (found) { if (resp->msg_len <= From patchwork Thu Mar 1 18:27:55 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 879994 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=networkplumber.org Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=networkplumber-org.20150623.gappssmtp.com header.i=@networkplumber-org.20150623.gappssmtp.com header.b="We2YJYDa"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zsgt36tbQz9s3T for ; Fri, 2 Mar 2018 05:28:27 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1033971AbeCAS20 (ORCPT ); Thu, 1 Mar 2018 13:28:26 -0500 Received: from mail-pl0-f65.google.com ([209.85.160.65]:33563 "EHLO mail-pl0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1033959AbeCAS2O (ORCPT ); Thu, 1 Mar 2018 13:28:14 -0500 Received: by mail-pl0-f65.google.com with SMTP id c11-v6so4146346plo.0 for ; Thu, 01 Mar 2018 10:28:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=VmIMWaRTaZBFpAaBIfFXWsZqRBt3vcQjGpVVYfz+UdQ=; b=We2YJYDatm90axoj5eV7uGuxYJ9UtCqG0y7oqcfhK7lG5Mj34o48mKkyBArHYrKxVm i6nJMu8UPRSmuwtF3zz0bEfRlfIrP4v/lYX4V1hFgo3jQDt+H1bhRS52xNdLSKBWFOOd vby2s9Es54Cxg68HX2DmFONNLYwWIli2SJQwslgH6OPyPLIenl7bdQaT2HoYL4g04ykS GizjkHnqx/xsBDAeZKNje+t+0yi4LV77S7+s7+gwOjc2dMQ3zFW5ou+odFvXnF1LbOPK E5tZTxBQImKsIGSFQkwwO7Vri5j3IfJSHBB4LnfZKOzKv4cukOXHECyKk7JUUhYfUFSH k65w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=VmIMWaRTaZBFpAaBIfFXWsZqRBt3vcQjGpVVYfz+UdQ=; b=JK7PbgyGBRbeSsPwuIoO7mzER2xETyy+GTXNAfGyiMn0DjUFZRIG18AFBr9jHE4cWf J5CbSPhKmlC6UppfaDlfrZaLHFTWFY0HvvDZL7JvGr7f+SK2lHoCkYDUAHRzYTBHBqk7 lx5388bbIQkomKZWhV4g+Jtot1pDV4eFIsq31Ej1UUwAGuawiNMpbNNYjN55s69LZGjv RKGEWw2t14yL8F27QpR3KHLPoN9Qs9F1a3/2UV0KPL22ZBou7Gevy2TR69bwTjvaduvQ TWRRVWlm7QpQI73H1QkgCtjIe/Cuu+jzoregvT0g5m5OamVcDeoP+DupYLrN0G7hTcMX Ls4w== X-Gm-Message-State: APf1xPByFQLAhRLd+9XOMEYofFFDjn4XCs14aQYUB2fx78TISEZbebd4 c4li+hFdcp5MAZVEUML6Pt2V8g== X-Google-Smtp-Source: AG47ELut4eUEfllpqIJ6KujqXyKYo/XYOrTyx7CRwRxU4SOepz+DFLogfKW7MnUHFPIlp6yDoft//w== X-Received: by 2002:a17:902:6083:: with SMTP id s3-v6mr2684609plj.6.1519928894071; Thu, 01 Mar 2018 10:28:14 -0800 (PST) Received: from xeon-e3.lan (204-195-71-95.wavecable.com. [204.195.71.95]) by smtp.gmail.com with ESMTPSA id j64sm10792314pfe.68.2018.03.01.10.28.12 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 01 Mar 2018 10:28:13 -0800 (PST) From: Stephen Hemminger X-Google-Original-From: Stephen Hemminger To: kys@microsoft.com, haiyangz@microsoft.com, sthemmin@microsoft.com Cc: devel@linuxdriverproject.org, netdev@vger.kernel.org Subject: [PATCH net 8/9] hv_netvsc: propagate rx filters to VF Date: Thu, 1 Mar 2018 10:27:55 -0800 Message-Id: <20180301182756.23027-9-sthemmin@microsoft.com> X-Mailer: git-send-email 2.16.1 In-Reply-To: <20180301182756.23027-1-sthemmin@microsoft.com> References: <20180301182756.23027-1-sthemmin@microsoft.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The netvsc device should propagate filters to the SR-IOV VF device (if present). The flags also need to be propagated to the VF device as well. This only really matters on local Hyper-V since Azure does not support multiple addresses. The rx filter management in netvsc device does not need to be done in a work queue since it is called with RTNL held. Signed-off-by: Stephen Hemminger --- drivers/net/hyperv/hyperv_net.h | 4 +--- drivers/net/hyperv/netvsc_drv.c | 35 ++++++++++++++++++++++++++++++----- drivers/net/hyperv/rndis_filter.c | 35 ++++++++++++----------------------- 3 files changed, 43 insertions(+), 31 deletions(-) diff --git a/drivers/net/hyperv/hyperv_net.h b/drivers/net/hyperv/hyperv_net.h index 0db3bd1ea06f..a4e1ebba84cf 100644 --- a/drivers/net/hyperv/hyperv_net.h +++ b/drivers/net/hyperv/hyperv_net.h @@ -172,8 +172,6 @@ struct rndis_device { spinlock_t request_lock; struct list_head req_list; - struct work_struct mcast_work; - bool link_state; /* 0 - link up, 1 - link down */ u8 hw_mac_adr[ETH_ALEN]; @@ -216,7 +214,7 @@ int rndis_filter_open(struct netvsc_device *nvdev); int rndis_filter_close(struct netvsc_device *nvdev); struct netvsc_device *rndis_filter_device_add(struct hv_device *dev, struct netvsc_device_info *info); -void rndis_filter_update(struct netvsc_device *nvdev); +void rndis_filter_update(struct netvsc_device *nvdev, unsigned int flags); void rndis_filter_device_remove(struct hv_device *dev, struct netvsc_device *nvdev); int rndis_filter_set_rss_param(struct rndis_device *rdev, diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c index fa6cf18e7719..1909c58e0a7e 100644 --- a/drivers/net/hyperv/netvsc_drv.c +++ b/drivers/net/hyperv/netvsc_drv.c @@ -66,12 +66,36 @@ static int debug = -1; module_param(debug, int, S_IRUGO); MODULE_PARM_DESC(debug, "Debug level (0=none,...,16=all)"); -static void netvsc_set_multicast_list(struct net_device *net) +static void netvsc_change_rx_flags(struct net_device *net, int change) { - struct net_device_context *net_device_ctx = netdev_priv(net); - struct netvsc_device *nvdev = rtnl_dereference(net_device_ctx->nvdev); + struct net_device_context *ndev_ctx = netdev_priv(net); + struct net_device *vf_netdev = rtnl_dereference(ndev_ctx->vf_netdev); + struct netvsc_device *nvdev = rtnl_dereference(ndev_ctx->nvdev); + + if (vf_netdev) { + if (change & IFF_PROMISC) + dev_set_promiscuity(net, + (net->flags & IFF_PROMISC) ? 1 : -1); + + if (change & IFF_ALLMULTI) + dev_set_allmulti(net, + (net->flags & IFF_ALLMULTI) ? 1 : -1); + } - rndis_filter_update(nvdev); + if (change & (IFF_PROMISC | IFF_ALLMULTI)) + rndis_filter_update(nvdev, net->flags); +} + +/* Hyper-V vswitch does not support filtering but VF does */ +static void netvsc_set_rx_mode(struct net_device *net) +{ + struct net_device_context *ndev_ctx = netdev_priv(net); + struct net_device *vf_netdev = rtnl_dereference(ndev_ctx->vf_netdev); + + if (vf_netdev) { + dev_uc_sync(vf_netdev, net); + dev_mc_sync(vf_netdev, net); + } } static int netvsc_open(struct net_device *net) @@ -1575,7 +1599,8 @@ static const struct net_device_ops device_ops = { .ndo_open = netvsc_open, .ndo_stop = netvsc_close, .ndo_start_xmit = netvsc_start_xmit, - .ndo_set_rx_mode = netvsc_set_multicast_list, + .ndo_change_rx_flags = netvsc_change_rx_flags, + .ndo_set_rx_mode = netvsc_set_rx_mode, .ndo_change_mtu = netvsc_change_mtu, .ndo_validate_addr = eth_validate_addr, .ndo_set_mac_address = netvsc_set_mac_addr, diff --git a/drivers/net/hyperv/rndis_filter.c b/drivers/net/hyperv/rndis_filter.c index 3ce11361634f..199ec6da6bde 100644 --- a/drivers/net/hyperv/rndis_filter.c +++ b/drivers/net/hyperv/rndis_filter.c @@ -32,8 +32,6 @@ #include "hyperv_net.h" -static void rndis_set_multicast(struct work_struct *w); - #define RNDIS_EXT_LEN PAGE_SIZE struct rndis_request { struct list_head list_ent; @@ -78,7 +76,6 @@ static struct rndis_device *get_rndis_device(void) spin_lock_init(&device->request_lock); INIT_LIST_HEAD(&device->req_list); - INIT_WORK(&device->mcast_work, rndis_set_multicast); device->state = RNDIS_DEV_UNINITIALIZED; @@ -846,26 +843,21 @@ static int rndis_filter_set_packet_filter(struct rndis_device *dev, return ret; } -static void rndis_set_multicast(struct work_struct *w) +void rndis_filter_update(struct netvsc_device *nvdev, + unsigned int flags) { - struct rndis_device *rdev - = container_of(w, struct rndis_device, mcast_work); + u32 filter = NDIS_PACKET_TYPE_DIRECTED; - if (rdev->ndev->flags & IFF_PROMISC) - rndis_filter_set_packet_filter(rdev, - NDIS_PACKET_TYPE_PROMISCUOUS); - else - rndis_filter_set_packet_filter(rdev, - NDIS_PACKET_TYPE_BROADCAST | - NDIS_PACKET_TYPE_ALL_MULTICAST | - NDIS_PACKET_TYPE_DIRECTED); -} - -void rndis_filter_update(struct netvsc_device *nvdev) -{ - struct rndis_device *rdev = nvdev->extension; + if (flags & IFF_PROMISC) { + filter = NDIS_PACKET_TYPE_PROMISCUOUS; + } else { + if (flags & IFF_ALLMULTI) + flags |= NDIS_PACKET_TYPE_ALL_MULTICAST; + if (flags & IFF_BROADCAST) + flags |= NDIS_PACKET_TYPE_BROADCAST; + } - schedule_work(&rdev->mcast_work); + rndis_filter_set_packet_filter(nvdev->extension, filter); } static int rndis_filter_init_device(struct rndis_device *dev, @@ -995,9 +987,6 @@ static int rndis_filter_close_device(struct rndis_device *dev) if (dev->state != RNDIS_DEV_DATAINITIALIZED) return 0; - /* Make sure rndis_set_multicast doesn't re-enable filter! */ - cancel_work_sync(&dev->mcast_work); - ret = rndis_filter_set_packet_filter(dev, 0); if (ret == -ENODEV) ret = 0; From patchwork Thu Mar 1 18:27:56 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 879993 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=networkplumber.org Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=networkplumber-org.20150623.gappssmtp.com header.i=@networkplumber-org.20150623.gappssmtp.com header.b="KWNX2t18"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zsgsx0Cqqz9s3L for ; Fri, 2 Mar 2018 05:28:21 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1033968AbeCAS2S (ORCPT ); Thu, 1 Mar 2018 13:28:18 -0500 Received: from mail-pg0-f67.google.com ([74.125.83.67]:40025 "EHLO mail-pg0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1033960AbeCAS2Q (ORCPT ); Thu, 1 Mar 2018 13:28:16 -0500 Received: by mail-pg0-f67.google.com with SMTP id g2so2654808pgn.7 for ; Thu, 01 Mar 2018 10:28:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=3qheris+iCNkBq26yugap5zBJS1OqRzyGqroSBmseYc=; b=KWNX2t18W7/R8msak62R6d7ogHVMzm2AOrj1Yd95qRxLXKAYyhYYM63JLSiiWi32eS vKZ73EtXSUzpLxWn3VW+P6g09Helqlv6xxEUrtRSwrDWITf8wS62MNPA+kFJ5rBFBBaP Ss+WM1cvTenzXr0U619psrQBUPPO4JRxEyUlUtV1023/O2PwGcgawcDE4T4cUTyG7Kso EvZFUNQ6kzqYXyGmrMLLRYhBWfUv1dE1tISr2ZMyieSpSAntyMXxUqa401Zkvs8r+Ecv sp/vsbb80wQi1X6hAMekLnFswX2VHBvD7x7MY1rxuruOIKEUpgoGiik8Jmytj+M8liLp cuUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=3qheris+iCNkBq26yugap5zBJS1OqRzyGqroSBmseYc=; b=XnRLZjxVwsqglvcS5JcOg2ipFIAANXMU7DHIM/MbU+NW9uydY5ikXEF/pcXBC8Mddw jZ+TXhL3Zr7DevaGp7mnCkkjkArYxJ1KqhSPldqX015KeSrRx4vG4+OcFfSSLVYhajD+ iGeQaG3Uwx23fiFLSOyIGTqz877G2/jwpJy4XakOkJnsVbIdP85p4L7FfoAAzW/Fx7ve t/e3ELTRP2PzFIF81GxhoL4lM2Y1922sLph7KE11yiksQRjxtmW+5kA50TMYUUTyLNe2 LSsYatfrCC2kEtviGlJ4s8W0tkGQtd2LhLlpEJsqt3sPmsbgB8SeDiZkEbUMFw6ULjIT AxUA== X-Gm-Message-State: APf1xPBjlEDfKH2QXNTfCOWP2CULmwq9KN3GbHKqBzWmMinRkr5zOQcR 2zLdIWbU0LVOpyohHNb1o7TvKw== X-Google-Smtp-Source: AG47ELuxpd0lsNzCOpBJpu5DPOC38OeBJTcq4cDN0QfihXOzeTWo1OlSgJurk2AvkySq0R5nfaIpIA== X-Received: by 10.98.144.146 with SMTP id q18mr2897475pfk.103.1519928895379; Thu, 01 Mar 2018 10:28:15 -0800 (PST) Received: from xeon-e3.lan (204-195-71-95.wavecable.com. [204.195.71.95]) by smtp.gmail.com with ESMTPSA id j64sm10792314pfe.68.2018.03.01.10.28.14 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 01 Mar 2018 10:28:14 -0800 (PST) From: Stephen Hemminger X-Google-Original-From: Stephen Hemminger To: kys@microsoft.com, haiyangz@microsoft.com, sthemmin@microsoft.com Cc: devel@linuxdriverproject.org, netdev@vger.kernel.org Subject: [PATCH net 9/9] hv_netvsc: defer queue selection to VF Date: Thu, 1 Mar 2018 10:27:56 -0800 Message-Id: <20180301182756.23027-10-sthemmin@microsoft.com> X-Mailer: git-send-email 2.16.1 In-Reply-To: <20180301182756.23027-1-sthemmin@microsoft.com> References: <20180301182756.23027-1-sthemmin@microsoft.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org When VF is used for accelerated networking it will likely have more queues (and different policy) than the synthetic NIC. This patch defers the queue policy to the VF so that all the queues can be used. This impacts workloads like local generate UDP. Signed-off-by: Stephen Hemminger --- drivers/net/hyperv/netvsc_drv.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c index 1909c58e0a7e..e36f3ae6893b 100644 --- a/drivers/net/hyperv/netvsc_drv.c +++ b/drivers/net/hyperv/netvsc_drv.c @@ -322,8 +322,19 @@ static u16 netvsc_select_queue(struct net_device *ndev, struct sk_buff *skb, rcu_read_lock(); vf_netdev = rcu_dereference(ndc->vf_netdev); if (vf_netdev) { - txq = skb_rx_queue_recorded(skb) ? skb_get_rx_queue(skb) : 0; - qdisc_skb_cb(skb)->slave_dev_queue_mapping = skb->queue_mapping; + const struct net_device_ops *vf_ops = vf_netdev->netdev_ops; + + if (vf_ops->ndo_select_queue) + txq = vf_ops->ndo_select_queue(vf_netdev, skb, + accel_priv, fallback); + else + txq = fallback(vf_netdev, skb); + + /* Record the queue selected by VF so that it can be + * used for common case where VF has more queues than + * the synthetic device. + */ + qdisc_skb_cb(skb)->slave_dev_queue_mapping = txq; } else { txq = netvsc_pick_tx(ndev, skb); }