forked from Minki/linux
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
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 ...
This commit is contained in:
commit
454fd351f2
@ -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);
|
||||
|
@ -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)
|
||||
|
@ -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,
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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)) {
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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,
|
||||
|
@ -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);
|
||||
|
||||
|
@ -421,6 +421,7 @@ enum ixbgevf_state_t {
|
||||
__IXGBEVF_DOWN,
|
||||
__IXGBEVF_DISABLED,
|
||||
__IXGBEVF_REMOVING,
|
||||
__IXGBEVF_WORK_INIT,
|
||||
};
|
||||
|
||||
struct ixgbevf_cb {
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
*/
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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++;
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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,
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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);
|
||||
|
||||
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;
|
||||
}
|
||||
|
@ -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 {
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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),
|
||||
|
@ -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;
|
||||
|
@ -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 */
|
||||
|
@ -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;
|
||||
|
@ -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 *);
|
||||
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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))
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
|
@ -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 */
|
||||
|
@ -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);
|
||||
|
@ -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,
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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");
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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:
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
|
@ -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,
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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)) {
|
||||
|
@ -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)) {
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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:
|
||||
|
@ -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,
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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());
|
||||
|
||||
|
@ -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 *);
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user