From: Stephen Hemminger <stephen@networkplumber.org>
To: davem@davemloft.net
Cc: netdev@vger.kernel.org,
Stephen Hemminger <stephen@networkplumber.org>,
Stephen Hemminger <sthemmin@microsoft.com>
Subject: [PATCH net-stable 10/24] hv_netvsc: avoid retry on send during shutdown
Date: Mon, 14 May 2018 15:32:09 -0700 [thread overview]
Message-ID: <20180514223223.25433-11-sthemmin@microsoft.com> (raw)
In-Reply-To: <20180514223223.25433-1-sthemmin@microsoft.com>
From: Stephen Hemminger <stephen@networkplumber.org>
commit 12f69661a49446840d742d8feb593ace022d9f66 upstream
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 <sthemmin@microsoft.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
---
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 22da6399b37a..839b9d6ecb41 100644
--- a/drivers/net/hyperv/netvsc.c
+++ b/drivers/net/hyperv/netvsc.c
@@ -850,13 +850,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;
@@ -864,10 +857,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;
@@ -951,7 +942,6 @@ int netvsc_send(struct net_device *ndev,
}
}
-send_now:
if (cur_send)
ret = netvsc_send_pkt(device, cur_send, net_device, pb, skb);
@@ -1308,11 +1298,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) {
@@ -1321,6 +1306,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:
--
2.17.0
next prev parent reply other threads:[~2018-05-14 22:32 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-05-14 22:31 [PATCH net-stable 00/24] hv_netvsc patches for 4.14 stable Stephen Hemminger
2018-05-14 22:32 ` [PATCH net-stable 01/24] hv_netvsc: Fix the real number of queues of non-vRSS cases Stephen Hemminger
2018-05-14 22:32 ` [PATCH net-stable 02/24] hv_netvsc: Rename ind_table to rx_table Stephen Hemminger
2018-05-14 22:32 ` [PATCH net-stable 03/24] hv_netvsc: Rename tx_send_table to tx_table Stephen Hemminger
2018-05-14 22:32 ` [PATCH net-stable 04/24] hv_netvsc: Add initialization of tx_table in netvsc_device_add() Stephen Hemminger
2018-05-14 22:32 ` [PATCH net-stable 05/24] hv_netvsc: Set tx_table to equal weight after subchannels open Stephen Hemminger
2018-05-14 22:32 ` [PATCH net-stable 06/24] hv_netvsc: netvsc_teardown_gpadl() split Stephen Hemminger
2018-05-14 22:32 ` [PATCH net-stable 07/24] hv_netvsc: preserve hw_features on mtu/channels/ringparam changes Stephen Hemminger
2018-05-14 22:32 ` [PATCH net-stable 08/24] hv_netvsc: empty current transmit aggregation if flow blocked Stephen Hemminger
2018-05-14 22:32 ` [PATCH net-stable 09/24] hv_netvsc: Use the num_online_cpus() for channel limit Stephen Hemminger
2018-05-14 22:32 ` Stephen Hemminger [this message]
2018-05-14 22:32 ` [PATCH net-stable 11/24] hv_netvsc: only wake transmit queue if link is up Stephen Hemminger
2018-05-14 22:32 ` [PATCH net-stable 12/24] hv_netvsc: fix error unwind handling if vmbus_open fails Stephen Hemminger
2018-05-14 22:32 ` [PATCH net-stable 13/24] hv_netvsc: cancel subchannel setup before halting device Stephen Hemminger
2018-05-14 22:32 ` [PATCH net-stable 14/24] hv_netvsc: fix race in napi poll when rescheduling Stephen Hemminger
2018-05-14 22:32 ` [PATCH net-stable 15/24] hv_netvsc: defer queue selection to VF Stephen Hemminger
2018-05-14 22:32 ` [PATCH net-stable 16/24] hv_netvsc: disable NAPI before channel close Stephen Hemminger
2018-05-14 22:32 ` [PATCH net-stable 17/24] hv_netvsc: use RCU to fix concurrent rx and queue changes Stephen Hemminger
2018-05-14 22:32 ` [PATCH net-stable 18/24] hv_netvsc: change GPAD teardown order on older versions Stephen Hemminger
2018-05-14 22:32 ` [PATCH net-stable 19/24] hv_netvsc: common detach logic Stephen Hemminger
2018-05-14 22:32 ` [PATCH net-stable 20/24] hv_netvsc: Use Windows version instead of NVSP version on GPAD teardown Stephen Hemminger
2018-05-14 22:32 ` [PATCH net-stable 21/24] hv_netvsc: Split netvsc_revoke_buf() and netvsc_teardown_gpadl() Stephen Hemminger
2018-05-14 22:32 ` [PATCH net-stable 22/24] hv_netvsc: Ensure correct teardown message sequence order Stephen Hemminger
2018-05-14 22:32 ` [PATCH net-stable 23/24] hv_netvsc: Fix net device attach on older Windows hosts Stephen Hemminger
2018-05-14 22:32 ` [PATCH net-stable 24/24] hv_netvsc: set master device Stephen Hemminger
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180514223223.25433-11-sthemmin@microsoft.com \
--to=stephen@networkplumber.org \
--cc=davem@davemloft.net \
--cc=netdev@vger.kernel.org \
--cc=sthemmin@microsoft.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox