diff options
author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2008-02-15 10:33:07 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2008-02-15 10:33:07 -0500 |
commit | f6866fecd6fd8e44a6715da09844a4fd1b8484da (patch) | |
tree | a166c399ddb37a48035589ffda29ef05d236c4b4 /drivers/net/cxgb3 | |
parent | 4ee29f6a52158cea526b16a44ae38643946103ec (diff) | |
parent | 997b37da1515c1620692521786a74af271664eb7 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: (82 commits)
[NET]: Make sure sockets implement splice_read
netconsole: avoid null pointer dereference at show_local_mac()
[IPV6]: Fix reversed local_df test in ip6_fragment
[XFRM]: Avoid bogus BUG() when throwing new policy away.
[AF_KEY]: Fix bug in spdadd
[NETFILTER] nf_conntrack_proto_tcp.c: Mistyped state corrected.
net: xfrm statistics depend on INET
[NETFILTER]: make secmark_tg_destroy() static
[INET]: Unexport inet_listen_wlock
[INET]: Unexport __inet_hash_connect
[NET]: Improve cache line coherency of ingress qdisc
[NET]: Fix race in dev_close(). (Bug 9750)
[IPSEC]: Fix bogus usage of u64 on input sequence number
[RTNETLINK]: Send a single notification on device state changes.
[NETLABLE]: Hide netlbl_unlabel_audit_addr6 under ifdef CONFIG_IPV6.
[NETLABEL]: Don't produce unused variables when IPv6 is off.
[NETLABEL]: Compilation for CONFIG_AUDIT=n case.
[GENETLINK]: Relax dances with genl_lock.
[NETLABEL]: Fix lookup logic of netlbl_domhsh_search_def.
[IPV6]: remove unused method declaration (net/ndisc.h).
...
Diffstat (limited to 'drivers/net/cxgb3')
-rw-r--r-- | drivers/net/cxgb3/l2t.c | 2 | ||||
-rw-r--r-- | drivers/net/cxgb3/sge.c | 35 |
2 files changed, 16 insertions, 21 deletions
diff --git a/drivers/net/cxgb3/l2t.c b/drivers/net/cxgb3/l2t.c index 17ed4c3527b7..865faee53e17 100644 --- a/drivers/net/cxgb3/l2t.c +++ b/drivers/net/cxgb3/l2t.c | |||
@@ -404,7 +404,7 @@ found: | |||
404 | if (neigh->nud_state & NUD_FAILED) { | 404 | if (neigh->nud_state & NUD_FAILED) { |
405 | arpq = e->arpq_head; | 405 | arpq = e->arpq_head; |
406 | e->arpq_head = e->arpq_tail = NULL; | 406 | e->arpq_head = e->arpq_tail = NULL; |
407 | } else if (neigh_is_connected(neigh)) | 407 | } else if (neigh->nud_state & (NUD_CONNECTED|NUD_STALE)) |
408 | setup_l2e_send_pending(dev, NULL, e); | 408 | setup_l2e_send_pending(dev, NULL, e); |
409 | } else { | 409 | } else { |
410 | e->state = neigh_is_connected(neigh) ? | 410 | e->state = neigh_is_connected(neigh) ? |
diff --git a/drivers/net/cxgb3/sge.c b/drivers/net/cxgb3/sge.c index 9ca8c66abd16..979f3fc5e765 100644 --- a/drivers/net/cxgb3/sge.c +++ b/drivers/net/cxgb3/sge.c | |||
@@ -1059,6 +1059,14 @@ static void write_tx_pkt_wr(struct adapter *adap, struct sk_buff *skb, | |||
1059 | htonl(V_WR_TID(q->token))); | 1059 | htonl(V_WR_TID(q->token))); |
1060 | } | 1060 | } |
1061 | 1061 | ||
1062 | static inline void t3_stop_queue(struct net_device *dev, struct sge_qset *qs, | ||
1063 | struct sge_txq *q) | ||
1064 | { | ||
1065 | netif_stop_queue(dev); | ||
1066 | set_bit(TXQ_ETH, &qs->txq_stopped); | ||
1067 | q->stops++; | ||
1068 | } | ||
1069 | |||
1062 | /** | 1070 | /** |
1063 | * eth_xmit - add a packet to the Ethernet Tx queue | 1071 | * eth_xmit - add a packet to the Ethernet Tx queue |
1064 | * @skb: the packet | 1072 | * @skb: the packet |
@@ -1090,31 +1098,18 @@ int t3_eth_xmit(struct sk_buff *skb, struct net_device *dev) | |||
1090 | ndesc = calc_tx_descs(skb); | 1098 | ndesc = calc_tx_descs(skb); |
1091 | 1099 | ||
1092 | if (unlikely(credits < ndesc)) { | 1100 | if (unlikely(credits < ndesc)) { |
1093 | if (!netif_queue_stopped(dev)) { | 1101 | t3_stop_queue(dev, qs, q); |
1094 | netif_stop_queue(dev); | 1102 | dev_err(&adap->pdev->dev, |
1095 | set_bit(TXQ_ETH, &qs->txq_stopped); | 1103 | "%s: Tx ring %u full while queue awake!\n", |
1096 | q->stops++; | 1104 | dev->name, q->cntxt_id & 7); |
1097 | dev_err(&adap->pdev->dev, | ||
1098 | "%s: Tx ring %u full while queue awake!\n", | ||
1099 | dev->name, q->cntxt_id & 7); | ||
1100 | } | ||
1101 | spin_unlock(&q->lock); | 1105 | spin_unlock(&q->lock); |
1102 | return NETDEV_TX_BUSY; | 1106 | return NETDEV_TX_BUSY; |
1103 | } | 1107 | } |
1104 | 1108 | ||
1105 | q->in_use += ndesc; | 1109 | q->in_use += ndesc; |
1106 | if (unlikely(credits - ndesc < q->stop_thres)) { | 1110 | if (unlikely(credits - ndesc < q->stop_thres)) |
1107 | q->stops++; | 1111 | if (USE_GTS || !should_restart_tx(q)) |
1108 | netif_stop_queue(dev); | 1112 | t3_stop_queue(dev, qs, q); |
1109 | set_bit(TXQ_ETH, &qs->txq_stopped); | ||
1110 | #if !USE_GTS | ||
1111 | if (should_restart_tx(q) && | ||
1112 | test_and_clear_bit(TXQ_ETH, &qs->txq_stopped)) { | ||
1113 | q->restarts++; | ||
1114 | netif_wake_queue(dev); | ||
1115 | } | ||
1116 | #endif | ||
1117 | } | ||
1118 | 1113 | ||
1119 | gen = q->gen; | 1114 | gen = q->gen; |
1120 | q->unacked += ndesc; | 1115 | q->unacked += ndesc; |