All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net-next 0/6] netvsc: minor fixes
@ 2017-07-24 17:57 Stephen Hemminger
  2017-07-24 17:57 ` [PATCH net-next 1/6] netvsc: remove bogus rtnl_unlock Stephen Hemminger
                   ` (6 more replies)
  0 siblings, 7 replies; 8+ messages in thread
From: Stephen Hemminger @ 2017-07-24 17:57 UTC (permalink / raw)
  To: kys, haiyangz, sthemmin; +Cc: devel, netdev

This fixes fallout from previous patch related to RTNL and RCU
annotaiton. Also one patch sent to wrong list.

Mohammed Gamal (1):
  netvsc: Remove redundant use of ipv6_hdr()

Stephen Hemminger (5):
  netvsc: remove bogus rtnl_unlock
  netvsc: prefetch the first incoming ring element
  netvsc: fix netvsc_set_channels
  netvsc: include rtnetlink.h
  netvsc: remove no longer used max_num_rss queues

 drivers/net/hyperv/hyperv_net.h   |  1 -
 drivers/net/hyperv/netvsc.c       |  8 +++++-
 drivers/net/hyperv/netvsc_drv.c   | 54 +++++++++++++++------------------------
 drivers/net/hyperv/rndis_filter.c |  1 +
 4 files changed, 28 insertions(+), 36 deletions(-)

-- 
2.11.0

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH net-next 1/6] netvsc: remove bogus rtnl_unlock
  2017-07-24 17:57 [PATCH net-next 0/6] netvsc: minor fixes Stephen Hemminger
@ 2017-07-24 17:57 ` Stephen Hemminger
  2017-07-24 17:57 ` [PATCH net-next 2/6] netvsc: Remove redundant use of ipv6_hdr() Stephen Hemminger
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Stephen Hemminger @ 2017-07-24 17:57 UTC (permalink / raw)
  To: kys, haiyangz, sthemmin; +Cc: devel, netdev

Remove accidental rtnl_unlock from earlier testing.

Fixes: 3962981f4822 ("netvsc: add rtnl annotations in rndis")
Signed-off-by: Stephen Hemminger <sthemmin@microsoft.com>
---
 drivers/net/hyperv/netvsc_drv.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
