From f0cc30c4bfd8b8e2fa37c29423587c70ed962652 Mon Sep 17 00:00:00 2001 From: Don Skidmore Date: Sat, 2 Mar 2013 07:17:37 +0000 Subject: [PATCH] --- yaml --- r: 369721 b: refs/heads/master c: bdbeefe8ea8c7aa1e00397641e1f3dfa41a20968 h: refs/heads/master i: 369719: 68bce2e258d203d7674afe770635bbdc2105321f v: v3 --- [refs] | 2 +- .../net/ethernet/intel/ixgbe/ixgbe_main.c | 3 + .../net/ethernet/qlogic/qlcnic/qlcnic.h | 22 +- .../ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c | 19 +- .../ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h | 2 +- .../ethernet/qlogic/qlcnic/qlcnic_83xx_init.c | 25 --- .../ethernet/qlogic/qlcnic/qlcnic_ethtool.c | 77 ++----- .../net/ethernet/qlogic/qlcnic/qlcnic_main.c | 193 ++++-------------- trunk/include/net/ip_vs.h | 8 +- trunk/include/uapi/linux/ip_vs.h | 4 +- trunk/net/netfilter/ipvs/ip_vs_conn.c | 14 +- trunk/net/netfilter/ipvs/ip_vs_core.c | 7 +- trunk/net/netfilter/ipvs/ip_vs_ctl.c | 55 ++--- trunk/net/netfilter/ipvs/ip_vs_lblc.c | 2 +- trunk/net/netfilter/ipvs/ip_vs_lblcr.c | 2 +- trunk/net/netfilter/ipvs/ip_vs_pe_sip.c | 3 +- trunk/net/netfilter/ipvs/ip_vs_proto_sctp.c | 2 +- trunk/net/netfilter/ipvs/ip_vs_sync.c | 21 +- trunk/net/netfilter/nf_nat_core.c | 1 - 19 files changed, 120 insertions(+), 342 deletions(-) diff --git a/[refs] b/[refs] index dea64e92479d..e81c8c126a51 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: d3734b0496f5a310a85bb53310c047b8e42bc440 +refs/heads/master: bdbeefe8ea8c7aa1e00397641e1f3dfa41a20968 diff --git a/trunk/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/trunk/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c index 6225f880a3f4..9afc959c1499 100644 --- a/trunk/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +++ b/trunk/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c @@ -2095,6 +2095,9 @@ static void ixgbe_update_itr(struct ixgbe_q_vector *q_vector, */ /* what was last interrupt timeslice? */ timepassed_us = q_vector->itr >> 2; + if (timepassed_us == 0) + return; + bytes_perint = bytes / timepassed_us; /* bytes/usec */ switch (itr_setting) { diff --git a/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h b/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h index 90c253b145ef..8d02dd75c9a2 100644 --- a/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h +++ b/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h @@ -38,8 +38,8 @@ #define _QLCNIC_LINUX_MAJOR 5 #define _QLCNIC_LINUX_MINOR 2 -#define _QLCNIC_LINUX_SUBVERSION 42 -#define QLCNIC_LINUX_VERSIONID "5.2.42" +#define _QLCNIC_LINUX_SUBVERSION 41 +#define QLCNIC_LINUX_VERSIONID "5.2.41" #define QLCNIC_DRV_IDC_VER 0x01 #define QLCNIC_DRIVER_VERSION ((_QLCNIC_LINUX_MAJOR << 16) |\ (_QLCNIC_LINUX_MINOR << 8) | (_QLCNIC_LINUX_SUBVERSION)) @@ -347,14 +347,8 @@ struct qlcnic_rx_buffer { * Interrupt coalescing defaults. The defaults are for 1500 MTU. It is * adjusted based on configured MTU. */ -#define QLCNIC_INTR_COAL_TYPE_RX 1 -#define QLCNIC_INTR_COAL_TYPE_TX 2 - -#define QLCNIC_DEF_INTR_COALESCE_RX_TIME_US 3 -#define QLCNIC_DEF_INTR_COALESCE_RX_PACKETS 256 - -#define QLCNIC_DEF_INTR_COALESCE_TX_TIME_US 64 -#define QLCNIC_DEF_INTR_COALESCE_TX_PACKETS 64 +#define QLCNIC_DEFAULT_INTR_COALESCE_RX_TIME_US 3 +#define QLCNIC_DEFAULT_INTR_COALESCE_RX_PACKETS 256 #define QLCNIC_INTR_DEFAULT 0x04 #define QLCNIC_CONFIG_INTR_COALESCE 3 @@ -365,8 +359,6 @@ struct qlcnic_nic_intr_coalesce { u8 sts_ring_mask; u16 rx_packets; u16 rx_time_us; - u16 tx_packets; - u16 tx_time_us; u16 flag; u32 timer_out; }; @@ -519,13 +511,13 @@ struct qlcnic_host_sds_ring { int irq; dma_addr_t phys_addr; - char name[IFNAMSIZ + 12]; + char name[IFNAMSIZ+4]; } ____cacheline_internodealigned_in_smp; struct qlcnic_host_tx_ring { int irq; void __iomem *crb_intr_mask; - char name[IFNAMSIZ + 12]; + char name[IFNAMSIZ+4]; u16 ctx_id; u32 producer; u32 sw_consumer; @@ -1482,7 +1474,7 @@ void qlcnic_diag_free_res(struct net_device *netdev, int max_sds_rings); int qlcnic_diag_alloc_res(struct net_device *netdev, int test); netdev_tx_t qlcnic_xmit_frame(struct sk_buff *skb, struct net_device *netdev); int qlcnic_set_max_rss(struct qlcnic_adapter *, u8, size_t); -int qlcnic_validate_max_rss(struct qlcnic_adapter *, __u32); +int qlcnic_validate_max_rss(u8, u8); void qlcnic_alloc_lb_filters_mem(struct qlcnic_adapter *adapter); int qlcnic_enable_msix(struct qlcnic_adapter *, u32); diff --git a/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c b/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c index ea790a93ee7c..fd0829c2839d 100644 --- a/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c +++ b/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c @@ -1937,7 +1937,7 @@ int qlcnic_83xx_get_mac_address(struct qlcnic_adapter *adapter, u8 *mac) void qlcnic_83xx_config_intr_coal(struct qlcnic_adapter *adapter) { int err; - u16 temp; + u32 temp; struct qlcnic_cmd_args cmd; struct qlcnic_nic_intr_coalesce *coal = &adapter->ahw->coal; @@ -1945,18 +1945,10 @@ void qlcnic_83xx_config_intr_coal(struct qlcnic_adapter *adapter) return; qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_CONFIG_INTR_COAL); - if (coal->type == QLCNIC_INTR_COAL_TYPE_RX) { - temp = adapter->recv_ctx->context_id; - cmd.req.arg[1] = QLCNIC_INTR_COAL_TYPE_RX | temp << 16; - temp = coal->rx_time_us; - cmd.req.arg[2] = coal->rx_packets | temp << 16; - } else if (coal->type == QLCNIC_INTR_COAL_TYPE_TX) { - temp = adapter->tx_ring->ctx_id; - cmd.req.arg[1] = QLCNIC_INTR_COAL_TYPE_TX | temp << 16; - temp = coal->tx_time_us; - cmd.req.arg[2] = coal->tx_packets | temp << 16; - } + cmd.req.arg[1] = 1 | (adapter->recv_ctx->context_id << 16); cmd.req.arg[3] = coal->flag; + temp = coal->rx_time_us << 16; + cmd.req.arg[2] = coal->rx_packets | temp; err = qlcnic_issue_cmd(adapter, &cmd); if (err != QLCNIC_RCODE_SUCCESS) dev_info(&adapter->pdev->dev, @@ -2930,9 +2922,6 @@ static u64 *qlcnic_83xx_fill_stats(struct qlcnic_adapter *adapter, /* fill in MAC rx frame stats */ for (k += 6; k < 80; k += 2) data = qlcnic_83xx_copy_stats(cmd, data, k); - /* fill in eSwitch stats */ - for (; k < total_regs; k += 2) - data = qlcnic_83xx_copy_stats(cmd, data, k); break; case QLC_83XX_STAT_RX: for (k = 2; k < 8; k += 2) diff --git a/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h b/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h index 1f1d85e6f2af..4be411c2628a 100644 --- a/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h +++ b/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h @@ -381,7 +381,7 @@ enum qlcnic_83xx_states { #define QLC_83XX_STAT_MAC 1 #define QLC_83XX_TX_STAT_REGS 14 #define QLC_83XX_RX_STAT_REGS 40 -#define QLC_83XX_MAC_STAT_REGS 94 +#define QLC_83XX_MAC_STAT_REGS 80 #define QLC_83XX_GET_FUNC_PRIVILEGE(VAL, FN) (0x3 & ((VAL) >> (FN * 2))) #define QLC_83XX_SET_FUNC_OPMODE(VAL, FN) ((VAL) << (FN * 2)) diff --git a/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c b/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c index ab1d8d99cbd5..6ea3a096054c 100644 --- a/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c +++ b/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c @@ -25,17 +25,6 @@ #define QLC_83XX_OPCODE_TMPL_END 0x0080 #define QLC_83XX_OPCODE_POLL_READ_LIST 0x0100 -/* EPORT control registers */ -#define QLC_83XX_RESET_CONTROL 0x28084E50 -#define QLC_83XX_RESET_REG 0x28084E60 -#define QLC_83XX_RESET_PORT0 0x28084E70 -#define QLC_83XX_RESET_PORT1 0x28084E80 -#define QLC_83XX_RESET_PORT2 0x28084E90 -#define QLC_83XX_RESET_PORT3 0x28084EA0 -#define QLC_83XX_RESET_SRESHIM 0x28084EB0 -#define QLC_83XX_RESET_EPGSHIM 0x28084EC0 -#define QLC_83XX_RESET_ETHERPCS 0x28084ED0 - static int qlcnic_83xx_init_default_driver(struct qlcnic_adapter *adapter); static int qlcnic_83xx_check_heartbeat(struct qlcnic_adapter *p_dev); static int qlcnic_83xx_restart_hw(struct qlcnic_adapter *adapter); @@ -1385,19 +1374,6 @@ static void qlcnic_83xx_disable_pause_frames(struct qlcnic_adapter *adapter) qlcnic_83xx_unlock_driver(adapter); } -static void qlcnic_83xx_take_eport_out_of_reset(struct qlcnic_adapter *adapter) -{ - QLCWR32(adapter, QLC_83XX_RESET_REG, 0); - QLCWR32(adapter, QLC_83XX_RESET_PORT0, 0); - QLCWR32(adapter, QLC_83XX_RESET_PORT1, 0); - QLCWR32(adapter, QLC_83XX_RESET_PORT2, 0); - QLCWR32(adapter, QLC_83XX_RESET_PORT3, 0); - QLCWR32(adapter, QLC_83XX_RESET_SRESHIM, 0); - QLCWR32(adapter, QLC_83XX_RESET_EPGSHIM, 0); - QLCWR32(adapter, QLC_83XX_RESET_ETHERPCS, 0); - QLCWR32(adapter, QLC_83XX_RESET_CONTROL, 1); -} - static int qlcnic_83xx_check_heartbeat(struct qlcnic_adapter *p_dev) { u32 heartbeat, peg_status; @@ -1419,7 +1395,6 @@ static int qlcnic_83xx_check_heartbeat(struct qlcnic_adapter *p_dev) if (ret) { dev_err(&p_dev->pdev->dev, "firmware hang detected\n"); - qlcnic_83xx_take_eport_out_of_reset(p_dev); qlcnic_83xx_disable_pause_frames(p_dev); peg_status = QLC_SHARED_REG_RD32(p_dev, QLCNIC_PEG_HALT_STATUS1); diff --git a/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c b/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c index 08efb4635007..9f7aade4667c 100644 --- a/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c +++ b/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c @@ -115,13 +115,6 @@ static const char qlcnic_83xx_mac_stats_strings[][ETH_GSTRING_LEN] = { "mac_rx_dropped", "mac_crc_error", "mac_align_error", - "eswitch_frames", - "eswitch_bytes", - "eswitch_multicast_frames", - "eswitch_broadcast_frames", - "eswitch_unicast_frames", - "eswitch_error_free_frames", - "eswitch_error_free_bytes", }; #define QLCNIC_STATS_LEN ARRAY_SIZE(qlcnic_gstrings_stats) @@ -642,7 +635,7 @@ static int qlcnic_set_channels(struct net_device *dev, channel->tx_count != channel->max_tx) return -EINVAL; - err = qlcnic_validate_max_rss(adapter, channel->rx_count); + err = qlcnic_validate_max_rss(channel->max_rx, channel->rx_count); if (err) return err; @@ -1303,9 +1296,6 @@ static int qlcnic_set_intr_coalesce(struct net_device *netdev, struct ethtool_coalesce *ethcoal) { struct qlcnic_adapter *adapter = netdev_priv(netdev); - struct qlcnic_nic_intr_coalesce *coal; - u32 rx_coalesce_usecs, rx_max_frames; - u32 tx_coalesce_usecs, tx_max_frames; if (!test_bit(__QLCNIC_DEV_UP, &adapter->state)) return -EINVAL; @@ -1316,8 +1306,8 @@ static int qlcnic_set_intr_coalesce(struct net_device *netdev, */ if (ethcoal->rx_coalesce_usecs > 0xffff || ethcoal->rx_max_coalesced_frames > 0xffff || - ethcoal->tx_coalesce_usecs > 0xffff || - ethcoal->tx_max_coalesced_frames > 0xffff || + ethcoal->tx_coalesce_usecs || + ethcoal->tx_max_coalesced_frames || ethcoal->rx_coalesce_usecs_irq || ethcoal->rx_max_coalesced_frames_irq || ethcoal->tx_coalesce_usecs_irq || @@ -1337,55 +1327,18 @@ static int qlcnic_set_intr_coalesce(struct net_device *netdev, ethcoal->tx_max_coalesced_frames_high) return -EINVAL; - coal = &adapter->ahw->coal; - - if (qlcnic_83xx_check(adapter)) { - if (!ethcoal->tx_coalesce_usecs || - !ethcoal->tx_max_coalesced_frames || - !ethcoal->rx_coalesce_usecs || - !ethcoal->rx_max_coalesced_frames) { - coal->flag = QLCNIC_INTR_DEFAULT; - coal->type = QLCNIC_INTR_COAL_TYPE_RX; - coal->rx_time_us = QLCNIC_DEF_INTR_COALESCE_RX_TIME_US; - coal->rx_packets = QLCNIC_DEF_INTR_COALESCE_RX_PACKETS; - coal->tx_time_us = QLCNIC_DEF_INTR_COALESCE_TX_TIME_US; - coal->tx_packets = QLCNIC_DEF_INTR_COALESCE_TX_PACKETS; - } else { - tx_coalesce_usecs = ethcoal->tx_coalesce_usecs; - tx_max_frames = ethcoal->tx_max_coalesced_frames; - rx_coalesce_usecs = ethcoal->rx_coalesce_usecs; - rx_max_frames = ethcoal->rx_max_coalesced_frames; - coal->flag = 0; - - if ((coal->rx_time_us == rx_coalesce_usecs) && - (coal->rx_packets == rx_max_frames)) { - coal->type = QLCNIC_INTR_COAL_TYPE_TX; - coal->tx_time_us = tx_coalesce_usecs; - coal->tx_packets = tx_max_frames; - } else if ((coal->tx_time_us == tx_coalesce_usecs) && - (coal->tx_packets == tx_max_frames)) { - coal->type = QLCNIC_INTR_COAL_TYPE_RX; - coal->rx_time_us = rx_coalesce_usecs; - coal->rx_packets = rx_max_frames; - } else { - coal->type = QLCNIC_INTR_COAL_TYPE_RX; - coal->rx_time_us = rx_coalesce_usecs; - coal->rx_packets = rx_max_frames; - coal->tx_time_us = tx_coalesce_usecs; - coal->tx_packets = tx_max_frames; - } - } + if (!ethcoal->rx_coalesce_usecs || + !ethcoal->rx_max_coalesced_frames) { + adapter->ahw->coal.flag = QLCNIC_INTR_DEFAULT; + adapter->ahw->coal.rx_time_us = + QLCNIC_DEFAULT_INTR_COALESCE_RX_TIME_US; + adapter->ahw->coal.rx_packets = + QLCNIC_DEFAULT_INTR_COALESCE_RX_PACKETS; } else { - if (!ethcoal->rx_coalesce_usecs || - !ethcoal->rx_max_coalesced_frames) { - coal->flag = QLCNIC_INTR_DEFAULT; - coal->rx_time_us = QLCNIC_DEF_INTR_COALESCE_RX_TIME_US; - coal->rx_packets = QLCNIC_DEF_INTR_COALESCE_RX_PACKETS; - } else { - coal->flag = 0; - coal->rx_time_us = ethcoal->rx_coalesce_usecs; - coal->rx_packets = ethcoal->rx_max_coalesced_frames; - } + adapter->ahw->coal.flag = 0; + adapter->ahw->coal.rx_time_us = ethcoal->rx_coalesce_usecs; + adapter->ahw->coal.rx_packets = + ethcoal->rx_max_coalesced_frames; } qlcnic_config_intr_coalesce(adapter); @@ -1403,8 +1356,6 @@ static int qlcnic_get_intr_coalesce(struct net_device *netdev, ethcoal->rx_coalesce_usecs = adapter->ahw->coal.rx_time_us; ethcoal->rx_max_coalesced_frames = adapter->ahw->coal.rx_packets; - ethcoal->tx_coalesce_usecs = adapter->ahw->coal.tx_time_us; - ethcoal->tx_max_coalesced_frames = adapter->ahw->coal.tx_packets; return 0; } diff --git a/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c b/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c index 264d5a4f8153..247a9f9b7bdc 100644 --- a/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c +++ b/trunk/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c @@ -156,112 +156,25 @@ static const u32 qlcnic_reg_tbl[] = { }; static const struct qlcnic_board_info qlcnic_boards[] = { - { PCI_VENDOR_ID_QLOGIC, - PCI_DEVICE_ID_QLOGIC_QLE834X, - PCI_VENDOR_ID_QLOGIC, - 0x24e, - "8300 Series Dual Port 10GbE Converged Network Adapter " - "(TCP/IP Networking)" }, - { PCI_VENDOR_ID_QLOGIC, - PCI_DEVICE_ID_QLOGIC_QLE834X, - PCI_VENDOR_ID_QLOGIC, - 0x243, - "8300 Series Single Port 10GbE Converged Network Adapter " - "(TCP/IP Networking)" }, - { PCI_VENDOR_ID_QLOGIC, - PCI_DEVICE_ID_QLOGIC_QLE834X, - PCI_VENDOR_ID_QLOGIC, - 0x24a, - "8300 Series Dual Port 10GbE Converged Network Adapter " - "(TCP/IP Networking)" }, - { PCI_VENDOR_ID_QLOGIC, - PCI_DEVICE_ID_QLOGIC_QLE834X, - PCI_VENDOR_ID_QLOGIC, - 0x246, - "8300 Series Dual Port 10GbE Converged Network Adapter " - "(TCP/IP Networking)" }, - { PCI_VENDOR_ID_QLOGIC, - PCI_DEVICE_ID_QLOGIC_QLE834X, - PCI_VENDOR_ID_QLOGIC, - 0x252, - "8300 Series Dual Port 10GbE Converged Network Adapter " - "(TCP/IP Networking)" }, - { PCI_VENDOR_ID_QLOGIC, - PCI_DEVICE_ID_QLOGIC_QLE834X, - PCI_VENDOR_ID_QLOGIC, - 0x26e, - "8300 Series Dual Port 10GbE Converged Network Adapter " - "(TCP/IP Networking)" }, - { PCI_VENDOR_ID_QLOGIC, - PCI_DEVICE_ID_QLOGIC_QLE834X, - PCI_VENDOR_ID_QLOGIC, - 0x260, - "8300 Series Dual Port 10GbE Converged Network Adapter " - "(TCP/IP Networking)" }, - { PCI_VENDOR_ID_QLOGIC, - PCI_DEVICE_ID_QLOGIC_QLE834X, - PCI_VENDOR_ID_QLOGIC, - 0x266, - "8300 Series Single Port 10GbE Converged Network Adapter " - "(TCP/IP Networking)" }, - { PCI_VENDOR_ID_QLOGIC, - PCI_DEVICE_ID_QLOGIC_QLE834X, - PCI_VENDOR_ID_QLOGIC, - 0x269, - "8300 Series Dual Port 10GbE Converged Network Adapter " - "(TCP/IP Networking)" }, - { PCI_VENDOR_ID_QLOGIC, - PCI_DEVICE_ID_QLOGIC_QLE834X, - PCI_VENDOR_ID_QLOGIC, - 0x271, - "8300 Series Dual Port 10GbE Converged Network Adapter " - "(TCP/IP Networking)" }, - { PCI_VENDOR_ID_QLOGIC, - PCI_DEVICE_ID_QLOGIC_QLE834X, - 0x0, 0x0, "8300 Series 1/10GbE Controller" }, - { PCI_VENDOR_ID_QLOGIC, - PCI_DEVICE_ID_QLOGIC_QLE824X, - PCI_VENDOR_ID_QLOGIC, - 0x203, - "8200 Series Single Port 10GbE Converged Network Adapter" - "(TCP/IP Networking)" }, - { PCI_VENDOR_ID_QLOGIC, - PCI_DEVICE_ID_QLOGIC_QLE824X, - PCI_VENDOR_ID_QLOGIC, - 0x207, - "8200 Series Dual Port 10GbE Converged Network Adapter" - "(TCP/IP Networking)" }, - { PCI_VENDOR_ID_QLOGIC, - PCI_DEVICE_ID_QLOGIC_QLE824X, - PCI_VENDOR_ID_QLOGIC, - 0x20b, - "3200 Series Dual Port 10Gb Intelligent Ethernet Adapter" }, - { PCI_VENDOR_ID_QLOGIC, - PCI_DEVICE_ID_QLOGIC_QLE824X, - PCI_VENDOR_ID_QLOGIC, - 0x20c, - "3200 Series Quad Port 1Gb Intelligent Ethernet Adapter" }, - { PCI_VENDOR_ID_QLOGIC, - PCI_DEVICE_ID_QLOGIC_QLE824X, - PCI_VENDOR_ID_QLOGIC, - 0x20f, - "3200 Series Single Port 10Gb Intelligent Ethernet Adapter" }, - { PCI_VENDOR_ID_QLOGIC, - PCI_DEVICE_ID_QLOGIC_QLE824X, - 0x103c, 0x3733, - "NC523SFP 10Gb 2-port Server Adapter" }, - { PCI_VENDOR_ID_QLOGIC, - PCI_DEVICE_ID_QLOGIC_QLE824X, - 0x103c, 0x3346, - "CN1000Q Dual Port Converged Network Adapter" }, - { PCI_VENDOR_ID_QLOGIC, - PCI_DEVICE_ID_QLOGIC_QLE824X, - PCI_VENDOR_ID_QLOGIC, - 0x210, - "QME8242-k 10GbE Dual Port Mezzanine Card" }, - { PCI_VENDOR_ID_QLOGIC, - PCI_DEVICE_ID_QLOGIC_QLE824X, - 0x0, 0x0, "cLOM8214 1/10GbE Controller" }, + {0x1077, 0x8020, 0x1077, 0x203, + "8200 Series Single Port 10GbE Converged Network Adapter" + "(TCP/IP Networking)"}, + {0x1077, 0x8020, 0x1077, 0x207, + "8200 Series Dual Port 10GbE Converged Network Adapter" + "(TCP/IP Networking)"}, + {0x1077, 0x8020, 0x1077, 0x20b, + "3200 Series Dual Port 10Gb Intelligent Ethernet Adapter"}, + {0x1077, 0x8020, 0x1077, 0x20c, + "3200 Series Quad Port 1Gb Intelligent Ethernet Adapter"}, + {0x1077, 0x8020, 0x1077, 0x20f, + "3200 Series Single Port 10Gb Intelligent Ethernet Adapter"}, + {0x1077, 0x8020, 0x103c, 0x3733, + "NC523SFP 10Gb 2-port Server Adapter"}, + {0x1077, 0x8020, 0x103c, 0x3346, + "CN1000Q Dual Port Converged Network Adapter"}, + {0x1077, 0x8020, 0x1077, 0x210, + "QME8242-k 10GbE Dual Port Mezzanine Card"}, + {0x1077, 0x8020, 0x0, 0x0, "cLOM8214 1/10GbE Controller"}, }; #define NUM_SUPPORTED_BOARDS ARRAY_SIZE(qlcnic_boards) @@ -1374,7 +1287,7 @@ qlcnic_request_irq(struct qlcnic_adapter *adapter) irq_handler_t handler; struct qlcnic_host_sds_ring *sds_ring; struct qlcnic_host_tx_ring *tx_ring; - int err, ring, num_sds_rings; + int err, ring; unsigned long flags = 0; struct net_device *netdev = adapter->netdev; @@ -1405,20 +1318,10 @@ qlcnic_request_irq(struct qlcnic_adapter *adapter) if (qlcnic_82xx_check(adapter) || (qlcnic_83xx_check(adapter) && (adapter->flags & QLCNIC_MSIX_ENABLED))) { - num_sds_rings = adapter->max_sds_rings; - for (ring = 0; ring < num_sds_rings; ring++) { + for (ring = 0; ring < adapter->max_sds_rings; ring++) { sds_ring = &recv_ctx->sds_rings[ring]; - if (qlcnic_82xx_check(adapter) && - (ring == (num_sds_rings - 1))) - snprintf(sds_ring->name, - sizeof(sds_ring->name), - "qlcnic-%s[Tx0+Rx%d]", - netdev->name, ring); - else - snprintf(sds_ring->name, - sizeof(sds_ring->name), - "qlcnic-%s[Rx%d]", - netdev->name, ring); + snprintf(sds_ring->name, sizeof(int) + IFNAMSIZ, + "%s[%d]", netdev->name, ring); err = request_irq(sds_ring->irq, handler, flags, sds_ring->name, sds_ring); if (err) @@ -1432,8 +1335,9 @@ qlcnic_request_irq(struct qlcnic_adapter *adapter) for (ring = 0; ring < adapter->max_drv_tx_rings; ring++) { tx_ring = &adapter->tx_ring[ring]; - snprintf(tx_ring->name, sizeof(tx_ring->name), - "qlcnic-%s[Tx%d]", netdev->name, ring); + snprintf(tx_ring->name, sizeof(int) + IFNAMSIZ, + "%s[%d]", netdev->name, + adapter->max_sds_rings + ring); err = request_irq(tx_ring->irq, handler, flags, tx_ring->name, tx_ring); if (err) @@ -1683,9 +1587,7 @@ void qlcnic_diag_free_res(struct net_device *netdev, int max_sds_rings) static int qlcnic_alloc_adapter_resources(struct qlcnic_adapter *adapter) { - struct qlcnic_hardware_context *ahw = adapter->ahw; int err = 0; - adapter->recv_ctx = kzalloc(sizeof(struct qlcnic_recv_context), GFP_KERNEL); if (!adapter->recv_ctx) { @@ -1693,14 +1595,9 @@ static int qlcnic_alloc_adapter_resources(struct qlcnic_adapter *adapter) goto err_out; } /* Initialize interrupt coalesce parameters */ - ahw->coal.flag = QLCNIC_INTR_DEFAULT; - ahw->coal.type = QLCNIC_INTR_COAL_TYPE_RX; - ahw->coal.rx_time_us = QLCNIC_DEF_INTR_COALESCE_RX_TIME_US; - ahw->coal.rx_packets = QLCNIC_DEF_INTR_COALESCE_RX_PACKETS; - if (qlcnic_83xx_check(adapter)) { - ahw->coal.tx_time_us = QLCNIC_DEF_INTR_COALESCE_TX_TIME_US; - ahw->coal.tx_packets = QLCNIC_DEF_INTR_COALESCE_TX_PACKETS; - } + adapter->ahw->coal.flag = QLCNIC_INTR_DEFAULT; + adapter->ahw->coal.rx_time_us = QLCNIC_DEFAULT_INTR_COALESCE_RX_TIME_US; + adapter->ahw->coal.rx_packets = QLCNIC_DEFAULT_INTR_COALESCE_RX_PACKETS; /* clear stats */ memset(&adapter->stats, 0, sizeof(adapter->stats)); err_out: @@ -3376,40 +3273,20 @@ qlcnicvf_start_firmware(struct qlcnic_adapter *adapter) return err; } -int qlcnic_validate_max_rss(struct qlcnic_adapter *adapter, - __u32 val) +int qlcnic_validate_max_rss(u8 max_hw, u8 val) { - struct net_device *netdev = adapter->netdev; - u8 max_hw = adapter->ahw->max_rx_ques; u32 max_allowed; - if (val > QLC_MAX_SDS_RINGS) { - netdev_err(netdev, "RSS value should not be higher than %u\n", - QLC_MAX_SDS_RINGS); - return -EINVAL; + if (max_hw > QLC_MAX_SDS_RINGS) { + max_hw = QLC_MAX_SDS_RINGS; + pr_info("max rss reset to %d\n", QLC_MAX_SDS_RINGS); } max_allowed = rounddown_pow_of_two(min_t(int, max_hw, num_online_cpus())); if ((val > max_allowed) || (val < 2) || !is_power_of_2(val)) { - if (!is_power_of_2(val)) - netdev_err(netdev, "RSS value should be a power of 2\n"); - - if (val < 2) - netdev_err(netdev, "RSS value should not be lower than 2\n"); - - if (val > max_hw) - netdev_err(netdev, - "RSS value should not be higher than[%u], the max RSS rings supported by the adapter\n", - max_hw); - - if (val > num_online_cpus()) - netdev_err(netdev, - "RSS value should not be higher than[%u], number of online CPUs in the system\n", - num_online_cpus()); - - netdev_err(netdev, "Unable to configure %u RSS rings\n", val); - + pr_info("rss_ring valid range [2 - %x] in powers of 2\n", + max_allowed); return -EINVAL; } return 0; diff --git a/trunk/include/net/ip_vs.h b/trunk/include/net/ip_vs.h index 4c062ccff9aa..f9f5b057b480 100644 --- a/trunk/include/net/ip_vs.h +++ b/trunk/include/net/ip_vs.h @@ -678,7 +678,7 @@ struct ip_vs_service_user_kern { u16 af; u16 protocol; union nf_inet_addr addr; /* virtual ip address */ - __be16 port; + u16 port; u32 fwmark; /* firwall mark of service */ /* virtual service options */ @@ -686,14 +686,14 @@ struct ip_vs_service_user_kern { char *pe_name; unsigned int flags; /* virtual service flags */ unsigned int timeout; /* persistent timeout in sec */ - __be32 netmask; /* persistent netmask or plen */ + u32 netmask; /* persistent netmask */ }; struct ip_vs_dest_user_kern { /* destination server address */ union nf_inet_addr addr; - __be16 port; + u16 port; /* real server options */ unsigned int conn_flags; /* connection flags */ @@ -721,7 +721,7 @@ struct ip_vs_service { __u32 fwmark; /* firewall mark of the service */ unsigned int flags; /* service status flags */ unsigned int timeout; /* persistent timeout in ticks */ - __be32 netmask; /* grouping granularity, mask/plen */ + __be32 netmask; /* grouping granularity */ struct net *net; struct list_head destinations; /* real server d-linked list */ diff --git a/trunk/include/uapi/linux/ip_vs.h b/trunk/include/uapi/linux/ip_vs.h index a24537725e80..8a2d438dc499 100644 --- a/trunk/include/uapi/linux/ip_vs.h +++ b/trunk/include/uapi/linux/ip_vs.h @@ -280,8 +280,8 @@ struct ip_vs_daemon_user { #define IPVS_GENL_VERSION 0x1 struct ip_vs_flags { - __u32 flags; - __u32 mask; + __be32 flags; + __be32 mask; }; /* Generic Netlink command attributes */ diff --git a/trunk/net/netfilter/ipvs/ip_vs_conn.c b/trunk/net/netfilter/ipvs/ip_vs_conn.c index a083bda322b6..de6475894a39 100644 --- a/trunk/net/netfilter/ipvs/ip_vs_conn.c +++ b/trunk/net/netfilter/ipvs/ip_vs_conn.c @@ -966,6 +966,7 @@ static void *ip_vs_conn_array(struct seq_file *seq, loff_t pos) struct ip_vs_iter_state *iter = seq->private; for (idx = 0; idx < ip_vs_conn_tab_size; idx++) { + rcu_read_lock(); hlist_for_each_entry_rcu(cp, &ip_vs_conn_tab[idx], c_list) { /* __ip_vs_conn_get() is not needed by * ip_vs_conn_seq_show and ip_vs_conn_sync_seq_show @@ -976,19 +977,16 @@ static void *ip_vs_conn_array(struct seq_file *seq, loff_t pos) } } rcu_read_unlock(); - rcu_read_lock(); } return NULL; } static void *ip_vs_conn_seq_start(struct seq_file *seq, loff_t *pos) - __acquires(RCU) { struct ip_vs_iter_state *iter = seq->private; iter->l = NULL; - rcu_read_lock(); return *pos ? ip_vs_conn_array(seq, *pos - 1) :SEQ_START_TOKEN; } @@ -1008,24 +1006,28 @@ static void *ip_vs_conn_seq_next(struct seq_file *seq, void *v, loff_t *pos) e = rcu_dereference(hlist_next_rcu(&cp->c_list)); if (e) return hlist_entry(e, struct ip_vs_conn, c_list); + rcu_read_unlock(); idx = l - ip_vs_conn_tab; while (++idx < ip_vs_conn_tab_size) { + rcu_read_lock(); hlist_for_each_entry_rcu(cp, &ip_vs_conn_tab[idx], c_list) { iter->l = &ip_vs_conn_tab[idx]; return cp; } rcu_read_unlock(); - rcu_read_lock(); } iter->l = NULL; return NULL; } static void ip_vs_conn_seq_stop(struct seq_file *seq, void *v) - __releases(RCU) { - rcu_read_unlock(); + struct ip_vs_iter_state *iter = seq->private; + struct hlist_head *l = iter->l; + + if (l) + rcu_read_unlock(); } static int ip_vs_conn_seq_show(struct seq_file *seq, void *v) diff --git a/trunk/net/netfilter/ipvs/ip_vs_core.c b/trunk/net/netfilter/ipvs/ip_vs_core.c index 085b5880ab0d..f26fe3353a30 100644 --- a/trunk/net/netfilter/ipvs/ip_vs_core.c +++ b/trunk/net/netfilter/ipvs/ip_vs_core.c @@ -235,8 +235,7 @@ ip_vs_sched_persist(struct ip_vs_service *svc, /* Mask saddr with the netmask to adjust template granularity */ #ifdef CONFIG_IP_VS_IPV6 if (svc->af == AF_INET6) - ipv6_addr_prefix(&snet.in6, &iph->saddr.in6, - (__force __u32) svc->netmask); + ipv6_addr_prefix(&snet.in6, &iph->saddr.in6, svc->netmask); else #endif snet.ip = iph->saddr.ip & svc->netmask; @@ -584,9 +583,9 @@ int ip_vs_leave(struct ip_vs_service *svc, struct sk_buff *skb, #ifdef CONFIG_IP_VS_IPV6 if (svc->af == AF_INET6) { if (!skb->dev) { - struct net *net_ = dev_net(skb_dst(skb)->dev); + struct net *net = dev_net(skb_dst(skb)->dev); - skb->dev = net_->loopback_dev; + skb->dev = net->loopback_dev; } icmpv6_send(skb, ICMPV6_DEST_UNREACH, ICMPV6_PORT_UNREACH, 0); } else diff --git a/trunk/net/netfilter/ipvs/ip_vs_ctl.c b/trunk/net/netfilter/ipvs/ip_vs_ctl.c index 5b142fb16480..9e4074c26dc2 100644 --- a/trunk/net/netfilter/ipvs/ip_vs_ctl.c +++ b/trunk/net/netfilter/ipvs/ip_vs_ctl.c @@ -1164,13 +1164,9 @@ ip_vs_add_service(struct net *net, struct ip_vs_service_user_kern *u, } #ifdef CONFIG_IP_VS_IPV6 - if (u->af == AF_INET6) { - __u32 plen = (__force __u32) u->netmask; - - if (plen < 1 || plen > 128) { - ret = -EINVAL; - goto out_err; - } + if (u->af == AF_INET6 && (u->netmask < 1 || u->netmask > 128)) { + ret = -EINVAL; + goto out_err; } #endif @@ -1281,13 +1277,9 @@ ip_vs_edit_service(struct ip_vs_service *svc, struct ip_vs_service_user_kern *u) } #ifdef CONFIG_IP_VS_IPV6 - if (u->af == AF_INET6) { - __u32 plen = (__force __u32) u->netmask; - - if (plen < 1 || plen > 128) { - ret = -EINVAL; - goto out; - } + if (u->af == AF_INET6 && (u->netmask < 1 || u->netmask > 128)) { + ret = -EINVAL; + goto out; } #endif @@ -1468,11 +1460,8 @@ void ip_vs_service_net_cleanup(struct net *net) static inline void ip_vs_forget_dev(struct ip_vs_dest *dest, struct net_device *dev) { - struct ip_vs_dest_dst *dest_dst; - spin_lock_bh(&dest->dst_lock); - dest_dst = rcu_dereference_protected(dest->dest_dst, 1); - if (dest_dst && dest_dst->dst_cache->dev == dev) { + if (dest->dest_dst && dest->dest_dst->dst_cache->dev == dev) { IP_VS_DBG_BUF(3, "Reset dev:%s dest %s:%u ,dest->refcnt=%d\n", dev->name, IP_VS_DBG_ADDR(dest->af, &dest->addr), @@ -1945,8 +1934,8 @@ static struct ip_vs_service *ip_vs_info_array(struct seq_file *seq, loff_t pos) } static void *ip_vs_info_seq_start(struct seq_file *seq, loff_t *pos) - __acquires(RCU) { + rcu_read_lock(); return *pos ? ip_vs_info_array(seq, *pos - 1) : SEQ_START_TOKEN; } @@ -2001,7 +1990,6 @@ static void *ip_vs_info_seq_next(struct seq_file *seq, void *v, loff_t *pos) } static void ip_vs_info_seq_stop(struct seq_file *seq, void *v) - __releases(RCU) { rcu_read_unlock(); } @@ -2146,7 +2134,7 @@ static int ip_vs_stats_percpu_show(struct seq_file *seq, void *v) { struct net *net = seq_file_single_net(seq); struct ip_vs_stats *tot_stats = &net_ipvs(net)->tot_stats; - struct ip_vs_cpu_stats __percpu *cpustats = tot_stats->cpustats; + struct ip_vs_cpu_stats *cpustats = tot_stats->cpustats; struct ip_vs_stats_user rates; int i; @@ -2883,7 +2871,6 @@ static int ip_vs_genl_fill_service(struct sk_buff *skb, struct ip_vs_service *svc) { struct ip_vs_scheduler *sched; - struct ip_vs_pe *pe; struct nlattr *nl_service; struct ip_vs_flags flags = { .flags = svc->flags, .mask = ~0 }; @@ -2900,17 +2887,17 @@ static int ip_vs_genl_fill_service(struct sk_buff *skb, } else { if (nla_put_u16(skb, IPVS_SVC_ATTR_PROTOCOL, svc->protocol) || nla_put(skb, IPVS_SVC_ATTR_ADDR, sizeof(svc->addr), &svc->addr) || - nla_put_be16(skb, IPVS_SVC_ATTR_PORT, svc->port)) + nla_put_u16(skb, IPVS_SVC_ATTR_PORT, svc->port)) goto nla_put_failure; } sched = rcu_dereference_protected(svc->scheduler, 1); - pe = rcu_dereference_protected(svc->pe, 1); if (nla_put_string(skb, IPVS_SVC_ATTR_SCHED_NAME, sched->name) || - (pe && nla_put_string(skb, IPVS_SVC_ATTR_PE_NAME, pe->name)) || + (svc->pe && + nla_put_string(skb, IPVS_SVC_ATTR_PE_NAME, svc->pe->name)) || nla_put(skb, IPVS_SVC_ATTR_FLAGS, sizeof(flags), &flags) || nla_put_u32(skb, IPVS_SVC_ATTR_TIMEOUT, svc->timeout / HZ) || - nla_put_be32(skb, IPVS_SVC_ATTR_NETMASK, svc->netmask)) + nla_put_u32(skb, IPVS_SVC_ATTR_NETMASK, svc->netmask)) goto nla_put_failure; if (ip_vs_genl_fill_stats(skb, IPVS_SVC_ATTR_STATS, &svc->stats)) goto nla_put_failure; @@ -3023,7 +3010,7 @@ static int ip_vs_genl_parse_service(struct net *net, } else { usvc->protocol = nla_get_u16(nla_protocol); nla_memcpy(&usvc->addr, nla_addr, sizeof(usvc->addr)); - usvc->port = nla_get_be16(nla_port); + usvc->port = nla_get_u16(nla_port); usvc->fwmark = 0; } @@ -3063,7 +3050,7 @@ static int ip_vs_genl_parse_service(struct net *net, usvc->sched_name = nla_data(nla_sched); usvc->pe_name = nla_pe ? nla_data(nla_pe) : NULL; usvc->timeout = nla_get_u32(nla_timeout); - usvc->netmask = nla_get_be32(nla_netmask); + usvc->netmask = nla_get_u32(nla_netmask); } return 0; @@ -3089,7 +3076,7 @@ static int ip_vs_genl_fill_dest(struct sk_buff *skb, struct ip_vs_dest *dest) return -EMSGSIZE; if (nla_put(skb, IPVS_DEST_ATTR_ADDR, sizeof(dest->addr), &dest->addr) || - nla_put_be16(skb, IPVS_DEST_ATTR_PORT, dest->port) || + nla_put_u16(skb, IPVS_DEST_ATTR_PORT, dest->port) || nla_put_u32(skb, IPVS_DEST_ATTR_FWD_METHOD, (atomic_read(&dest->conn_flags) & IP_VS_CONN_F_FWD_MASK)) || @@ -3198,7 +3185,7 @@ static int ip_vs_genl_parse_dest(struct ip_vs_dest_user_kern *udest, memset(udest, 0, sizeof(*udest)); nla_memcpy(&udest->addr, nla_addr, sizeof(udest->addr)); - udest->port = nla_get_be16(nla_port); + udest->port = nla_get_u16(nla_port); /* If a full entry was requested, check for the additional fields */ if (full_entry) { @@ -3223,8 +3210,8 @@ static int ip_vs_genl_parse_dest(struct ip_vs_dest_user_kern *udest, return 0; } -static int ip_vs_genl_fill_daemon(struct sk_buff *skb, __u32 state, - const char *mcast_ifn, __u32 syncid) +static int ip_vs_genl_fill_daemon(struct sk_buff *skb, __be32 state, + const char *mcast_ifn, __be32 syncid) { struct nlattr *nl_daemon; @@ -3245,8 +3232,8 @@ static int ip_vs_genl_fill_daemon(struct sk_buff *skb, __u32 state, return -EMSGSIZE; } -static int ip_vs_genl_dump_daemon(struct sk_buff *skb, __u32 state, - const char *mcast_ifn, __u32 syncid, +static int ip_vs_genl_dump_daemon(struct sk_buff *skb, __be32 state, + const char *mcast_ifn, __be32 syncid, struct netlink_callback *cb) { void *hdr; diff --git a/trunk/net/netfilter/ipvs/ip_vs_lblc.c b/trunk/net/netfilter/ipvs/ip_vs_lblc.c index 5ea26bd87743..b2cc2528a4df 100644 --- a/trunk/net/netfilter/ipvs/ip_vs_lblc.c +++ b/trunk/net/netfilter/ipvs/ip_vs_lblc.c @@ -104,7 +104,7 @@ struct ip_vs_lblc_entry { */ struct ip_vs_lblc_table { struct rcu_head rcu_head; - struct hlist_head bucket[IP_VS_LBLC_TAB_SIZE]; /* hash bucket */ + struct hlist_head __rcu bucket[IP_VS_LBLC_TAB_SIZE]; /* hash bucket */ struct timer_list periodic_timer; /* collect stale entries */ atomic_t entries; /* number of entries */ int max_size; /* maximum size of entries */ diff --git a/trunk/net/netfilter/ipvs/ip_vs_lblcr.c b/trunk/net/netfilter/ipvs/ip_vs_lblcr.c index 50123c2ab484..feb9656eac58 100644 --- a/trunk/net/netfilter/ipvs/ip_vs_lblcr.c +++ b/trunk/net/netfilter/ipvs/ip_vs_lblcr.c @@ -284,7 +284,7 @@ struct ip_vs_lblcr_entry { */ struct ip_vs_lblcr_table { struct rcu_head rcu_head; - struct hlist_head bucket[IP_VS_LBLCR_TAB_SIZE]; /* hash bucket */ + struct hlist_head __rcu bucket[IP_VS_LBLCR_TAB_SIZE]; /* hash bucket */ atomic_t entries; /* number of entries */ int max_size; /* maximum size of entries */ struct timer_list periodic_timer; /* collect stale entries */ diff --git a/trunk/net/netfilter/ipvs/ip_vs_pe_sip.c b/trunk/net/netfilter/ipvs/ip_vs_pe_sip.c index 9a8f4213e8a6..00cc0241ed87 100644 --- a/trunk/net/netfilter/ipvs/ip_vs_pe_sip.c +++ b/trunk/net/netfilter/ipvs/ip_vs_pe_sip.c @@ -13,8 +13,7 @@ static const char *ip_vs_dbg_callid(char *buf, size_t buf_len, const char *callid, size_t callid_len, int *idx) { - size_t max_len = 64; - size_t len = min3(max_len, callid_len, buf_len - *idx - 1); + size_t len = min(min(callid_len, (size_t)64), buf_len - *idx - 1); memcpy(buf + *idx, callid, len); buf[*idx+len] = '\0'; *idx += len + 1; diff --git a/trunk/net/netfilter/ipvs/ip_vs_proto_sctp.c b/trunk/net/netfilter/ipvs/ip_vs_proto_sctp.c index 86464881cd20..6e14a7b5602f 100644 --- a/trunk/net/netfilter/ipvs/ip_vs_proto_sctp.c +++ b/trunk/net/netfilter/ipvs/ip_vs_proto_sctp.c @@ -208,7 +208,7 @@ enum ipvs_sctp_event_t { IP_VS_SCTP_EVE_LAST }; -static enum ipvs_sctp_event_t sctp_events[256] = { +static enum ipvs_sctp_event_t sctp_events[255] = { IP_VS_SCTP_EVE_DATA_CLI, IP_VS_SCTP_EVE_INIT_CLI, IP_VS_SCTP_EVE_INIT_ACK_CLI, diff --git a/trunk/net/netfilter/ipvs/ip_vs_sync.c b/trunk/net/netfilter/ipvs/ip_vs_sync.c index f6046d9af8d3..8e57077e5540 100644 --- a/trunk/net/netfilter/ipvs/ip_vs_sync.c +++ b/trunk/net/netfilter/ipvs/ip_vs_sync.c @@ -246,7 +246,7 @@ struct ip_vs_sync_thread_data { struct ip_vs_sync_mesg_v0 { __u8 nr_conns; __u8 syncid; - __be16 size; + __u16 size; /* ip_vs_sync_conn entries start here */ }; @@ -255,7 +255,7 @@ struct ip_vs_sync_mesg_v0 { struct ip_vs_sync_mesg { __u8 reserved; /* must be zero */ __u8 syncid; - __be16 size; + __u16 size; __u8 nr_conns; __s8 version; /* SYNC_PROTO_VER */ __u16 spare; @@ -335,7 +335,7 @@ ip_vs_sync_buff_create(struct netns_ipvs *ipvs) sb->mesg->reserved = 0; /* old nr_conns i.e. must be zero now */ sb->mesg->version = SYNC_PROTO_VER; sb->mesg->syncid = ipvs->master_syncid; - sb->mesg->size = htons(sizeof(struct ip_vs_sync_mesg)); + sb->mesg->size = sizeof(struct ip_vs_sync_mesg); sb->mesg->nr_conns = 0; sb->mesg->spare = 0; sb->head = (unsigned char *)sb->mesg + sizeof(struct ip_vs_sync_mesg); @@ -418,7 +418,7 @@ ip_vs_sync_buff_create_v0(struct netns_ipvs *ipvs) mesg = (struct ip_vs_sync_mesg_v0 *)sb->mesg; mesg->nr_conns = 0; mesg->syncid = ipvs->master_syncid; - mesg->size = htons(sizeof(struct ip_vs_sync_mesg_v0)); + mesg->size = sizeof(struct ip_vs_sync_mesg_v0); sb->head = (unsigned char *)mesg + sizeof(struct ip_vs_sync_mesg_v0); sb->end = (unsigned char *)mesg + ipvs->send_mesg_maxlen; sb->firstuse = jiffies; @@ -582,7 +582,7 @@ static void ip_vs_sync_conn_v0(struct net *net, struct ip_vs_conn *cp, } m->nr_conns++; - m->size = htons(ntohs(m->size) + len); + m->size += len; buff->head += len; /* check if there is a space for next one */ @@ -693,7 +693,7 @@ void ip_vs_sync_conn(struct net *net, struct ip_vs_conn *cp, int pkts) p = buff->head; buff->head += pad + len; - m->size = htons(ntohs(m->size) + pad + len); + m->size += pad + len; /* Add ev. padding from prev. sync_conn */ while (pad--) *(p++) = 0; @@ -1175,8 +1175,10 @@ static void ip_vs_process_message(struct net *net, __u8 *buffer, IP_VS_DBG(2, "BACKUP, message header too short\n"); return; } + /* Convert size back to host byte order */ + m2->size = ntohs(m2->size); - if (buflen != ntohs(m2->size)) { + if (buflen != m2->size) { IP_VS_DBG(2, "BACKUP, bogus message size\n"); return; } @@ -1542,7 +1544,10 @@ ip_vs_send_sync_msg(struct socket *sock, struct ip_vs_sync_mesg *msg) int msize; int ret; - msize = ntohs(msg->size); + msize = msg->size; + + /* Put size in network byte order */ + msg->size = htons(msg->size); ret = ip_vs_send_async(sock, (char *)msg, msize); if (ret >= 0 || ret == -EAGAIN) diff --git a/trunk/net/netfilter/nf_nat_core.c b/trunk/net/netfilter/nf_nat_core.c index 038eee5c8f85..2e469ca2ca55 100644 --- a/trunk/net/netfilter/nf_nat_core.c +++ b/trunk/net/netfilter/nf_nat_core.c @@ -90,7 +90,6 @@ int nf_xfrm_me_harder(struct sk_buff *skb, unsigned int family) int err; err = xfrm_decode_session(skb, &fl, family); - if (err < 0) return err; dst = skb_dst(skb);