aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/hyperv
diff options
context:
space:
mode:
authorVitaly Kuznetsov <vkuznets@redhat.com>2015-12-01 16:43:11 -0800
committerDavid S. Miller <davem@davemloft.net>2015-12-02 23:43:24 -0500
commit8b9fbe1ac390689f01153d6af8485caec5423ccc (patch)
tree8445b10bfc1bdbc1b0c27e571fed08198d66be3b /drivers/net/hyperv
parenthv_netvsc: Don't ask for additional head room in the skb (diff)
downloadlinux-dev-8b9fbe1ac390689f01153d6af8485caec5423ccc.tar.xz
linux-dev-8b9fbe1ac390689f01153d6af8485caec5423ccc.zip
hv_netvsc: move subchannel existence check to netvsc_select_queue()
Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com> Signed-off-by: K. Y. Srinivasan <kys@microsoft.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/hyperv')
-rw-r--r--drivers/net/hyperv/hyperv_net.h15
-rw-r--r--drivers/net/hyperv/netvsc.c5
-rw-r--r--drivers/net/hyperv/netvsc_drv.c3
3 files changed, 5 insertions, 18 deletions
diff --git a/drivers/net/hyperv/hyperv_net.h b/drivers/net/hyperv/hyperv_net.h
index 731054ef6da5..8d534a324ce1 100644
--- a/drivers/net/hyperv/hyperv_net.h
+++ b/drivers/net/hyperv/hyperv_net.h
@@ -1272,19 +1272,4 @@ struct rndis_message {
#define TRANSPORT_INFO_IPV6_TCP ((INFO_IPV6 << 16) | INFO_TCP)
#define TRANSPORT_INFO_IPV6_UDP ((INFO_IPV6 << 16) | INFO_UDP)
-static inline struct vmbus_channel *get_channel(struct hv_netvsc_packet *packet,
- struct netvsc_device *net_device)
-
-{
- struct vmbus_channel *out_channel;
-
- out_channel = net_device->chn_table[packet->q_idx];
- if (!out_channel) {
- out_channel = net_device->dev->channel;
- packet->q_idx = 0;
- }
- return out_channel;
-}
-
-
#endif /* _HYPERV_NET_H */
diff --git a/drivers/net/hyperv/netvsc.c b/drivers/net/hyperv/netvsc.c
index 0e0b723df1ac..419b05515b92 100644
--- a/drivers/net/hyperv/netvsc.c
+++ b/drivers/net/hyperv/netvsc.c
@@ -749,8 +749,8 @@ static inline int netvsc_send_pkt(
struct netvsc_device *net_device)
{
struct nvsp_message nvmsg;
- struct vmbus_channel *out_channel = get_channel(packet, net_device);
u16 q_idx = packet->q_idx;
+ struct vmbus_channel *out_channel = net_device->chn_table[q_idx];
struct net_device *ndev = net_device->ndev;
u64 req_id;
int ret;
@@ -859,8 +859,7 @@ int netvsc_send(struct hv_device *device,
if (!net_device)
return -ENODEV;
- out_channel = get_channel(packet, net_device);
- q_idx = packet->q_idx;
+ out_channel = net_device->chn_table[q_idx];
packet->send_buf_index = NETVSC_INVALID_INDEX;
packet->cp_partial = false;
diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
index b820888409bc..38b53faa8119 100644
--- a/drivers/net/hyperv/netvsc_drv.c
+++ b/drivers/net/hyperv/netvsc_drv.c
@@ -273,6 +273,9 @@ static u16 netvsc_select_queue(struct net_device *ndev, struct sk_buff *skb,
skb_set_hash(skb, hash, PKT_HASH_TYPE_L3);
}
+ if (!nvsc_dev->chn_table[q_idx])
+ q_idx = 0;
+
return q_idx;
}