index a164981c15f7..1238600d717e 100644
--- a/drivers/net/hyperv/netvsc_drv.c
+++ b/drivers/net/hyperv/netvsc_drv.c
@@ -1548,7 +1548,6 @@ static int netvsc_probe(struct hv_device *dev,
 
 	netif_set_real_num_tx_queues(net, nvdev->num_chn);
 	netif_set_real_num_rx_queues(net, nvdev->num_chn);
-	rtnl_unlock();
 
 	netdev_lockdep_set_classes(net);
 
-- 
2.11.0

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH net-next 2/6] netvsc: Remove redundant use of ipv6_hdr()
  2017-07-24 17:57 [PATCH net-next 0/6] netvsc: minor fixes Stephen Hemminger
  2017-07-24 17:57 ` [PATCH net-next 1/6] netvsc: remove bogus rtnl_unlock Stephen Hemminger
@ 2017-07-24 17:57 ` Stephen Hemminger
  2017-07-24 17:57 ` [PATCH net-next 3/6] netvsc: prefetch the first incoming ring element Stephen Hemminger
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Stephen Hemminger @ 2017-07-24 17:57 UTC (permalink / raw)
  To: kys, haiyangz, sthemmin; +Cc: devel, Mohammed Gamal, netdev

From: Mohammed Gamal <mgamal@redhat.com>

This condition already uses an object of type ipv6hdr in the line above.
Use the object directly instead of calling ipv6_hdr

Signed-off-by: Mohammed Gamal <mgamal@redhat.com>
---
 drivers/net/hyperv/netvsc_drv.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
index 1238600d717e..bc2af352d6dd 100644
--- a/drivers/net/hyperv/netvsc_drv.c
+++ b/drivers/net/hyperv/netvsc_drv.c
@@ -339,7 +339,7 @@ static u32 net_checksum_info(struct sk_buff *skb)
 
 		if (ip6->nexthdr == IPPROTO_TCP)
 			return TRANSPORT_INFO_IPV6_TCP;
-		else if (ipv6_hdr(skb)->nexthdr == IPPROTO_UDP)
+		else if (ip6->nexthdr == IPPROTO_UDP)
 			return TRANSPORT_INFO_IPV6_UDP;
 	}
 
-- 
2.11.0

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH net-next 3/6] netvsc: prefetch the first incoming ring element
  2017-07-24 17:57 [PATCH net-next 0/6] netvsc: minor fixes Stephen Hemminger
  2017-07-24 17:57 ` [PATCH net-next 1/6] netvsc: remove bogus rtnl_unlock Stephen Hemminger
  2017-07-24 17:57 ` [PATCH net-next 2/6] netvsc: Remove redundant use of ipv6_hdr() Stephen Hemminger
@ 2017-07-24 17:57 ` Stephen Hemminger
  2017-07-24 17:57 ` [PATCH net-next 4/6] netvsc: fix netvsc_set_channels Stephen Hemminger
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Stephen Hemminger @ 2017-07-24 17:57 UTC (permalink / raw)
  To: kys, haiyangz, sthemmin; +Cc: devel, netdev

In interrupt handler, prefetch the first incoming ring element
so that it is in cache by the time NAPI poll gets to it.

Signed-off-by: Stephen Hemminger <sthemmin@microsoft.com>
---
 drivers/net/hyperv/netvsc.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/net/hyperv/netvsc.c b/drivers/net/hyperv/netvsc.c
index 0a9d9feedc3f..06f39a99da7c 100644
--- a/drivers/net/hyperv/netvsc.c
+++ b/drivers/net/hyperv/netvsc.c
@@ -30,6 +30,7 @@
 #include <linux/if_ether.h>
 #include <linux/vmalloc.h>
 #include <linux/rtnetlink.h>
+#include <linux/prefetch.h>
 
 #include <asm/sync_bitops.h>
 
@@ -1265,10 +1266,15 @@ int netvsc_poll(struct napi_struct *napi, int budget)
 void netvsc_channel_cb(void *context)
 {
 	struct netvsc_channel *nvchan = context;
+	struct vmbus_channel *channel = nvchan->channel;
+	struct hv_ring_buffer_info *rbi = &channel->inbound;
+
+	/* preload first vmpacket descriptor */
+	prefetch(hv_get_ring_buffer(rbi) + rbi->priv_read_index);
 
 	if (napi_schedule_prep(&nvchan->napi)) {
 		/* disable interupts from host */
-		hv_begin_read(&nvchan->channel->inbound);
+		hv_begin_read(rbi);
 
 		__napi_schedule(&nvchan->napi);
 	}
-- 
2.11.0

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH net-next 4/6] netvsc: fix netvsc_set_channels
  2017-07-24 17:57 [PATCH net-next 0/6] netvsc: minor fixes Stephen Hemminger
                   ` (2 preceding siblings ...)
  2017-07-24 17:57 ` [PATCH net-next 3/6] netvsc: prefetch the first incoming ring element Stephen Hemminger
@ 2017-07-24 17:57 ` Stephen Hemminger
  2017-07-24 17:57 ` [PATCH net-next 5/6] netvsc: include rtnetlink.h Stephen Hemminger
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Stephen Hemminger @ 2017-07-24 17:57 UTC (permalink / raw)
  To: kys, haiyangz, sthemmin; +Cc: devel, netdev

The number of channels returned by rndis_filter_device_add maybe
less than the number requested. Therefore set correct real
number of queues.

Signed-off-by: Stephen Hemminger <sthemmin@microsoft.com>
---
 drivers/net/hyperv/netvsc_drv.c | 51 +++++++++++++++--------------------------
 1 file changed, 19 insertions(+), 32 deletions(-)

diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
index bc2af352d6dd..99ae7fb6ec11 100644
--- a/drivers/net/hyperv/netvsc_drv.c
+++ b/drivers/net/hyperv/netvsc_drv.c
@@ -713,29 +713,6 @@ static void netvsc_get_channels(struct net_device *net,
 	}
 }
 
-static int netvsc_set_queues(struct net_device *net, struct hv_device *dev,
-			     u32 num_chn)
-{
-	struct netvsc_device_info device_info;
-	struct netvsc_device *net_device;
-	int ret;
-
-	memset(&device_info, 0, sizeof(device_info));
-	device_info.num_chn = num_chn;
-	device_info.ring_size = ring_size;
-	device_info.max_num_vrss_chns = num_chn;
-
-	ret = netif_set_real_num_tx_queues(net, num_chn);
-	if (ret)
-		return ret;
-
-	ret = netif_set_real_num_rx_queues(net, num_chn);
-	if (ret)
-		return ret;
-
-	net_device = rndis_filter_device_add(dev, &device_info);
-	return IS_ERR(net_device) ? PTR_ERR(net_device) : 0;
-}
 
 static int netvsc_set_channels(struct net_device *net,
 			       struct ethtool_channels *channels)
@@ -743,9 +720,10 @@ static int netvsc_set_channels(struct net_device *net,
 	struct net_device_context *net_device_ctx = netdev_priv(net);
 	struct hv_device *dev = net_device_ctx->device_ctx;
 	struct netvsc_device *nvdev = rtnl_dereference(net_device_ctx->nvdev);
-	unsigned int count = channels->combined_count;
+	unsigned int orig, count = channels->combined_count;
+	struct netvsc_device_info device_info;
 	bool was_opened;
-	int ret;
+	int ret = 0;
 
 	/* We do not support separate count for rx, tx, or other */
 	if (count == 0 ||
@@ -764,19 +742,29 @@ static int netvsc_set_channels(struct net_device *net,
 	if (count > nvdev->max_chn)
 		return -EINVAL;
 
+	orig = nvdev->num_chn;
 	was_opened = rndis_filter_opened(nvdev);
 	if (was_opened)
 		rndis_filter_close(nvdev);
 
 	rndis_filter_device_remove(dev, nvdev);
 
-	ret = netvsc_set_queues(net, dev, count);
-	if (ret == 0)
-		nvdev->num_chn = count;
-	else
-		netvsc_set_queues(net, dev, nvdev->num_chn);
+	memset(&device_info, 0, sizeof(device_info));
+	device_info.num_chn = count;
+	device_info.ring_size = ring_size;
+	device_info.max_num_vrss_chns = count;
+
+	nvdev = rndis_filter_device_add(dev, &device_info);
+	if (!IS_ERR(nvdev)) {
+		netif_set_real_num_tx_queues(net, nvdev->num_chn);
+		netif_set_real_num_rx_queues(net, nvdev->num_chn);
+		ret = PTR_ERR(nvdev);
+	} else {
+		device_info.num_chn = orig;
+		device_info.max_num_vrss_chns = count;
+		rndis_filter_device_add(dev, &device_info);
+	}
 
-	nvdev = rtnl_dereference(net_device_ctx->nvdev);
 	if (was_opened)
 		rndis_filter_open(nvdev);
 
@@ -863,7 +851,6 @@ static int netvsc_change_mtu(struct net_device *ndev, int mtu)
 	memset(&device_info, 0, sizeof(device_info));
 	device_info.ring_size = ring_size;
 	device_info.num_chn = nvdev->num_chn;
-	device_info.max_num_vrss_chns = nvdev->num_chn;
 
 	rndis_filter_device_remove(hdev, nvdev);
 
-- 
2.11.0

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH net-next 5/6] netvsc: include rtnetlink.h
  2017-07-24 17:57 [PATCH net-next 0/6] netvsc: minor fixes Stephen Hemminger
                   ` (3 preceding siblings ...)
  2017-07-24 17:57 ` [PATCH net-next 4/6] netvsc: fix netvsc_set_channels Stephen Hemminger
@ 2017-07-24 17:57 ` Stephen Hemminger
  2017-07-24 17:57 ` [PATCH net-next 6/6] netvsc: remove no longer used max_num_rss queues Stephen Hemminger
  2017-07-25  0:39 ` [PATCH net-next 0/6] netvsc: minor fixes David Miller
  6 siblings, 0 replies; 8+ messages in thread
