diff options
author | David S. Miller <davem@davemloft.net> | 2010-06-23 21:26:27 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-06-23 21:26:27 -0400 |
commit | 8244132ea89cdd128003f5b9980fab50d8d36d72 (patch) | |
tree | c6cf9327cf9b6bab5bb830bbf389a514f4d7bb95 | |
parent | 7b2ff18ee7b0ec4bc3162f821e221781aaca48bd (diff) | |
parent | 38000a94a902e94ca8b5498f7871c6316de8957a (diff) |
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Conflicts:
net/ipv4/ip_output.c
-rw-r--r-- | drivers/net/Kconfig | 2 | ||||
-rw-r--r-- | drivers/net/bnx2.c | 11 | ||||
-rw-r--r-- | drivers/net/cnic.c | 55 | ||||
-rw-r--r-- | drivers/net/ehea/ehea.h | 2 | ||||
-rw-r--r-- | drivers/net/ehea/ehea_main.c | 9 | ||||
-rw-r--r-- | drivers/net/gianfar.c | 25 | ||||
-rw-r--r-- | drivers/net/ixgbe/ixgbe_phy.c | 2 | ||||
-rw-r--r-- | drivers/net/lib82596.c | 2 | ||||
-rw-r--r-- | drivers/net/mipsnet.c | 2 | ||||
-rw-r--r-- | drivers/net/netxen/netxen_nic_ctx.c | 3 | ||||
-rw-r--r-- | drivers/net/netxen/netxen_nic_hw.c | 4 | ||||
-rw-r--r-- | drivers/net/netxen/netxen_nic_init.c | 13 | ||||
-rw-r--r-- | drivers/net/pcmcia/pcnet_cs.c | 1 | ||||
-rw-r--r-- | drivers/net/pcmcia/smc91c92_cs.c | 1 | ||||
-rw-r--r-- | drivers/net/sky2.c | 19 | ||||
-rw-r--r-- | drivers/net/ucc_geth.c | 2 | ||||
-rw-r--r-- | drivers/net/usb/hso.c | 1 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath5k/attach.c | 1 | ||||
-rw-r--r-- | drivers/serial/serial_cs.c | 1 | ||||
-rw-r--r-- | include/net/snmp.h | 2 | ||||
-rw-r--r-- | net/bridge/br_fdb.c | 6 | ||||
-rw-r--r-- | net/bridge/br_forward.c | 4 | ||||
-rw-r--r-- | net/ipv4/ip_output.c | 9 | ||||
-rw-r--r-- | net/netfilter/ipvs/ip_vs_conn.c | 4 | ||||
-rw-r--r-- | net/sched/sch_teql.c | 1 |
25 files changed, 116 insertions, 66 deletions
diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig index fe113d0e9456..71e6f8fc0cf1 100644 --- a/drivers/net/Kconfig +++ b/drivers/net/Kconfig | |||
@@ -2755,6 +2755,7 @@ config MYRI10GE_DCA | |||
2755 | config NETXEN_NIC | 2755 | config NETXEN_NIC |
2756 | tristate "NetXen Multi port (1/10) Gigabit Ethernet NIC" | 2756 | tristate "NetXen Multi port (1/10) Gigabit Ethernet NIC" |
2757 | depends on PCI | 2757 | depends on PCI |
2758 | select FW_LOADER | ||
2758 | help | 2759 | help |
2759 | This enables the support for NetXen's Gigabit Ethernet card. | 2760 | This enables the support for NetXen's Gigabit Ethernet card. |
2760 | 2761 | ||
@@ -2820,6 +2821,7 @@ config BNX2X | |||
2820 | config QLCNIC | 2821 | config QLCNIC |
2821 | tristate "QLOGIC QLCNIC 1/10Gb Converged Ethernet NIC Support" | 2822 | tristate "QLOGIC QLCNIC 1/10Gb Converged Ethernet NIC Support" |
2822 | depends on PCI | 2823 | depends on PCI |
2824 | select FW_LOADER | ||
2823 | help | 2825 | help |
2824 | This driver supports QLogic QLE8240 and QLE8242 Converged Ethernet | 2826 | This driver supports QLogic QLE8240 and QLE8242 Converged Ethernet |
2825 | devices. | 2827 | devices. |
diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c index 522de9f818be..a5dd81face37 100644 --- a/drivers/net/bnx2.c +++ b/drivers/net/bnx2.c | |||
@@ -3086,7 +3086,6 @@ bnx2_rx_int(struct bnx2 *bp, struct bnx2_napi *bnapi, int budget) | |||
3086 | u16 hw_cons, sw_cons, sw_ring_cons, sw_prod, sw_ring_prod; | 3086 | u16 hw_cons, sw_cons, sw_ring_cons, sw_prod, sw_ring_prod; |
3087 | struct l2_fhdr *rx_hdr; | 3087 | struct l2_fhdr *rx_hdr; |
3088 | int rx_pkt = 0, pg_ring_used = 0; | 3088 | int rx_pkt = 0, pg_ring_used = 0; |
3089 | struct pci_dev *pdev = bp->pdev; | ||
3090 | 3089 | ||
3091 | hw_cons = bnx2_get_hw_rx_cons(bnapi); | 3090 | hw_cons = bnx2_get_hw_rx_cons(bnapi); |
3092 | sw_cons = rxr->rx_cons; | 3091 | sw_cons = rxr->rx_cons; |
@@ -3112,12 +3111,10 @@ bnx2_rx_int(struct bnx2 *bp, struct bnx2_napi *bnapi, int budget) | |||
3112 | skb = rx_buf->skb; | 3111 | skb = rx_buf->skb; |
3113 | prefetchw(skb); | 3112 | prefetchw(skb); |
3114 | 3113 | ||
3115 | if (!get_dma_ops(&pdev->dev)->sync_single_for_cpu) { | 3114 | next_rx_buf = |
3116 | next_rx_buf = | 3115 | &rxr->rx_buf_ring[RX_RING_IDX(NEXT_RX_BD(sw_cons))]; |
3117 | &rxr->rx_buf_ring[ | 3116 | prefetch(next_rx_buf->desc); |
3118 | RX_RING_IDX(NEXT_RX_BD(sw_cons))]; | 3117 | |
3119 | prefetch(next_rx_buf->desc); | ||
3120 | } | ||
3121 | rx_buf->skb = NULL; | 3118 | rx_buf->skb = NULL; |
3122 | 3119 | ||
3123 | dma_addr = dma_unmap_addr(rx_buf, mapping); | 3120 | dma_addr = dma_unmap_addr(rx_buf, mapping); |
diff --git a/drivers/net/cnic.c b/drivers/net/cnic.c index e5539f05cbfa..04e299f46455 100644 --- a/drivers/net/cnic.c +++ b/drivers/net/cnic.c | |||
@@ -3925,8 +3925,9 @@ static void cnic_init_bnx2x_tx_ring(struct cnic_dev *dev) | |||
3925 | HC_INDEX_DEF_C_ETH_ISCSI_CQ_CONS; | 3925 | HC_INDEX_DEF_C_ETH_ISCSI_CQ_CONS; |
3926 | context->cstorm_st_context.status_block_id = BNX2X_DEF_SB_ID; | 3926 | context->cstorm_st_context.status_block_id = BNX2X_DEF_SB_ID; |
3927 | 3927 | ||
3928 | context->xstorm_st_context.statistics_data = (cli | | 3928 | if (cli < MAX_X_STAT_COUNTER_ID) |
3929 | XSTORM_ETH_ST_CONTEXT_STATISTICS_ENABLE); | 3929 | context->xstorm_st_context.statistics_data = cli | |
3930 | XSTORM_ETH_ST_CONTEXT_STATISTICS_ENABLE; | ||
3930 | 3931 | ||
3931 | context->xstorm_ag_context.cdu_reserved = | 3932 | context->xstorm_ag_context.cdu_reserved = |
3932 | CDU_RSRVD_VALUE_TYPE_A(BNX2X_HW_CID(BNX2X_ISCSI_L2_CID, func), | 3933 | CDU_RSRVD_VALUE_TYPE_A(BNX2X_HW_CID(BNX2X_ISCSI_L2_CID, func), |
@@ -3934,10 +3935,12 @@ static void cnic_init_bnx2x_tx_ring(struct cnic_dev *dev) | |||
3934 | ETH_CONNECTION_TYPE); | 3935 | ETH_CONNECTION_TYPE); |
3935 | 3936 | ||
3936 | /* reset xstorm per client statistics */ | 3937 | /* reset xstorm per client statistics */ |
3937 | val = BAR_XSTRORM_INTMEM + | 3938 | if (cli < MAX_X_STAT_COUNTER_ID) { |
3938 | XSTORM_PER_COUNTER_ID_STATS_OFFSET(port, cli); | 3939 | val = BAR_XSTRORM_INTMEM + |
3939 | for (i = 0; i < sizeof(struct xstorm_per_client_stats) / 4; i++) | 3940 | XSTORM_PER_COUNTER_ID_STATS_OFFSET(port, cli); |
3940 | CNIC_WR(dev, val + i * 4, 0); | 3941 | for (i = 0; i < sizeof(struct xstorm_per_client_stats) / 4; i++) |
3942 | CNIC_WR(dev, val + i * 4, 0); | ||
3943 | } | ||
3941 | 3944 | ||
3942 | cp->tx_cons_ptr = | 3945 | cp->tx_cons_ptr = |
3943 | &cp->bnx2x_def_status_blk->c_def_status_block.index_values[ | 3946 | &cp->bnx2x_def_status_blk->c_def_status_block.index_values[ |
@@ -3984,9 +3987,11 @@ static void cnic_init_bnx2x_rx_ring(struct cnic_dev *dev) | |||
3984 | BNX2X_ISCSI_RX_SB_INDEX_NUM; | 3987 | BNX2X_ISCSI_RX_SB_INDEX_NUM; |
3985 | context->ustorm_st_context.common.clientId = cli; | 3988 | context->ustorm_st_context.common.clientId = cli; |
3986 | context->ustorm_st_context.common.status_block_id = BNX2X_DEF_SB_ID; | 3989 | context->ustorm_st_context.common.status_block_id = BNX2X_DEF_SB_ID; |
3987 | context->ustorm_st_context.common.flags = | 3990 | if (cli < MAX_U_STAT_COUNTER_ID) { |
3988 | USTORM_ETH_ST_CONTEXT_CONFIG_ENABLE_STATISTICS; | 3991 | context->ustorm_st_context.common.flags = |
3989 | context->ustorm_st_context.common.statistics_counter_id = cli; | 3992 | USTORM_ETH_ST_CONTEXT_CONFIG_ENABLE_STATISTICS; |
3993 | context->ustorm_st_context.common.statistics_counter_id = cli; | ||
3994 | } | ||
3990 | context->ustorm_st_context.common.mc_alignment_log_size = 0; | 3995 | context->ustorm_st_context.common.mc_alignment_log_size = 0; |
3991 | context->ustorm_st_context.common.bd_buff_size = | 3996 | context->ustorm_st_context.common.bd_buff_size = |
3992 | cp->l2_single_buf_size; | 3997 | cp->l2_single_buf_size; |
@@ -4017,10 +4022,13 @@ static void cnic_init_bnx2x_rx_ring(struct cnic_dev *dev) | |||
4017 | 4022 | ||
4018 | /* client tstorm info */ | 4023 | /* client tstorm info */ |
4019 | tstorm_client.mtu = cp->l2_single_buf_size - 14; | 4024 | tstorm_client.mtu = cp->l2_single_buf_size - 14; |
4020 | tstorm_client.config_flags = | 4025 | tstorm_client.config_flags = TSTORM_ETH_CLIENT_CONFIG_E1HOV_REM_ENABLE; |
4021 | (TSTORM_ETH_CLIENT_CONFIG_E1HOV_REM_ENABLE | | 4026 | |
4022 | TSTORM_ETH_CLIENT_CONFIG_STATSITICS_ENABLE); | 4027 | if (cli < MAX_T_STAT_COUNTER_ID) { |
4023 | tstorm_client.statistics_counter_id = cli; | 4028 | tstorm_client.config_flags |= |
4029 | TSTORM_ETH_CLIENT_CONFIG_STATSITICS_ENABLE; | ||
4030 | tstorm_client.statistics_counter_id = cli; | ||
4031 | } | ||
4024 | 4032 | ||
4025 | CNIC_WR(dev, BAR_TSTRORM_INTMEM + | 4033 | CNIC_WR(dev, BAR_TSTRORM_INTMEM + |
4026 | TSTORM_CLIENT_CONFIG_OFFSET(port, cli), | 4034 | TSTORM_CLIENT_CONFIG_OFFSET(port, cli), |
@@ -4030,16 +4038,21 @@ static void cnic_init_bnx2x_rx_ring(struct cnic_dev *dev) | |||
4030 | ((u32 *)&tstorm_client)[1]); | 4038 | ((u32 *)&tstorm_client)[1]); |
4031 | 4039 | ||
4032 | /* reset tstorm per client statistics */ | 4040 | /* reset tstorm per client statistics */ |
4033 | val = BAR_TSTRORM_INTMEM + | 4041 | if (cli < MAX_T_STAT_COUNTER_ID) { |
4034 | TSTORM_PER_COUNTER_ID_STATS_OFFSET(port, cli); | 4042 | |
4035 | for (i = 0; i < sizeof(struct tstorm_per_client_stats) / 4; i++) | 4043 | val = BAR_TSTRORM_INTMEM + |
4036 | CNIC_WR(dev, val + i * 4, 0); | 4044 | TSTORM_PER_COUNTER_ID_STATS_OFFSET(port, cli); |
4045 | for (i = 0; i < sizeof(struct tstorm_per_client_stats) / 4; i++) | ||
4046 | CNIC_WR(dev, val + i * 4, 0); | ||
4047 | } | ||
4037 | 4048 | ||
4038 | /* reset ustorm per client statistics */ | 4049 | /* reset ustorm per client statistics */ |
4039 | val = BAR_USTRORM_INTMEM + | 4050 | if (cli < MAX_U_STAT_COUNTER_ID) { |
4040 | USTORM_PER_COUNTER_ID_STATS_OFFSET(port, cli); | 4051 | val = BAR_USTRORM_INTMEM + |
4041 | for (i = 0; i < sizeof(struct ustorm_per_client_stats) / 4; i++) | 4052 | USTORM_PER_COUNTER_ID_STATS_OFFSET(port, cli); |
4042 | CNIC_WR(dev, val + i * 4, 0); | 4053 | for (i = 0; i < sizeof(struct ustorm_per_client_stats) / 4; i++) |
4054 | CNIC_WR(dev, val + i * 4, 0); | ||
4055 | } | ||
4043 | 4056 | ||
4044 | cp->rx_cons_ptr = | 4057 | cp->rx_cons_ptr = |
4045 | &cp->bnx2x_def_status_blk->u_def_status_block.index_values[ | 4058 | &cp->bnx2x_def_status_blk->u_def_status_block.index_values[ |
diff --git a/drivers/net/ehea/ehea.h b/drivers/net/ehea/ehea.h index 0630980a2722..0060e422f171 100644 --- a/drivers/net/ehea/ehea.h +++ b/drivers/net/ehea/ehea.h | |||
@@ -40,7 +40,7 @@ | |||
40 | #include <asm/io.h> | 40 | #include <asm/io.h> |
41 | 41 | ||
42 | #define DRV_NAME "ehea" | 42 | #define DRV_NAME "ehea" |
43 | #define DRV_VERSION "EHEA_0103" | 43 | #define DRV_VERSION "EHEA_0105" |
44 | 44 | ||
45 | /* eHEA capability flags */ | 45 | /* eHEA capability flags */ |
46 | #define DLPAR_PORT_ADD_REM 1 | 46 | #define DLPAR_PORT_ADD_REM 1 |
diff --git a/drivers/net/ehea/ehea_main.c b/drivers/net/ehea/ehea_main.c index f547894ff48f..8b92acb448c2 100644 --- a/drivers/net/ehea/ehea_main.c +++ b/drivers/net/ehea/ehea_main.c | |||
@@ -867,6 +867,7 @@ static int ehea_poll(struct napi_struct *napi, int budget) | |||
867 | ehea_reset_cq_ep(pr->send_cq); | 867 | ehea_reset_cq_ep(pr->send_cq); |
868 | ehea_reset_cq_n1(pr->recv_cq); | 868 | ehea_reset_cq_n1(pr->recv_cq); |
869 | ehea_reset_cq_n1(pr->send_cq); | 869 | ehea_reset_cq_n1(pr->send_cq); |
870 | rmb(); | ||
870 | cqe = ehea_poll_rq1(pr->qp, &wqe_index); | 871 | cqe = ehea_poll_rq1(pr->qp, &wqe_index); |
871 | cqe_skb = ehea_poll_cq(pr->send_cq); | 872 | cqe_skb = ehea_poll_cq(pr->send_cq); |
872 | 873 | ||
@@ -2859,6 +2860,7 @@ static void ehea_reset_port(struct work_struct *work) | |||
2859 | container_of(work, struct ehea_port, reset_task); | 2860 | container_of(work, struct ehea_port, reset_task); |
2860 | struct net_device *dev = port->netdev; | 2861 | struct net_device *dev = port->netdev; |
2861 | 2862 | ||
2863 | mutex_lock(&dlpar_mem_lock); | ||
2862 | port->resets++; | 2864 | port->resets++; |
2863 | mutex_lock(&port->port_lock); | 2865 | mutex_lock(&port->port_lock); |
2864 | netif_stop_queue(dev); | 2866 | netif_stop_queue(dev); |
@@ -2881,6 +2883,7 @@ static void ehea_reset_port(struct work_struct *work) | |||
2881 | netif_wake_queue(dev); | 2883 | netif_wake_queue(dev); |
2882 | out: | 2884 | out: |
2883 | mutex_unlock(&port->port_lock); | 2885 | mutex_unlock(&port->port_lock); |
2886 | mutex_unlock(&dlpar_mem_lock); | ||
2884 | } | 2887 | } |
2885 | 2888 | ||
2886 | static void ehea_rereg_mrs(struct work_struct *work) | 2889 | static void ehea_rereg_mrs(struct work_struct *work) |
@@ -3542,10 +3545,7 @@ static int ehea_mem_notifier(struct notifier_block *nb, | |||
3542 | int ret = NOTIFY_BAD; | 3545 | int ret = NOTIFY_BAD; |
3543 | struct memory_notify *arg = data; | 3546 | struct memory_notify *arg = data; |
3544 | 3547 | ||
3545 | if (!mutex_trylock(&dlpar_mem_lock)) { | 3548 | mutex_lock(&dlpar_mem_lock); |
3546 | ehea_info("ehea_mem_notifier must not be called parallelized"); | ||
3547 | goto out; | ||
3548 | } | ||
3549 | 3549 | ||
3550 | switch (action) { | 3550 | switch (action) { |
3551 | case MEM_CANCEL_OFFLINE: | 3551 | case MEM_CANCEL_OFFLINE: |
@@ -3574,7 +3574,6 @@ static int ehea_mem_notifier(struct notifier_block *nb, | |||
3574 | 3574 | ||
3575 | out_unlock: | 3575 | out_unlock: |
3576 | mutex_unlock(&dlpar_mem_lock); | 3576 | mutex_unlock(&dlpar_mem_lock); |
3577 | out: | ||
3578 | return ret; | 3577 | return ret; |
3579 | } | 3578 | } |
3580 | 3579 | ||
diff --git a/drivers/net/gianfar.c b/drivers/net/gianfar.c index 8a17bf096ff6..c52f3712ecd3 100644 --- a/drivers/net/gianfar.c +++ b/drivers/net/gianfar.c | |||
@@ -381,10 +381,14 @@ static void gfar_init_mac(struct net_device *ndev) | |||
381 | /* Insert receive time stamps into padding alignment bytes */ | 381 | /* Insert receive time stamps into padding alignment bytes */ |
382 | if (priv->device_flags & FSL_GIANFAR_DEV_HAS_TIMER) { | 382 | if (priv->device_flags & FSL_GIANFAR_DEV_HAS_TIMER) { |
383 | rctrl &= ~RCTRL_PAL_MASK; | 383 | rctrl &= ~RCTRL_PAL_MASK; |
384 | rctrl |= RCTRL_PRSDEP_INIT | RCTRL_TS_ENABLE | RCTRL_PADDING(8); | 384 | rctrl |= RCTRL_PADDING(8); |
385 | priv->padding = 8; | 385 | priv->padding = 8; |
386 | } | 386 | } |
387 | 387 | ||
388 | /* Enable HW time stamping if requested from user space */ | ||
389 | if (priv->hwts_rx_en) | ||
390 | rctrl |= RCTRL_PRSDEP_INIT | RCTRL_TS_ENABLE; | ||
391 | |||
388 | /* keep vlan related bits if it's enabled */ | 392 | /* keep vlan related bits if it's enabled */ |
389 | if (priv->vlgrp) { | 393 | if (priv->vlgrp) { |
390 | rctrl |= RCTRL_VLEX | RCTRL_PRSDEP_INIT; | 394 | rctrl |= RCTRL_VLEX | RCTRL_PRSDEP_INIT; |
@@ -747,7 +751,8 @@ static int gfar_of_init(struct of_device *ofdev, struct net_device **pdev) | |||
747 | FSL_GIANFAR_DEV_HAS_CSUM | | 751 | FSL_GIANFAR_DEV_HAS_CSUM | |
748 | FSL_GIANFAR_DEV_HAS_VLAN | | 752 | FSL_GIANFAR_DEV_HAS_VLAN | |
749 | FSL_GIANFAR_DEV_HAS_MAGIC_PACKET | | 753 | FSL_GIANFAR_DEV_HAS_MAGIC_PACKET | |
750 | FSL_GIANFAR_DEV_HAS_EXTENDED_HASH; | 754 | FSL_GIANFAR_DEV_HAS_EXTENDED_HASH | |
755 | FSL_GIANFAR_DEV_HAS_TIMER; | ||
751 | 756 | ||
752 | ctype = of_get_property(np, "phy-connection-type", NULL); | 757 | ctype = of_get_property(np, "phy-connection-type", NULL); |
753 | 758 | ||
@@ -805,12 +810,20 @@ static int gfar_hwtstamp_ioctl(struct net_device *netdev, | |||
805 | 810 | ||
806 | switch (config.rx_filter) { | 811 | switch (config.rx_filter) { |
807 | case HWTSTAMP_FILTER_NONE: | 812 | case HWTSTAMP_FILTER_NONE: |
808 | priv->hwts_rx_en = 0; | 813 | if (priv->hwts_rx_en) { |
814 | stop_gfar(netdev); | ||
815 | priv->hwts_rx_en = 0; | ||
816 | startup_gfar(netdev); | ||
817 | } | ||
809 | break; | 818 | break; |
810 | default: | 819 | default: |
811 | if (!(priv->device_flags & FSL_GIANFAR_DEV_HAS_TIMER)) | 820 | if (!(priv->device_flags & FSL_GIANFAR_DEV_HAS_TIMER)) |
812 | return -ERANGE; | 821 | return -ERANGE; |
813 | priv->hwts_rx_en = 1; | 822 | if (!priv->hwts_rx_en) { |
823 | stop_gfar(netdev); | ||
824 | priv->hwts_rx_en = 1; | ||
825 | startup_gfar(netdev); | ||
826 | } | ||
814 | config.rx_filter = HWTSTAMP_FILTER_ALL; | 827 | config.rx_filter = HWTSTAMP_FILTER_ALL; |
815 | break; | 828 | break; |
816 | } | 829 | } |
@@ -2642,6 +2655,10 @@ int gfar_clean_rx_ring(struct gfar_priv_rx_q *rx_queue, int rx_work_limit) | |||
2642 | dma_unmap_single(&priv->ofdev->dev, bdp->bufPtr, | 2655 | dma_unmap_single(&priv->ofdev->dev, bdp->bufPtr, |
2643 | priv->rx_buffer_size, DMA_FROM_DEVICE); | 2656 | priv->rx_buffer_size, DMA_FROM_DEVICE); |
2644 | 2657 | ||
2658 | if (unlikely(!(bdp->status & RXBD_ERR) && | ||
2659 | bdp->length > priv->rx_buffer_size)) | ||
2660 | bdp->status = RXBD_LARGE; | ||
2661 | |||
2645 | /* We drop the frame if we failed to allocate a new buffer */ | 2662 | /* We drop the frame if we failed to allocate a new buffer */ |
2646 | if (unlikely(!newskb || !(bdp->status & RXBD_LAST) || | 2663 | if (unlikely(!newskb || !(bdp->status & RXBD_LAST) || |
2647 | bdp->status & RXBD_ERR)) { | 2664 | bdp->status & RXBD_ERR)) { |
diff --git a/drivers/net/ixgbe/ixgbe_phy.c b/drivers/net/ixgbe/ixgbe_phy.c index 09e1911ff510..48325a5beff2 100644 --- a/drivers/net/ixgbe/ixgbe_phy.c +++ b/drivers/net/ixgbe/ixgbe_phy.c | |||
@@ -575,6 +575,8 @@ s32 ixgbe_identify_sfp_module_generic(struct ixgbe_hw *hw) | |||
575 | * 4 SFP_DA_CORE1 - 82599-specific | 575 | * 4 SFP_DA_CORE1 - 82599-specific |
576 | * 5 SFP_SR/LR_CORE0 - 82599-specific | 576 | * 5 SFP_SR/LR_CORE0 - 82599-specific |
577 | * 6 SFP_SR/LR_CORE1 - 82599-specific | 577 | * 6 SFP_SR/LR_CORE1 - 82599-specific |
578 | * 7 SFP_act_lmt_DA_CORE0 - 82599-specific | ||
579 | * 8 SFP_act_lmt_DA_CORE1 - 82599-specific | ||
578 | */ | 580 | */ |
579 | if (hw->mac.type == ixgbe_mac_82598EB) { | 581 | if (hw->mac.type == ixgbe_mac_82598EB) { |
580 | if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE) | 582 | if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE) |
diff --git a/drivers/net/lib82596.c b/drivers/net/lib82596.c index ce5d6e909218..c27f4291b350 100644 --- a/drivers/net/lib82596.c +++ b/drivers/net/lib82596.c | |||
@@ -1343,7 +1343,7 @@ static void set_multicast_list(struct net_device *dev) | |||
1343 | DEB(DEB_MULTI, | 1343 | DEB(DEB_MULTI, |
1344 | printk(KERN_DEBUG | 1344 | printk(KERN_DEBUG |
1345 | "%s: set multicast list, %d entries, promisc %s, allmulti %s\n", | 1345 | "%s: set multicast list, %d entries, promisc %s, allmulti %s\n", |
1346 | dev->name, dev->mc_count, | 1346 | dev->name, netdev_mc_count(dev), |
1347 | dev->flags & IFF_PROMISC ? "ON" : "OFF", | 1347 | dev->flags & IFF_PROMISC ? "ON" : "OFF", |
1348 | dev->flags & IFF_ALLMULTI ? "ON" : "OFF")); | 1348 | dev->flags & IFF_ALLMULTI ? "ON" : "OFF")); |
1349 | 1349 | ||
diff --git a/drivers/net/mipsnet.c b/drivers/net/mipsnet.c index 8e9704f5c122..869f0ea43a5b 100644 --- a/drivers/net/mipsnet.c +++ b/drivers/net/mipsnet.c | |||
@@ -247,7 +247,7 @@ static const struct net_device_ops mipsnet_netdev_ops = { | |||
247 | .ndo_set_mac_address = eth_mac_addr, | 247 | .ndo_set_mac_address = eth_mac_addr, |
248 | }; | 248 | }; |
249 | 249 | ||
250 | static int __init mipsnet_probe(struct platform_device *dev) | 250 | static int __devinit mipsnet_probe(struct platform_device *dev) |
251 | { | 251 | { |
252 | struct net_device *netdev; | 252 | struct net_device *netdev; |
253 | int err; | 253 | int err; |
diff --git a/drivers/net/netxen/netxen_nic_ctx.c b/drivers/net/netxen/netxen_nic_ctx.c index f26e54716c88..3a41b6a84a68 100644 --- a/drivers/net/netxen/netxen_nic_ctx.c +++ b/drivers/net/netxen/netxen_nic_ctx.c | |||
@@ -629,7 +629,8 @@ int netxen_alloc_hw_resources(struct netxen_adapter *adapter) | |||
629 | if (addr == NULL) { | 629 | if (addr == NULL) { |
630 | dev_err(&pdev->dev, "%s: failed to allocate tx desc ring\n", | 630 | dev_err(&pdev->dev, "%s: failed to allocate tx desc ring\n", |
631 | netdev->name); | 631 | netdev->name); |
632 | return -ENOMEM; | 632 | err = -ENOMEM; |
633 | goto err_out_free; | ||
633 | } | 634 | } |
634 | 635 | ||
635 | tx_ring->desc_head = (struct cmd_desc_type0 *)addr; | 636 | tx_ring->desc_head = (struct cmd_desc_type0 *)addr; |
diff --git a/drivers/net/netxen/netxen_nic_hw.c b/drivers/net/netxen/netxen_nic_hw.c index 5c496f8d7c49..29d7b93d0493 100644 --- a/drivers/net/netxen/netxen_nic_hw.c +++ b/drivers/net/netxen/netxen_nic_hw.c | |||
@@ -1159,9 +1159,6 @@ netxen_nic_pci_set_crbwindow_2M(struct netxen_adapter *adapter, ulong off) | |||
1159 | 1159 | ||
1160 | window = CRB_HI(off); | 1160 | window = CRB_HI(off); |
1161 | 1161 | ||
1162 | if (adapter->ahw.crb_win == window) | ||
1163 | return; | ||
1164 | |||
1165 | writel(window, addr); | 1162 | writel(window, addr); |
1166 | if (readl(addr) != window) { | 1163 | if (readl(addr) != window) { |
1167 | if (printk_ratelimit()) | 1164 | if (printk_ratelimit()) |
@@ -1169,7 +1166,6 @@ netxen_nic_pci_set_crbwindow_2M(struct netxen_adapter *adapter, ulong off) | |||
1169 | "failed to set CRB window to %d off 0x%lx\n", | 1166 | "failed to set CRB window to %d off 0x%lx\n", |
1170 | window, off); | 1167 | window, off); |
1171 | } | 1168 | } |
1172 | adapter->ahw.crb_win = window; | ||
1173 | } | 1169 | } |
1174 | 1170 | ||
1175 | static void __iomem * | 1171 | static void __iomem * |
diff --git a/drivers/net/netxen/netxen_nic_init.c b/drivers/net/netxen/netxen_nic_init.c index 045a7c8f5bdf..c865dda2adf1 100644 --- a/drivers/net/netxen/netxen_nic_init.c +++ b/drivers/net/netxen/netxen_nic_init.c | |||
@@ -218,7 +218,7 @@ int netxen_alloc_sw_resources(struct netxen_adapter *adapter) | |||
218 | if (cmd_buf_arr == NULL) { | 218 | if (cmd_buf_arr == NULL) { |
219 | dev_err(&pdev->dev, "%s: failed to allocate cmd buffer ring\n", | 219 | dev_err(&pdev->dev, "%s: failed to allocate cmd buffer ring\n", |
220 | netdev->name); | 220 | netdev->name); |
221 | return -ENOMEM; | 221 | goto err_out; |
222 | } | 222 | } |
223 | memset(cmd_buf_arr, 0, TX_BUFF_RINGSIZE(tx_ring)); | 223 | memset(cmd_buf_arr, 0, TX_BUFF_RINGSIZE(tx_ring)); |
224 | tx_ring->cmd_buf_arr = cmd_buf_arr; | 224 | tx_ring->cmd_buf_arr = cmd_buf_arr; |
@@ -230,7 +230,7 @@ int netxen_alloc_sw_resources(struct netxen_adapter *adapter) | |||
230 | if (rds_ring == NULL) { | 230 | if (rds_ring == NULL) { |
231 | dev_err(&pdev->dev, "%s: failed to allocate rds ring struct\n", | 231 | dev_err(&pdev->dev, "%s: failed to allocate rds ring struct\n", |
232 | netdev->name); | 232 | netdev->name); |
233 | return -ENOMEM; | 233 | goto err_out; |
234 | } | 234 | } |
235 | recv_ctx->rds_rings = rds_ring; | 235 | recv_ctx->rds_rings = rds_ring; |
236 | 236 | ||
@@ -1805,9 +1805,10 @@ netxen_post_rx_buffers(struct netxen_adapter *adapter, u32 ringid, | |||
1805 | netxen_ctx_msg msg = 0; | 1805 | netxen_ctx_msg msg = 0; |
1806 | struct list_head *head; | 1806 | struct list_head *head; |
1807 | 1807 | ||
1808 | spin_lock(&rds_ring->lock); | ||
1809 | |||
1808 | producer = rds_ring->producer; | 1810 | producer = rds_ring->producer; |
1809 | 1811 | ||
1810 | spin_lock(&rds_ring->lock); | ||
1811 | head = &rds_ring->free_list; | 1812 | head = &rds_ring->free_list; |
1812 | while (!list_empty(head)) { | 1813 | while (!list_empty(head)) { |
1813 | 1814 | ||
@@ -1829,7 +1830,6 @@ netxen_post_rx_buffers(struct netxen_adapter *adapter, u32 ringid, | |||
1829 | 1830 | ||
1830 | producer = get_next_index(producer, rds_ring->num_desc); | 1831 | producer = get_next_index(producer, rds_ring->num_desc); |
1831 | } | 1832 | } |
1832 | spin_unlock(&rds_ring->lock); | ||
1833 | 1833 | ||
1834 | if (count) { | 1834 | if (count) { |
1835 | rds_ring->producer = producer; | 1835 | rds_ring->producer = producer; |
@@ -1853,6 +1853,8 @@ netxen_post_rx_buffers(struct netxen_adapter *adapter, u32 ringid, | |||
1853 | NETXEN_RCV_PRODUCER_OFFSET), msg); | 1853 | NETXEN_RCV_PRODUCER_OFFSET), msg); |
1854 | } | 1854 | } |
1855 | } | 1855 | } |
1856 | |||
1857 | spin_unlock(&rds_ring->lock); | ||
1856 | } | 1858 | } |
1857 | 1859 | ||
1858 | static void | 1860 | static void |
@@ -1864,10 +1866,11 @@ netxen_post_rx_buffers_nodb(struct netxen_adapter *adapter, | |||
1864 | int producer, count = 0; | 1866 | int producer, count = 0; |
1865 | struct list_head *head; | 1867 | struct list_head *head; |
1866 | 1868 | ||
1867 | producer = rds_ring->producer; | ||
1868 | if (!spin_trylock(&rds_ring->lock)) | 1869 | if (!spin_trylock(&rds_ring->lock)) |
1869 | return; | 1870 | return; |
1870 | 1871 | ||
1872 | producer = rds_ring->producer; | ||
1873 | |||
1871 | head = &rds_ring->free_list; | 1874 | head = &rds_ring->free_list; |
1872 | while (!list_empty(head)) { | 1875 | while (!list_empty(head)) { |
1873 | 1876 | ||
diff --git a/drivers/net/pcmcia/pcnet_cs.c b/drivers/net/pcmcia/pcnet_cs.c index 6f77a768ba88..bfdef72c5d5e 100644 --- a/drivers/net/pcmcia/pcnet_cs.c +++ b/drivers/net/pcmcia/pcnet_cs.c | |||
@@ -1727,6 +1727,7 @@ static struct pcmcia_device_id pcnet_ids[] = { | |||
1727 | PCMCIA_PFC_DEVICE_CIS_PROD_ID12(0, "Psion Dacom", "Gold Card V34 Ethernet", 0xf5f025c2, 0x338e8155, "cis/PCMLM28.cis"), | 1727 | PCMCIA_PFC_DEVICE_CIS_PROD_ID12(0, "Psion Dacom", "Gold Card V34 Ethernet", 0xf5f025c2, 0x338e8155, "cis/PCMLM28.cis"), |
1728 | PCMCIA_PFC_DEVICE_CIS_PROD_ID12(0, "Psion Dacom", "Gold Card V34 Ethernet GSM", 0xf5f025c2, 0x4ae85d35, "cis/PCMLM28.cis"), | 1728 | PCMCIA_PFC_DEVICE_CIS_PROD_ID12(0, "Psion Dacom", "Gold Card V34 Ethernet GSM", 0xf5f025c2, 0x4ae85d35, "cis/PCMLM28.cis"), |
1729 | PCMCIA_PFC_DEVICE_CIS_PROD_ID12(0, "LINKSYS", "PCMLM28", 0xf7cb0b07, 0x66881874, "cis/PCMLM28.cis"), | 1729 | PCMCIA_PFC_DEVICE_CIS_PROD_ID12(0, "LINKSYS", "PCMLM28", 0xf7cb0b07, 0x66881874, "cis/PCMLM28.cis"), |
1730 | PCMCIA_PFC_DEVICE_CIS_PROD_ID12(0, "TOSHIBA", "Modem/LAN Card", 0xb4585a1a, 0x53f922f8, "cis/PCMLM28.cis"), | ||
1730 | PCMCIA_MFC_DEVICE_CIS_PROD_ID12(0, "DAYNA COMMUNICATIONS", "LAN AND MODEM MULTIFUNCTION", 0x8fdf8f89, 0xdd5ed9e8, "cis/DP83903.cis"), | 1731 | PCMCIA_MFC_DEVICE_CIS_PROD_ID12(0, "DAYNA COMMUNICATIONS", "LAN AND MODEM MULTIFUNCTION", 0x8fdf8f89, 0xdd5ed9e8, "cis/DP83903.cis"), |
1731 | PCMCIA_MFC_DEVICE_CIS_PROD_ID4(0, "NSC MF LAN/Modem", 0x58fc6056, "cis/DP83903.cis"), | 1732 | PCMCIA_MFC_DEVICE_CIS_PROD_ID4(0, "NSC MF LAN/Modem", 0x58fc6056, "cis/DP83903.cis"), |
1732 | PCMCIA_MFC_DEVICE_CIS_MANF_CARD(0, 0x0175, 0x0000, "cis/DP83903.cis"), | 1733 | PCMCIA_MFC_DEVICE_CIS_MANF_CARD(0, 0x0175, 0x0000, "cis/DP83903.cis"), |
diff --git a/drivers/net/pcmcia/smc91c92_cs.c b/drivers/net/pcmcia/smc91c92_cs.c index 7b6fe89f9db0..64e6a84bbbbe 100644 --- a/drivers/net/pcmcia/smc91c92_cs.c +++ b/drivers/net/pcmcia/smc91c92_cs.c | |||
@@ -322,6 +322,7 @@ static int smc91c92_probe(struct pcmcia_device *link) | |||
322 | return -ENOMEM; | 322 | return -ENOMEM; |
323 | smc = netdev_priv(dev); | 323 | smc = netdev_priv(dev); |
324 | smc->p_dev = link; | 324 | smc->p_dev = link; |
325 | link->priv = dev; | ||
325 | 326 | ||
326 | spin_lock_init(&smc->lock); | 327 | spin_lock_init(&smc->lock); |
327 | link->io.NumPorts1 = 16; | 328 | link->io.NumPorts1 = 16; |
diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c index 2111c7bbf578..7985165e84fc 100644 --- a/drivers/net/sky2.c +++ b/drivers/net/sky2.c | |||
@@ -717,11 +717,24 @@ static void sky2_phy_power_down(struct sky2_hw *hw, unsigned port) | |||
717 | sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_OFF); | 717 | sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_OFF); |
718 | } | 718 | } |
719 | 719 | ||
720 | /* Enable Rx/Tx */ | ||
721 | static void sky2_enable_rx_tx(struct sky2_port *sky2) | ||
722 | { | ||
723 | struct sky2_hw *hw = sky2->hw; | ||
724 | unsigned port = sky2->port; | ||
725 | u16 reg; | ||
726 | |||
727 | reg = gma_read16(hw, port, GM_GP_CTRL); | ||
728 | reg |= GM_GPCR_RX_ENA | GM_GPCR_TX_ENA; | ||
729 | gma_write16(hw, port, GM_GP_CTRL, reg); | ||
730 | } | ||
731 | |||
720 | /* Force a renegotiation */ | 732 | /* Force a renegotiation */ |
721 | static void sky2_phy_reinit(struct sky2_port *sky2) | 733 | static void sky2_phy_reinit(struct sky2_port *sky2) |
722 | { | 734 | { |
723 | spin_lock_bh(&sky2->phy_lock); | 735 | spin_lock_bh(&sky2->phy_lock); |
724 | sky2_phy_init(sky2->hw, sky2->port); | 736 | sky2_phy_init(sky2->hw, sky2->port); |
737 | sky2_enable_rx_tx(sky2); | ||
725 | spin_unlock_bh(&sky2->phy_lock); | 738 | spin_unlock_bh(&sky2->phy_lock); |
726 | } | 739 | } |
727 | 740 | ||
@@ -2040,7 +2053,6 @@ static void sky2_link_up(struct sky2_port *sky2) | |||
2040 | { | 2053 | { |
2041 | struct sky2_hw *hw = sky2->hw; | 2054 | struct sky2_hw *hw = sky2->hw; |
2042 | unsigned port = sky2->port; | 2055 | unsigned port = sky2->port; |
2043 | u16 reg; | ||
2044 | static const char *fc_name[] = { | 2056 | static const char *fc_name[] = { |
2045 | [FC_NONE] = "none", | 2057 | [FC_NONE] = "none", |
2046 | [FC_TX] = "tx", | 2058 | [FC_TX] = "tx", |
@@ -2048,10 +2060,7 @@ static void sky2_link_up(struct sky2_port *sky2) | |||
2048 | [FC_BOTH] = "both", | 2060 | [FC_BOTH] = "both", |
2049 | }; | 2061 | }; |
2050 | 2062 | ||
2051 | /* enable Rx/Tx */ | 2063 | sky2_enable_rx_tx(sky2); |
2052 | reg = gma_read16(hw, port, GM_GP_CTRL); | ||
2053 | reg |= GM_GPCR_RX_ENA | GM_GPCR_TX_ENA; | ||
2054 | gma_write16(hw, port, GM_GP_CTRL, reg); | ||
2055 | 2064 | ||
2056 | gm_phy_write(hw, port, PHY_MARV_INT_MASK, PHY_M_DEF_MSK); | 2065 | gm_phy_write(hw, port, PHY_MARV_INT_MASK, PHY_M_DEF_MSK); |
2057 | 2066 | ||
diff --git a/drivers/net/ucc_geth.c b/drivers/net/ucc_geth.c index 538148a3a142..dc32a62e611c 100644 --- a/drivers/net/ucc_geth.c +++ b/drivers/net/ucc_geth.c | |||
@@ -3215,6 +3215,8 @@ static int ucc_geth_rx(struct ucc_geth_private *ugeth, u8 rxQ, int rx_work_limit | |||
3215 | __func__, __LINE__, (u32) skb); | 3215 | __func__, __LINE__, (u32) skb); |
3216 | if (skb) { | 3216 | if (skb) { |
3217 | skb->data = skb->head + NET_SKB_PAD; | 3217 | skb->data = skb->head + NET_SKB_PAD; |
3218 | skb->len = 0; | ||
3219 | skb_reset_tail_pointer(skb); | ||
3218 | __skb_queue_head(&ugeth->rx_recycle, skb); | 3220 | __skb_queue_head(&ugeth->rx_recycle, skb); |
3219 | } | 3221 | } |
3220 | 3222 | ||
diff --git a/drivers/net/usb/hso.c b/drivers/net/usb/hso.c index c8570b097880..39422f71e1d0 100644 --- a/drivers/net/usb/hso.c +++ b/drivers/net/usb/hso.c | |||
@@ -1334,7 +1334,6 @@ static int hso_serial_open(struct tty_struct *tty, struct file *filp) | |||
1334 | /* check for port already opened, if not set the termios */ | 1334 | /* check for port already opened, if not set the termios */ |
1335 | serial->open_count++; | 1335 | serial->open_count++; |
1336 | if (serial->open_count == 1) { | 1336 | if (serial->open_count == 1) { |
1337 | tty->low_latency = 1; | ||
1338 | serial->rx_state = RX_IDLE; | 1337 | serial->rx_state = RX_IDLE; |
1339 | /* Force default termio settings */ | 1338 | /* Force default termio settings */ |
1340 | _hso_serial_set_termios(tty, NULL); | 1339 | _hso_serial_set_termios(tty, NULL); |
diff --git a/drivers/net/wireless/ath/ath5k/attach.c b/drivers/net/wireless/ath/ath5k/attach.c index ef2dc1dd3a5d..b32e28caeee2 100644 --- a/drivers/net/wireless/ath/ath5k/attach.c +++ b/drivers/net/wireless/ath/ath5k/attach.c | |||
@@ -126,6 +126,7 @@ int ath5k_hw_attach(struct ath5k_softc *sc) | |||
126 | ah->ah_ant_mode = AR5K_ANTMODE_DEFAULT; | 126 | ah->ah_ant_mode = AR5K_ANTMODE_DEFAULT; |
127 | ah->ah_noise_floor = -95; /* until first NF calibration is run */ | 127 | ah->ah_noise_floor = -95; /* until first NF calibration is run */ |
128 | sc->ani_state.ani_mode = ATH5K_ANI_MODE_AUTO; | 128 | sc->ani_state.ani_mode = ATH5K_ANI_MODE_AUTO; |
129 | ah->ah_current_channel = &sc->channels[0]; | ||
129 | 130 | ||
130 | /* | 131 | /* |
131 | * Find the mac version | 132 | * Find the mac version |
diff --git a/drivers/serial/serial_cs.c b/drivers/serial/serial_cs.c index dadd686c9801..8bb715a1a7a6 100644 --- a/drivers/serial/serial_cs.c +++ b/drivers/serial/serial_cs.c | |||
@@ -807,6 +807,7 @@ static struct pcmcia_device_id serial_ids[] = { | |||
807 | PCMCIA_PFC_DEVICE_CIS_PROD_ID12(1, "Psion Dacom", "Gold Card V34 Ethernet", 0xf5f025c2, 0x338e8155, "cis/PCMLM28.cis"), | 807 | PCMCIA_PFC_DEVICE_CIS_PROD_ID12(1, "Psion Dacom", "Gold Card V34 Ethernet", 0xf5f025c2, 0x338e8155, "cis/PCMLM28.cis"), |
808 | PCMCIA_PFC_DEVICE_CIS_PROD_ID12(1, "Psion Dacom", "Gold Card V34 Ethernet GSM", 0xf5f025c2, 0x4ae85d35, "cis/PCMLM28.cis"), | 808 | PCMCIA_PFC_DEVICE_CIS_PROD_ID12(1, "Psion Dacom", "Gold Card V34 Ethernet GSM", 0xf5f025c2, 0x4ae85d35, "cis/PCMLM28.cis"), |
809 | PCMCIA_PFC_DEVICE_CIS_PROD_ID12(1, "LINKSYS", "PCMLM28", 0xf7cb0b07, 0x66881874, "cis/PCMLM28.cis"), | 809 | PCMCIA_PFC_DEVICE_CIS_PROD_ID12(1, "LINKSYS", "PCMLM28", 0xf7cb0b07, 0x66881874, "cis/PCMLM28.cis"), |
810 | PCMCIA_PFC_DEVICE_CIS_PROD_ID12(1, "TOSHIBA", "Modem/LAN Card", 0xb4585a1a, 0x53f922f8, "cis/PCMLM28.cis"), | ||
810 | PCMCIA_MFC_DEVICE_CIS_PROD_ID12(1, "DAYNA COMMUNICATIONS", "LAN AND MODEM MULTIFUNCTION", 0x8fdf8f89, 0xdd5ed9e8, "cis/DP83903.cis"), | 811 | PCMCIA_MFC_DEVICE_CIS_PROD_ID12(1, "DAYNA COMMUNICATIONS", "LAN AND MODEM MULTIFUNCTION", 0x8fdf8f89, 0xdd5ed9e8, "cis/DP83903.cis"), |
811 | PCMCIA_MFC_DEVICE_CIS_PROD_ID4(1, "NSC MF LAN/Modem", 0x58fc6056, "cis/DP83903.cis"), | 812 | PCMCIA_MFC_DEVICE_CIS_PROD_ID4(1, "NSC MF LAN/Modem", 0x58fc6056, "cis/DP83903.cis"), |
812 | PCMCIA_MFC_DEVICE_CIS_MANF_CARD(1, 0x0101, 0x0556, "cis/3CCFEM556.cis"), | 813 | PCMCIA_MFC_DEVICE_CIS_MANF_CARD(1, 0x0101, 0x0556, "cis/3CCFEM556.cis"), |
diff --git a/include/net/snmp.h b/include/net/snmp.h index 92456f1035f5..899003d18db9 100644 --- a/include/net/snmp.h +++ b/include/net/snmp.h | |||
@@ -134,7 +134,7 @@ struct linux_xfrm_mib { | |||
134 | #define SNMP_ADD_STATS_USER(mib, field, addend) \ | 134 | #define SNMP_ADD_STATS_USER(mib, field, addend) \ |
135 | this_cpu_add(mib[1]->mibs[field], addend) | 135 | this_cpu_add(mib[1]->mibs[field], addend) |
136 | #define SNMP_ADD_STATS(mib, field, addend) \ | 136 | #define SNMP_ADD_STATS(mib, field, addend) \ |
137 | this_cpu_add(mib[0]->mibs[field], addend) | 137 | this_cpu_add(mib[!in_softirq()]->mibs[field], addend) |
138 | /* | 138 | /* |
139 | * Use "__typeof__(*mib[0]) *ptr" instead of "__typeof__(mib[0]) ptr" | 139 | * Use "__typeof__(*mib[0]) *ptr" instead of "__typeof__(mib[0]) ptr" |
140 | * to make @ptr a non-percpu pointer. | 140 | * to make @ptr a non-percpu pointer. |
diff --git a/net/bridge/br_fdb.c b/net/bridge/br_fdb.c index 6818e609b2c0..a744296fc675 100644 --- a/net/bridge/br_fdb.c +++ b/net/bridge/br_fdb.c | |||
@@ -128,7 +128,7 @@ void br_fdb_cleanup(unsigned long _data) | |||
128 | { | 128 | { |
129 | struct net_bridge *br = (struct net_bridge *)_data; | 129 | struct net_bridge *br = (struct net_bridge *)_data; |
130 | unsigned long delay = hold_time(br); | 130 | unsigned long delay = hold_time(br); |
131 | unsigned long next_timer = jiffies + br->forward_delay; | 131 | unsigned long next_timer = jiffies + br->ageing_time; |
132 | int i; | 132 | int i; |
133 | 133 | ||
134 | spin_lock_bh(&br->hash_lock); | 134 | spin_lock_bh(&br->hash_lock); |
@@ -149,9 +149,7 @@ void br_fdb_cleanup(unsigned long _data) | |||
149 | } | 149 | } |
150 | spin_unlock_bh(&br->hash_lock); | 150 | spin_unlock_bh(&br->hash_lock); |
151 | 151 | ||
152 | /* Add HZ/4 to ensure we round the jiffies upwards to be after the next | 152 | mod_timer(&br->gc_timer, round_jiffies_up(next_timer)); |
153 | * timer, otherwise we might round down and will have no-op run. */ | ||
154 | mod_timer(&br->gc_timer, round_jiffies(next_timer + HZ/4)); | ||
155 | } | 153 | } |
156 | 154 | ||
157 | /* Completely flush all dynamic entries in forwarding database.*/ | 155 | /* Completely flush all dynamic entries in forwarding database.*/ |
diff --git a/net/bridge/br_forward.c b/net/bridge/br_forward.c index 6e97711fd2c5..cbfe87f0f34a 100644 --- a/net/bridge/br_forward.c +++ b/net/bridge/br_forward.c | |||
@@ -130,10 +130,10 @@ static int deliver_clone(const struct net_bridge_port *prev, | |||
130 | void (*__packet_hook)(const struct net_bridge_port *p, | 130 | void (*__packet_hook)(const struct net_bridge_port *p, |
131 | struct sk_buff *skb)) | 131 | struct sk_buff *skb)) |
132 | { | 132 | { |
133 | struct net_device *dev = BR_INPUT_SKB_CB(skb)->brdev; | ||
134 | |||
133 | skb = skb_clone(skb, GFP_ATOMIC); | 135 | skb = skb_clone(skb, GFP_ATOMIC); |
134 | if (!skb) { | 136 | if (!skb) { |
135 | struct net_device *dev = BR_INPUT_SKB_CB(skb)->brdev; | ||
136 | |||
137 | dev->stats.tx_dropped++; | 137 | dev->stats.tx_dropped++; |
138 | return -ENOMEM; | 138 | return -ENOMEM; |
139 | } | 139 | } |
diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c index 6cbeb2e108de..7d1f4b4481a9 100644 --- a/net/ipv4/ip_output.c +++ b/net/ipv4/ip_output.c | |||
@@ -873,8 +873,10 @@ int ip_append_data(struct sock *sk, | |||
873 | !exthdrlen) | 873 | !exthdrlen) |
874 | csummode = CHECKSUM_PARTIAL; | 874 | csummode = CHECKSUM_PARTIAL; |
875 | 875 | ||
876 | skb = skb_peek_tail(&sk->sk_write_queue); | ||
877 | |||
876 | inet->cork.length += length; | 878 | inet->cork.length += length; |
877 | if (((length> mtu) || !skb_queue_empty(&sk->sk_write_queue)) && | 879 | if (((length > mtu) || (skb && skb_is_gso(skb))) && |
878 | (sk->sk_protocol == IPPROTO_UDP) && | 880 | (sk->sk_protocol == IPPROTO_UDP) && |
879 | (rt->dst.dev->features & NETIF_F_UFO)) { | 881 | (rt->dst.dev->features & NETIF_F_UFO)) { |
880 | err = ip_ufo_append_data(sk, getfrag, from, length, hh_len, | 882 | err = ip_ufo_append_data(sk, getfrag, from, length, hh_len, |
@@ -892,7 +894,7 @@ int ip_append_data(struct sock *sk, | |||
892 | * adding appropriate IP header. | 894 | * adding appropriate IP header. |
893 | */ | 895 | */ |
894 | 896 | ||
895 | if ((skb = skb_peek_tail(&sk->sk_write_queue)) == NULL) | 897 | if (!skb) |
896 | goto alloc_new_skb; | 898 | goto alloc_new_skb; |
897 | 899 | ||
898 | while (length > 0) { | 900 | while (length > 0) { |
@@ -1121,7 +1123,8 @@ ssize_t ip_append_page(struct sock *sk, struct page *page, | |||
1121 | return -EINVAL; | 1123 | return -EINVAL; |
1122 | 1124 | ||
1123 | inet->cork.length += size; | 1125 | inet->cork.length += size; |
1124 | if ((sk->sk_protocol == IPPROTO_UDP) && | 1126 | if ((size + skb->len > mtu) && |
1127 | (sk->sk_protocol == IPPROTO_UDP) && | ||
1125 | (rt->dst.dev->features & NETIF_F_UFO)) { | 1128 | (rt->dst.dev->features & NETIF_F_UFO)) { |
1126 | skb_shinfo(skb)->gso_size = mtu - fragheaderlen; | 1129 | skb_shinfo(skb)->gso_size = mtu - fragheaderlen; |
1127 | skb_shinfo(skb)->gso_type = SKB_GSO_UDP; | 1130 | skb_shinfo(skb)->gso_type = SKB_GSO_UDP; |
diff --git a/net/netfilter/ipvs/ip_vs_conn.c b/net/netfilter/ipvs/ip_vs_conn.c index d8f7e8ef67b4..ff04e9edbed6 100644 --- a/net/netfilter/ipvs/ip_vs_conn.c +++ b/net/netfilter/ipvs/ip_vs_conn.c | |||
@@ -162,6 +162,7 @@ static inline int ip_vs_conn_hash(struct ip_vs_conn *cp) | |||
162 | hash = ip_vs_conn_hashkey(cp->af, cp->protocol, &cp->caddr, cp->cport); | 162 | hash = ip_vs_conn_hashkey(cp->af, cp->protocol, &cp->caddr, cp->cport); |
163 | 163 | ||
164 | ct_write_lock(hash); | 164 | ct_write_lock(hash); |
165 | spin_lock(&cp->lock); | ||
165 | 166 | ||
166 | if (!(cp->flags & IP_VS_CONN_F_HASHED)) { | 167 | if (!(cp->flags & IP_VS_CONN_F_HASHED)) { |
167 | list_add(&cp->c_list, &ip_vs_conn_tab[hash]); | 168 | list_add(&cp->c_list, &ip_vs_conn_tab[hash]); |
@@ -174,6 +175,7 @@ static inline int ip_vs_conn_hash(struct ip_vs_conn *cp) | |||
174 | ret = 0; | 175 | ret = 0; |
175 | } | 176 | } |
176 | 177 | ||
178 | spin_unlock(&cp->lock); | ||
177 | ct_write_unlock(hash); | 179 | ct_write_unlock(hash); |
178 | 180 | ||
179 | return ret; | 181 | return ret; |
@@ -193,6 +195,7 @@ static inline int ip_vs_conn_unhash(struct ip_vs_conn *cp) | |||
193 | hash = ip_vs_conn_hashkey(cp->af, cp->protocol, &cp->caddr, cp->cport); | 195 | hash = ip_vs_conn_hashkey(cp->af, cp->protocol, &cp->caddr, cp->cport); |
194 | 196 | ||
195 | ct_write_lock(hash); | 197 | ct_write_lock(hash); |
198 | spin_lock(&cp->lock); | ||
196 | 199 | ||
197 | if (cp->flags & IP_VS_CONN_F_HASHED) { | 200 | if (cp->flags & IP_VS_CONN_F_HASHED) { |
198 | list_del(&cp->c_list); | 201 | list_del(&cp->c_list); |
@@ -202,6 +205,7 @@ static inline int ip_vs_conn_unhash(struct ip_vs_conn *cp) | |||
202 | } else | 205 | } else |
203 | ret = 0; | 206 | ret = 0; |
204 | 207 | ||
208 | spin_unlock(&cp->lock); | ||
205 | ct_write_unlock(hash); | 209 | ct_write_unlock(hash); |
206 | 210 | ||
207 | return ret; | 211 | return ret; |
diff --git a/net/sched/sch_teql.c b/net/sched/sch_teql.c index 3415b6ce1c0a..807643bdcbac 100644 --- a/net/sched/sch_teql.c +++ b/net/sched/sch_teql.c | |||
@@ -449,6 +449,7 @@ static __init void teql_master_setup(struct net_device *dev) | |||
449 | dev->tx_queue_len = 100; | 449 | dev->tx_queue_len = 100; |
450 | dev->flags = IFF_NOARP; | 450 | dev->flags = IFF_NOARP; |
451 | dev->hard_header_len = LL_MAX_HEADER; | 451 | dev->hard_header_len = LL_MAX_HEADER; |
452 | dev->priv_flags &= ~IFF_XMIT_DST_RELEASE; | ||
452 | } | 453 | } |
453 | 454 | ||
454 | static LIST_HEAD(master_dev_list); | 455 | static LIST_HEAD(master_dev_list); |