[PATCH 1/3] net: lpc_eth: Replace WARN() trace with simple pr_warn()
From: Roland Stigge <hidden>
Date: 2012-06-13 09:28:14
Also in:
lkml, netdev
On 06/13/2012 08:16 AM, Eric Dumazet wrote:
quoted hunk ↗ jump to hunk
On Mon, 2012-06-11 at 21:18 +0200, Eric Dumazet wrote:quoted
On Mon, 2012-06-11 at 11:26 +0200, Roland Stigge wrote:quoted
Is it sensible at this point to increase the TX buffers anyway? For different reasons of course: We have enough SRAM available and TX buffers (16->32) are still more than RX buffers (48).I doubt it has any impact on performance for a 100Mbit link ? One thing that could be done would be to free skbs in lpc_eth_hard_start_xmit() instead of __lpc_handle_xmit()Here is the patch I was thinking about (on top of latest net-next) Could you please test it ? drivers/net/ethernet/nxp/lpc_eth.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)diff --git a/drivers/net/ethernet/nxp/lpc_eth.c b/drivers/net/ethernet/nxp/lpc_eth.c index 083d671..426f14c 100644 --- a/drivers/net/ethernet/nxp/lpc_eth.c +++ b/drivers/net/ethernet/nxp/lpc_eth.c@@ -440,7 +440,7 @@ struct netdata_local { spinlock_t lock; void __iomem *net_base; u32 msg_enable; - struct sk_buff *skb[ENET_TX_DESC]; + unsigned int skblen[ENET_TX_DESC]; unsigned int last_tx_idx; unsigned int num_used_tx_buffs; struct mii_bus *mii_bus;@@ -908,7 +908,7 @@ static void __lpc_handle_xmit(struct net_device *ndev) txcidx = readl(LPC_ENET_TXCONSUMEINDEX(pldat->net_base)); while (pldat->last_tx_idx != txcidx) { - skb = pldat->skb[pldat->last_tx_idx]; + unsigned int skblen = pldat->skblen[pldat->last_tx_idx]; /* A buffer is available, get buffer status */ ptxstat = &pldat->tx_stat_v[pldat->last_tx_idx];@@ -945,9 +945,8 @@ static void __lpc_handle_xmit(struct net_device *ndev) } else { /* Update stats */ ndev->stats.tx_packets++; - ndev->stats.tx_bytes += skb->len; + ndev->stats.tx_bytes += skblen; } - dev_kfree_skb_irq(skb); txcidx = readl(LPC_ENET_TXCONSUMEINDEX(pldat->net_base)); }@@ -1132,7 +1131,7 @@ static int lpc_eth_hard_start_xmit(struct sk_buff *skb, struct net_device *ndev) memcpy(pldat->tx_buff_v + txidx * ENET_MAXF_SIZE, skb->data, len); /* Save the buffer and increment the buffer counter */ - pldat->skb[txidx] = skb; + pldat->skblen[txidx] = len; pldat->num_used_tx_buffs++; /* Start transmit */@@ -1147,6 +1146,7 @@ static int lpc_eth_hard_start_xmit(struct sk_buff *skb, struct net_device *ndev) spin_unlock_irq(&pldat->lock); + dev_kfree_skb(skb); return NETDEV_TX_OK; }
Works fine for a while now. We can remove the unused variable skb from __lpc_handle_xmit() now, maybe just do in your patch? Thanks! Tested-by: Roland Stigge <redacted>