Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 290783
b: refs/heads/master
c: 036dafa
h: refs/heads/master
i:
  290781: 471789a
  290779: 8bcadfc
  290775: 467b331
  290767: 20e9cf5
  290751: 5182bf9
v: v3
  • Loading branch information
Igor Maravic authored and Francois Romieu committed Mar 5, 2012
1 parent a209f2f commit 2629bd6
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 6 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 8027aa245bbd125350f6a78c5a78771d143aba55
refs/heads/master: 036dafa28da1e2565a8529de2ae663c37b7a0060
27 changes: 22 additions & 5 deletions trunk/drivers/net/ethernet/realtek/r8169.c
Original file line number Diff line number Diff line change
Expand Up @@ -5399,6 +5399,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 rtl_reset_work(struct rtl8169_private *tp)
Expand Down Expand Up @@ -5553,6 +5554,8 @@ static netdev_tx_t rtl8169_start_xmit(struct sk_buff *skb,

txd->opts2 = cpu_to_le32(opts[1]);

netdev_sent_queue(dev, skb->len);

wmb();

/* Anti gcc 2.95.3 bugware (sic) */
Expand Down Expand Up @@ -5647,9 +5650,16 @@ static void rtl8169_pcierr_interrupt(struct net_device *dev)
rtl_schedule_task(tp, RTL_FLAG_TASK_RESET_PENDING);
}

struct rtl_txc {
int packets;
int bytes;
};

static void rtl_tx(struct net_device *dev, struct rtl8169_private *tp)
{
struct rtl8169_stats *tx_stats = &tp->tx_stats;
unsigned int dirty_tx, tx_left;
struct rtl_txc txc = { 0, 0 };

dirty_tx = tp->dirty_tx;
smp_rmb();
Expand All @@ -5668,17 +5678,24 @@ static void rtl_tx(struct net_device *dev, struct rtl8169_private *tp)
rtl8169_unmap_tx_skb(&tp->pci_dev->dev, tx_skb,
tp->TxDescArray + entry);
if (status & LastFrag) {
u64_stats_update_begin(&tp->tx_stats.syncp);
tp->tx_stats.packets++;
tp->tx_stats.bytes += tx_skb->skb->len;
u64_stats_update_end(&tp->tx_stats.syncp);
dev_kfree_skb(tx_skb->skb);
struct sk_buff *skb = tx_skb->skb;

txc.packets++;
txc.bytes += skb->len;
dev_kfree_skb(skb);
tx_skb->skb = NULL;
}
dirty_tx++;
tx_left--;
}

u64_stats_update_begin(&tx_stats->syncp);
tx_stats->packets += txc.packets;
tx_stats->bytes += txc.bytes;
u64_stats_update_end(&tx_stats->syncp);

netdev_completed_queue(dev, txc.packets, txc.bytes);

if (tp->dirty_tx != dirty_tx) {
tp->dirty_tx = dirty_tx;
/* Sync with rtl8169_start_xmit:
Expand Down

0 comments on commit 2629bd6

Please sign in to comment.