Message ID | 1323694834-2844-1-git-send-email-igorm@etf.rs |
---|---|
State | Rejected, archived |
Delegated to: | David Miller |
Headers | show |
From: igorm@etf.rs Date: Mon, 12 Dec 2011 05:00:34 -0800 > From: Igor Maravic <igorm@etf.rs> > > Changes to r8169 to use byte queue limits. > > Signed-off-by: Igor Maravic <igorm@etf.rs> > Signed-off-by: Igor Maravić <igorm@etf.rs> Duplicate signoffs? Someone please review this patch, thanks. -- 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
Le lundi 12 décembre 2011 à 05:00 -0800, igorm@etf.rs a écrit : > From: Igor Maravic <igorm@etf.rs> > > Changes to r8169 to use byte queue limits. > > Signed-off-by: Igor Maravic <igorm@etf.rs> > Signed-off-by: Igor Maravić <igorm@etf.rs> Dont forget to CC maintainer of this driver. > --- > drivers/net/ethernet/realtek/r8169.c | 13 +++++++++++-- > 1 files changed, 11 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c > index 36b2a4b..bfdb5fd 100644 > --- a/drivers/net/ethernet/realtek/r8169.c > +++ b/drivers/net/ethernet/realtek/r8169.c > @@ -5326,6 +5326,7 @@ static void rtl8169_tx_clear(struct rtl8169_private *tp) > { > rtl8169_tx_clear_range(tp, tp->dirty_tx, NUM_TX_DESC); > tp->cur_tx = tp->dirty_tx = 0; > + netdev_reset_queue(tp->dev); > } > > static void rtl8169_schedule_work(struct net_device *dev, work_func_t task) > @@ -5460,6 +5461,8 @@ static int rtl8169_xmit_frags(struct rtl8169_private *tp, struct sk_buff *skb, > txd->opts1 |= cpu_to_le32(LastFrag); > } > > + netdev_sent_queue(tp->dev, skb->len); > + Why here in rtl8169_xmit_frags() ? If done from rtl8169_start_xmit(), you already have "dev" pointer. netdev_sent_queue(dev, skb->len); -- 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
> Why here in rtl8169_xmit_frags() ? > > If done from rtl8169_start_xmit(), you already have "dev" pointer. > > netdev_sent_queue(dev, skb->len); > I put it there because actual dma maping is occurring in that function. Logically there is no difference if I put it after calling of function rtl8169_xmit_frags() in rtl8169_start_xmit(). If You think it would be better to be in function rtl8169_start_xmit, for performance reasons I'l put it there. In any case I'l resubmit this patch in Monday. After all it's Saturday :) BR Igor -- 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/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c index 36b2a4b..bfdb5fd 100644 --- a/drivers/net/ethernet/realtek/r8169.c +++ b/drivers/net/ethernet/realtek/r8169.c @@ -5326,6 +5326,7 @@ static void rtl8169_tx_clear(struct rtl8169_private *tp) { rtl8169_tx_clear_range(tp, tp->dirty_tx, NUM_TX_DESC); tp->cur_tx = tp->dirty_tx = 0; + netdev_reset_queue(tp->dev); } static void rtl8169_schedule_work(struct net_device *dev, work_func_t task) @@ -5460,6 +5461,8 @@ static int rtl8169_xmit_frags(struct rtl8169_private *tp, struct sk_buff *skb, txd->opts1 |= cpu_to_le32(LastFrag); } + netdev_sent_queue(tp->dev, skb->len); + return cur_frag; err_out: @@ -5624,6 +5627,8 @@ static void rtl8169_tx_interrupt(struct net_device *dev, void __iomem *ioaddr) { unsigned int dirty_tx, tx_left; + unsigned int bytes_compl = 0; + int tx_compl = 0; dirty_tx = tp->dirty_tx; smp_rmb(); @@ -5642,14 +5647,18 @@ static void rtl8169_tx_interrupt(struct net_device *dev, rtl8169_unmap_tx_skb(&tp->pci_dev->dev, tx_skb, tp->TxDescArray + entry); if (status & LastFrag) { - dev->stats.tx_packets++; - dev->stats.tx_bytes += tx_skb->skb->len; + tx_compl++; + bytes_compl += tx_skb->skb->len; dev_kfree_skb(tx_skb->skb); tx_skb->skb = NULL; } dirty_tx++; tx_left--; } + dev->stats.tx_packets += tx_compl; + dev->stats.tx_bytes += bytes_compl; + + netdev_completed_queue(dev, tx_compl, bytes_compl); if (tp->dirty_tx != dirty_tx) { tp->dirty_tx = dirty_tx;