X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fnetvsc%2Fhn_ethdev.c;h=159116f7f691d981b25e74b880c972ae735bd417;hb=89214fe915b8afb118105a784740b6910e54ade5;hp=7edfe5ec1e45ea6646dc60520bdcccf4f5107369;hpb=9970a9ad07db7745ca6bc441819b287940ae86ea;p=dpdk.git diff --git a/drivers/net/netvsc/hn_ethdev.c b/drivers/net/netvsc/hn_ethdev.c index 7edfe5ec1e..159116f7f6 100644 --- a/drivers/net/netvsc/hn_ethdev.c +++ b/drivers/net/netvsc/hn_ethdev.c @@ -42,7 +42,8 @@ DEV_TX_OFFLOAD_VLAN_INSERT) #define HN_RX_OFFLOAD_CAPS (DEV_RX_OFFLOAD_CHECKSUM | \ - DEV_RX_OFFLOAD_VLAN_STRIP) + DEV_RX_OFFLOAD_VLAN_STRIP | \ + DEV_RX_OFFLOAD_RSS_HASH) int hn_logtype_init; int hn_logtype_driver; @@ -291,6 +292,13 @@ static int hn_rss_reta_update(struct rte_eth_dev *dev, hv->rss_ind[i] = reta_conf[idx].reta[shift]; } + err = hn_rndis_conf_rss(hv, NDIS_RSS_FLAG_DISABLE); + if (err) { + PMD_DRV_LOG(NOTICE, + "rss disable failed"); + return err; + } + err = hn_rndis_conf_rss(hv, 0); if (err) { PMD_DRV_LOG(NOTICE, @@ -438,7 +446,7 @@ hn_dev_promiscuous_disable(struct rte_eth_dev *dev) return hn_vf_promiscuous_disable(dev); } -static void +static int hn_dev_allmulticast_enable(struct rte_eth_dev *dev) { struct hn_data *hv = dev->data->dev_private; @@ -446,17 +454,17 @@ hn_dev_allmulticast_enable(struct rte_eth_dev *dev) hn_rndis_set_rxfilter(hv, NDIS_PACKET_TYPE_DIRECTED | NDIS_PACKET_TYPE_ALL_MULTICAST | NDIS_PACKET_TYPE_BROADCAST); - hn_vf_allmulticast_enable(dev); + return hn_vf_allmulticast_enable(dev); } -static void +static int hn_dev_allmulticast_disable(struct rte_eth_dev *dev) { struct hn_data *hv = dev->data->dev_private; hn_rndis_set_rxfilter(hv, NDIS_PACKET_TYPE_DIRECTED | NDIS_PACKET_TYPE_BROADCAST); - hn_vf_allmulticast_disable(dev); + return hn_vf_allmulticast_disable(dev); } static int @@ -532,6 +540,9 @@ static int hn_dev_configure(struct rte_eth_dev *dev) PMD_INIT_FUNC_TRACE(); + if (dev_conf->rxmode.mq_mode & ETH_MQ_RX_RSS_FLAG) + dev_conf->rxmode.offloads |= DEV_RX_OFFLOAD_RSS_HASH; + unsupported = txmode->offloads & ~HN_TX_OFFLOAD_CAPS; if (unsupported) { PMD_DRV_LOG(NOTICE, @@ -575,6 +586,13 @@ static int hn_dev_configure(struct rte_eth_dev *dev) return err; } + err = hn_rndis_conf_rss(hv, NDIS_RSS_FLAG_DISABLE); + if (err) { + PMD_DRV_LOG(NOTICE, + "rss disable failed"); + return err; + } + err = hn_rndis_conf_rss(hv, 0); if (err) { PMD_DRV_LOG(NOTICE, @@ -1004,6 +1022,7 @@ static int eth_hn_dev_uninit(struct rte_eth_dev *eth_dev) { struct hn_data *hv = eth_dev->data->dev_private; + int ret; PMD_INIT_FUNC_TRACE(); @@ -1021,7 +1040,9 @@ eth_hn_dev_uninit(struct rte_eth_dev *eth_dev) hn_tx_pool_uninit(eth_dev); rte_vmbus_chan_close(hv->primary->chan); rte_free(hv->primary); - rte_eth_dev_owner_delete(hv->owner.id); + ret = rte_eth_dev_owner_delete(hv->owner.id); + if (ret != 0) + return ret; return 0; }