Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6: (36 commits) [Bluetooth] Fix HID disconnect NULL pointer dereference [Bluetooth] Add missing entry for Nokia DTL-4 PCMCIA card [Bluetooth] Add support for newer ANYCOM USB dongles [NET]: Can use __get_cpu_var() instead of per_cpu() in loopback driver. [IPV4] inet_peer: Group together avl_left, avl_right, v4daddr to speedup lookups on some CPUS [TCP]: One NET_INC_STATS() could be NET_INC_STATS_BH in tcp_v4_err() [NETFILTER]: Missing check for CAP_NET_ADMIN in iptables compat layer [NETPOLL]: initialize skb for UDP [IPV6]: Fix route.c warnings when multiple tables are disabled. [TG3]: Bump driver version and release date. [TG3]: Add lower bound checks for tx ring size. [TG3]: Fix set ring params tx ring size implementation [NET]: reduce per cpu ram used for loopback stats [IPv6] route: Fix prohibit and blackhole routing decision [DECNET]: Fix input routing bug [TCP]: Bound TSO defer time [IPv4] fib: Remove unused fib_config members [IPV6]: Always copy rt->u.dst.error when copying a rt6_info. [IPV6]: Make IPV6_SUBTREES depend on IPV6_MULTIPLE_TABLES. [IPV6]: Clean up BACKTRACK(). ...
This commit is contained in:
@@ -58,7 +58,11 @@
|
||||
#include <linux/tcp.h>
|
||||
#include <linux/percpu.h>
|
||||
|
||||
static DEFINE_PER_CPU(struct net_device_stats, loopback_stats);
|
||||
struct pcpu_lstats {
|
||||
unsigned long packets;
|
||||
unsigned long bytes;
|
||||
};
|
||||
static DEFINE_PER_CPU(struct pcpu_lstats, pcpu_lstats);
|
||||
|
||||
#define LOOPBACK_OVERHEAD (128 + MAX_HEADER + 16 + 16)
|
||||
|
||||
@@ -128,7 +132,7 @@ static void emulate_large_send_offload(struct sk_buff *skb)
|
||||
*/
|
||||
static int loopback_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
{
|
||||
struct net_device_stats *lb_stats;
|
||||
struct pcpu_lstats *lb_stats;
|
||||
|
||||
skb_orphan(skb);
|
||||
|
||||
@@ -149,16 +153,14 @@ static int loopback_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
#endif
|
||||
dev->last_rx = jiffies;
|
||||
|
||||
lb_stats = &per_cpu(loopback_stats, get_cpu());
|
||||
lb_stats->rx_bytes += skb->len;
|
||||
lb_stats->tx_bytes = lb_stats->rx_bytes;
|
||||
lb_stats->rx_packets++;
|
||||
lb_stats->tx_packets = lb_stats->rx_packets;
|
||||
put_cpu();
|
||||
/* it's OK to use __get_cpu_var() because BHs are off */
|
||||
lb_stats = &__get_cpu_var(pcpu_lstats);
|
||||
lb_stats->bytes += skb->len;
|
||||
lb_stats->packets++;
|
||||
|
||||
netif_rx(skb);
|
||||
|
||||
return(0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct net_device_stats loopback_stats;
|
||||
@@ -166,20 +168,21 @@ static struct net_device_stats loopback_stats;
|
||||
static struct net_device_stats *get_stats(struct net_device *dev)
|
||||
{
|
||||
struct net_device_stats *stats = &loopback_stats;
|
||||
unsigned long bytes = 0;
|
||||
unsigned long packets = 0;
|
||||
int i;
|
||||
|
||||
memset(stats, 0, sizeof(struct net_device_stats));
|
||||
|
||||
for_each_possible_cpu(i) {
|
||||
struct net_device_stats *lb_stats;
|
||||
const struct pcpu_lstats *lb_stats;
|
||||
|
||||
lb_stats = &per_cpu(loopback_stats, i);
|
||||
stats->rx_bytes += lb_stats->rx_bytes;
|
||||
stats->tx_bytes += lb_stats->tx_bytes;
|
||||
stats->rx_packets += lb_stats->rx_packets;
|
||||
stats->tx_packets += lb_stats->tx_packets;
|
||||
lb_stats = &per_cpu(pcpu_lstats, i);
|
||||
bytes += lb_stats->bytes;
|
||||
packets += lb_stats->packets;
|
||||
}
|
||||
|
||||
stats->rx_packets = packets;
|
||||
stats->tx_packets = packets;
|
||||
stats->rx_bytes = bytes;
|
||||
stats->tx_bytes = bytes;
|
||||
return stats;
|
||||
}
|
||||
|
||||
|
@@ -68,8 +68,8 @@
|
||||
|
||||
#define DRV_MODULE_NAME "tg3"
|
||||
#define PFX DRV_MODULE_NAME ": "
|
||||
#define DRV_MODULE_VERSION "3.66"
|
||||
#define DRV_MODULE_RELDATE "September 23, 2006"
|
||||
#define DRV_MODULE_VERSION "3.67"
|
||||
#define DRV_MODULE_RELDATE "October 18, 2006"
|
||||
|
||||
#define TG3_DEF_MAC_MODE 0
|
||||
#define TG3_DEF_RX_MODE 0
|
||||
@@ -129,7 +129,7 @@
|
||||
#define RX_JUMBO_PKT_BUF_SZ (9046 + tp->rx_offset + 64)
|
||||
|
||||
/* minimum number of free TX descriptors required to wake up TX process */
|
||||
#define TG3_TX_WAKEUP_THRESH (TG3_TX_RING_SIZE / 4)
|
||||
#define TG3_TX_WAKEUP_THRESH(tp) ((tp)->tx_pending / 4)
|
||||
|
||||
/* number of ETHTOOL_GSTATS u64's */
|
||||
#define TG3_NUM_STATS (sizeof(struct tg3_ethtool_stats)/sizeof(u64))
|
||||
@@ -3075,10 +3075,10 @@ static void tg3_tx(struct tg3 *tp)
|
||||
smp_mb();
|
||||
|
||||
if (unlikely(netif_queue_stopped(tp->dev) &&
|
||||
(tg3_tx_avail(tp) > TG3_TX_WAKEUP_THRESH))) {
|
||||
(tg3_tx_avail(tp) > TG3_TX_WAKEUP_THRESH(tp)))) {
|
||||
netif_tx_lock(tp->dev);
|
||||
if (netif_queue_stopped(tp->dev) &&
|
||||
(tg3_tx_avail(tp) > TG3_TX_WAKEUP_THRESH))
|
||||
(tg3_tx_avail(tp) > TG3_TX_WAKEUP_THRESH(tp)))
|
||||
netif_wake_queue(tp->dev);
|
||||
netif_tx_unlock(tp->dev);
|
||||
}
|
||||
@@ -3928,7 +3928,7 @@ static int tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
tp->tx_prod = entry;
|
||||
if (unlikely(tg3_tx_avail(tp) <= (MAX_SKB_FRAGS + 1))) {
|
||||
netif_stop_queue(dev);
|
||||
if (tg3_tx_avail(tp) > TG3_TX_WAKEUP_THRESH)
|
||||
if (tg3_tx_avail(tp) > TG3_TX_WAKEUP_THRESH(tp))
|
||||
netif_wake_queue(tp->dev);
|
||||
}
|
||||
|
||||
@@ -4143,7 +4143,7 @@ static int tg3_start_xmit_dma_bug(struct sk_buff *skb, struct net_device *dev)
|
||||
tp->tx_prod = entry;
|
||||
if (unlikely(tg3_tx_avail(tp) <= (MAX_SKB_FRAGS + 1))) {
|
||||
netif_stop_queue(dev);
|
||||
if (tg3_tx_avail(tp) > TG3_TX_WAKEUP_THRESH)
|
||||
if (tg3_tx_avail(tp) > TG3_TX_WAKEUP_THRESH(tp))
|
||||
netif_wake_queue(tp->dev);
|
||||
}
|
||||
|
||||
@@ -8106,7 +8106,10 @@ static int tg3_set_ringparam(struct net_device *dev, struct ethtool_ringparam *e
|
||||
|
||||
if ((ering->rx_pending > TG3_RX_RING_SIZE - 1) ||
|
||||
(ering->rx_jumbo_pending > TG3_RX_JUMBO_RING_SIZE - 1) ||
|
||||
(ering->tx_pending > TG3_TX_RING_SIZE - 1))
|
||||
(ering->tx_pending > TG3_TX_RING_SIZE - 1) ||
|
||||
(ering->tx_pending <= MAX_SKB_FRAGS) ||
|
||||
((tp->tg3_flags2 & TG3_FLG2_HW_TSO_1_BUG) &&
|
||||
(ering->tx_pending <= (MAX_SKB_FRAGS * 3))))
|
||||
return -EINVAL;
|
||||
|
||||
if (netif_running(dev)) {
|
||||
|
Reference in New Issue
Block a user