From: Stephen Hemminger @ 2017-07-24 17:57 UTC (permalink / raw)
  To: kys, haiyangz, sthemmin; +Cc: devel, netdev

Since these files use rtnl_derefernce make sure and include rtnetlink.h

Signed-off-by: Stephen Hemminger <sthemmin@microsoft.com>
---
 drivers/net/hyperv/netvsc_drv.c   | 2 ++
 drivers/net/hyperv/rndis_filter.c | 1 +
 2 files changed, 3 insertions(+)

diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
index 99ae7fb6ec11..b2b0a1f96940 100644
--- a/drivers/net/hyperv/netvsc_drv.c
+++ b/drivers/net/hyperv/netvsc_drv.c
@@ -33,6 +33,8 @@
 #include <linux/if_vlan.h>
 #include <linux/in.h>
 #include <linux/slab.h>
+#include <linux/rtnetlink.h>
+
 #include <net/arp.h>
 #include <net/route.h>
 #include <net/sock.h>
diff --git a/drivers/net/hyperv/rndis_filter.c b/drivers/net/hyperv/rndis_filter.c
index e439886f72c1..eaa3f0d5682a 100644
--- a/drivers/net/hyperv/rndis_filter.c
+++ b/drivers/net/hyperv/rndis_filter.c
@@ -28,6 +28,7 @@
 #include <linux/if_vlan.h>
 #include <linux/nls.h>
 #include <linux/vmalloc.h>
