* [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