diff options
author | Felix Fietkau <nbd@nbd.name> | 2017-12-05 14:40:32 +0100 |
---|---|---|
committer | Felix Fietkau <nbd@nbd.name> | 2018-02-05 10:16:25 +0100 |
commit | 798497c66e6a67d9dbad096c041e855abe0ee662 (patch) | |
tree | 1f9eddccf20ce1b84313f3910feaf83079fe7cf0 /target/linux/ar71xx/files | |
parent | 31e6016d2e41199b22577b429b8691526a4359f6 (diff) | |
download | upstream-798497c66e6a67d9dbad096c041e855abe0ee662.tar.gz upstream-798497c66e6a67d9dbad096c041e855abe0ee662.tar.bz2 upstream-798497c66e6a67d9dbad096c041e855abe0ee662.zip |
ar71xx: use global timestamp for hang check
Shrink the size of struct ag71xx_buf to 8 bytes, which improves cache
footprint
Signed-off-by: Felix Fietkau <nbd@nbd.name>
Diffstat (limited to 'target/linux/ar71xx/files')
-rw-r--r-- | target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx.h | 5 | ||||
-rw-r--r-- | target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c | 8 |
2 files changed, 7 insertions, 6 deletions
diff --git a/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx.h b/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx.h index 5ead6b316a..38dcc915f9 100644 --- a/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx.h +++ b/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx.h @@ -100,9 +100,8 @@ struct ag71xx_buf { }; union { dma_addr_t dma_addr; - unsigned long timestamp; + unsigned int len; }; - unsigned int len; }; struct ag71xx_ring { @@ -170,6 +169,8 @@ struct ag71xx { struct napi_struct napi; u32 msg_enable; + unsigned long timestamp; + /* * From this point onwards we're not looking at per-packet fields. */ diff --git a/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c b/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c index 72e6b32c63..47b4c69c4d 100644 --- a/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c +++ b/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c @@ -816,7 +816,7 @@ static netdev_tx_t ag71xx_hard_start_xmit(struct sk_buff *skb, i = (ring->curr + n - 1) & ring_mask; ring->buf[i].len = skb->len; ring->buf[i].skb = skb; - ring->buf[i].timestamp = jiffies; + ag->timestamp = jiffies; netdev_sent_queue(dev, skb->len); @@ -926,11 +926,11 @@ static void ag71xx_restart_work_func(struct work_struct *work) rtnl_unlock(); } -static bool ag71xx_check_dma_stuck(struct ag71xx *ag, unsigned long timestamp) +static bool ag71xx_check_dma_stuck(struct ag71xx *ag) { u32 rx_sm, tx_sm, rx_fd; - if (likely(time_before(jiffies, timestamp + HZ/10))) + if (likely(time_before(jiffies, ag->timestamp + HZ/10))) return false; if (!netif_carrier_ok(ag->dev)) @@ -969,7 +969,7 @@ static int ag71xx_tx_packets(struct ag71xx *ag, bool flush) if (!flush && !ag71xx_desc_empty(desc)) { if (pdata->is_ar724x && - ag71xx_check_dma_stuck(ag, ring->buf[i].timestamp)) { + ag71xx_check_dma_stuck(ag)) { schedule_delayed_work(&ag->restart_work, HZ / 2); dma_stuck = true; } |