net: remove dev->trans_start
previous patches removed all direct accesses to dev->trans_start, so change the netif_trans_update helper to update trans_start of netdev queue 0 instead and then remove trans_start from struct net_device. AFAICS a lot of the netif_trans_update() invocations are now useless because they occur in ndo_start_xmit and driver doesn't set LLTX (i.e. stack already took care of the update). As I can't test any of them it seems better to just leave them alone. Signed-off-by: Florian Westphal <fw@strlen.de> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
860e9538a9
commit
9b36627ace
@ -328,7 +328,7 @@ static void i40e_tx_timeout(struct net_device *netdev)
|
|||||||
unsigned long trans_start;
|
unsigned long trans_start;
|
||||||
|
|
||||||
q = netdev_get_tx_queue(netdev, i);
|
q = netdev_get_tx_queue(netdev, i);
|
||||||
trans_start = q->trans_start ? : netdev->trans_start;
|
trans_start = q->trans_start;
|
||||||
if (netif_xmit_stopped(q) &&
|
if (netif_xmit_stopped(q) &&
|
||||||
time_after(jiffies,
|
time_after(jiffies,
|
||||||
(trans_start + netdev->watchdog_timeo))) {
|
(trans_start + netdev->watchdog_timeo))) {
|
||||||
|
@ -581,7 +581,7 @@ struct netdev_queue {
|
|||||||
spinlock_t _xmit_lock ____cacheline_aligned_in_smp;
|
spinlock_t _xmit_lock ____cacheline_aligned_in_smp;
|
||||||
int xmit_lock_owner;
|
int xmit_lock_owner;
|
||||||
/*
|
/*
|
||||||
* please use this field instead of dev->trans_start
|
* Time (in jiffies) of last Tx
|
||||||
*/
|
*/
|
||||||
unsigned long trans_start;
|
unsigned long trans_start;
|
||||||
|
|
||||||
@ -1545,7 +1545,6 @@ enum netdev_priv_flags {
|
|||||||
*
|
*
|
||||||
* @offload_fwd_mark: Offload device fwding mark
|
* @offload_fwd_mark: Offload device fwding mark
|
||||||
*
|
*
|
||||||
* @trans_start: Time (in jiffies) of last Tx
|
|
||||||
* @watchdog_timeo: Represents the timeout that is used by
|
* @watchdog_timeo: Represents the timeout that is used by
|
||||||
* the watchdog (see dev_watchdog())
|
* the watchdog (see dev_watchdog())
|
||||||
* @watchdog_timer: List of timers
|
* @watchdog_timer: List of timers
|
||||||
@ -1794,13 +1793,6 @@ struct net_device {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* These may be needed for future network-power-down code. */
|
/* These may be needed for future network-power-down code. */
|
||||||
|
|
||||||
/*
|
|
||||||
* trans_start here is expensive for high speed devices on SMP,
|
|
||||||
* please use netdev_queue->trans_start instead.
|
|
||||||
*/
|
|
||||||
unsigned long trans_start;
|
|
||||||
|
|
||||||
struct timer_list watchdog_timer;
|
struct timer_list watchdog_timer;
|
||||||
|
|
||||||
int __percpu *pcpu_refcnt;
|
int __percpu *pcpu_refcnt;
|
||||||
@ -3484,7 +3476,10 @@ static inline void txq_trans_update(struct netdev_queue *txq)
|
|||||||
/* legacy drivers only, netdev_start_xmit() sets txq->trans_start */
|
/* legacy drivers only, netdev_start_xmit() sets txq->trans_start */
|
||||||
static inline void netif_trans_update(struct net_device *dev)
|
static inline void netif_trans_update(struct net_device *dev)
|
||||||
{
|
{
|
||||||
dev->trans_start = jiffies;
|
struct netdev_queue *txq = netdev_get_tx_queue(dev, 0);
|
||||||
|
|
||||||
|
if (txq->trans_start != jiffies)
|
||||||
|
txq->trans_start = jiffies;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -227,13 +227,12 @@ unsigned long dev_trans_start(struct net_device *dev)
|
|||||||
|
|
||||||
if (is_vlan_dev(dev))
|
if (is_vlan_dev(dev))
|
||||||
dev = vlan_dev_real_dev(dev);
|
dev = vlan_dev_real_dev(dev);
|
||||||
res = dev->trans_start;
|
res = netdev_get_tx_queue(dev, 0)->trans_start;
|
||||||
for (i = 0; i < dev->num_tx_queues; i++) {
|
for (i = 1; i < dev->num_tx_queues; i++) {
|
||||||
val = netdev_get_tx_queue(dev, i)->trans_start;
|
val = netdev_get_tx_queue(dev, i)->trans_start;
|
||||||
if (val && time_after(val, res))
|
if (val && time_after(val, res))
|
||||||
res = val;
|
res = val;
|
||||||
}
|
}
|
||||||
dev->trans_start = res;
|
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
@ -256,10 +255,7 @@ static void dev_watchdog(unsigned long arg)
|
|||||||
struct netdev_queue *txq;
|
struct netdev_queue *txq;
|
||||||
|
|
||||||
txq = netdev_get_tx_queue(dev, i);
|
txq = netdev_get_tx_queue(dev, i);
|
||||||
/*
|
trans_start = txq->trans_start;
|
||||||
* old device drivers set dev->trans_start
|
|
||||||
*/
|
|
||||||
trans_start = txq->trans_start ? : dev->trans_start;
|
|
||||||
if (netif_xmit_stopped(txq) &&
|
if (netif_xmit_stopped(txq) &&
|
||||||
time_after(jiffies, (trans_start +
|
time_after(jiffies, (trans_start +
|
||||||
dev->watchdog_timeo))) {
|
dev->watchdog_timeo))) {
|
||||||
|
Loading…
Reference in New Issue
Block a user