+#include <linux/rtnetlink.h>
 
 #include "hyperv_net.h"
 
-- 
2.11.0

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH net-next 6/6] netvsc: remove no longer used max_num_rss queues
  2017-07-24 17:57 [PATCH net-next 0/6] netvsc: minor fixes Stephen Hemminger
                   ` (4 preceding siblings ...)
  2017-07-24 17:57 ` [PATCH net-next 5/6] netvsc: include rtnetlink.h Stephen Hemminger
@ 2017-07-24 17:57 ` Stephen Hemminger
  2017-07-25  0:39 ` [PATCH net-next 0/6] netvsc: minor fixes David Miller
  6 siblings, 0 replies; 8+ messages in thread
From: Stephen Hemminger @ 2017-07-24 17:57 UTC (permalink / raw)
  To: kys, haiyangz, sthemmin; +Cc: devel, netdev

This value has been calculated in rndis_device_attach since 4.11.

Signed-off-by: Stephen Hemminger <sthemmin@microsoft.com>
---
 drivers/net/hyperv/hyperv_net.h | 1 -
 drivers/net/hyperv/netvsc_drv.c | 2 --
 2 files changed, 3 deletions(-)

diff --git a/drivers/net/hyperv/hyperv_net.h b/drivers/net/hyperv/hyperv_net.h
index afb65f753574..4e7ff348327e 100644
--- a/drivers/net/hyperv/hyperv_net.h
+++ b/drivers/net/hyperv/hyperv_net.h
@@ -147,7 +147,6 @@ struct hv_netvsc_packet {
 struct netvsc_device_info {
 	unsigned char mac_adr[ETH_ALEN];
 	int  ring_size;
-	u32  max_num_vrss_chns;
 	u32  num_chn;
 };
 
diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
index b2b0a1f96940..8136dd2d927f 100644
--- a/drivers/net/hyperv/netvsc_drv.c
+++ b/drivers/net/hyperv/netvsc_drv.c
@@ -754,7 +754,6 @@ static int netvsc_set_channels(struct net_device *net,
 	memset(&device_info, 0, sizeof(device_info));
 	device_info.num_chn = count;
 	device_info.ring_size = ring_size;
-	device_info.max_num_vrss_chns = count;
 
 	nvdev = rndis_filter_device_add(dev, &device_info);
 	if (!IS_ERR(nvdev)) {
@@ -763,7 +762,6 @@ static int netvsc_set_channels(struct net_device *net,
 		ret = PTR_ERR(nvdev);
 	} else {
 		device_info.num_chn = orig;
-		device_info.max_num_vrss_chns = count;
 		rndis_filter_device_add(dev, &device_info);
 	}
 
-- 
2.11.0

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH net-next 0/6] netvsc: minor fixes
  2017-07-24 17:57 [PATCH net-next 0/6] netvsc: minor fixes Stephen Hemminger
                   ` (5 preceding siblings ...)
  2017-07-24 17:57 ` [PATCH net-next 6/6] netvsc: remove no longer used max_num_rss queues Stephen Hemminger
@ 2017-07-25  0:39 ` David Miller
  6 siblings, 0 replies; 8+ messages in thread
From: David Miller @ 2017-07-25  0:39 UTC (permalink / raw)
  To: stephen; +Cc: kys, haiyangz, sthemmin, devel, netdev

From: Stephen Hemminger <stephen@networkplumber.org>
Date: Mon, 24 Jul 2017 10:57:24 -0700

> This fixes fallout from previous patch related to RTNL and RCU
> annotaiton. Also one patch sent to wrong list.

Series applied, thanks.

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2017-07-25  0:39 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-07-24 17:57 [PATCH net-next 0/6] netvsc: minor fixes Stephen Hemminger
2017-07-24 17:57 ` [PATCH net-next 1/6] netvsc: remove bogus rtnl_unlock Stephen Hemminger
2017-07-24 17:57 ` [PATCH net-next 2/6] netvsc: Remove redundant use of ipv6_hdr() Stephen Hemminger
2017-07-24 17:57 ` [PATCH net-next 3/6] netvsc: prefetch the first incoming ring element Stephen Hemminger
2017-07-24 17:57 ` [PATCH net-next 4/6] netvsc: fix netvsc_set_channels Stephen Hemminger
2017-07-24 17:57 ` [PATCH net-next 5/6] netvsc: include rtnetlink.h Stephen Hemminger
2017-07-24 17:57 ` [PATCH net-next 6/6] netvsc: remove no longer used max_num_rss queues Stephen Hemminger
2017-07-25  0:39 ` [PATCH net-next 0/6] netvsc: minor fixes David Miller

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.