|
@@ -642,11 +642,11 @@ int netvsc_recv_callback(struct net_device *net,
|
|
|
{
|
|
|
struct net_device_context *net_device_ctx = netdev_priv(net);
|
|
|
struct netvsc_device *net_device = net_device_ctx->nvdev;
|
|
|
+ u16 q_idx = channel->offermsg.offer.sub_channel_index;
|
|
|
+ struct netvsc_channel *nvchan = &net_device->chan_table[q_idx];
|
|
|
struct net_device *vf_netdev;
|
|
|
struct sk_buff *skb;
|
|
|
struct netvsc_stats *rx_stats;
|
|
|
- u16 q_idx = channel->offermsg.offer.sub_channel_index;
|
|
|
-
|
|
|
|
|
|
if (net->reg_state != NETREG_REGISTERED)
|
|
|
return NVSP_STAT_FAIL;
|
|
@@ -679,7 +679,7 @@ int netvsc_recv_callback(struct net_device *net,
|
|
|
* on the synthetic device because modifying the VF device
|
|
|
* statistics will not work correctly.
|
|
|
*/
|
|
|
- rx_stats = &net_device->chan_table[q_idx].rx_stats;
|
|
|
+ rx_stats = &nvchan->rx_stats;
|
|
|
u64_stats_update_begin(&rx_stats->syncp);
|
|
|
rx_stats->packets++;
|
|
|
rx_stats->bytes += len;
|
|
@@ -690,7 +690,7 @@ int netvsc_recv_callback(struct net_device *net,
|
|
|
++rx_stats->multicast;
|
|
|
u64_stats_update_end(&rx_stats->syncp);
|
|
|
|
|
|
- netif_receive_skb(skb);
|
|
|
+ napi_gro_receive(&nvchan->napi, skb);
|
|
|
rcu_read_unlock();
|
|
|
|
|
|
return 0;
|