Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
authorLinus Torvalds <torvalds@linux-foundation.org>
Sun, 13 Apr 2014 00:31:22 +0000 (17:31 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sun, 13 Apr 2014 00:31:22 +0000 (17:31 -0700)
Pull yet more networking updates from David Miller:

 1) Various fixes to the new Redpine Signals wireless driver, from
    Fariya Fatima.

 2) L2TP PPP connect code takes PMTU from the wrong socket, fix from
    Dmitry Petukhov.

 3) UFO and TSO packets differ in whether they include the protocol
    header in gso_size, account for that in skb_gso_transport_seglen().
   From Florian Westphal.

 4) If VLAN untagging fails, we double free the SKB in the bridging
    output path.  From Toshiaki Makita.

 5) Several call sites of sk->sk_data_ready() were referencing an SKB
    just added to the socket receive queue in order to calculate the
    second argument via skb->len.  This is dangerous because the moment
    the skb is added to the receive queue it can be consumed in another
    context and freed up.

    It turns out also that none of the sk->sk_data_ready()
    implementations even care about this second argument.

    So just kill it off and thus fix all these use-after-free bugs as a
    side effect.

 6) Fix inverted test in tcp_v6_send_response(), from Lorenzo Colitti.

 7) pktgen needs to do locking properly for LLTX devices, from Daniel
    Borkmann.

 8) xen-netfront driver initializes TX array entries in RX loop :-) From
    Vincenzo Maffione.

 9) After refactoring, some tunnel drivers allow a tunnel to be
    configured on top itself.  Fix from Nicolas Dichtel.

* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (46 commits)
  vti: don't allow to add the same tunnel twice
  gre: don't allow to add the same tunnel twice
  drivers: net: xen-netfront: fix array initialization bug
  pktgen: be friendly to LLTX devices
  r8152: check RTL8152_UNPLUG
  net: sun4i-emac: add promiscuous support
  net/apne: replace IS_ERR and PTR_ERR with PTR_ERR_OR_ZERO
  net: ipv6: Fix oif in TCP SYN+ACK route lookup.
  drivers: net: cpsw: enable interrupts after napi enable and clearing previous interrupts
  drivers: net: cpsw: discard all packets received when interface is down
  net: Fix use after free by removing length arg from sk_data_ready callbacks.
  Drivers: net: hyperv: Address UDP checksum issues
  Drivers: net: hyperv: Negotiate suitable ndis version for offload support
  Drivers: net: hyperv: Allocate memory for all possible per-pecket information
  bridge: Fix double free and memory leak around br_allowed_ingress
  bonding: Remove debug_fs files when module init fails
  i40evf: program RSS LUT correctly
  i40evf: remove open-coded skb_cow_head
  ixgb: remove open-coded skb_cow_head
  igbvf: remove open-coded skb_cow_head
  ...

102 files changed:
drivers/net/bonding/bond_main.c
drivers/net/ethernet/8390/apne.c
drivers/net/ethernet/allwinner/sun4i-emac.c
drivers/net/ethernet/intel/e1000/e1000_hw.c
drivers/net/ethernet/intel/e1000/e1000_main.c
drivers/net/ethernet/intel/e1000e/netdev.c
drivers/net/ethernet/intel/i40evf/i40e_txrx.c
drivers/net/ethernet/intel/i40evf/i40evf_main.c
drivers/net/ethernet/intel/igb/igb.h
drivers/net/ethernet/intel/igb/igb_main.c
drivers/net/ethernet/intel/igb/igb_ptp.c
drivers/net/ethernet/intel/igbvf/netdev.c
drivers/net/ethernet/intel/ixgb/ixgb_main.c
drivers/net/ethernet/intel/ixgbe/ixgbe.h
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
drivers/net/ethernet/intel/ixgbevf/ixgbevf.h
drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
drivers/net/ethernet/ti/cpsw.c
drivers/net/hyperv/hyperv_net.h
drivers/net/hyperv/netvsc.c
drivers/net/hyperv/netvsc_drv.c
drivers/net/hyperv/rndis_filter.c
drivers/net/phy/phy.c
drivers/net/usb/r8152.c
drivers/net/wireless/ath/ath9k/ar5008_phy.c
drivers/net/wireless/ath/ath9k/beacon.c
drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
drivers/net/wireless/ath/ath9k/init.c
drivers/net/wireless/b43/phy_n.c
drivers/net/wireless/rsi/rsi_91x_core.c
drivers/net/wireless/rsi/rsi_91x_debugfs.c
drivers/net/wireless/rsi/rsi_91x_mgmt.c
drivers/net/wireless/rsi/rsi_91x_sdio.c
drivers/net/wireless/rsi/rsi_91x_sdio_ops.c
drivers/net/wireless/rsi/rsi_91x_usb.c
drivers/net/wireless/rtlwifi/btcoexist/halbtcoutsrc.c
drivers/net/xen-netfront.c
drivers/scsi/iscsi_tcp.c
drivers/scsi/iscsi_tcp.h
drivers/staging/lustre/lnet/klnds/socklnd/socklnd_lib-linux.c
drivers/target/iscsi/iscsi_target_core.h
drivers/target/iscsi/iscsi_target_nego.c
fs/dlm/lowcomms.c
fs/ncpfs/ncp_fs_sb.h
fs/ncpfs/sock.c
fs/ocfs2/cluster/tcp.c
fs/ocfs2/cluster/tcp_internal.h
include/linux/sunrpc/svcsock.h
include/net/sctp/sctp.h
include/net/sock.h
net/atm/clip.c
net/atm/lec.c
net/atm/mpc.c
net/atm/raw.c
net/atm/signaling.c
net/ax25/ax25_in.c
net/bluetooth/l2cap_sock.c
net/bluetooth/rfcomm/core.c
net/bluetooth/rfcomm/sock.c
net/bluetooth/sco.c
net/bridge/br_input.c
net/bridge/br_vlan.c
net/caif/caif_socket.c
net/ceph/messenger.c
net/core/pktgen.c
net/core/skbuff.c
net/core/sock.c
net/dccp/input.c
net/dccp/minisocks.c
net/decnet/dn_nsp_in.c
net/ipv4/ip_gre.c
net/ipv4/ip_vti.c
net/ipv4/tcp_input.c
net/ipv4/tcp_ipv4.c
net/ipv4/tcp_minisocks.c
net/ipv6/tcp_ipv6.c
net/iucv/af_iucv.c
net/key/af_key.c
net/l2tp/l2tp_ppp.c
net/netlink/af_netlink.c
net/netrom/af_netrom.c
net/nfc/llcp_core.c
net/packet/af_packet.c
net/phonet/pep-gprs.c
net/phonet/pep.c
net/rds/tcp.h
net/rds/tcp_listen.c
net/rds/tcp_recv.c
net/rose/af_rose.c
net/rxrpc/ar-input.c
net/rxrpc/ar-internal.h
net/sctp/socket.c
net/sctp/ulpqueue.c
net/sunrpc/svcsock.c
net/sunrpc/xprtsock.c
net/tipc/server.c
net/tipc/socket.c
net/unix/af_unix.c
net/vmw_vsock/vmci_transport_notify.c
net/vmw_vsock/vmci_transport_notify_qstate.c
net/x25/af_x25.c
net/x25/x25_in.c

index d9f85464b36298646cb1af16a4dd59c3b2cdd886..69aff72c895716fe6c579d2bf7f46c79ddca2a36 100644 (file)
@@ -4492,6 +4492,7 @@ static int __init bonding_init(void)
 out:
        return res;
 err:
+       bond_destroy_debugfs();
        bond_netlink_fini();
 err_link:
        unregister_pernet_subsys(&bond_net_ops);
index 30104b60da85a2df50259d0216991d0004e06069..c56ac9ebc08f91472033b135c48d04351266b6fe 100644 (file)
@@ -560,9 +560,7 @@ static struct net_device *apne_dev;
 static int __init apne_module_init(void)
 {
        apne_dev = apne_probe(-1);
-       if (IS_ERR(apne_dev))
-               return PTR_ERR(apne_dev);
-       return 0;
+       return PTR_ERR_OR_ZERO(apne_dev);
 }
 
 static void __exit apne_module_exit(void)
index fcaeeb8a4929dbe2364752fe71f283dd46640ce3..28460676b8ca49d2389baa7f17f0730a007cd583 100644 (file)
@@ -268,15 +268,6 @@ static unsigned int emac_setup(struct net_device *ndev)
        writel(reg_val | EMAC_TX_MODE_ABORTED_FRAME_EN,
                db->membase + EMAC_TX_MODE_REG);
 
-       /* set up RX */
-       reg_val = readl(db->membase + EMAC_RX_CTL_REG);
-
-       writel(reg_val | EMAC_RX_CTL_PASS_LEN_OOR_EN |
-               EMAC_RX_CTL_ACCEPT_UNICAST_EN | EMAC_RX_CTL_DA_FILTER_EN |
-               EMAC_RX_CTL_ACCEPT_MULTICAST_EN |
-               EMAC_RX_CTL_ACCEPT_BROADCAST_EN,
-               db->membase + EMAC_RX_CTL_REG);
-
        /* set MAC */
        /* set MAC CTL0 */
        reg_val = readl(db->membase + EMAC_MAC_CTL0_REG);
@@ -309,6 +300,26 @@ static unsigned int emac_setup(struct net_device *ndev)
        return 0;
 }
 
