summaryrefslogtreecommitdiffstats
path: root/package/linux/kernel-patches/103-net_core_dev-performance
diff options
context:
space:
mode:
Diffstat (limited to 'package/linux/kernel-patches/103-net_core_dev-performance')
-rw-r--r--package/linux/kernel-patches/103-net_core_dev-performance45
1 files changed, 45 insertions, 0 deletions
diff --git a/package/linux/kernel-patches/103-net_core_dev-performance b/package/linux/kernel-patches/103-net_core_dev-performance
new file mode 100644
index 000000000..e58e0c344
--- /dev/null
+++ b/package/linux/kernel-patches/103-net_core_dev-performance
@@ -0,0 +1,45 @@
+--- linux-mips-cvs-21012005/net/core/dev.c 2004-04-16 05:14:21.000000000 +0200
++++ linux-bridge/net/core/dev.c 2005-01-25 08:15:53.000000000 +0100
+@@ -1289,6 +1289,19 @@
+ local_irq_save(flags);
+
+ netdev_rx_stat[this_cpu].total++;
++
++#if defined(CONFIG_BCM4710) && defined(CONFIG_BRIDGE)
++ /* Optimisation for framebursting (allow interleaving of pkts by
++ immediately processing the rx pkt instead of Qing the pkt and deferring
++ the processing). Only optimise for bridging and guard against non
++ TASKLET based netif_rx calls.
++ */
++ if (!in_irq() && skb->dev->br_port != NULL && br_handle_frame_hook != NULL){
++ local_irq_restore(flags);
++ return(netif_receive_skb(skb));
++ }
++#endif
++
+ if (queue->input_pkt_queue.qlen <= netdev_max_backlog) {
+ if (queue->input_pkt_queue.qlen) {
+ if (queue->throttle)
+@@ -2053,6 +2066,7 @@
+ {
+ struct net_device *dev;
+ int err;
++ struct net_device_stats *stats;
+
+ if ((dev = __dev_get_by_name(ifr->ifr_name)) == NULL)
+ return -ENODEV;
+@@ -2167,6 +2181,14 @@
+ ifr->ifr_ifindex = dev->ifindex;
+ return 0;
+
++#ifdef PERFORMANCE_SUPPORT
++ case SIOCGIFSTATS:
++ if (!dev->get_stats || !(stats = dev->get_stats(dev)))
++ return -ENODEV;
++ if (copy_to_user(ifr->ifr_data, stats, sizeof(struct net_device_stats)))
++ return -EFAULT;
++ return 0;
++#endif
+ case SIOCGIFTXQLEN:
+ ifr->ifr_qlen = dev->tx_queue_len;
+ return 0;