Message ID | 1377168036-8359-1-git-send-email-B38611@freescale.com |
---|---|
State | Changes Requested, archived |
Delegated to: | David Miller |
Headers | show |
> > - bdp_pre = fec_enet_get_prevdesc(bdp, fep->bufdesc_ex); > + if (bdp == fep->tx_bd_base) > + bdp_pre = bdp + TX_RING_SIZE - 1; You need consider both extended BD format and legacy format. The size of BD is difference, you can NOT directly you bdp+TX_RING_SIZE -1 Best regards Frank Li > + else > + bdp_pre = fec_enet_get_prevdesc(bdp, fep->bufdesc_ex); > if ((id_entry->driver_data & FEC_QUIRK_ERR006358) && > !(bdp_pre->cbd_sc & BD_ENET_TX_READY)) { > fep->delay_work.trig_tx = true; > -- > 1.7.1 -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c index 4ea1555..4349a9e 100644 --- a/drivers/net/ethernet/freescale/fec_main.c +++ b/drivers/net/ethernet/freescale/fec_main.c @@ -380,7 +380,10 @@ fec_enet_start_xmit(struct sk_buff *skb, struct net_device *ndev) } } - bdp_pre = fec_enet_get_prevdesc(bdp, fep->bufdesc_ex); + if (bdp == fep->tx_bd_base) + bdp_pre = bdp + TX_RING_SIZE - 1; + else + bdp_pre = fec_enet_get_prevdesc(bdp, fep->bufdesc_ex); if ((id_entry->driver_data & FEC_QUIRK_ERR006358) && !(bdp_pre->cbd_sc & BD_ENET_TX_READY)) { fep->delay_work.trig_tx = true;
When the current BD is the first BD, the previous BD entry must be the last BD, not "bdp - 1". Add BD entry check to get the previous BD entry correctly. Signed-off-by: Fugang Duan <B38611@freescale.com> --- drivers/net/ethernet/freescale/fec_main.c | 5 ++++- 1 files changed, 4 insertions(+), 1 deletions(-)