+static void emac_set_rx_mode(struct net_device *ndev)
+{
+       struct emac_board_info *db = netdev_priv(ndev);
+       unsigned int reg_val;
+
+       /* set up RX */
+       reg_val = readl(db->membase + EMAC_RX_CTL_REG);
+
+       if (ndev->flags & IFF_PROMISC)
+               reg_val |= EMAC_RX_CTL_PASS_ALL_EN;
+       else
+               reg_val &= ~EMAC_RX_CTL_PASS_ALL_EN;
+
+       writel(reg_val | EMAC_RX_CTL_PASS_LEN_OOR_EN |
+               EMAC_RX_CTL_ACCEPT_UNICAST_EN | EMAC_RX_CTL_DA_FILTER_EN |
+               EMAC_RX_CTL_ACCEPT_MULTICAST_EN |
+               EMAC_RX_CTL_ACCEPT_BROADCAST_EN,
+               db->membase + EMAC_RX_CTL_REG);
+}
+
 static unsigned int emac_powerup(struct net_device *ndev)
 {
        struct emac_board_info *db = netdev_priv(ndev);
@@ -782,6 +793,7 @@ static const struct net_device_ops emac_netdev_ops = {
        .ndo_stop               = emac_stop,
        .ndo_start_xmit         = emac_start_xmit,
        .ndo_tx_timeout         = emac_timeout,
+       .ndo_set_rx_mode        = emac_set_rx_mode,
        .ndo_do_ioctl           = emac_ioctl,
        .ndo_change_mtu         = eth_change_mtu,
        .ndo_validate_addr      = eth_validate_addr,
index 2879b9631e150662e164931e326826f82d9a60c8..c1d3fdb296a05e4f1cd86205bce12669e41ceb6b 100644 (file)
@@ -115,8 +115,6 @@ static DEFINE_SPINLOCK(e1000_phy_lock);
  */
 static s32 e1000_set_phy_type(struct e1000_hw *hw)
 {
-       e_dbg("e1000_set_phy_type");
-
        if (hw->mac_type == e1000_undefined)
                return -E1000_ERR_PHY_TYPE;
 
@@ -159,8 +157,6 @@ static void e1000_phy_init_script(struct e1000_hw *hw)
        u32 ret_val;
        u16 phy_saved_data;
 
-       e_dbg("e1000_phy_init_script");
-
        if (hw->phy_init_script) {
                msleep(20);
 
@@ -253,8 +249,6 @@ static void e1000_phy_init_script(struct e1000_hw *hw)
  */
 s32 e1000_set_mac_type(struct e1000_hw *hw)
 {
-       e_dbg("e1000_set_mac_type");
-
        switch (hw->device_id) {
        case E1000_DEV_ID_82542:
                switch (hw->revision_id) {
@@ -365,8 +359,6 @@ void e1000_set_media_type(struct e1000_hw *hw)
 {
        u32 status;
 
-       e_dbg("e1000_set_media_type");
-
        if (hw->mac_type != e1000_82543) {
                /* tbi_compatibility is only valid on 82543 */
                hw->tbi_compatibility_en = false;
@@ -415,8 +407,6 @@ s32 e1000_reset_hw(struct e1000_hw *hw)
        u32 led_ctrl;
        s32 ret_val;
 
-       e_dbg("e1000_reset_hw");
-
        /* For 82542 (rev 2.0), disable MWI before issuing a device reset */
        if (hw->mac_type == e1000_82542_rev2_0) {
                e_dbg("Disabling MWI on 82542 rev 2.0\n");
@@ -566,8 +556,6 @@ s32 e1000_init_hw(struct e1000_hw *hw)
        u32 mta_size;
        u32 ctrl_ext;
 
-       e_dbg("e1000_init_hw");
-
        /* Initialize Identification LED */
        ret_val = e1000_id_led_init(hw);
        if (ret_val) {
@@ -683,8 +671,6 @@ static s32 e1000_adjust_serdes_amplitude(struct e1000_hw *hw)
        u16 eeprom_data;
        s32 ret_val;
 
-       e_dbg("e1000_adjust_serdes_amplitude");
-
        if (hw->media_type != e1000_media_type_internal_serdes)
                return E1000_SUCCESS;
 
@@ -730,8 +716,6 @@ s32 e1000_setup_link(struct e1000_hw *hw)
        s32 ret_val;
        u16 eeprom_data;
 
-       e_dbg("e1000_setup_link");
-
        /* Read and store word 0x0F of the EEPROM. This word contains bits
         * that determine the hardware's default PAUSE (flow control) mode,
         * a bit that determines whether the HW defaults to enabling or
@@ -848,8 +832,6 @@ static s32 e1000_setup_fiber_serdes_link(struct e1000_hw *hw)
        u32 signal = 0;
        s32 ret_val;
 
-       e_dbg("e1000_setup_fiber_serdes_link");
-
        /* On adapters with a MAC newer than 82544, SWDP 1 will be
         * set when the optics detect a signal. On older adapters, it will be
         * cleared when there is a signal.  This applies to fiber media only.
@@ -1051,8 +1033,6 @@ static s32 e1000_copper_link_preconfig(struct e1000_hw *hw)
        s32 ret_val;
        u16 phy_data;
 
-       e_dbg("e1000_copper_link_preconfig");
-
        ctrl = er32(CTRL);
        /* With 82543, we need to force speed and duplex on the MAC equal to
         * what the PHY speed and duplex configuration is. In addition, we need
@@ -1112,8 +1092,6 @@ static s32 e1000_copper_link_igp_setup(struct e1000_hw *hw)
        s32 ret_val;
        u16 phy_data;
 
-       e_dbg("e1000_copper_link_igp_setup");
-
        if (hw->phy_reset_disable)
                return E1000_SUCCESS;
 
@@ -1254,8 +1232,6 @@ static s32 e1000_copper_link_mgp_setup(struct e1000_hw *hw)
        s32 ret_val;
        u16 phy_data;
 
-       e_dbg("e1000_copper_link_mgp_setup");
-
        if (hw->phy_reset_disable)
                return E1000_SUCCESS;
 
@@ -1362,8 +1338,6 @@ static s32 e1000_copper_link_autoneg(struct e1000_hw *hw)
        s32 ret_val;
        u16 phy_data;
 
-       e_dbg("e1000_copper_link_autoneg");
-
        /* Perform some bounds checking on the hw->autoneg_advertised
         * parameter.  If this variable is zero, then set it to the default.
         */
@@ -1432,7 +1406,6 @@ static s32 e1000_copper_link_autoneg(struct e1000_hw *hw)
 static s32 e1000_copper_link_postconfig(struct e1000_hw *hw)
 {
        s32 ret_val;
-       e_dbg("e1000_copper_link_postconfig");
 
        if ((hw->mac_type >= e1000_82544) && (hw->mac_type != e1000_ce4100)) {
                e1000_config_collision_dist(hw);
@@ -1473,8 +1446,6 @@ static s32 e1000_setup_copper_link(struct e1000_hw *hw)
        u16 i;
        u16 phy_data;
 
-       e_dbg("e1000_setup_copper_link");
-
        /* Check if it is a valid PHY and set PHY mode if necessary. */
        ret_val = e1000_copper_link_preconfig(hw);
        if (ret_val)
@@ -1554,8 +1525,6 @@ s32 e1000_phy_setup_autoneg(struct e1000_hw *hw)
        u16 mii_autoneg_adv_reg;
        u16 mii_1000t_ctrl_reg;
 
-       e_dbg("e1000_phy_setup_autoneg");
-
        /* Read the MII Auto-Neg Advertisement Register (Address 4). */
        ret_val = e1000_read_phy_reg(hw, PHY_AUTONEG_ADV, &mii_autoneg_adv_reg);
        if (ret_val)
@@ -1707,8 +1676,6 @@ static s32 e1000_phy_force_speed_duplex(struct e1000_hw *hw)
        u16 phy_data;
        u16 i;
 
-       e_dbg("e1000_phy_force_speed_duplex");
-
        /* Turn off Flow control if we are forcing speed and duplex. */
        hw->fc = E1000_FC_NONE;
 
@@ -1939,8 +1906,6 @@ void e1000_config_collision_dist(struct e1000_hw *hw)
 {
        u32 tctl, coll_dist;
 
-       e_dbg("e1000_config_collision_dist");
-
        if (hw->mac_type < e1000_82543)
                coll_dist = E1000_COLLISION_DISTANCE_82542;
        else
@@ -1970,8 +1935,6 @@ static s32 e1000_config_mac_to_phy(struct e1000_hw *hw)
        s32 ret_val;
        u16 phy_data;
 
-       e_dbg("e1000_config_mac_to_phy");
-
        /* 82544 or newer MAC, Auto Speed Detection takes care of
         * MAC speed/duplex configuration.
         */
@@ -2049,8 +2012,6 @@ s32 e1000_force_mac_fc(struct e1000_hw *hw)
 {
        u32 ctrl;
 
-       e_dbg("e1000_force_mac_fc");
-
        /* Get the current configuration of the Device Control Register */
        ctrl = er32(CTRL);
 
@@ -2120,8 +2081,6 @@ static s32 e1000_config_fc_after_link_up(struct e1000_hw *hw)
        u16 speed;
        u16 duplex;
 
-       e_dbg("e1000_config_fc_after_link_up");
-
        /* Check for the case where we have fiber media and auto-neg failed
         * so we had to force link.  In this case, we need to force the
         * configuration of the MAC to match the "fc" parameter.
@@ -2337,8 +2296,6 @@ static s32 e1000_check_for_serdes_link_generic(struct e1000_hw *hw)
        u32 status;
        s32 ret_val = E1000_SUCCESS;
 
-       e_dbg("e1000_check_for_serdes_link_generic");
-
        ctrl = er32(CTRL);
        status = er32(STATUS);
        rxcw = er32(RXCW);
@@ -2449,8 +2406,6 @@ s32 e1000_check_for_link(struct e1000_hw *hw)
        s32 ret_val;
        u16 phy_data;
 
-       e_dbg("e1000_check_for_link");
-
        ctrl = er32(CTRL);
        status = er32(STATUS);
 
@@ -2632,8 +2587,6 @@ s32 e1000_get_speed_and_duplex(struct e1000_hw *hw, u16 *speed, u16 *duplex)
        s32 ret_val;
        u16 phy_data;
 
-       e_dbg("e1000_get_speed_and_duplex");
-
        if (hw->mac_type >= e1000_82543) {
                status = er32(STATUS);
                if (status & E1000_STATUS_SPEED_1000) {
@@ -2699,7 +2652,6 @@ static s32 e1000_wait_autoneg(struct e1000_hw *hw)
        u16 i;
        u16 phy_data;
 
-       e_dbg("e1000_wait_autoneg");
        e_dbg("Waiting for Auto-Neg to complete.\n");
 
        /* We will wait for autoneg to complete or 4.5 seconds to expire. */
@@ -2866,8 +2818,6 @@ s32 e1000_read_phy_reg(struct e1000_hw *hw, u32 reg_addr, u16 *phy_data)
        u32 ret_val;
        unsigned long flags;
 
-       e_dbg("e1000_read_phy_reg");
-
        spin_lock_irqsave(&e1000_phy_lock, flags);
 
        if ((hw->phy_type == e1000_phy_igp) &&
@@ -2894,8 +2844,6 @@ static s32 e1000_read_phy_reg_ex(struct e1000_hw *hw, u32 reg_addr,
        u32 mdic = 0;
        const u32 phy_addr = (hw->mac_type == e1000_ce4100) ? hw->phy_addr : 1;
 
-       e_dbg("e1000_read_phy_reg_ex");
-
        if (reg_addr > MAX_PHY_REG_ADDRESS) {
                e_dbg("PHY Address %d is out of range\n", reg_addr);
                return -E1000_ERR_PARAM;
@@ -3008,8 +2956,6 @@ s32 e1000_write_phy_reg(struct e1000_hw *hw, u32 reg_addr, u16 phy_data)
        u32 ret_val;
        unsigned long flags;
 
-       e_dbg("e1000_write_phy_reg");
-
        spin_lock_irqsave(&e1000_phy_lock, flags);
 
        if ((hw->phy_type == e1000_phy_igp) &&
@@ -3036,8 +2982,6 @@ static s32 e1000_write_phy_reg_ex(struct e1000_hw *hw, u32 reg_addr,
        u32 mdic = 0;
        const u32 phy_addr = (hw->mac_type == e1000_ce4100) ? hw->phy_addr : 1;
 
-       e_dbg("e1000_write_phy_reg_ex");
-
        if (reg_addr > MAX_PHY_REG_ADDRESS) {
                e_dbg("PHY Address %d is out of range\n", reg_addr);
                return -E1000_ERR_PARAM;
@@ -3129,8 +3073,6 @@ s32 e1000_phy_hw_reset(struct e1000_hw *hw)
        u32 ctrl, ctrl_ext;
        u32 led_ctrl;
 
-       e_dbg("e1000_phy_hw_reset");
-
        e_dbg("Resetting Phy...\n");
 
        if (hw->mac_type > e1000_82543) {
@@ -3189,8 +3131,6 @@ s32 e1000_phy_reset(struct e1000_hw *hw)
        s32 ret_val;
        u16 phy_data;
 
-       e_dbg("e1000_phy_reset");
-
        switch (hw->phy_type) {
        case e1000_phy_igp:
                ret_val = e1000_phy_hw_reset(hw);
@@ -3229,8 +3169,6 @@ static s32 e1000_detect_gig_phy(struct e1000_hw *hw)
        u16 phy_id_high, phy_id_low;
        bool match = false;
 
-       e_dbg("e1000_detect_gig_phy");
-
        if (hw->phy_id != 0)
                return E1000_SUCCESS;
 
@@ -3301,7 +3239,6 @@ static s32 e1000_detect_gig_phy(struct e1000_hw *hw)
 static s32 e1000_phy_reset_dsp(struct e1000_hw *hw)
 {
        s32 ret_val;
-       e_dbg("e1000_phy_reset_dsp");
 
        do {
                ret_val = e1000_write_phy_reg(hw, 29, 0x001d);
@@ -3333,8 +3270,6 @@ static s32 e1000_phy_igp_get_info(struct e1000_hw *hw,
        u16 phy_data, min_length, max_length, average;
        e1000_rev_polarity polarity;
 
-       e_dbg("e1000_phy_igp_get_info");
-
        /* The downshift status is checked only once, after link is established,
         * and it stored in the hw->speed_downgraded parameter.
         */
@@ -3414,8 +3349,6 @@ static s32 e1000_phy_m88_get_info(struct e1000_hw *hw,
        u16 phy_data;
        e1000_rev_polarity polarity;
 
-       e_dbg("e1000_phy_m88_get_info");
-
        /* The downshift status is checked only once, after link is established,
         * and it stored in the hw->speed_downgraded parameter.
         */
@@ -3487,8 +3420,6 @@ s32 e1000_phy_get_info(struct e1000_hw *hw, struct e1000_phy_info *phy_info)
        s32 ret_val;
        u16 phy_data;
 
-       e_dbg("e1000_phy_get_info");
-
        phy_info->cable_length = e1000_cable_length_undefined;
        phy_info->extended_10bt_distance = e1000_10bt_ext_dist_enable_undefined;
        phy_info->cable_polarity = e1000_rev_polarity_undefined;
@@ -3527,8 +3458,6 @@ s32 e1000_phy_get_info(struct e1000_hw *hw, struct e1000_phy_info *phy_info)
 
 s32 e1000_validate_mdi_setting(struct e1000_hw *hw)
 {
-       e_dbg("e1000_validate_mdi_settings");
-
        if (!hw->autoneg && (hw->mdix == 0 || hw->mdix == 3)) {
                e_dbg("Invalid MDI setting detected\n");
                hw->mdix = 1;
@@ -3551,8 +3480,6 @@ s32 e1000_init_eeprom_params(struct e1000_hw *hw)
        s32 ret_val = E1000_SUCCESS;
        u16 eeprom_size;
 
-       e_dbg("e1000_init_eeprom_params");
-
        switch (hw->mac_type) {
        case e1000_82542_rev2_0:
        case e1000_82542_rev2_1:
@@ -3770,8 +3697,6 @@ static s32 e1000_acquire_eeprom(struct e1000_hw *hw)
        struct e1000_eeprom_info *eeprom = &hw->eeprom;
        u32 eecd, i = 0;
 
-       e_dbg("e1000_acquire_eeprom");
-
        eecd = er32(EECD);
 
        /* Request EEPROM Access */
@@ -3871,8 +3796,6 @@ static void e1000_release_eeprom(struct e1000_hw *hw)
 {
        u32 eecd;
 
-       e_dbg("e1000_release_eeprom");
-
        eecd = er32(EECD);
 
        if (hw->eeprom.type == e1000_eeprom_spi) {
@@ -3920,8 +3843,6 @@ static s32 e1000_spi_eeprom_ready(struct e1000_hw *hw)
        u16 retry_count = 0;
        u8 spi_stat_reg;
 
-       e_dbg("e1000_spi_eeprom_ready");
-
        /* Read "Status Register" repeatedly until the LSB is cleared.  The
         * EEPROM will signal that the command has been completed by clearing
         * bit 0 of the internal status register.  If it's not cleared within
@@ -3974,8 +3895,6 @@ static s32 e1000_do_read_eeprom(struct e1000_hw *hw, u16 offset, u16 words,
        struct e1000_eeprom_info *eeprom = &hw->eeprom;
        u32 i = 0;
 
-       e_dbg("e1000_read_eeprom");
-
        if (hw->mac_type == e1000_ce4100) {
                GBE_CONFIG_FLASH_READ(GBE_CONFIG_BASE_VIRT, offset, words,
                                      data);
@@ -4076,8 +3995,6 @@ s32 e1000_validate_eeprom_checksum(struct e1000_hw *hw)
        u16 checksum = 0;
        u16 i, eeprom_data;
 
-       e_dbg("e1000_validate_eeprom_checksum");
-
        for (i = 0; i < (EEPROM_CHECKSUM_REG + 1); i++) {
                if (e1000_read_eeprom(hw, i, 1, &eeprom_data) < 0) {
                        e_dbg("EEPROM Read Error\n");
@@ -4112,8 +4029,6 @@ s32 e1000_update_eeprom_checksum(struct e1000_hw *hw)
        u16 checksum = 0;
        u16 i, eeprom_data;
 
-       e_dbg("e1000_update_eeprom_checksum");
-
        for (i = 0; i < EEPROM_CHECKSUM_REG; i++) {
                if (e1000_read_eeprom(hw, i, 1, &eeprom_data) < 0) {
                        e_dbg("EEPROM Read Error\n");
@@ -4154,8 +4069,6 @@ static s32 e1000_do_write_eeprom(struct e1000_hw *hw, u16 offset, u16 words,
        struct e1000_eeprom_info *eeprom = &hw->eeprom;
        s32 status = 0;
 
-       e_dbg("e1000_write_eeprom");
-
        if (hw->mac_type == e1000_ce4100) {
                GBE_CONFIG_FLASH_WRITE(GBE_CONFIG_BASE_VIRT, offset, words,
                                       data);
@@ -4205,8 +4118,6 @@ static s32 e1000_write_eeprom_spi(struct e1000_hw *hw, u16 offset, u16 words,
        struct e1000_eeprom_info *eeprom = &hw->eeprom;
        u16 widx = 0;
 
-       e_dbg("e1000_write_eeprom_spi");
-
        while (widx < words) {
                u8 write_opcode = EEPROM_WRITE_OPCODE_SPI;
 
@@ -4274,8 +4185,6 @@ static s32 e1000_write_eeprom_microwire(struct e1000_hw *hw, u16 offset,
        u16 words_written = 0;
        u16 i = 0;
 
-       e_dbg("e1000_write_eeprom_microwire");
-
        /* Send the write enable command to the EEPROM (3-bit opcode plus
         * 6/8-bit dummy address beginning with 11).  It's less work to include
         * the 11 of the dummy address as part of the opcode than it is to shift
@@ -4354,8 +4263,6 @@ s32 e1000_read_mac_addr(struct e1000_hw *hw)
        u16 offset;
        u16 eeprom_data, i;
 
-       e_dbg("e1000_read_mac_addr");
-
        for (i = 0; i < NODE_ADDRESS_SIZE; i += 2) {
                offset = i >> 1;
                if (e1000_read_eeprom(hw, offset, 1, &eeprom_data) < 0) {
@@ -4394,8 +4301,6 @@ static void e1000_init_rx_addrs(struct e1000_hw *hw)
        u32 i;
        u32 rar_num;
 
-       e_dbg("e1000_init_rx_addrs");
-
        /* Setup the receive address. */
        e_dbg("Programming MAC Address into RAR[0]\n");
 
@@ -4553,8 +4458,6 @@ static s32 e1000_id_led_init(struct e1000_hw *hw)
        u16 eeprom_data, i, temp;
        const u16 led_mask = 0x0F;
 
-       e_dbg("e1000_id_led_init");
-
        if (hw->mac_type < e1000_82540) {
                /* Nothing to do */
                return E1000_SUCCESS;
@@ -4626,8 +4529,6 @@ s32 e1000_setup_led(struct e1000_hw *hw)
        u32 ledctl;
        s32 ret_val = E1000_SUCCESS;
 
-       e_dbg("e1000_setup_led");
-
        switch (hw->mac_type) {
        case e1000_82542_rev2_0:
        case e1000_82542_rev2_1:
@@ -4678,8 +4579,6 @@ s32 e1000_cleanup_led(struct e1000_hw *hw)
 {
        s32 ret_val = E1000_SUCCESS;
 
-       e_dbg("e1000_cleanup_led");
-
        switch (hw->mac_type) {
        case e1000_82542_rev2_0:
        case e1000_82542_rev2_1:
@@ -4714,8 +4613,6 @@ s32 e1000_led_on(struct e1000_hw *hw)
 {
        u32 ctrl = er32(CTRL);
 
-       e_dbg("e1000_led_on");
-
        switch (hw->mac_type) {
        case e1000_82542_rev2_0:
        case e1000_82542_rev2_1:
@@ -4760,8 +4657,6 @@ s32 e1000_led_off(struct e1000_hw *hw)
 {
        u32 ctrl = er32(CTRL);
 
-       e_dbg("e1000_led_off");
-
        switch (hw->mac_type) {
        case e1000_82542_rev2_0:
        case e1000_82542_rev2_1:
@@ -4889,8 +4784,6 @@ static void e1000_clear_hw_cntrs(struct e1000_hw *hw)
  */
 void e1000_reset_adaptive(struct e1000_hw *hw)
 {
-       e_dbg("e1000_reset_adaptive");
-
        if (hw->adaptive_ifs) {
                if (!hw->ifs_params_forced) {
                        hw->current_ifs_val = 0;
@@ -4917,8 +4810,6 @@ void e1000_reset_adaptive(struct e1000_hw *hw)
  */
 void e1000_update_adaptive(struct e1000_hw *hw)
 {
-       e_dbg("e1000_update_adaptive");
-
        if (hw->adaptive_ifs) {
                if ((hw->collision_delta *hw->ifs_ratio) > hw->tx_packet_delta) {
                        if (hw->tx_packet_delta > MIN_NUM_XMITS) {
@@ -5114,8 +5005,6 @@ static s32 e1000_get_cable_length(struct e1000_hw *hw, u16 *min_length,
        u16 i, phy_data;
        u16 cable_length;
 
-       e_dbg("e1000_get_cable_length");
-
        *min_length = *max_length = 0;
 
        /* Use old method for Phy older than IGP */
@@ -5231,8 +5120,6 @@ static s32 e1000_check_polarity(struct e1000_hw *hw,
        s32 ret_val;
        u16 phy_data;
 
-       e_dbg("e1000_check_polarity");
-
        if (hw->phy_type == e1000_phy_m88) {
                /* return the Polarity bit in the Status register. */
                ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_STATUS,
@@ -5299,8 +5186,6 @@ static s32 e1000_check_downshift(struct e1000_hw *hw)
        s32 ret_val;
        u16 phy_data;
 
-       e_dbg("e1000_check_downshift");
-
        if (hw->phy_type == e1000_phy_igp) {
                ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_LINK_HEALTH,
                                             &phy_data);
@@ -5411,8 +5296,6 @@ static s32 e1000_config_dsp_after_link_change(struct e1000_hw *hw, bool link_up)
        s32 ret_val;
        u16 phy_data, phy_saved_data, speed, duplex, i;
 
-       e_dbg("e1000_config_dsp_after_link_change");
-
        if (hw->phy_type != e1000_phy_igp)
                return E1000_SUCCESS;
 
@@ -5546,8 +5429,6 @@ static s32 e1000_set_phy_mode(struct e1000_hw *hw)
        s32 ret_val;
        u16 eeprom_data;
 
-       e_dbg("e1000_set_phy_mode");
-
        if ((hw->mac_type == e1000_82545_rev_3) &&
            (hw->media_type == e1000_media_type_copper)) {
                ret_val =
@@ -5594,7 +5475,6 @@ static s32 e1000_set_d3_lplu_state(struct e1000_hw *hw, bool active)
 {
        s32 ret_val;
        u16 phy_data;
-       e_dbg("e1000_set_d3_lplu_state");
 
        if (hw->phy_type != e1000_phy_igp)
                return E1000_SUCCESS;
@@ -5699,8 +5579,6 @@ static s32 e1000_set_vco_speed(struct e1000_hw *hw)
        u16 default_page = 0;
        u16 phy_data;
 
-       e_dbg("e1000_set_vco_speed");
-
        switch (hw->mac_type) {
        case e1000_82545_rev_3:
        case e1000_82546_rev_3:
@@ -5872,7 +5750,6 @@ static s32 e1000_polarity_reversal_workaround(struct e1000_hw *hw)
  */
 static s32 e1000_get_auto_rd_done(struct e1000_hw *hw)
 {
-       e_dbg("e1000_get_auto_rd_done");
        msleep(5);
        return E1000_SUCCESS;
 }
@@ -5887,7 +5764,6 @@ static s32 e1000_get_auto_rd_done(struct e1000_hw *hw)
  */
 static s32 e1000_get_phy_cfg_done(struct e1000_hw *hw)
 {
-       e_dbg("e1000_get_phy_cfg_done");
        msleep(10);
        return E1000_SUCCESS;
 }
index 46e6544ed1b7f5c1ba9367dd1dfe444d725cd0e3..27058dfe418bee10f0c85ecf971fc419c346582f 100644 (file)
@@ -2682,14 +2682,13 @@ static int e1000_tso(struct e1000_adapter *adapter,
        u32 cmd_length = 0;
        u16 ipcse = 0, tucse, mss;
        u8 ipcss, ipcso, tucss, tucso, hdr_len;
-       int err;
 
        if (skb_is_gso(skb)) {
-               if (skb_header_cloned(skb)) {
-                       err = pskb_expand_head(skb, 0, 0, GFP_ATOMIC);
-                       if (err)
-                               return err;
-               }
+               int err;
+
+               err = skb_cow_head(skb, 0);
+               if (err < 0)
+                       return err;
 
                hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb);
                mss = skb_shinfo(skb)->gso_size;
index dce377b59b2c009f9d1daec5823cb857ed350f4c..d50c91e5052808b9485a44538e4b0821b9b30e88 100644 (file)
@@ -5100,16 +5100,14 @@ static int e1000_tso(struct e1000_ring *tx_ring, struct sk_buff *skb)
        u32 cmd_length = 0;
        u16 ipcse = 0, mss;
        u8 ipcss, ipcso, tucss, tucso, hdr_len;
+       int err;
 
        if (!skb_is_gso(skb))
                return 0;
 
-       if (skb_header_cloned(skb)) {
-               int err = pskb_expand_head(skb, 0, 0, GFP_ATOMIC);
-
-               if (err)
-                       return err;
-       }
+       err = skb_cow_head(skb, 0);
+       if (err < 0)
+               return err;
 
        hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb);
        mss = skb_shinfo(skb)->gso_size;
index 53be5f44d0158eca869fe0a9a818d3fa597bcd53..b9f50f40abe18b78cf0c3ff580ded29666491d92 100644 (file)
@@ -1114,20 +1114,18 @@ static int i40e_tso(struct i40e_ring *tx_ring, struct sk_buff *skb,
                    u64 *cd_type_cmd_tso_mss, u32 *cd_tunneling)
 {
        u32 cd_cmd, cd_tso_len, cd_mss;
+       struct ipv6hdr *ipv6h;
        struct tcphdr *tcph;
        struct iphdr *iph;
        u32 l4len;
        int err;
-       struct ipv6hdr *ipv6h;
 
        if (!skb_is_gso(skb))
                return 0;
 
-       if (skb_header_cloned(skb)) {
-               err = pskb_expand_head(skb, 0, 0, GFP_ATOMIC);
-               if (err)
-                       return err;
-       }
+       err = skb_cow_head(skb, 0);
+       if (err < 0)
+               return err;
 
        if (protocol == htons(ETH_P_IP)) {
                iph = skb->encapsulation ? inner_ip_hdr(skb) : ip_hdr(skb);
index e35e66ffa78245fd19f66f573686f33b38fc08b6..2797548fde0dd918051a8f033472749e86d124c9 100644 (file)
@@ -1412,6 +1412,14 @@ restart_watchdog:
        schedule_work(&adapter->adminq_task);
 }
 
+/**
+ * i40evf_configure_rss - increment to next available tx queue
+ * @adapter: board private structure
+ * @j: queue counter
+ *
+ * Helper function for RSS programming to increment through available
+ * queus. Returns the next queue value.
+ **/
 static int next_queue(struct i40evf_adapter *adapter, int j)
 {
        j += 1;
@@ -1451,10 +1459,14 @@ static void i40evf_configure_rss(struct i40evf_adapter *adapter)
        /* Populate the LUT with max no. of queues in round robin fashion */
        j = adapter->vsi_res->num_queue_pairs;
        for (i = 0; i <= I40E_VFQF_HLUT_MAX_INDEX; i++) {
-               lut = next_queue(adapter, j);
-               lut |= next_queue(adapter, j) << 8;
-               lut |= next_queue(adapter, j) << 16;
-               lut |= next_queue(adapter, j) << 24;
+               j = next_queue(adapter, j);
+               lut = j;
+               j = next_queue(adapter, j);
+               lut |= j << 8;
+               j = next_queue(adapter, j);
+               lut |= j << 16;
+               j = next_queue(adapter, j);
+               lut |= j << 24;
                wr32(hw, I40E_VFQF_HLUT(i), lut);
        }
        i40e_flush(hw);
index 7fbe1e925143efb7b4af4b9f06c29fa3027d2e7e..27130065d92a70679292ef316aaadf848772944c 100644 (file)
@@ -241,7 +241,6 @@ struct igb_ring {
                struct igb_tx_buffer *tx_buffer_info;
                struct igb_rx_buffer *rx_buffer_info;
        };
-       unsigned long last_rx_timestamp;
        void *desc;                     /* descriptor ring memory */
        unsigned long flags;            /* ring specific flags */
        void __iomem *tail;             /* pointer to ring tail register */
@@ -437,6 +436,7 @@ struct igb_adapter {
        struct hwtstamp_config tstamp_config;
        unsigned long ptp_tx_start;
        unsigned long last_rx_ptp_check;
+       unsigned long last_rx_timestamp;
        spinlock_t tmreg_lock;
        struct cyclecounter cc;
        struct timecounter tc;
@@ -533,20 +533,6 @@ void igb_ptp_rx_hang(struct igb_adapter *adapter);
 void igb_ptp_rx_rgtstamp(struct igb_q_vector *q_vector, struct sk_buff *skb);
 void igb_ptp_rx_pktstamp(struct igb_q_vector *q_vector, unsigned char *va,
                         struct sk_buff *skb);
-static inline void igb_ptp_rx_hwtstamp(struct igb_ring *rx_ring,
-                                      union e1000_adv_rx_desc *rx_desc,
-                                      struct sk_buff *skb)
-{
-       if (igb_test_staterr(rx_desc, E1000_RXDADV_STAT_TS) &&
-           !igb_test_staterr(rx_desc, E1000_RXDADV_STAT_TSIP))
-               igb_ptp_rx_rgtstamp(rx_ring->q_vector, skb);
-
-       /* Update the last_rx_timestamp timer in order to enable watchdog check
-        * for error case of latched timestamp on a dropped packet.
-        */
-       rx_ring->last_rx_timestamp = jiffies;
-}
-
 int igb_ptp_set_ts_config(struct net_device *netdev, struct ifreq *ifr);
 int igb_ptp_get_ts_config(struct net_device *netdev, struct ifreq *ifr);
 #ifdef CONFIG_IGB_HWMON
index 30198185d19ae413850b0f4e11c4a4ddb8d75406..fb98d4602f9d4fd130b660de0265bee786fec7a6 100644 (file)
@@ -4605,6 +4605,7 @@ static int igb_tso(struct igb_ring *tx_ring,
        struct sk_buff *skb = first->skb;
        u32 vlan_macip_lens, type_tucmd;
        u32 mss_l4len_idx, l4len;
+       int err;
 
        if (skb->ip_summed != CHECKSUM_PARTIAL)
                return 0;
@@ -4612,11 +4613,9 @@ static int igb_tso(struct igb_ring *tx_ring,
        if (!skb_is_gso(skb))
                return 0;
 
-       if (skb_header_cloned(skb)) {
-               int err = pskb_expand_head(skb, 0, 0, GFP_ATOMIC);
-               if (err)
-                       return err;
-       }
+       err = skb_cow_head(skb, 0);
+       if (err < 0)
+               return err;
 
        /* ADV DTYP TUCMD MKRLOC/ISCSIHEDLEN */
        type_tucmd = E1000_ADVTXD_TUCMD_L4T_TCP;
@@ -6955,7 +6954,9 @@ static void igb_process_skb_fields(struct igb_ring *rx_ring,
 
        igb_rx_checksum(rx_ring, rx_desc, skb);
 
-       igb_ptp_rx_hwtstamp(rx_ring, rx_desc, skb);
+       if (igb_test_staterr(rx_desc, E1000_RXDADV_STAT_TS) &&
+           !igb_test_staterr(rx_desc, E1000_RXDADV_STAT_TSIP))
+               igb_ptp_rx_rgtstamp(rx_ring->q_vector, skb);
 
        if ((dev->features & NETIF_F_HW_VLAN_CTAG_RX) &&
            igb_test_staterr(rx_desc, E1000_RXD_STAT_VP)) {
index 2cca8fd5e574feb779be5cbc05f0e176574267da..9209d652e1c96090c712d78ce925612871ebad64 100644 (file)
@@ -427,10 +427,8 @@ static void igb_ptp_overflow_check(struct work_struct *work)
 void igb_ptp_rx_hang(struct igb_adapter *adapter)
 {
        struct e1000_hw *hw = &adapter->hw;
-       struct igb_ring *rx_ring;
        u32 tsyncrxctl = rd32(E1000_TSYNCRXCTL);
        unsigned long rx_event;
-       int n;
 
        if (hw->mac.type != e1000_82576)
                return;
@@ -445,11 +443,8 @@ void igb_ptp_rx_hang(struct igb_adapter *adapter)
 
        /* Determine the most recent watchdog or rx_timestamp event */
        rx_event = adapter->last_rx_ptp_check;
-       for (n = 0; n < adapter->num_rx_queues; n++) {
-               rx_ring = adapter->rx_ring[n];
-               if (time_after(rx_ring->last_rx_timestamp, rx_event))
-                       rx_event = rx_ring->last_rx_timestamp;
-       }
+       if (time_after(adapter->last_rx_timestamp, rx_event))
+               rx_event = adapter->last_rx_timestamp;
 
        /* Only need to read the high RXSTMP register to clear the lock */
        if (time_is_before_jiffies(rx_event + 5 * HZ)) {
@@ -540,6 +535,11 @@ void igb_ptp_rx_rgtstamp(struct igb_q_vector *q_vector,
        regval |= (u64)rd32(E1000_RXSTMPH) << 32;
 
        igb_ptp_systim_to_hwtstamp(adapter, skb_hwtstamps(skb), regval);
+
+       /* Update the last_rx_timestamp timer in order to enable watchdog check
+        * for error case of latched timestamp on a dropped packet.
+        */
+       adapter->last_rx_timestamp = jiffies;
 }
 
 /**
index b7ab03a2f28f702f604e9f5accd9fb4529b85e70..d608599e123a9d8634905c607faac60da85618f6 100644 (file)
@@ -1910,20 +1910,18 @@ static int igbvf_tso(struct igbvf_adapter *adapter,
                      struct sk_buff *skb, u32 tx_flags, u8 *hdr_len)
 {
        struct e1000_adv_tx_context_desc *context_desc;
-       unsigned int i;
-       int err;
        struct igbvf_buffer *buffer_info;
        u32 info = 0, tu_cmd = 0;
        u32 mss_l4len_idx, l4len;
+       unsigned int i;
+       int err;
+
        *hdr_len = 0;
 
-       if (skb_header_cloned(skb)) {
-               err = pskb_expand_head(skb, 0, 0, GFP_ATOMIC);
-               if (err) {
-                       dev_err(&adapter->pdev->dev,
-                               "igbvf_tso returning an error\n");
-                       return err;
-               }
+       err = skb_cow_head(skb, 0);
+       if (err < 0) {
+               dev_err(&adapter->pdev->dev, "igbvf_tso returning an error\n");
+               return err;
        }
 
        l4len = tcp_hdrlen(skb);
index f42c201f727fc7fdb46062808cd0435927081256..60801273915cc6e422b0396242be82c47aa3e7ab 100644 (file)
@@ -1220,17 +1220,15 @@ ixgb_tso(struct ixgb_adapter *adapter, struct sk_buff *skb)
        unsigned int i;
        u8 ipcss, ipcso, tucss, tucso, hdr_len;
        u16 ipcse, tucse, mss;
-       int err;
 
        if (likely(skb_is_gso(skb))) {
                struct ixgb_buffer *buffer_info;
                struct iphdr *iph;
+               int err;
 
-               if (skb_header_cloned(skb)) {
-                       err = pskb_expand_head(skb, 0, 0, GFP_ATOMIC);
-                       if (err)
-                               return err;
-               }
+               err = skb_cow_head(skb, 0);
+               if (err < 0)
+                       return err;
 
                hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb);
                mss = skb_shinfo(skb)->gso_size;
index 55c53a1cbb62703f381624a738eb158f2aa661c4..1a12c1dd7a279c8f9db97c61a61ff4847c74db97 100644 (file)
@@ -811,6 +811,7 @@ enum ixgbe_state_t {
        __IXGBE_DISABLED,
        __IXGBE_REMOVING,
        __IXGBE_SERVICE_SCHED,
+       __IXGBE_SERVICE_INITED,
        __IXGBE_IN_SFP_INIT,
        __IXGBE_PTP_RUNNING,
        __IXGBE_PTP_TX_IN_PROGRESS,
index 8436c651b735563e91d8dfa4d6312215ff9e567b..c4c526b7f99f48e2fe4eaccfe070273bd4078c98 100644 (file)
@@ -297,7 +297,8 @@ static void ixgbe_remove_adapter(struct ixgbe_hw *hw)
                return;
        hw->hw_addr = NULL;
        e_dev_err("Adapter removed\n");
-       ixgbe_service_event_schedule(adapter);
+       if (test_bit(__IXGBE_SERVICE_INITED, &adapter->state))
+               ixgbe_service_event_schedule(adapter);
 }
 
 void ixgbe_check_remove(struct ixgbe_hw *hw, u32 reg)
@@ -6509,6 +6510,7 @@ static int ixgbe_tso(struct ixgbe_ring *tx_ring,
        struct sk_buff *skb = first->skb;
        u32 vlan_macip_lens, type_tucmd;
        u32 mss_l4len_idx, l4len;
+       int err;
 
        if (skb->ip_summed != CHECKSUM_PARTIAL)
                return 0;
@@ -6516,11 +6518,9 @@ static int ixgbe_tso(struct ixgbe_ring *tx_ring,
        if (!skb_is_gso(skb))
                return 0;
 
-       if (skb_header_cloned(skb)) {
-               int err = pskb_expand_head(skb, 0, 0, GFP_ATOMIC);
-               if (err)
-                       return err;
-       }
+       err = skb_cow_head(skb, 0);
+       if (err < 0)
+               return err;
 
        /* ADV DTYP TUCMD MKRLOC/ISCSIHEDLEN */
        type_tucmd = IXGBE_ADVTXD_TUCMD_L4T_TCP;
@@ -7077,8 +7077,8 @@ netdev_tx_t ixgbe_xmit_frame_ring(struct sk_buff *skb,
                                        IXGBE_TX_FLAGS_VLAN_PRIO_SHIFT;
                if (tx_flags & IXGBE_TX_FLAGS_SW_VLAN) {
                        struct vlan_ethhdr *vhdr;
-                       if (skb_header_cloned(skb) &&
-                           pskb_expand_head(skb, 0, 0, GFP_ATOMIC))
+
+                       if (skb_cow_head(skb, 0))
                                goto out_drop;
                        vhdr = (struct vlan_ethhdr *)skb->data;
                        vhdr->h_vlan_TCI = htons(tx_flags >>
@@ -8023,6 +8023,10 @@ static int ixgbe_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
        /* EEPROM */
        memcpy(&hw->eeprom.ops, ii->eeprom_ops, sizeof(hw->eeprom.ops));
        eec = IXGBE_READ_REG(hw, IXGBE_EEC);
+       if (ixgbe_removed(hw->hw_addr)) {
+               err = -EIO;
+               goto err_ioremap;
+       }
        /* If EEPROM is valid (bit 8 = 1), use default otherwise use bit bang */
        if (!(eec & (1 << 8)))
                hw->eeprom.ops.read = &ixgbe_read_eeprom_bit_bang_generic;
@@ -8185,7 +8189,12 @@ skip_sriov:
        setup_timer(&adapter->service_timer, &ixgbe_service_timer,
                    (unsigned long) adapter);
 
+       if (ixgbe_removed(hw->hw_addr)) {
+               err = -EIO;
+               goto err_sw_init;
+       }
        INIT_WORK(&adapter->service_task, ixgbe_service_task);
+       set_bit(__IXGBE_SERVICE_INITED, &adapter->state);
        clear_bit(__IXGBE_SERVICE_SCHED, &adapter->state);
 
        err = ixgbe_init_interrupt_scheme(adapter);
@@ -8494,6 +8503,9 @@ static pci_ers_result_t ixgbe_io_error_detected(struct pci_dev *pdev,
 
 skip_bad_vf_detection:
 #endif /* CONFIG_PCI_IOV */
+       if (!test_bit(__IXGBE_SERVICE_INITED, &adapter->state))
+               return PCI_ERS_RESULT_DISCONNECT;
+
        rtnl_lock();
        netif_device_detach(netdev);
 
index e7e7d695816b2246ca1e2efcf74a184e65f803e2..a0a1de9ce2389fdcc15ebad8f19a26b456d12447 100644 (file)
@@ -421,6 +421,7 @@ enum ixbgevf_state_t {
        __IXGBEVF_DOWN,
        __IXGBEVF_DISABLED,
        __IXGBEVF_REMOVING,
+       __IXGBEVF_WORK_INIT,
 };
 
 struct ixgbevf_cb {
index 4ba139b2d25a42ff43d896eed13249f61930c60b..d0799e8e31e4ea08e5dc89ec64b58c76bd5840a3 100644 (file)
@@ -107,7 +107,8 @@ static void ixgbevf_remove_adapter(struct ixgbe_hw *hw)
                return;
        hw->hw_addr = NULL;
        dev_err(&adapter->pdev->dev, "Adapter removed\n");
-       schedule_work(&adapter->watchdog_task);
+       if (test_bit(__IXGBEVF_WORK_INIT, &adapter->state))
+               schedule_work(&adapter->watchdog_task);
 }
 
 static void ixgbevf_check_remove(struct ixgbe_hw *hw, u32 reg)
@@ -2838,6 +2839,7 @@ static int ixgbevf_tso(struct ixgbevf_ring *tx_ring,
        struct sk_buff *skb = first->skb;
        u32 vlan_macip_lens, type_tucmd;
        u32 mss_l4len_idx, l4len;
+       int err;
 
        if (skb->ip_summed != CHECKSUM_PARTIAL)
                return 0;
@@ -2845,11 +2847,9 @@ static int ixgbevf_tso(struct ixgbevf_ring *tx_ring,
        if (!skb_is_gso(skb))
                return 0;
 
-       if (skb_header_cloned(skb)) {
-               int err = pskb_expand_head(skb, 0, 0, GFP_ATOMIC);
-               if (err)
-                       return err;
-       }
+       err = skb_cow_head(skb, 0);
+       if (err < 0)
+               return err;
 
        /* ADV DTYP TUCMD MKRLOC/ISCSIHEDLEN */
        type_tucmd = IXGBE_ADVTXD_TUCMD_L4T_TCP;
@@ -3573,8 +3573,13 @@ static int ixgbevf_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
        adapter->watchdog_timer.function = ixgbevf_watchdog;
        adapter->watchdog_timer.data = (unsigned long)adapter;
 
+       if (IXGBE_REMOVED(hw->hw_addr)) {
+               err = -EIO;
+               goto err_sw_init;
+       }
        INIT_WORK(&adapter->reset_task, ixgbevf_reset_task);
        INIT_WORK(&adapter->watchdog_task, ixgbevf_watchdog_task);
+       set_bit(__IXGBEVF_WORK_INIT, &adapter->state);
 
        err = ixgbevf_init_interrupt_scheme(adapter);
        if (err)
@@ -3667,6 +3672,9 @@ static pci_ers_result_t ixgbevf_io_error_detected(struct pci_dev *pdev,
        struct net_device *netdev = pci_get_drvdata(pdev);
        struct ixgbevf_adapter *adapter = netdev_priv(netdev);
 
+       if (!test_bit(__IXGBEVF_WORK_INIT, &adapter->state))
+               return PCI_ERS_RESULT_DISCONNECT;
+
        rtnl_lock();
        netif_device_detach(netdev);
 
index 5d5fec6c4eb04bbdacf851635394893055a27866..36aa109416c4c3a387a440795a8d3611cf3d4ded 100644 (file)
@@ -687,7 +687,7 @@ static void cpsw_rx_handler(void *token, int len, int status)
 
        cpsw_dual_emac_src_port_detect(status, priv, ndev, skb);
 
-       if (unlikely(status < 0)) {
+       if (unlikely(status < 0) || unlikely(!netif_running(ndev))) {
                /* the interface is going down, skbs are purged */
                dev_kfree_skb_any(skb);
                return;
@@ -1201,8 +1201,7 @@ static int cpsw_ndo_open(struct net_device *ndev)
        for_each_slave(priv, cpsw_slave_open, priv);
 
        /* Add default VLAN */
-       if (!priv->data.dual_emac)
-               cpsw_add_default_vlan(priv);
+       cpsw_add_default_vlan(priv);
 
        if (!cpsw_common_res_usage_state(priv)) {
                /* setup tx dma to fixed prio and zero offset */
@@ -1253,6 +1252,12 @@ static int cpsw_ndo_open(struct net_device *ndev)
                cpsw_set_coalesce(ndev, &coal);
        }
 
+       napi_enable(&priv->napi);
+       cpdma_ctlr_start(priv->dma);
+       cpsw_intr_enable(priv);
+       cpdma_ctlr_eoi(priv->dma, CPDMA_EOI_RX);
+       cpdma_ctlr_eoi(priv->dma, CPDMA_EOI_TX);
+
        prim_cpsw = cpsw_get_slave_priv(priv, 0);
        if (prim_cpsw->irq_enabled == false) {
                if ((priv == prim_cpsw) || !netif_running(prim_cpsw->ndev)) {
@@ -1261,12 +1266,6 @@ static int cpsw_ndo_open(struct net_device *ndev)
                }
        }
 
-       napi_enable(&priv->napi);
-       cpdma_ctlr_start(priv->dma);
-       cpsw_intr_enable(priv);
-       cpdma_ctlr_eoi(priv->dma, CPDMA_EOI_RX);
-       cpdma_ctlr_eoi(priv->dma, CPDMA_EOI_TX);
-
        if (priv->data.dual_emac)
                priv->slaves[priv->emac_port].open_stat = true;
        return 0;
index 13010b4dae5b7ddea9b3a48cf28dc8425c5b3e6c..d18f711d0b0cd45ae50cc30cc09a9468d4e40d22 100644 (file)
@@ -747,6 +747,7 @@ struct ndis_oject_header {
 #define NDIS_TCP_LARGE_SEND_OFFLOAD_IPV4       0
 #define NDIS_TCP_LARGE_SEND_OFFLOAD_IPV6       1
 
+#define VERSION_4_OFFLOAD_SIZE                 22
 /*
  * New offload OIDs for NDIS 6
  */
index daddea2654ce4ec6ee3e3db66d45c9edb9ceb35f..f7629ecefa84a6d9c2d1cbb7b308a3d46a359915 100644 (file)
@@ -344,7 +344,7 @@ static int netvsc_connect_vsp(struct hv_device *device)
        memset(init_packet, 0, sizeof(struct nvsp_message));
 
        if (net_device->nvsp_version <= NVSP_PROTOCOL_VERSION_4)
-               ndis_version = 0x00050001;
+               ndis_version = 0x00060001;
        else
                ndis_version = 0x0006001e;
 
index 4e4cf9e0c8d7a6c6472f2dee357b8b31a814c2b8..31e55fba7cadd03d9e19221139727272b9eeec77 100644 (file)
@@ -319,7 +319,9 @@ static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net)
        packet = kzalloc(sizeof(struct hv_netvsc_packet) +
                         (num_data_pgs * sizeof(struct hv_page_buffer)) +
                         sizeof(struct rndis_message) +
-                        NDIS_VLAN_PPI_SIZE, GFP_ATOMIC);
+                        NDIS_VLAN_PPI_SIZE +
+                        NDIS_CSUM_PPI_SIZE +
+                        NDIS_LSO_PPI_SIZE, GFP_ATOMIC);
        if (!packet) {
                /* out of memory, drop packet */
                netdev_err(net, "unable to allocate hv_netvsc_packet\n");
@@ -396,7 +398,30 @@ static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net)
                csum_info->transmit.tcp_checksum = 1;
                csum_info->transmit.tcp_header_offset = hdr_offset;
        } else if (net_trans_info & INFO_UDP) {
-               csum_info->transmit.udp_checksum = 1;
+               /* UDP checksum offload is not supported on ws2008r2.
+                * Furthermore, on ws2012 and ws2012r2, there are some
+                * issues with udp checksum offload from Linux guests.
+                * (these are host issues).
+                * For now compute the checksum here.
+                */
+               struct udphdr *uh;
+               u16 udp_len;
+
+               ret = skb_cow_head(skb, 0);
+               if (ret)
+                       goto drop;
+
+               uh = udp_hdr(skb);
+               udp_len = ntohs(uh->len);
+               uh->check = 0;
+               uh->check = csum_tcpudp_magic(ip_hdr(skb)->saddr,
+                                             ip_hdr(skb)->daddr,
+                                             udp_len, IPPROTO_UDP,
+                                             csum_partial(uh, udp_len, 0));
+               if (uh->check == 0)
+                       uh->check = CSUM_MANGLED_0;
+
+               csum_info->transmit.udp_checksum = 0;
        }
        goto do_send;
 
@@ -436,6 +461,7 @@ do_send:
 
        ret = netvsc_send(net_device_ctx->device_ctx, packet);
 
+drop:
        if (ret == 0) {
                net->stats.tx_bytes += skb->len;
                net->stats.tx_packets++;
index 4a37e3db9e32f06c1c820c66cb08d79920bf02c0..143a98caf618a90cd45ac002005c506f5ca14a33 100644 (file)
@@ -641,6 +641,16 @@ int rndis_filter_set_offload_params(struct hv_device *hdev,
        struct rndis_set_complete *set_complete;
        u32 extlen = sizeof(struct ndis_offload_params);
        int ret, t;
+       u32 vsp_version = nvdev->nvsp_version;
+
+       if (vsp_version <= NVSP_PROTOCOL_VERSION_4) {
+               extlen = VERSION_4_OFFLOAD_SIZE;
+               /* On NVSP_PROTOCOL_VERSION_4 and below, we do not support
+                * UDP checksum offload.
+                */
+               req_offloads->udp_ip_v4_csum = 0;
+               req_offloads->udp_ip_v6_csum = 0;
+       }
 
        request = get_rndis_request(rdev, RNDIS_MSG_SET,
                RNDIS_MESSAGE_SIZE(struct rndis_set_request) + extlen);
@@ -674,7 +684,7 @@ int rndis_filter_set_offload_params(struct hv_device *hdev,
        } else {
                set_complete = &request->response_msg.msg.set_complete;
                if (set_complete->status != RNDIS_STATUS_SUCCESS) {
-                       netdev_err(ndev, "Fail to set MAC on host side:0x%x\n",
+                       netdev_err(ndev, "Fail to set offload on host side:0x%x\n",
                                   set_complete->status);
                        ret = -EINVAL;
                }
index 1d788f19135bdf5e59e71a11eed935981a172ca8..1b6d09aef42748bcbba6d4fe88ca68d6ea83c852 100644 (file)
@@ -756,12 +756,8 @@ void phy_state_machine(struct work_struct *work)
                        netif_carrier_on(phydev->attached_dev);
                        phydev->adjust_link(phydev->attached_dev);
 
-               } else if (0 == phydev->link_timeout--) {
+               } else if (0 == phydev->link_timeout--)
                        needs_aneg = 1;
-                       /* If we have the magic_aneg bit, we try again */
-                       if (phydev->drv->flags & PHY_HAS_MAGICANEG)
-                               break;
-               }
                break;
        case PHY_NOLINK:
                err = phy_read_status(phydev);
index 18e12a3f7fc302399167bd32712a5ed66fe8fd36..3fbfb0869030aeeb6c540766bdbf924d959abcd6 100644 (file)
@@ -929,6 +929,9 @@ static int read_mii_word(struct net_device *netdev, int phy_id, int reg)
        struct r8152 *tp = netdev_priv(netdev);
        int ret;
 
+       if (test_bit(RTL8152_UNPLUG, &tp->flags))
+               return -ENODEV;
+
        if (phy_id != R8152_PHY_ID)
                return -EINVAL;
 
@@ -949,6 +952,9 @@ void write_mii_word(struct net_device *netdev, int phy_id, int reg, int val)
 {
        struct r8152 *tp = netdev_priv(netdev);
 
+       if (test_bit(RTL8152_UNPLUG, &tp->flags))
+               return;
+
        if (phy_id != R8152_PHY_ID)
                return;
 
@@ -1962,6 +1968,9 @@ static int rtl_enable(struct r8152 *tp)
 
 static int rtl8152_enable(struct r8152 *tp)
 {
+       if (test_bit(RTL8152_UNPLUG, &tp->flags))
+               return -ENODEV;
+
        set_tx_qlen(tp);
        rtl_set_eee_plus(tp);
 
@@ -1994,6 +2003,9 @@ static void r8153_set_rx_agg(struct r8152 *tp)
 
 static int rtl8153_enable(struct r8152 *tp)
 {
+       if (test_bit(RTL8152_UNPLUG, &tp->flags))
+               return -ENODEV;
+
        set_tx_qlen(tp);
        rtl_set_eee_plus(tp);
        r8153_set_rx_agg(tp);
@@ -2006,6 +2018,11 @@ static void rtl8152_disable(struct r8152 *tp)
        u32 ocp_data;
        int i;
 
+       if (test_bit(RTL8152_UNPLUG, &tp->flags)) {
+               rtl_drop_queued_tx(tp);
+               return;
+       }
+
        ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR);
        ocp_data &= ~RCR_ACPT_ALL;
        ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data);
@@ -2232,6 +2249,9 @@ static void r8152b_exit_oob(struct r8152 *tp)
        u32 ocp_data;
        int i;
 
+       if (test_bit(RTL8152_UNPLUG, &tp->flags))
+               return;
+
        ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR);
        ocp_data &= ~RCR_ACPT_ALL;
        ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data);
@@ -2460,6 +2480,9 @@ static void r8153_first_init(struct r8152 *tp)
        u32 ocp_data;
        int i;
 
+       if (test_bit(RTL8152_UNPLUG, &tp->flags))
+               return;
+
        rxdy_gated_en(tp, true);
        r8153_teredo_off(tp);
 
@@ -2687,6 +2710,11 @@ out:
 
 static void rtl8152_down(struct r8152 *tp)
 {
+       if (test_bit(RTL8152_UNPLUG, &tp->flags)) {
+               rtl_drop_queued_tx(tp);
+               return;
+       }
+
        r8152_power_cut_en(tp, false);
        r8152b_disable_aldps(tp);
        r8152b_enter_oob(tp);
@@ -2695,6 +2723,11 @@ static void rtl8152_down(struct r8152 *tp)
 
 static void rtl8153_down(struct r8152 *tp)
 {
+       if (test_bit(RTL8152_UNPLUG, &tp->flags)) {
+               rtl_drop_queued_tx(tp);
+               return;
+       }
+
        r8153_u1u2en(tp, false);
        r8153_power_cut_en(tp, false);
        r8153_disable_aldps(tp);
@@ -2904,6 +2937,9 @@ static void r8152b_init(struct r8152 *tp)
 {
        u32 ocp_data;
 
+       if (test_bit(RTL8152_UNPLUG, &tp->flags))
+               return;
+
        if (tp->version == RTL_VER_01) {
                ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE);
                ocp_data &= ~LED_MODE_MASK;
@@ -2939,6 +2975,9 @@ static void r8153_init(struct r8152 *tp)
        u32 ocp_data;
        int i;
 
+       if (test_bit(RTL8152_UNPLUG, &tp->flags))
+               return;
+
        r8153_u1u2en(tp, false);
 
        for (i = 0; i < 500; i++) {
@@ -3213,6 +3252,9 @@ static int rtl8152_ioctl(struct net_device *netdev, struct ifreq *rq, int cmd)
        struct mii_ioctl_data *data = if_mii(rq);
        int res;
 
+       if (test_bit(RTL8152_UNPLUG, &tp->flags))
+               return -ENODEV;
+
        res = usb_autopm_get_interface(tp->intf);
        if (res < 0)
                goto out;
@@ -3293,12 +3335,18 @@ static void r8152b_get_version(struct r8152 *tp)
 
 static void rtl8152_unload(struct r8152 *tp)
 {
+       if (test_bit(RTL8152_UNPLUG, &tp->flags))
+               return;
+
        if (tp->version != RTL_VER_01)
                r8152_power_cut_en(tp, true);
 }
 
 static void rtl8153_unload(struct r8152 *tp)
 {
+       if (test_bit(RTL8152_UNPLUG, &tp->flags))
+               return;
+
        r8153_power_cut_en(tp, true);
 }
 
index 3b3e91057a4cbdb6860006ce0e19a22c3b835774..00fb8badbacc939bbb3ed1bbeae1b3d63edc4e23 100644 (file)
@@ -1004,11 +1004,9 @@ static bool ar5008_hw_ani_control_new(struct ath_hw *ah,
        case ATH9K_ANI_FIRSTEP_LEVEL:{
                u32 level = param;
 
-               value = level * 2;
+               value = level;
                REG_RMW_FIELD(ah, AR_PHY_FIND_SIG,
                              AR_PHY_FIND_SIG_FIRSTEP, value);
-               REG_RMW_FIELD(ah, AR_PHY_FIND_SIG_LOW,
-                             AR_PHY_FIND_SIG_FIRSTEP_LOW, value);
 
                if (level != aniState->firstepLevel) {
                        ath_dbg(common, ANI,
index 471e0f624e8116e07e5bda86744ba422ca8e4fea..bd9e634879e69d4b2b33d741f7c4a8c51801ba9f 100644 (file)
@@ -312,10 +312,9 @@ static void ath9k_csa_update_vif(void *data, u8 *mac, struct ieee80211_vif *vif)
 
 void ath9k_csa_update(struct ath_softc *sc)
 {
-       ieee80211_iterate_active_interfaces(sc->hw,
-                                           IEEE80211_IFACE_ITER_NORMAL,
-                                           ath9k_csa_update_vif,
-                                           sc);
+       ieee80211_iterate_active_interfaces_atomic(sc->hw,
+                                                  IEEE80211_IFACE_ITER_NORMAL,
+                                                  ath9k_csa_update_vif, sc);
 }
 
 void ath9k_beacon_tasklet(unsigned long data)
index e8149e3dbdd58a425d4537c4fe2dee8f0d6ce881..289f3d8924b5735cb773d2b1d527b5cf106b5d64 100644 (file)
@@ -471,8 +471,11 @@ static void ath9k_htc_tx_process(struct ath9k_htc_priv *priv,
        if (!txok || !vif || !txs)
                goto send_mac80211;
 
-       if (txs->ts_flags & ATH9K_HTC_TXSTAT_ACK)
+       if (txs->ts_flags & ATH9K_HTC_TXSTAT_ACK) {
                tx_info->flags |= IEEE80211_TX_STAT_ACK;
+               if (tx_info->flags & IEEE80211_TX_CTL_AMPDU)
+                       tx_info->flags |= IEEE80211_TX_STAT_AMPDU;
+       }
 
        if (txs->ts_flags & ATH9K_HTC_TXSTAT_FILT)
                tx_info->flags |= IEEE80211_TX_STAT_TX_FILTERED;
index c0a4e866edcac9b5325a497d6e7bdedfdadb3b66..cbbb02a6b13b463c9bfdf8b1bad21f45cde0b4cd 100644 (file)
@@ -670,6 +670,7 @@ static const struct ieee80211_iface_combination if_comb[] = {
                .num_different_channels = 1,
                .beacon_int_infra_match = true,
        },
+#ifdef CONFIG_ATH9K_DFS_CERTIFIED
        {
                .limits = if_dfs_limits,
                .n_limits = ARRAY_SIZE(if_dfs_limits),
@@ -679,6 +680,7 @@ static const struct ieee80211_iface_combination if_comb[] = {
                .radar_detect_widths =  BIT(NL80211_CHAN_WIDTH_20_NOHT) |
                                        BIT(NL80211_CHAN_WIDTH_20),
        }
+#endif
 };
 
 static void ath9k_set_hw_capab(struct ath_softc *sc, struct ieee80211_hw *hw)
index 05ee7f10cc8f577532e9180ac9874adcf9343d0f..24ccbe96e0c8a0723bb165b0f32677ab6ba7ded5 100644 (file)
@@ -5176,22 +5176,22 @@ static void b43_nphy_channel_setup(struct b43_wldev *dev,
        int ch = new_channel->hw_value;
 
        u16 old_band_5ghz;
-       u32 tmp32;
+       u16 tmp16;
 
        old_band_5ghz =
                b43_phy_read(dev, B43_NPHY_BANDCTL) & B43_NPHY_BANDCTL_5GHZ;
        if (new_channel->band == IEEE80211_BAND_5GHZ && !old_band_5ghz) {
-               tmp32 = b43_read32(dev, B43_MMIO_PSM_PHY_HDR);
-               b43_write32(dev, B43_MMIO_PSM_PHY_HDR, tmp32 | 4);
+               tmp16 = b43_read16(dev, B43_MMIO_PSM_PHY_HDR);
+               b43_write16(dev, B43_MMIO_PSM_PHY_HDR, tmp16 | 4);
                b43_phy_set(dev, B43_PHY_B_BBCFG, 0xC000);
-               b43_write32(dev, B43_MMIO_PSM_PHY_HDR, tmp32);
+               b43_write16(dev, B43_MMIO_PSM_PHY_HDR, tmp16);
                b43_phy_set(dev, B43_NPHY_BANDCTL, B43_NPHY_BANDCTL_5GHZ);
        } else if (new_channel->band == IEEE80211_BAND_2GHZ && old_band_5ghz) {
                b43_phy_mask(dev, B43_NPHY_BANDCTL, ~B43_NPHY_BANDCTL_5GHZ);
-               tmp32 = b43_read32(dev, B43_MMIO_PSM_PHY_HDR);
-               b43_write32(dev, B43_MMIO_PSM_PHY_HDR, tmp32 | 4);
+               tmp16 = b43_read16(dev, B43_MMIO_PSM_PHY_HDR);
+               b43_write16(dev, B43_MMIO_PSM_PHY_HDR, tmp16 | 4);
                b43_phy_mask(dev, B43_PHY_B_BBCFG, 0x3FFF);
-               b43_write32(dev, B43_MMIO_PSM_PHY_HDR, tmp32);
+               b43_write16(dev, B43_MMIO_PSM_PHY_HDR, tmp16);
        }
 
        b43_chantab_phy_upload(dev, e);
index e89535e86cafc9bc1b9e101d8e653762225f0abf..1a8d32138593637318aeb3022b6e86a48905507a 100644 (file)
@@ -102,10 +102,10 @@ static u8 rsi_core_determine_hal_queue(struct rsi_common *common)
        }
 
 get_queue_num:
-       q_num = 0;
        recontend_queue = false;
 
        q_num = rsi_determine_min_weight_queue(common);
+
        q_len = skb_queue_len(&common->tx_queue[ii]);
        ii = q_num;
 
@@ -118,7 +118,9 @@ get_queue_num:
                }
        }
 
-       common->tx_qinfo[q_num].pkt_contended = 0;
+       if (q_num < NUM_EDCA_QUEUES)
+               common->tx_qinfo[q_num].pkt_contended = 0;
+
        /* Adjust the back off values for all queues again */
        recontend_queue = rsi_recalculate_weights(common);
 
index 7e4ef4554411498d8329a49b5813fa6392540c02..c466246a323f3118d158b22df5c389bdb46e759b 100644 (file)
@@ -289,32 +289,29 @@ int rsi_init_dbgfs(struct rsi_hw *adapter)
        const struct rsi_dbg_files *files;
 
        dev_dbgfs = kzalloc(sizeof(*dev_dbgfs), GFP_KERNEL);
+       if (!dev_dbgfs)
+               return -ENOMEM;
+
        adapter->dfsentry = dev_dbgfs;
 
        snprintf(devdir, sizeof(devdir), "%s",
                 wiphy_name(adapter->hw->wiphy));
-       dev_dbgfs->subdir = debugfs_create_dir(devdir, NULL);
 
-       if (IS_ERR(dev_dbgfs->subdir)) {
-               if (dev_dbgfs->subdir == ERR_PTR(-ENODEV))
-                       rsi_dbg(ERR_ZONE,
-                               "%s:Debugfs has not been mounted\n", __func__);
-               else
-                       rsi_dbg(ERR_ZONE, "debugfs:%s not created\n", devdir);
+       dev_dbgfs->subdir = debugfs_create_dir(devdir, NULL);
 
-               adapter->dfsentry = NULL;
+       if (!dev_dbgfs->subdir) {
                kfree(dev_dbgfs);
-               return (int)PTR_ERR(dev_dbgfs->subdir);
-       } else {
-               for (ii = 0; ii < adapter->num_debugfs_entries; ii++) {
-                       files = &dev_debugfs_files[ii];
-                       dev_dbgfs->rsi_files[ii] =
-                       debugfs_create_file(files->name,
-                                           files->perms,
-                                           dev_dbgfs->subdir,
-                                           common,
-                                           &files->fops);
-               }
+               return -ENOMEM;
+       }
+
+       for (ii = 0; ii < adapter->num_debugfs_entries; ii++) {
+               files = &dev_debugfs_files[ii];
+               dev_dbgfs->rsi_files[ii] =
+               debugfs_create_file(files->name,
+                                   files->perms,
+                                   dev_dbgfs->subdir,
+                                   common,
+                                   &files->fops);
        }
        return 0;
 }
index 2361a6849ad7eb56dccd3d2e0d02517f02d6d82f..73694295648f19988365b3866846af7929d63201 100644 (file)
@@ -738,7 +738,7 @@ int rsi_hal_load_key(struct rsi_common *common,
  *
  * Return: 0 on success, corresponding error code on failure.
  */
-static u8 rsi_load_bootup_params(struct rsi_common *common)
+static int rsi_load_bootup_params(struct rsi_common *common)
 {
        struct sk_buff *skb;
        struct rsi_boot_params *boot_params;
@@ -1272,6 +1272,7 @@ int rsi_mgmt_pkt_recv(struct rsi_common *common, u8 *msg)
 {
        s32 msg_len = (le16_to_cpu(*(__le16 *)&msg[0]) & 0x0fff);
        u16 msg_type = (msg[2]);
+       int ret;
 
        rsi_dbg(FSM_ZONE, "%s: Msg Len: %d, Msg Type: %4x\n",
                __func__, msg_len, msg_type);
@@ -1284,8 +1285,9 @@ int rsi_mgmt_pkt_recv(struct rsi_common *common, u8 *msg)
                if (common->fsm_state == FSM_CARD_NOT_READY) {
                        rsi_set_default_parameters(common);
 
-                       if (rsi_load_bootup_params(common))
-                               return -ENOMEM;
+                       ret = rsi_load_bootup_params(common);
+                       if (ret)
+                               return ret;
                        else
                                common->fsm_state = FSM_BOOT_PARAMS_SENT;
                } else {
index 852453f386e2e73175281e3739dedc747f412e2e..2e39d38d6a9ee80d28c56283541ca625992aeacc 100644 (file)
@@ -756,12 +756,13 @@ fail:
 static void rsi_disconnect(struct sdio_func *pfunction)
 {
        struct rsi_hw *adapter = sdio_get_drvdata(pfunction);
-       struct rsi_91x_sdiodev *dev =
-               (struct rsi_91x_sdiodev *)adapter->rsi_dev;
+       struct rsi_91x_sdiodev *dev;
 
        if (!adapter)
                return;
 
+       dev = (struct rsi_91x_sdiodev *)adapter->rsi_dev;
+
        dev->write_fail = 2;
        rsi_mac80211_detach(adapter);
 
index f1cb99cafed829edab015883f23c3b8e6dff0661..20d11ccfffe3b757c06a232ed3c057228339a76b 100644 (file)
@@ -247,7 +247,7 @@ static int rsi_process_pkt(struct rsi_common *common)
        if (!common->rx_data_pkt) {
                rsi_dbg(ERR_ZONE, "%s: Failed in memory allocation\n",
                        __func__);
-               return -1;
+               return -ENOMEM;
        }
 
        status = rsi_sdio_host_intf_read_pkt(adapter,
@@ -260,12 +260,10 @@ static int rsi_process_pkt(struct rsi_common *common)
        }
 
        status = rsi_read_pkt(common, rcv_pkt_len);
-       kfree(common->rx_data_pkt);
-       return status;
 
 fail:
        kfree(common->rx_data_pkt);
-       return -1;
+       return status;
 }
 
 /**
index bb1bf96670ebd382a1789c58f98f4afb91d6c9eb..4c46e5631e2f0bf81196dd8b89e3a1dea8b00ec7 100644 (file)
@@ -154,24 +154,30 @@ static int rsi_usb_reg_read(struct usb_device *usbdev,
                            u16 *value,
                            u16 len)
 {
-       u8 temp_buf[4];
-       int status = 0;
+       u8 *buf;
+       int status = -ENOMEM;
+
+       buf  = kmalloc(0x04, GFP_KERNEL);
+       if (!buf)
+               return status;
 
        status = usb_control_msg(usbdev,
                                 usb_rcvctrlpipe(usbdev, 0),
                                 USB_VENDOR_REGISTER_READ,
                                 USB_TYPE_VENDOR,
                                 ((reg & 0xffff0000) >> 16), (reg & 0xffff),
-                                (void *)temp_buf,
+                                (void *)buf,
                                 len,
                                 HZ * 5);
 
-       *value = (temp_buf[0] | (temp_buf[1] << 8));
+       *value = (buf[0] | (buf[1] << 8));
        if (status < 0) {
                rsi_dbg(ERR_ZONE,
                        "%s: Reg read failed with error code :%d\n",
                        __func__, status);
        }
+       kfree(buf);
+
        return status;
 }
 
@@ -190,8 +196,12 @@ static int rsi_usb_reg_write(struct usb_device *usbdev,
                             u16 value,
                             u16 len)
 {
-       u8 usb_reg_buf[4];
-       int status = 0;
+       u8 *usb_reg_buf;
+       int status = -ENOMEM;
+
+       usb_reg_buf  = kmalloc(0x04, GFP_KERNEL);
+       if (!usb_reg_buf)
+               return status;
 
        usb_reg_buf[0] = (value & 0x00ff);
        usb_reg_buf[1] = (value & 0xff00) >> 8;
@@ -212,6 +222,8 @@ static int rsi_usb_reg_write(struct usb_device *usbdev,
                        "%s: Reg write failed with error code :%d\n",
                        __func__, status);
        }
+       kfree(usb_reg_buf);
+
        return status;
 }
 
@@ -286,7 +298,7 @@ int rsi_usb_write_register_multiple(struct rsi_hw *adapter,
                return -ENOMEM;
 
        while (count) {
-               transfer = min_t(int, count, 4096);
+               transfer = (u8)(min_t(u32, count, 4096));
                memcpy(buf, data, transfer);
                status = usb_control_msg(dev->usbdev,
                                         usb_sndctrlpipe(dev->usbdev, 0),
index b6722de64a31a47cca27624557b86b79ac1d9100..33da3dfcfa4f05f112e4271487c9f5131bb3f20a 100644 (file)
@@ -625,17 +625,7 @@ bool exhalbtc_initlize_variables(struct rtl_priv *adapter)
        else
                btcoexist->binded = true;
 
-#if (defined(CONFIG_PCI_HCI))
-       btcoexist->chip_interface = BTC_INTF_PCI;
-#elif (defined(CONFIG_USB_HCI))
-       btcoexist->chip_interface = BTC_INTF_USB;
-#elif (defined(CONFIG_SDIO_HCI))
-       btcoexist->chip_interface = BTC_INTF_SDIO;
-#elif (defined(CONFIG_GSPI_HCI))
-       btcoexist->chip_interface = BTC_INTF_GSPI;
-#else
        btcoexist->chip_interface = BTC_INTF_UNKNOWN;
-#endif
 
        if (NULL == btcoexist->adapter)
                btcoexist->adapter = adapter;
index 057b05700f8baa081014d80b1142e7b2a7808489..158b5e639fc7307d5a98580cfd65ca23b9d3db8a 100644 (file)
@@ -1291,13 +1291,13 @@ static struct net_device *xennet_create_dev(struct xenbus_device *dev)
        for (i = 0; i < NET_TX_RING_SIZE; i++) {
                skb_entry_set_link(&np->tx_skbs[i], i+1);
                np->grant_tx_ref[i] = GRANT_INVALID_REF;
+               np->grant_tx_page[i] = NULL;
        }
 
        /* Clear out rx_skbs */
        for (i = 0; i < NET_RX_RING_SIZE; i++) {
                np->rx_skbs[i] = NULL;
                np->grant_rx_ref[i] = GRANT_INVALID_REF;
-               np->grant_tx_page[i] = NULL;
        }
 
        /* A grant for every tx ring slot */
index bfb6d07d87f06c8c9d1632fe27ef6907b4c46af7..11854845393bf9cc13688ff3895339997822fa61 100644 (file)
@@ -125,7 +125,7 @@ static inline int iscsi_sw_sk_state_check(struct sock *sk)
        return 0;
 }
 
-static void iscsi_sw_tcp_data_ready(struct sock *sk, int flag)
+static void iscsi_sw_tcp_data_ready(struct sock *sk)
 {
        struct iscsi_conn *conn;
        struct iscsi_tcp_conn *tcp_conn;
index 666fe09378fa580d62f2625f174f85bec7ece228..f42ecb238af549327d539d822824d87001975fee 100644 (file)
@@ -40,7 +40,7 @@ struct iscsi_sw_tcp_conn {
 
        struct iscsi_sw_tcp_send out;
        /* old values for socket callbacks */
-       void                    (*old_data_ready)(struct sock *, int);
+       void                    (*old_data_ready)(struct sock *);
        void                    (*old_state_change)(struct sock *);
        void                    (*old_write_space)(struct sock *);
 
index b87b246111c0c9727709838c1860df6d0421fc00..37758d1c8a68db9138343fd63df6c0cb1e288c08 100644 (file)
@@ -617,7 +617,7 @@ extern void ksocknal_write_callback (ksock_conn_t *conn);
  * socket call back in Linux
  */
 static void
-ksocknal_data_ready (struct sock *sk, int n)
+ksocknal_data_ready (struct sock *sk)
 {
        ksock_conn_t  *conn;
 
@@ -628,7 +628,7 @@ ksocknal_data_ready (struct sock *sk, int n)
        conn = sk->sk_user_data;
        if (conn == NULL) {          /* raced with ksocknal_terminate_conn */
                LASSERT (sk->sk_data_ready != &ksocknal_data_ready);
-               sk->sk_data_ready (sk, n);
+               sk->sk_data_ready (sk);
        } else
                ksocknal_read_callback(conn);
 
index 886d74d6f3d4669b6050d2872ea38d924ac3e484..6960f22909ae2eeddd651d59217d1f09519e9154 100644 (file)
@@ -557,7 +557,7 @@ struct iscsi_conn {
        struct completion       rx_half_close_comp;
        /* socket used by this connection */
        struct socket           *sock;
-       void                    (*orig_data_ready)(struct sock *, int);
+       void                    (*orig_data_ready)(struct sock *);
        void                    (*orig_state_change)(struct sock *);
 #define LOGIN_FLAGS_READ_ACTIVE                1
 #define LOGIN_FLAGS_CLOSED             2
index 582ba84075ec0889bd4e00c55d8dd57e0608c823..75b685960e80d31e2d6e19439a98257fea41ab15 100644 (file)
@@ -375,7 +375,7 @@ static int iscsi_target_do_tx_login_io(struct iscsi_conn *conn, struct iscsi_log
        return 0;
 }
 
-static void iscsi_target_sk_data_ready(struct sock *sk, int count)
+static void iscsi_target_sk_data_ready(struct sock *sk)
 {
        struct iscsi_conn *conn = sk->sk_user_data;
        bool rc;
index 3190ca973dd6be657a50b3cd8ff0f34b06a40fb1..1e5b45359509590f90910a90797e901da7629745 100644 (file)
@@ -424,7 +424,7 @@ int dlm_lowcomms_addr(int nodeid, struct sockaddr_storage *addr, int len)
 }
 
 /* Data available on socket or listen socket received a connect */
-static void lowcomms_data_ready(struct sock *sk, int count_unused)
+static void lowcomms_data_ready(struct sock *sk)
 {
        struct connection *con = sock2con(sk);
        if (con && !test_and_set_bit(CF_READ_PENDING, &con->flags))
index 7fa17e4593669379d420fafa11d355276a6eba72..55e26fd8088694308aeee3ceff1d11b91d6b1fb5 100644 (file)
@@ -109,7 +109,7 @@ struct ncp_server {
 
        spinlock_t requests_lock;       /* Lock accesses to tx.requests, tx.creq and rcv.creq when STREAM mode */
 
-       void (*data_ready)(struct sock* sk, int len);
+       void (*data_ready)(struct sock* sk);
        void (*error_report)(struct sock* sk);
        void (*write_space)(struct sock* sk);   /* STREAM mode only */
        struct {
@@ -151,7 +151,7 @@ extern void ncp_tcp_tx_proc(struct work_struct *work);
 extern void ncpdgram_rcv_proc(struct work_struct *work);
 extern void ncpdgram_timeout_proc(struct work_struct *work);
 extern void ncpdgram_timeout_call(unsigned long server);
-extern void ncp_tcp_data_ready(struct sock* sk, int len);
+extern void ncp_tcp_data_ready(struct sock* sk);
 extern void ncp_tcp_write_space(struct sock* sk);
 extern void ncp_tcp_error_report(struct sock* sk);
 
index 04a69a4d8e9672519b4f1216f84cf0ab00d5698f..471bc3d1139ebf678b2dec63c65a71ba470ad4ff 100644 (file)
@@ -97,11 +97,11 @@ static void ncp_req_put(struct ncp_request_reply *req)
                kfree(req);
 }
 
-void ncp_tcp_data_ready(struct sock *sk, int len)
+void ncp_tcp_data_ready(struct sock *sk)
 {
        struct ncp_server *server = sk->sk_user_data;
 
-       server->data_ready(sk, len);
+       server->data_ready(sk);
        schedule_work(&server->rcv.tq);
 }
 
index dfda2ffdb16c15aa8338b1de6f58ccc42ff5b9ba..c6b90e67038970df5701ff3a9a1a49fb3b91fd00 100644 (file)
@@ -137,7 +137,7 @@ static int o2net_sys_err_translations[O2NET_ERR_MAX] =
 static void o2net_sc_connect_completed(struct work_struct *work);
 static void o2net_rx_until_empty(struct work_struct *work);
 static void o2net_shutdown_sc(struct work_struct *work);
-static void o2net_listen_data_ready(struct sock *sk, int bytes);
+static void o2net_listen_data_ready(struct sock *sk);
 static void o2net_sc_send_keep_req(struct work_struct *work);
 static void o2net_idle_timer(unsigned long data);
 static void o2net_sc_postpone_idle(struct o2net_sock_container *sc);
@@ -597,9 +597,9 @@ static void o2net_set_nn_state(struct o2net_node *nn,
 }
 
 /* see o2net_register_callbacks() */
-static void o2net_data_ready(struct sock *sk, int bytes)
+static void o2net_data_ready(struct sock *sk)
 {
-       void (*ready)(struct sock *sk, int bytes);
+       void (*ready)(struct sock *sk);
 
        read_lock(&sk->sk_callback_lock);
        if (sk->sk_user_data) {
@@ -613,7 +613,7 @@ static void o2net_data_ready(struct sock *sk, int bytes)
        }
        read_unlock(&sk->sk_callback_lock);
 
-       ready(sk, bytes);
+       ready(sk);
 }
 
 /* see o2net_register_callbacks() */
@@ -1926,9 +1926,9 @@ static void o2net_accept_many(struct work_struct *work)
                cond_resched();
 }
 
-static void o2net_listen_data_ready(struct sock *sk, int bytes)
+static void o2net_listen_data_ready(struct sock *sk)
 {
-       void (*ready)(struct sock *sk, int bytes);
+       void (*ready)(struct sock *sk);
 
        read_lock(&sk->sk_callback_lock);
        ready = sk->sk_user_data;
@@ -1951,7 +1951,6 @@ static void o2net_listen_data_ready(struct sock *sk, int bytes)
         */
 
        if (sk->sk_state == TCP_LISTEN) {
-               mlog(ML_TCP, "bytes: %d\n", bytes);
                queue_work(o2net_wq, &o2net_listen_work);
        } else {
                ready = NULL;
@@ -1960,7 +1959,7 @@ static void o2net_listen_data_ready(struct sock *sk, int bytes)
 out:
        read_unlock(&sk->sk_callback_lock);
        if (ready != NULL)
-               ready(sk, bytes);
+               ready(sk);
 }
 
 static int o2net_open_listening_sock(__be32 addr, __be16 port)
index 4cbcb65784a358b6e10703b589b724b18a71022d..dc024367110a60d157d0d46c671f35e1e611f2a6 100644 (file)
@@ -165,7 +165,7 @@ struct o2net_sock_container {
 
        /* original handlers for the sockets */
        void                    (*sc_state_change)(struct sock *sk);
-       void                    (*sc_data_ready)(struct sock *sk, int bytes);
+       void                    (*sc_data_ready)(struct sock *sk);
 
        u32                     sc_msg_key;
        u16                     sc_msg_type;
index 947009ed59969af2b79ca3f2a049eaec323f3f3c..2e780134f4490ed9386a01d87ba2e507c32ee4b3 100644 (file)
@@ -22,7 +22,7 @@ struct svc_sock {
 
        /* We keep the old state_change and data_ready CB's here */
        void                    (*sk_ostate)(struct sock *);
-       void                    (*sk_odata)(struct sock *, int bytes);
+       void                    (*sk_odata)(struct sock *);
        void                    (*sk_owspace)(struct sock *);
 
        /* private TCP part */
index a3353f45ef94580b575d0455169863ec853f13ee..8e4de46c052ec7d78188f203df2b69b0a0b423ab 100644 (file)
@@ -101,7 +101,7 @@ void sctp_addr_wq_mgmt(struct net *, struct sctp_sockaddr_entry *, int);
 int sctp_backlog_rcv(struct sock *sk, struct sk_buff *skb);
 int sctp_inet_listen(struct socket *sock, int backlog);
 void sctp_write_space(struct sock *sk);
-void sctp_data_ready(struct sock *sk, int len);
+void sctp_data_ready(struct sock *sk);
 unsigned int sctp_poll(struct file *file, struct socket *sock,
                poll_table *wait);
 void sctp_sock_rfree(struct sk_buff *skb);
index 06a5668f05c984526c4ce2455aff825e2aaa9836..8338a14e48053d853a57af674f7edca1e085fdc5 100644 (file)
@@ -418,7 +418,7 @@ struct sock {
        u32                     sk_classid;
        struct cg_proto         *sk_cgrp;
        void                    (*sk_state_change)(struct sock *sk);
-       void                    (*sk_data_ready)(struct sock *sk, int bytes);
+       void                    (*sk_data_ready)(struct sock *sk);
        void                    (*sk_write_space)(struct sock *sk);
        void                    (*sk_error_report)(struct sock *sk);
        int                     (*sk_backlog_rcv)(struct sock *sk,
index 8215f7cb170b5a21cdb67347f50578f57e515dfb..ba291ce4bdff95c59b02a9eeaf9de87dd0a7315b 100644 (file)
@@ -68,7 +68,7 @@ static int to_atmarpd(enum atmarp_ctrl_type type, int itf, __be32 ip)
 
        sk = sk_atm(atmarpd);
        skb_queue_tail(&sk->sk_receive_queue, skb);
-       sk->sk_data_ready(sk, skb->len);
+       sk->sk_data_ready(sk);
        return 0;
 }
 
index 5a2f602d07e1811bfa0d76a569b44792c1155d1e..4c5b8ba0f84febeab066010f4c4bd32652e93cd9 100644 (file)
@@ -152,7 +152,7 @@ static void lec_handle_bridge(struct sk_buff *skb, struct net_device *dev)
                atm_force_charge(priv->lecd, skb2->truesize);
                sk = sk_atm(priv->lecd);
                skb_queue_tail(&sk->sk_receive_queue, skb2);
-               sk->sk_data_ready(sk, skb2->len);
+               sk->sk_data_ready(sk);
        }
 }
 #endif /* defined(CONFIG_BRIDGE) || defined(CONFIG_BRIDGE_MODULE) */
@@ -447,7 +447,7 @@ static int lec_atm_send(struct atm_vcc *vcc, struct sk_buff *skb)
                        atm_force_charge(priv->lecd, skb2->truesize);
                        sk = sk_atm(priv->lecd);
                        skb_queue_tail(&sk->sk_receive_queue, skb2);
-                       sk->sk_data_ready(sk, skb2->len);
+                       sk->sk_data_ready(sk);
                }
        }
 #endif /* defined(CONFIG_BRIDGE) || defined(CONFIG_BRIDGE_MODULE) */
@@ -530,13 +530,13 @@ send_to_lecd(struct lec_priv *priv, atmlec_msg_type type,
        atm_force_charge(priv->lecd, skb->truesize);
        sk = sk_atm(priv->lecd);
        skb_queue_tail(&sk->sk_receive_queue, skb);
-       sk->sk_data_ready(sk, skb->len);
+       sk->sk_data_ready(sk);
 
        if (data != NULL) {
                pr_debug("about to send %d bytes of data\n", data->len);
                atm_force_charge(priv->lecd, data->truesize);
                skb_queue_tail(&sk->sk_receive_queue, data);
-               sk->sk_data_ready(sk, skb->len);
+               sk->sk_data_ready(sk);
        }
 
        return 0;
@@ -616,7 +616,7 @@ static void lec_push(struct atm_vcc *vcc, struct sk_buff *skb)
 
                pr_debug("%s: To daemon\n", dev->name);
                skb_queue_tail(&sk->sk_receive_queue, skb);
-               sk->sk_data_ready(sk, skb->len);
+               sk->sk_data_ready(sk);
        } else {                /* Data frame, queue to protocol handlers */
                struct lec_arp_table *entry;
                unsigned char *src, *dst;
index 91dc58f1124dd976e4cca35af2407eb2c0e25ecc..e8e0e7a8a23d12029440b2f01b1c10b6e6326f27 100644 (file)
@@ -706,7 +706,7 @@ static void mpc_push(struct atm_vcc *vcc, struct sk_buff *skb)
                dprintk("(%s) control packet arrived\n", dev->name);
                /* Pass control packets to daemon */
                skb_queue_tail(&sk->sk_receive_queue, skb);
-               sk->sk_data_ready(sk, skb->len);
+               sk->sk_data_ready(sk);
                return;
        }
 
@@ -992,7 +992,7 @@ int msg_to_mpoad(struct k_message *mesg, struct mpoa_client *mpc)
 
        sk = sk_atm(mpc->mpoad_vcc);
        skb_queue_tail(&sk->sk_receive_queue, skb);
-       sk->sk_data_ready(sk, skb->len);
+       sk->sk_data_ready(sk);
 
        return 0;
 }
@@ -1273,7 +1273,7 @@ static void purge_egress_shortcut(struct atm_vcc *vcc, eg_cache_entry *entry)
 
        sk = sk_atm(vcc);
        skb_queue_tail(&sk->sk_receive_queue, skb);
-       sk->sk_data_ready(sk, skb->len);
+       sk->sk_data_ready(sk);
        dprintk("exiting\n");
 }
 
index b4f7b9ff3c741880e1f587f8f27a939ab62c25dd..2e17e97a7a8b02e9570a385e1d99297fa50f7348 100644 (file)
@@ -25,7 +25,7 @@ static void atm_push_raw(struct atm_vcc *vcc, struct sk_buff *skb)
                struct sock *sk = sk_atm(vcc);
 
                skb_queue_tail(&sk->sk_receive_queue, skb);
-               sk->sk_data_ready(sk, skb->len);
+               sk->sk_data_ready(sk);
        }
 }
 
index 4176887e72eb97c059148069fdf6490091bf056a..523bce72f698ef2a34cfc66da4dbe69cde954fe9 100644 (file)
@@ -51,7 +51,7 @@ static void sigd_put_skb(struct sk_buff *skb)
 #endif
        atm_force_charge(sigd, skb->truesize);
        skb_queue_tail(&sk_atm(sigd)->sk_receive_queue, skb);
-       sk_atm(sigd)->sk_data_ready(sk_atm(sigd), skb->len);
+       sk_atm(sigd)->sk_data_ready(sk_atm(sigd));
 }
 
 static void modify_qos(struct atm_vcc *vcc, struct atmsvc_msg *msg)
index 96f4cab3a2f96c09176e3cb686657c0d9892d0aa..7ed8ab7248198f3d47c6566c52a971fe00d1afac 100644 (file)
@@ -422,7 +422,7 @@ static int ax25_rcv(struct sk_buff *skb, struct net_device *dev,
 
        if (sk) {
                if (!sock_flag(sk, SOCK_DEAD))
-                       sk->sk_data_ready(sk, skb->len);
+                       sk->sk_data_ready(sk);
                sock_put(sk);
        } else {
 free:
index f59e00c2daa9cb5e485cb7832cb80486660ca6bf..ef5e5b04f34fbd3c130c74dc2a41ffe775870b3b 100644 (file)
@@ -1271,7 +1271,7 @@ static void l2cap_sock_teardown_cb(struct l2cap_chan *chan, int err)
 
                if (parent) {
                        bt_accept_unlink(sk);
-                       parent->sk_data_ready(parent, 0);
+                       parent->sk_data_ready(parent);
                } else {
                        sk->sk_state_change(sk);
                }
@@ -1327,7 +1327,7 @@ static void l2cap_sock_ready_cb(struct l2cap_chan *chan)
        sk->sk_state_change(sk);
 
        if (parent)
-               parent->sk_data_ready(parent, 0);
+               parent->sk_data_ready(parent);
 
        release_sock(sk);
 }
@@ -1340,7 +1340,7 @@ static void l2cap_sock_defer_cb(struct l2cap_chan *chan)
 
        parent = bt_sk(sk)->parent;
        if (parent)
-               parent->sk_data_ready(parent, 0);
+               parent->sk_data_ready(parent);
 
        release_sock(sk);
 }
index 633cceeb943eefe798bcc4e8d5a4d85af00b4514..cf620260affaea75c4c1e9875ca338afb04f7b2e 100644 (file)
@@ -186,9 +186,9 @@ static void rfcomm_l2state_change(struct sock *sk)
        rfcomm_schedule();
 }
 
-static void rfcomm_l2data_ready(struct sock *sk, int bytes)
+static void rfcomm_l2data_ready(struct sock *sk)
 {
-       BT_DBG("%p bytes %d", sk, bytes);
+       BT_DBG("%p", sk);
        rfcomm_schedule();
 }
 
index eabd25ab5ad96a14b07624ef6fdfa48715384f45..c603a5eb47204ffae6eb4890da75e7e3c0394df9 100644 (file)
@@ -54,7 +54,7 @@ static void rfcomm_sk_data_ready(struct rfcomm_dlc *d, struct sk_buff *skb)
 
        atomic_add(skb->len, &sk->sk_rmem_alloc);
        skb_queue_tail(&sk->sk_receive_queue, skb);
-       sk->sk_data_ready(sk, skb->len);
+       sk->sk_data_ready(sk);
 
        if (atomic_read(&sk->sk_rmem_alloc) >= sk->sk_rcvbuf)
                rfcomm_dlc_throttle(d);
@@ -84,7 +84,7 @@ static void rfcomm_sk_state_change(struct rfcomm_dlc *d, int err)
                        sock_set_flag(sk, SOCK_ZAPPED);
                        bt_accept_unlink(sk);
                }
-               parent->sk_data_ready(parent, 0);
+               parent->sk_data_ready(parent);
        } else {
                if (d->state == BT_CONNECTED)
                        rfcomm_session_getaddr(d->session,
index ab1e6fcca4c5b07ea6ba1020430aed6a707453d0..c06dbd3938e881e45d575b586830d2bea9d580a0 100644 (file)
@@ -1024,7 +1024,7 @@ static void sco_conn_ready(struct sco_conn *conn)
                        sk->sk_state = BT_CONNECTED;
 
                /* Wake up parent */
-               parent->sk_data_ready(parent, 1);
+               parent->sk_data_ready(parent);
 
                bh_unlock_sock(parent);
 
index d0cca3c65f0174ab8c6522b5f54ab2ad33b66dca..7985deaff52f81cb98e665aaf3e913754b5a671b 100644 (file)
@@ -73,7 +73,7 @@ int br_handle_frame_finish(struct sk_buff *skb)
                goto drop;
 
        if (!br_allowed_ingress(p->br, nbp_get_vlan_info(p), skb, &vid))
-               goto drop;
+               goto out;
 
        /* insert into forwarding database after filtering to avoid spoofing */
        br = p->br;
index 91510712c7a729df3d57c3f118ece9eb3da3fe20..4a37161027899ab12d0f2dd5f4c5d69a1ed98716 100644 (file)
@@ -170,7 +170,7 @@ bool br_allowed_ingress(struct net_bridge *br, struct net_port_vlans *v,
         * rejected.
         */
        if (!v)
-               return false;
+               goto drop;
 
        /* If vlan tx offload is disabled on bridge device and frame was
         * sent from vlan device on the bridge device, it does not have
@@ -193,7 +193,7 @@ bool br_allowed_ingress(struct net_bridge *br, struct net_port_vlans *v,
                 * vlan untagged or priority-tagged traffic belongs to.
                 */
                if (pvid == VLAN_N_VID)
-                       return false;
+                       goto drop;
 
                /* PVID is set on this port.  Any untagged or priority-tagged
                 * ingress frame is considered to belong to this vlan.
@@ -216,7 +216,8 @@ bool br_allowed_ingress(struct net_bridge *br, struct net_port_vlans *v,
        /* Frame had a valid vlan tag.  See if vlan is allowed */
        if (test_bit(*vid, v->vlan_bitmap))
                return true;
-
+drop:
+       kfree_skb(skb);
        return false;
 }
 
index d6be3edb7a43493a18766c6824b0a1c9ac430d05..e8437094d15fc8a7aa342969f9c6ebd7afeb740a 100644 (file)
@@ -124,7 +124,6 @@ static void caif_flow_ctrl(struct sock *sk, int mode)
 static int caif_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
 {
        int err;
-       int skb_len;
        unsigned long flags;
        struct sk_buff_head *list = &sk->sk_receive_queue;
        struct caifsock *cf_sk = container_of(sk, struct caifsock, sk);
@@ -153,14 +152,13 @@ static int caif_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
         * may be freed by other threads of control pulling packets
         * from the queue.
         */
-       skb_len = skb->len;
        spin_lock_irqsave(&list->lock, flags);
        if (!sock_flag(sk, SOCK_DEAD))
                __skb_queue_tail(list, skb);
        spin_unlock_irqrestore(&list->lock, flags);
 
        if (!sock_flag(sk, SOCK_DEAD))
-               sk->sk_data_ready(sk, skb_len);
+               sk->sk_data_ready(sk);
        else
                kfree_skb(skb);
        return 0;
index 4f55f9ce63fac652f789353c6c3dc6f0e932951b..dac7f9b986877efa88f8e308e783c216563ad243 100644 (file)
@@ -383,7 +383,7 @@ static void con_sock_state_closed(struct ceph_connection *con)
  */
 
 /* data available on socket, or listen socket received a connect */
-static void ceph_sock_data_ready(struct sock *sk, int count_unused)
+static void ceph_sock_data_ready(struct sock *sk)
 {
        struct ceph_connection *con = sk->sk_user_data;
        if (atomic_read(&con->msgr->stopping)) {
index d068ec25db1ee42982ed4e6d934de612d9b09a26..0304f981f7ffa5f005b28f08f17ff8264c41bb65 100644 (file)
@@ -3338,7 +3338,9 @@ static void pktgen_xmit(struct pktgen_dev *pkt_dev)
        queue_map = skb_get_queue_mapping(pkt_dev->skb);
        txq = netdev_get_tx_queue(odev, queue_map);
 
-       __netif_tx_lock_bh(txq);
+       local_bh_disable();
+
+       HARD_TX_LOCK(odev, txq, smp_processor_id());
 
        if (unlikely(netif_xmit_frozen_or_drv_stopped(txq))) {
                ret = NETDEV_TX_BUSY;
@@ -3374,7 +3376,9 @@ static void pktgen_xmit(struct pktgen_dev *pkt_dev)
                pkt_dev->last_ok = 0;
        }
 unlock:
-       __netif_tx_unlock_bh(txq);
+       HARD_TX_UNLOCK(odev, txq);
+
+       local_bh_enable();
 
        /* If pkt_dev->count is zero, then run forever */
        if ((pkt_dev->count != 0) && (pkt_dev->sofar >= pkt_dev->count)) {
index 30c7d35dd862a090c691732af63af1e8fdbad41a..1b62343f58378b3d8fc0e3ea048dbb45ce1e3a76 100644 (file)
@@ -3458,8 +3458,6 @@ static void sock_rmem_free(struct sk_buff *skb)
  */
 int sock_queue_err_skb(struct sock *sk, struct sk_buff *skb)
 {
-       int len = skb->len;
-
        if (atomic_read(&sk->sk_rmem_alloc) + skb->truesize >=
            (unsigned int)sk->sk_rcvbuf)
                return -ENOMEM;
@@ -3474,7 +3472,7 @@ int sock_queue_err_skb(struct sock *sk, struct sk_buff *skb)
 
        skb_queue_tail(&sk->sk_error_queue, skb);
        if (!sock_flag(sk, SOCK_DEAD))
-               sk->sk_data_ready(sk, len);
+               sk->sk_data_ready(sk);
        return 0;
 }
 EXPORT_SYMBOL(sock_queue_err_skb);
@@ -3937,12 +3935,14 @@ EXPORT_SYMBOL_GPL(skb_scrub_packet);
 unsigned int skb_gso_transport_seglen(const struct sk_buff *skb)
 {
        const struct skb_shared_info *shinfo = skb_shinfo(skb);
-       unsigned int hdr_len;
 
        if (likely(shinfo->gso_type & (SKB_GSO_TCPV4 | SKB_GSO_TCPV6)))
-               hdr_len = tcp_hdrlen(skb);
-       else
-               hdr_len = sizeof(struct udphdr);
-       return hdr_len + shinfo->gso_size;
+               return tcp_hdrlen(skb) + shinfo->gso_size;
+
+       /* UFO sets gso_size to the size of the fragmentation
+        * payload, i.e. the size of the L4 (UDP) header is already
+        * accounted for.
+        */
+       return shinfo->gso_size;
 }
 EXPORT_SYMBOL_GPL(skb_gso_transport_seglen);
index c0fc6bdad1e3629f123244d6d7c77805c9b5f0bd..b4fff008136fafcca363e3a41ef441c2a1be878b 100644 (file)
@@ -428,7 +428,7 @@ int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
        spin_unlock_irqrestore(&list->lock, flags);
 
        if (!sock_flag(sk, SOCK_DEAD))
-               sk->sk_data_ready(sk, skb_len);
+               sk->sk_data_ready(sk);
        return 0;
 }
 EXPORT_SYMBOL(sock_queue_rcv_skb);
@@ -2196,7 +2196,7 @@ static void sock_def_error_report(struct sock *sk)
        rcu_read_unlock();
 }
 
-static void sock_def_readable(struct sock *sk, int len)
+static void sock_def_readable(struct sock *sk)
 {
        struct socket_wq *wq;
 
index 14cdafad7a90218d91ad135e3703c21401883e05..3c8ec7d4a34ec3523a041be3b4c1fd8f73541010 100644 (file)
@@ -28,7 +28,7 @@ static void dccp_enqueue_skb(struct sock *sk, struct sk_buff *skb)
        __skb_pull(skb, dccp_hdr(skb)->dccph_doff * 4);
        __skb_queue_tail(&sk->sk_receive_queue, skb);
        skb_set_owner_r(skb, sk);
-       sk->sk_data_ready(sk, 0);
+       sk->sk_data_ready(sk);
 }
 
 static void dccp_fin(struct sock *sk, struct sk_buff *skb)
index 9e2f78bc1553e38ed45c66e3c3aba4db302fa0b0..c69eb9c4fbb832fd641d5dc80b0520cb55a99438 100644 (file)
@@ -237,7 +237,7 @@ int dccp_child_process(struct sock *parent, struct sock *child,
 
                /* Wakeup parent, send SIGIO */
                if (state == DCCP_RESPOND && child->sk_state != state)
-                       parent->sk_data_ready(parent, 0);
+                       parent->sk_data_ready(parent);
        } else {
                /* Alas, it is possible again, because we do lookup
                 * in main socket hash table and lock on listening
index c344163e6ac0e7bef952e25280601b60d2f74dbe..fe5f01485d3370ba4d645e4e640f073a1e26e41c 100644 (file)
@@ -585,7 +585,6 @@ out:
 static __inline__ int dn_queue_skb(struct sock *sk, struct sk_buff *skb, int sig, struct sk_buff_head *queue)
 {
        int err;
-       int skb_len;
 
        /* Cast skb->rcvbuf to unsigned... It's pointless, but reduces
           number of warnings when compiling with -W --ANK
@@ -600,12 +599,11 @@ static __inline__ int dn_queue_skb(struct sock *sk, struct sk_buff *skb, int sig
        if (err)
                goto out;
 
-       skb_len = skb->len;
        skb_set_owner_r(skb, sk);
        skb_queue_tail(queue, skb);
 
        if (!sock_flag(sk, SOCK_DEAD))
-               sk->sk_data_ready(sk, skb_len);
+               sk->sk_data_ready(sk);
 out:
        return err;
 }
index ec4f762efda50918254329d9cccfd493533fae4b..94213c89156511d86682b2c3e034f9e5b6ef5ccb 100644 (file)
@@ -463,6 +463,7 @@ static const struct net_device_ops ipgre_netdev_ops = {
 static void ipgre_tunnel_setup(struct net_device *dev)
 {
        dev->netdev_ops         = &ipgre_netdev_ops;
+       dev->type               = ARPHRD_IPGRE;
        ip_tunnel_setup(dev, ipgre_net_id);
 }
 
@@ -501,7 +502,6 @@ static int ipgre_tunnel_init(struct net_device *dev)
        memcpy(dev->dev_addr, &iph->saddr, 4);
        memcpy(dev->broadcast, &iph->daddr, 4);
 
-       dev->type               = ARPHRD_IPGRE;
        dev->flags              = IFF_NOARP;
        dev->priv_flags         &= ~IFF_XMIT_DST_RELEASE;
        dev->addr_len           = 4;
index 687ddef4e5747274fc9c248b73d3869ed57fe21f..afcee51b90ede30a846bbd7a5c16b6996d955889 100644 (file)
@@ -337,6 +337,7 @@ static const struct net_device_ops vti_netdev_ops = {
 static void vti_tunnel_setup(struct net_device *dev)
 {
        dev->netdev_ops         = &vti_netdev_ops;
+       dev->type               = ARPHRD_TUNNEL;
        ip_tunnel_setup(dev, vti_net_id);
 }
 
@@ -348,7 +349,6 @@ static int vti_tunnel_init(struct net_device *dev)
        memcpy(dev->dev_addr, &iph->saddr, 4);
        memcpy(dev->broadcast, &iph->daddr, 4);
 
-       dev->type               = ARPHRD_TUNNEL;
        dev->hard_header_len    = LL_MAX_HEADER + sizeof(struct iphdr);
        dev->mtu                = ETH_DATA_LEN;
        dev->flags              = IFF_NOARP;
index e1661f46fd19fb588555e9f769b9eed2c02fd27d..d6b46eb2f94c5e6fb7eb77592722115eed9c8d7c 100644 (file)
@@ -4413,7 +4413,7 @@ queue_and_out:
                if (eaten > 0)
                        kfree_skb_partial(skb, fragstolen);
                if (!sock_flag(sk, SOCK_DEAD))
-                       sk->sk_data_ready(sk, 0);
+                       sk->sk_data_ready(sk);
                return;
        }
 
@@ -4914,7 +4914,7 @@ static void tcp_urg(struct sock *sk, struct sk_buff *skb, const struct tcphdr *t
                                BUG();
                        tp->urg_data = TCP_URG_VALID | tmp;
                        if (!sock_flag(sk, SOCK_DEAD))
-                               sk->sk_data_ready(sk, 0);
+                               sk->sk_data_ready(sk);
                }
        }
 }
@@ -5000,11 +5000,11 @@ static bool tcp_dma_try_early_copy(struct sock *sk, struct sk_buff *skb,
                    (tcp_flag_word(tcp_hdr(skb)) & TCP_FLAG_PSH) ||
                    (atomic_read(&sk->sk_rmem_alloc) > (sk->sk_rcvbuf >> 1))) {
                        tp->ucopy.wakeup = 1;
-                       sk->sk_data_ready(sk, 0);
+                       sk->sk_data_ready(sk);
                }
        } else if (chunk > 0) {
                tp->ucopy.wakeup = 1;
-               sk->sk_data_ready(sk, 0);
+               sk->sk_data_ready(sk);
        }
 out:
        return copied_early;
@@ -5275,7 +5275,7 @@ no_ack:
 #endif
                        if (eaten)
                                kfree_skb_partial(skb, fragstolen);
-                       sk->sk_data_ready(sk, 0);
+                       sk->sk_data_ready(sk);
                        return;
                }
        }
index 6379894ec210c0f3077366a539417385671c5faa..438f3b95143df0bffa01322c62b44c8fcd6d6b8b 100644 (file)
@@ -1434,7 +1434,7 @@ static int tcp_v4_conn_req_fastopen(struct sock *sk,
                tp->rcv_nxt = TCP_SKB_CB(skb)->end_seq;
                tp->syn_data_acked = 1;
        }
-       sk->sk_data_ready(sk, 0);
+       sk->sk_data_ready(sk);
        bh_unlock_sock(child);
        sock_put(child);
        WARN_ON(req->sk == NULL);
index ca788ada5bd3619f2db2b3865e6469eb7c60f015..05c1b155251d39d2e559d050f1e191f51f32b3e0 100644 (file)
@@ -745,7 +745,7 @@ int tcp_child_process(struct sock *parent, struct sock *child,
                                            skb->len);
                /* Wakeup parent, send SIGIO */
                if (state == TCP_SYN_RECV && child->sk_state != state)
-                       parent->sk_data_ready(parent, 0);
+                       parent->sk_data_ready(parent);
        } else {
                /* Alas, it is possible again, because we do lookup
                 * in main socket hash table and lock on listening
index 5ca56cee2dae06830683927658397f6b7a23ecd4..e289830ed6e35a3be4feda700b5b6789dac20292 100644 (file)
@@ -798,7 +798,7 @@ static void tcp_v6_send_response(struct sk_buff *skb, u32 seq, u32 ack, u32 win,
        __tcp_v6_send_check(buff, &fl6.saddr, &fl6.daddr);
 
        fl6.flowi6_proto = IPPROTO_TCP;
-       if (rt6_need_strict(&fl6.daddr) || !oif)
+       if (rt6_need_strict(&fl6.daddr) && !oif)
                fl6.flowi6_oif = inet6_iif(skb);
        else
                fl6.flowi6_oif = oif;
index a5e03119107a5563be4a4307fa56885d8e3952ff..01e77b0ae0755d037093e7597a42db2a66378a51 100644 (file)
@@ -1757,7 +1757,7 @@ static int iucv_callback_connreq(struct iucv_path *path,
 
        /* Wake up accept */
        nsk->sk_state = IUCV_CONNECTED;
-       sk->sk_data_ready(sk, 1);
+       sk->sk_data_ready(sk);
        err = 0;
 fail:
        bh_unlock_sock(sk);
@@ -1968,7 +1968,7 @@ static int afiucv_hs_callback_syn(struct sock *sk, struct sk_buff *skb)
        if (!err) {
                iucv_accept_enqueue(sk, nsk);
                nsk->sk_state = IUCV_CONNECTED;
-               sk->sk_data_ready(sk, 1);
+               sk->sk_data_ready(sk);
        } else
                iucv_sock_kill(nsk);
        bh_unlock_sock(sk);
index e72589a8400dbf7e35a68468149bc7ce601b48be..f3c83073afc49f7aad98262cc5776b3edddc7f87 100644 (file)
@@ -205,7 +205,7 @@ static int pfkey_broadcast_one(struct sk_buff *skb, struct sk_buff **skb2,
                if (atomic_read(&sk->sk_rmem_alloc) <= sk->sk_rcvbuf) {
                        skb_set_owner_r(*skb2, sk);
                        skb_queue_tail(&sk->sk_receive_queue, *skb2);
-                       sk->sk_data_ready(sk, (*skb2)->len);
+                       sk->sk_data_ready(sk);
                        *skb2 = NULL;
                        err = 0;
                }
index d276e2d4a5894c38c6489eb2f814542a181f6d75..950909f04ee6ab598a0bdd16f8d6ad6ec2a931ed 100644 (file)
@@ -753,9 +753,9 @@ static int pppol2tp_connect(struct socket *sock, struct sockaddr *uservaddr,
        session->deref = pppol2tp_session_sock_put;
 
        /* If PMTU discovery was enabled, use the MTU that was discovered */
-       dst = sk_dst_get(sk);
+       dst = sk_dst_get(tunnel->sock);
        if (dst != NULL) {
-               u32 pmtu = dst_mtu(__sk_dst_get(sk));
+               u32 pmtu = dst_mtu(__sk_dst_get(tunnel->sock));
                if (pmtu != 0)
                        session->mtu = session->mru = pmtu -
                                PPPOL2TP_HEADER_OVERHEAD;
index c2d585c4f7c5cb2c82ea2adb03723e90b61c91f1..894cda0206bb9b8a32488ec81959482a7cc582d5 100644 (file)
@@ -1653,7 +1653,7 @@ static int __netlink_sendskb(struct sock *sk, struct sk_buff *skb)
        else
 #endif /* CONFIG_NETLINK_MMAP */
                skb_queue_tail(&sk->sk_receive_queue, skb);
-       sk->sk_data_ready(sk, len);
+       sk->sk_data_ready(sk);
        return len;
 }
 
@@ -2394,7 +2394,7 @@ out:
        return err ? : copied;
 }
 
-static void netlink_data_ready(struct sock *sk, int len)
+static void netlink_data_ready(struct sock *sk)
 {
        BUG();
 }
index b74aa0755521bc2bcfc757ea056c2e9c582fdf2e..ede50d197e10dfaf3ec73670f40a82ae94c51111 100644 (file)
@@ -1011,7 +1011,7 @@ int nr_rx_frame(struct sk_buff *skb, struct net_device *dev)
        skb_queue_head(&sk->sk_receive_queue, skb);
 
        if (!sock_flag(sk, SOCK_DEAD))
-               sk->sk_data_ready(sk, skb->len);
+               sk->sk_data_ready(sk);
 
        bh_unlock_sock(sk);
 
index b486f12ae2433f175cdcf62af7284c812c9ea29e..b4671958fcf935c3c3d984afc18f473bc882eae4 100644 (file)
@@ -976,7 +976,7 @@ static void nfc_llcp_recv_connect(struct nfc_llcp_local *local,
        new_sk->sk_state = LLCP_CONNECTED;
 
        /* Wake the listening processes */
-       parent->sk_data_ready(parent, 0);
+       parent->sk_data_ready(parent);
 
        /* Send CC */
        nfc_llcp_send_cc(new_sock);
index 72e0c71fb01dddeee530067b341601d7196b25b3..b85c67ccb797197abf51596ac5f3044131aa97d8 100644 (file)
@@ -1848,7 +1848,7 @@ static int packet_rcv(struct sk_buff *skb, struct net_device *dev,
        skb->dropcount = atomic_read(&sk->sk_drops);
        __skb_queue_tail(&sk->sk_receive_queue, skb);
        spin_unlock(&sk->sk_receive_queue.lock);
-       sk->sk_data_ready(sk, skb->len);
+       sk->sk_data_ready(sk);
        return 0;
 
 drop_n_acct:
@@ -2054,7 +2054,7 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev,
        else
                prb_clear_blk_fill_status(&po->rx_ring);
 
-       sk->sk_data_ready(sk, 0);
+       sk->sk_data_ready(sk);
 
 drop_n_restore:
        if (skb_head != skb->data && skb_shared(skb)) {
@@ -2069,7 +2069,7 @@ ring_is_full:
        po->stats.stats1.tp_drops++;
        spin_unlock(&sk->sk_receive_queue.lock);
 
-       sk->sk_data_ready(sk, 0);
+       sk->sk_data_ready(sk);
        kfree_skb(copy_skb);
        goto drop_n_restore;
 }
index a2fba7edfd1f433546a65b5ae386d97b80e16caa..66dc65e7c6a1079d09f63c6caa3de115cc22bc54 100644 (file)
@@ -37,7 +37,7 @@
 struct gprs_dev {
        struct sock             *sk;
        void                    (*old_state_change)(struct sock *);
-       void                    (*old_data_ready)(struct sock *, int);
+       void                    (*old_data_ready)(struct sock *);
        void                    (*old_write_space)(struct sock *);
 
        struct net_device       *dev;
@@ -146,7 +146,7 @@ drop:
        return err;
 }
 
-static void gprs_data_ready(struct sock *sk, int len)
+static void gprs_data_ready(struct sock *sk)
 {
        struct gprs_dev *gp = sk->sk_user_data;
        struct sk_buff *skb;
index e77411735de8e53f516e9b735c7966485af56470..70a547ea51777784fdd545b4c86d7da69991a53a 100644 (file)
@@ -462,10 +462,9 @@ out:
 queue:
        skb->dev = NULL;
        skb_set_owner_r(skb, sk);
-       err = skb->len;
        skb_queue_tail(queue, skb);
        if (!sock_flag(sk, SOCK_DEAD))
-               sk->sk_data_ready(sk, err);
+               sk->sk_data_ready(sk);
        return NET_RX_SUCCESS;
 }
 
@@ -587,10 +586,9 @@ static int pipe_handler_do_rcv(struct sock *sk, struct sk_buff *skb)
                pn->rx_credits--;
                skb->dev = NULL;
                skb_set_owner_r(skb, sk);
-               err = skb->len;
                skb_queue_tail(&sk->sk_receive_queue, skb);
                if (!sock_flag(sk, SOCK_DEAD))
-                       sk->sk_data_ready(sk, err);
+                       sk->sk_data_ready(sk);
                return NET_RX_SUCCESS;
 
        case PNS_PEP_CONNECT_RESP:
@@ -698,7 +696,7 @@ static int pep_do_rcv(struct sock *sk, struct sk_buff *skb)
                skb_queue_head(&sk->sk_receive_queue, skb);
                sk_acceptq_added(sk);
                if (!sock_flag(sk, SOCK_DEAD))
-                       sk->sk_data_ready(sk, 0);
+                       sk->sk_data_ready(sk);
                return NET_RX_SUCCESS;
 
        case PNS_PEP_DISCONNECT_REQ:
index 9cf2927d0021445f4e4e54f906b989e87c49f3f1..65637491f72857954207dc7fa974335110d44ef4 100644 (file)
@@ -61,12 +61,12 @@ void rds_tcp_state_change(struct sock *sk);
 /* tcp_listen.c */
 int rds_tcp_listen_init(void);
 void rds_tcp_listen_stop(void);
-void rds_tcp_listen_data_ready(struct sock *sk, int bytes);
+void rds_tcp_listen_data_ready(struct sock *sk);
 
 /* tcp_recv.c */
 int rds_tcp_recv_init(void);
 void rds_tcp_recv_exit(void);
-void rds_tcp_data_ready(struct sock *sk, int bytes);
+void rds_tcp_data_ready(struct sock *sk);
 int rds_tcp_recv(struct rds_connection *conn);
 void rds_tcp_inc_free(struct rds_incoming *inc);
 int rds_tcp_inc_copy_to_user(struct rds_incoming *inc, struct iovec *iov,
index 7787537e9c2e95fffbcc8f89d594fc6de6ad52fe..4e638f85118595d59c888917a9c3f072050c5780 100644 (file)
@@ -108,9 +108,9 @@ static void rds_tcp_accept_worker(struct work_struct *work)
                cond_resched();
 }
 
-void rds_tcp_listen_data_ready(struct sock *sk, int bytes)
+void rds_tcp_listen_data_ready(struct sock *sk)
 {
-       void (*ready)(struct sock *sk, int bytes);
+       void (*ready)(struct sock *sk);
 
        rdsdebug("listen data ready sk %p\n", sk);
 
@@ -132,7 +132,7 @@ void rds_tcp_listen_data_ready(struct sock *sk, int bytes)
 
 out:
        read_unlock(&sk->sk_callback_lock);
-       ready(sk, bytes);
+       ready(sk);
 }
 
 int rds_tcp_listen_init(void)
index 4fac4f2bb9dccd11f304aa6dd94f8852e91a5b53..9ae6e0a264ec0c52d2d495da66d1acdfb36f0917 100644 (file)
@@ -314,13 +314,13 @@ int rds_tcp_recv(struct rds_connection *conn)
        return ret;
 }
 
-void rds_tcp_data_ready(struct sock *sk, int bytes)
+void rds_tcp_data_ready(struct sock *sk)
 {
-       void (*ready)(struct sock *sk, int bytes);
+       void (*ready)(struct sock *sk);
        struct rds_connection *conn;
        struct rds_tcp_connection *tc;
 
-       rdsdebug("data ready sk %p bytes %d\n", sk, bytes);
+       rdsdebug("data ready sk %p\n", sk);
 
        read_lock(&sk->sk_callback_lock);
        conn = sk->sk_user_data;
@@ -337,7 +337,7 @@ void rds_tcp_data_ready(struct sock *sk, int bytes)
                queue_delayed_work(rds_wq, &conn->c_recv_w, 0);
 out:
        read_unlock(&sk->sk_callback_lock);
-       ready(sk, bytes);
+       ready(sk);
 }
 
 int rds_tcp_recv_init(void)
index c2cca2ee6aefc1f4b98db1334469dbcb4f095ad1..8451c8cdc9deb534ed335a065c64a47e570170cd 100644 (file)
@@ -1041,7 +1041,7 @@ int rose_rx_call_request(struct sk_buff *skb, struct net_device *dev, struct ros
        rose_start_heartbeat(make);
 
        if (!sock_flag(sk, SOCK_DEAD))
-               sk->sk_data_ready(sk, skb->len);
+               sk->sk_data_ready(sk);
 
        return 1;
 }
index 73742647c1354ebc76cdc44289fcc5948ca188ac..63b21e580de95d21c60bfeeffac7d2b0aaefaf42 100644 (file)
@@ -113,7 +113,7 @@ int rxrpc_queue_rcv_skb(struct rxrpc_call *call, struct sk_buff *skb,
                        spin_unlock_bh(&sk->sk_receive_queue.lock);
 
                        if (!sock_flag(sk, SOCK_DEAD))
-                               sk->sk_data_ready(sk, skb_len);
+                               sk->sk_data_ready(sk);
                }
                skb = NULL;
        } else {
@@ -632,14 +632,14 @@ cant_find_conn:
  * handle data received on the local endpoint
  * - may be called in interrupt context
  */
-void rxrpc_data_ready(struct sock *sk, int count)
+void rxrpc_data_ready(struct sock *sk)
 {
        struct rxrpc_skb_priv *sp;
        struct rxrpc_local *local;
        struct sk_buff *skb;
        int ret;
 
-       _enter("%p, %d", sk, count);
+       _enter("%p", sk);
 
        ASSERT(!irqs_disabled());
 
index c831d44b0841a07233c20881a1fc516ab425041d..ba9fd36d3f156452c470a93a0b04e428672daa35 100644 (file)
@@ -518,7 +518,7 @@ void rxrpc_UDP_error_handler(struct work_struct *);
  */
 extern const char *rxrpc_pkts[];
 
-void rxrpc_data_ready(struct sock *, int);
+void rxrpc_data_ready(struct sock *);
 int rxrpc_queue_rcv_skb(struct rxrpc_call *, struct sk_buff *, bool, bool);
 void rxrpc_fast_process_packet(struct rxrpc_call *, struct sk_buff *);
 
index 5f83a6a2fa67e9101ca839cf63c7fd411a0e30d2..e13519e9df80679a618f4e058dce88443b8add6c 100644 (file)
@@ -6604,6 +6604,12 @@ static void sctp_wake_up_waiters(struct sock *sk,
        if (asoc->ep->sndbuf_policy)
                return __sctp_write_space(asoc);
 
+       /* If association goes down and is just flushing its
+        * outq, then just normally notify others.
+        */
+       if (asoc->base.dead)
+               return sctp_write_space(sk);
+
        /* Accounting for the sndbuf space is per socket, so we
         * need to wake up others, try to be fair and in case of
         * other associations, let them have a go first instead
@@ -6739,7 +6745,7 @@ do_nonblock:
        goto out;
 }
 
-void sctp_data_ready(struct sock *sk, int len)
+void sctp_data_ready(struct sock *sk)
 {
        struct socket_wq *wq;
 
index 5dc94117e9d42d7e1eb24be6d8015c89feae7b6d..7144eb6a1b95ccad39f9376f723756e0b2c75a2c 100644 (file)
@@ -259,7 +259,7 @@ int sctp_ulpq_tail_event(struct sctp_ulpq *ulpq, struct sctp_ulpevent *event)
                sctp_ulpq_clear_pd(ulpq);
 
        if (queue == &sk->sk_receive_queue)
-               sk->sk_data_ready(sk, 0);
+               sk->sk_data_ready(sk);
        return 1;
 
 out_free:
@@ -1135,5 +1135,5 @@ void sctp_ulpq_abort_pd(struct sctp_ulpq *ulpq, gfp_t gfp)
 
        /* If there is data waiting, send it up the socket now. */
        if (sctp_ulpq_clear_pd(ulpq) || ev)
-               sk->sk_data_ready(sk, 0);
+               sk->sk_data_ready(sk);
 }
index d06cb8752dcd72de2aeae7ddbe7262aa435e46a1..43bcb4699d69b377825531a21937df021bb958eb 100644 (file)
@@ -60,7 +60,7 @@
 
 static struct svc_sock *svc_setup_socket(struct svc_serv *, struct socket *,
                                         int flags);
-static void            svc_udp_data_ready(struct sock *, int);
+static void            svc_udp_data_ready(struct sock *);
 static int             svc_udp_recvfrom(struct svc_rqst *);
 static int             svc_udp_sendto(struct svc_rqst *);
 static void            svc_sock_detach(struct svc_xprt *);
@@ -403,14 +403,14 @@ static void svc_sock_setbufsize(struct socket *sock, unsigned int snd,
 /*
  * INET callback when data has been received on the socket.
  */
-static void svc_udp_data_ready(struct sock *sk, int count)
+static void svc_udp_data_ready(struct sock *sk)
 {
        struct svc_sock *svsk = (struct svc_sock *)sk->sk_user_data;
        wait_queue_head_t *wq = sk_sleep(sk);
 
        if (svsk) {
-               dprintk("svc: socket %p(inet %p), count=%d, busy=%d\n",
-                       svsk, sk, count,
+               dprintk("svc: socket %p(inet %p), busy=%d\n",
+                       svsk, sk,
                        test_bit(XPT_BUSY, &svsk->sk_xprt.xpt_flags));
                set_bit(XPT_DATA, &svsk->sk_xprt.xpt_flags);
                svc_xprt_enqueue(&svsk->sk_xprt);
@@ -731,7 +731,7 @@ static void svc_udp_init(struct svc_sock *svsk, struct svc_serv *serv)
  * A data_ready event on a listening socket means there's a connection
  * pending. Do not use state_change as a substitute for it.
  */
-static void svc_tcp_listen_data_ready(struct sock *sk, int count_unused)
+static void svc_tcp_listen_data_ready(struct sock *sk)
 {
        struct svc_sock *svsk = (struct svc_sock *)sk->sk_user_data;
        wait_queue_head_t *wq;
@@ -783,7 +783,7 @@ static void svc_tcp_state_change(struct sock *sk)
                wake_up_interruptible_all(wq);
 }
 
-static void svc_tcp_data_ready(struct sock *sk, int count)
+static void svc_tcp_data_ready(struct sock *sk)
 {
        struct svc_sock *svsk = (struct svc_sock *)sk->sk_user_data;
        wait_queue_head_t *wq = sk_sleep(sk);
index 6735e1d1e9bb4dcf6c550c20e622bbeb43dc335c..25a3dcf15cae97ff54f315412848c269acef3b01 100644 (file)
@@ -254,7 +254,7 @@ struct sock_xprt {
        /*
         * Saved socket callback addresses
         */
-       void                    (*old_data_ready)(struct sock *, int);
+       void                    (*old_data_ready)(struct sock *);
        void                    (*old_state_change)(struct sock *);
        void                    (*old_write_space)(struct sock *);
        void                    (*old_error_report)(struct sock *);
@@ -951,7 +951,7 @@ static int xs_local_copy_to_xdr(struct xdr_buf *xdr, struct sk_buff *skb)
  *
  * Currently this assumes we can read the whole reply in a single gulp.
  */
-static void xs_local_data_ready(struct sock *sk, int len)
+static void xs_local_data_ready(struct sock *sk)
 {
        struct rpc_task *task;
        struct rpc_xprt *xprt;
@@ -1014,7 +1014,7 @@ static void xs_local_data_ready(struct sock *sk, int len)
  * @len: how much data to read
  *
  */
-static void xs_udp_data_ready(struct sock *sk, int len)
+static void xs_udp_data_ready(struct sock *sk)
 {
        struct rpc_task *task;
        struct rpc_xprt *xprt;
@@ -1437,7 +1437,7 @@ static int xs_tcp_data_recv(read_descriptor_t *rd_desc, struct sk_buff *skb, uns
  * @bytes: how much data to read
  *
  */
-static void xs_tcp_data_ready(struct sock *sk, int bytes)
+static void xs_tcp_data_ready(struct sock *sk)
 {
        struct rpc_xprt *xprt;
        read_descriptor_t rd_desc;
index 646a930eefbf8fa9a86cfe7011848143aafa49b8..a538a02f869b0745000ab117d80791e6d9262c69 100644 (file)
@@ -119,7 +119,7 @@ static struct tipc_conn *tipc_conn_lookup(struct tipc_server *s, int conid)
        return con;
 }
 
-static void sock_data_ready(struct sock *sk, int unused)
+static void sock_data_ready(struct sock *sk)
 {
        struct tipc_conn *con;
 
@@ -297,7 +297,7 @@ static int tipc_accept_from_sock(struct tipc_conn *con)
        newcon->usr_data = s->tipc_conn_new(newcon->conid);
 
        /* Wake up receive process in case of 'SYN+' message */
-       newsock->sk->sk_data_ready(newsock->sk, 0);
+       newsock->sk->sk_data_ready(newsock->sk);
        return ret;
 }
 
index adc12e2273032f8eeb9c19b099510562d9607837..3c0256962f7dafa4ee3b11d69aed963822c888c2 100644 (file)
@@ -45,7 +45,7 @@
 #define CONN_TIMEOUT_DEFAULT   8000    /* default connect timeout = 8s */
 
 static int backlog_rcv(struct sock *sk, struct sk_buff *skb);
-static void tipc_data_ready(struct sock *sk, int len);
+static void tipc_data_ready(struct sock *sk);
 static void tipc_write_space(struct sock *sk);
 static int tipc_release(struct socket *sock);
 static int tipc_accept(struct socket *sock, struct socket *new_sock, int flags);
@@ -1248,7 +1248,7 @@ static void tipc_write_space(struct sock *sk)
  * @sk: socket
  * @len: the length of messages
  */
-static void tipc_data_ready(struct sock *sk, int len)
+static void tipc_data_ready(struct sock *sk)
 {
        struct socket_wq *wq;
 
@@ -1410,7 +1410,7 @@ static u32 filter_rcv(struct sock *sk, struct sk_buff *buf)
        __skb_queue_tail(&sk->sk_receive_queue, buf);
        skb_set_owner_r(buf, sk);
 
-       sk->sk_data_ready(sk, 0);
+       sk->sk_data_ready(sk);
        return TIPC_OK;
 }
 
index 94404f19f9deebbb7c55b7a1660dd011510ba3fd..bb7e8ba821f44014d65f3669e017b8c9cca54f53 100644 (file)
@@ -1217,7 +1217,7 @@ restart:
        __skb_queue_tail(&other->sk_receive_queue, skb);
        spin_unlock(&other->sk_receive_queue.lock);
        unix_state_unlock(other);
-       other->sk_data_ready(other, 0);
+       other->sk_data_ready(other);
        sock_put(other);
        return 0;
 
@@ -1600,7 +1600,7 @@ restart:
        if (max_level > unix_sk(other)->recursion_level)
                unix_sk(other)->recursion_level = max_level;
        unix_state_unlock(other);
-       other->sk_data_ready(other, len);
+       other->sk_data_ready(other);
        sock_put(other);
        scm_destroy(siocb->scm);
        return len;
@@ -1706,7 +1706,7 @@ static int unix_stream_sendmsg(struct kiocb *kiocb, struct socket *sock,
                if (max_level > unix_sk(other)->recursion_level)
                        unix_sk(other)->recursion_level = max_level;
                unix_state_unlock(other);
-               other->sk_data_ready(other, size);
+               other->sk_data_ready(other);
                sent += size;
        }
 
index 9a730744e7bcf7fd1a0d79963666e32494be773c..9b7f207f2bee08770675f603a2ac20926937f06c 100644 (file)
@@ -315,7 +315,7 @@ vmci_transport_handle_wrote(struct sock *sk,
        struct vsock_sock *vsk = vsock_sk(sk);
        PKT_FIELD(vsk, sent_waiting_read) = false;
 #endif
-       sk->sk_data_ready(sk, 0);
+       sk->sk_data_ready(sk);
 }
 
 static void vmci_transport_notify_pkt_socket_init(struct sock *sk)
index 622bd7aa10160ef4434eb3b462f51c347df34c47..dc9c7929a2f959f533e198c6e0c178571f2abd9d 100644 (file)
@@ -92,7 +92,7 @@ vmci_transport_handle_wrote(struct sock *sk,
                            bool bottom_half,
                            struct sockaddr_vm *dst, struct sockaddr_vm *src)
 {
-       sk->sk_data_ready(sk, 0);
+       sk->sk_data_ready(sk);
 }
 
 static void vsock_block_update_write_window(struct sock *sk)
@@ -290,7 +290,7 @@ vmci_transport_notify_pkt_recv_post_dequeue(
                /* See the comment in
                 * vmci_transport_notify_pkt_send_post_enqueue().
                 */
-               sk->sk_data_ready(sk, 0);
+               sk->sk_data_ready(sk);
        }
 
        return err;
index 6177479c7de9d3f7603eadc4a67bb7882074047e..5ad4418ef093f3625ac5efb205dafc2590c4e0e6 100644 (file)
@@ -1064,7 +1064,7 @@ int x25_rx_call_request(struct sk_buff *skb, struct x25_neigh *nb,
        x25_start_heartbeat(make);
 
        if (!sock_flag(sk, SOCK_DEAD))
-               sk->sk_data_ready(sk, skb->len);
+               sk->sk_data_ready(sk);
        rc = 1;
        sock_put(sk);
 out:
index d1b0dc79bb6f15874bd520c41d08f96bd9ff31bb..7ac50098a375427bb482e5e73803bc7b34adc6f9 100644 (file)
@@ -79,7 +79,7 @@ static int x25_queue_rx_frame(struct sock *sk, struct sk_buff *skb, int more)
        skb_set_owner_r(skbn, sk);
        skb_queue_tail(&sk->sk_receive_queue, skbn);
        if (!sock_flag(sk, SOCK_DEAD))
-               sk->sk_data_ready(sk, skbn->len);
+               sk->sk_data_ready(sk);
 
        return 0;
 }