net: ravb: Return cached statistics if the interface is down
Return the cached statistics in case the interface is down. There should be no drawback to this, as cached statistics are updated in ravb_close(). In order to avoid accessing the IP registers while the IP is runtime suspended pm_runtime_active() check was introduced. The device runtime PM usage counter has been incremented to avoid disabling the device clocks while the check is in progress (if any). The commit prepares the code for the addition of runtime PM support. Suggested-by: Sergey Shtylyov <s.shtylyov@omp.ru> Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com> Reviewed-by: Sergey Shtylyov <s.shtylyov@omp.ru> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
a5f149a97d
commit
bbf2345fa6
@ -2244,8 +2244,15 @@ static struct net_device_stats *ravb_get_stats(struct net_device *ndev)
|
||||
struct ravb_private *priv = netdev_priv(ndev);
|
||||
const struct ravb_hw_info *info = priv->info;
|
||||
struct net_device_stats *nstats, *stats0, *stats1;
|
||||
struct device *dev = &priv->pdev->dev;
|
||||
|
||||
nstats = &ndev->stats;
|
||||
|
||||
pm_runtime_get_noresume(dev);
|
||||
|
||||
if (!pm_runtime_active(dev))
|
||||
goto out_rpm_put;
|
||||
|
||||
stats0 = &priv->stats[RAVB_BE];
|
||||
|
||||
if (info->tx_counters) {
|
||||
@ -2287,6 +2294,8 @@ static struct net_device_stats *ravb_get_stats(struct net_device *ndev)
|
||||
nstats->rx_over_errors += stats1->rx_over_errors;
|
||||
}
|
||||
|
||||
out_rpm_put:
|
||||
pm_runtime_put_noidle(dev);
|
||||
return nstats;
|
||||
}
|
||||
|
||||
@ -2354,6 +2363,9 @@ static int ravb_close(struct net_device *ndev)
|
||||
if (info->nc_queues)
|
||||
ravb_ring_free(ndev, RAVB_NC);
|
||||
|
||||
/* Update statistics. */
|
||||
ravb_get_stats(ndev);
|
||||
|
||||
/* Set reset mode. */
|
||||
return ravb_set_opmode(ndev, CCC_OPC_RESET);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user