Skip to content

Commit 9020845

Browse files
hkallweitdavem330
authored andcommitted
r8169: improve rtl8169_start_xmit
Only call rtl8169_xmit_frags() if the skb is actually fragmented. This avoid a small overhead for non-fragmented skb's, and it allows to simplify rtl8169_xmit_frags() a little. Signed-off-by: Heiner Kallweit <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 8e3a573 commit 9020845

File tree

1 file changed

+10
-13
lines changed

1 file changed

+10
-13
lines changed

drivers/net/ethernet/realtek/r8169_main.c

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4087,12 +4087,10 @@ static int rtl8169_xmit_frags(struct rtl8169_private *tp, struct sk_buff *skb,
40874087
tp->tx_skb[entry].len = len;
40884088
}
40894089

4090-
if (cur_frag) {
4091-
tp->tx_skb[entry].skb = skb;
4092-
txd->opts1 |= cpu_to_le32(LastFrag);
4093-
}
4090+
tp->tx_skb[entry].skb = skb;
4091+
txd->opts1 |= cpu_to_le32(LastFrag);
40944092

4095-
return cur_frag;
4093+
return 0;
40964094

40974095
err_out:
40984096
rtl8169_tx_clear_range(tp, tp->cur_tx + 1, cur_frag);
@@ -4217,6 +4215,7 @@ static void rtl8169_doorbell(struct rtl8169_private *tp)
42174215
static netdev_tx_t rtl8169_start_xmit(struct sk_buff *skb,
42184216
struct net_device *dev)
42194217
{
4218+
unsigned int frags = skb_shinfo(skb)->nr_frags;
42204219
struct rtl8169_private *tp = netdev_priv(dev);
42214220
unsigned int entry = tp->cur_tx % NUM_TX_DESC;
42224221
struct TxDesc *txd = tp->TxDescArray + entry;
@@ -4225,9 +4224,8 @@ static netdev_tx_t rtl8169_start_xmit(struct sk_buff *skb,
42254224
u32 opts[2], len;
42264225
bool stop_queue;
42274226
bool door_bell;
4228-
int frags;
42294227

4230-
if (unlikely(!rtl_tx_slots_avail(tp, skb_shinfo(skb)->nr_frags))) {
4228+
if (unlikely(!rtl_tx_slots_avail(tp, frags))) {
42314229
netif_err(tp, drv, dev, "BUG! Tx Ring full when queue awake!\n");
42324230
goto err_stop_0;
42334231
}
@@ -4256,14 +4254,13 @@ static netdev_tx_t rtl8169_start_xmit(struct sk_buff *skb,
42564254
tp->tx_skb[entry].len = len;
42574255
txd->addr = cpu_to_le64(mapping);
42584256

4259-
frags = rtl8169_xmit_frags(tp, skb, opts);
4260-
if (frags < 0)
4261-
goto err_dma_1;
4262-
else if (frags)
4263-
opts[0] |= FirstFrag;
4264-
else {
4257+
if (!frags) {
42654258
opts[0] |= FirstFrag | LastFrag;
42664259
tp->tx_skb[entry].skb = skb;
4260+
} else {
4261+
if (rtl8169_xmit_frags(tp, skb, opts))
4262+
goto err_dma_1;
4263+
opts[0] |= FirstFrag;
42674264
}
42684265

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

0 commit comments

Comments
 (0)