Skip to content

Commit

Permalink
hv_netvsc: Add query for initial physical link speed
Browse files Browse the repository at this point in the history
The physical link speed value will be reported by ethtool command.
The real speed is available from Windows 2016 host or later.

Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
Reviewed-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Haiyang Zhang authored and David S. Miller committed Aug 8, 2016
1 parent aeec302 commit b37879e
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 2 deletions.
4 changes: 2 additions & 2 deletions drivers/net/hyperv/netvsc_drv.c
Original file line number Diff line number Diff line change
Expand Up @@ -1352,6 +1352,8 @@ static int netvsc_probe(struct hv_device *dev,

netif_carrier_off(net);

netvsc_init_settings(net);

net_device_ctx = netdev_priv(net);
net_device_ctx->device_ctx = dev;
net_device_ctx->msg_enable = netif_msg_init(debug, default_msg);
Expand Down Expand Up @@ -1410,8 +1412,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);

netvsc_init_settings(net);

ret = register_netdev(net);
if (ret != 0) {
pr_err("Unable to register netdev.\n");
Expand Down
24 changes: 24 additions & 0 deletions drivers/net/hyperv/rndis_filter.c
Original file line number Diff line number Diff line change
Expand Up @@ -752,6 +752,28 @@ static int rndis_filter_query_device_link_status(struct rndis_device *dev)
return ret;
}

static int rndis_filter_query_link_speed(struct rndis_device *dev)
{
u32 size = sizeof(u32);
u32 link_speed;
struct net_device_context *ndc;
int ret;

ret = rndis_filter_query_device(dev, RNDIS_OID_GEN_LINK_SPEED,
&link_speed, &size);

if (!ret) {
ndc = netdev_priv(dev->ndev);

/* The link speed reported from host is in 100bps unit, so
* we convert it to Mbps here.
*/
ndc->speed = link_speed / 10000;
}

return ret;
}

int rndis_filter_set_packet_filter(struct rndis_device *dev, u32 new_filter)
{
struct rndis_request *request;
Expand Down Expand Up @@ -1044,6 +1066,8 @@ int rndis_filter_device_add(struct hv_device *dev,
if (net_device->nvsp_version < NVSP_PROTOCOL_VERSION_5)
return 0;

rndis_filter_query_link_speed(rndis_device);

/* vRSS setup */
memset(&rsscap, 0, rsscap_size);
ret = rndis_filter_query_device(rndis_device,
Expand Down

0 comments on commit b37879e

Please sign in to comment.