Skip to content

Commit

Permalink
gve: Use link status register to report link status
Browse files Browse the repository at this point in the history
This makes the driver better aware of the connectivity status of the
device. Based on the device's status register, the driver can call
netif_carrier_{on,off}.

Reviewed-by: Yangchun Fu <[email protected]>
Signed-off-by: Patricio Noyola <[email protected]>
Signed-off-by: David Awogbemila <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
  • Loading branch information
oicirtap authored and davem330 committed Sep 11, 2020
1 parent 5cdad90 commit 3b7cc73
Showing 1 changed file with 21 additions and 3 deletions.
24 changes: 21 additions & 3 deletions drivers/net/ethernet/google/gve/gve_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -774,7 +774,7 @@ static int gve_open(struct net_device *dev)
msecs_to_jiffies(priv->stats_report_timer_period)));

gve_turnup(priv);
netif_carrier_on(dev);
queue_work(priv->gve_wq, &priv->service_task);
priv->interface_up_cnt++;
return 0;

Expand Down Expand Up @@ -1032,16 +1032,34 @@ void gve_handle_report_stats(struct gve_priv *priv)
}
}

static void gve_handle_link_status(struct gve_priv *priv, bool link_status)
{
if (!gve_get_napi_enabled(priv))
return;

if (link_status == netif_carrier_ok(priv->dev))
return;

if (link_status) {
netdev_info(priv->dev, "Device link is up.\n");
netif_carrier_on(priv->dev);
} else {
netdev_info(priv->dev, "Device link is down.\n");
netif_carrier_off(priv->dev);
}
}

/* Handle NIC status register changes, reset requests and report stats */
static void gve_service_task(struct work_struct *work)
{
struct gve_priv *priv = container_of(work, struct gve_priv,
service_task);
u32 status = ioread32be(&priv->reg_bar0->device_status);

gve_handle_status(priv,
ioread32be(&priv->reg_bar0->device_status));
gve_handle_status(priv, status);

gve_handle_reset(priv);
gve_handle_link_status(priv, GVE_DEVICE_STATUS_LINK_STATUS_MASK & status);
}

static int gve_init_priv(struct gve_priv *priv, bool skip_describe_device)
Expand Down

0 comments on commit 3b7cc73

Please sign in to comment.