Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6

* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: (27 commits)
  netfilter: fix CONFIG_COMPAT support
  isdn/avm: fix build when PCMCIA is not enabled
  header: fix broken headers for user space
  e1000e: don't check for alternate MAC addr on parts that don't support it
  e1000e: disable ASPM L1 on 82573
  ll_temac: Fix poll implementation
  netxen: fix a race in netxen_nic_get_stats()
  qlnic: fix a race in qlcnic_get_stats()
  irda: fix a race in irlan_eth_xmit()
  net: sh_eth: remove unused variable
  netxen: update version 4.0.74
  netxen: fix inconsistent lock state
  vlan: Match underlying dev carrier on vlan add
  ibmveth: Fix opps during MTU change on an active device
  ehea: Fix synchronization between HW and SW send queue
  bnx2x: Update bnx2x version to 1.52.53-4
  bnx2x: Fix PHY locking problem
  rds: fix a leak of kernel memory
  netlink: fix compat recvmsg
  netfilter: fix userspace header warning
  ...
This commit is contained in:
Linus Torvalds 2010-08-23 18:30:30 -07:00
commit d1b113bb02
61 changed files with 2064 additions and 246 deletions

View file

@ -36,12 +36,13 @@ config ISDN_DRV_AVMB1_T1ISA
config ISDN_DRV_AVMB1_B1PCMCIA config ISDN_DRV_AVMB1_B1PCMCIA
tristate "AVM B1/M1/M2 PCMCIA support" tristate "AVM B1/M1/M2 PCMCIA support"
depends on PCMCIA
help help
Enable support for the PCMCIA version of the AVM B1 card. Enable support for the PCMCIA version of the AVM B1 card.
config ISDN_DRV_AVMB1_AVM_CS config ISDN_DRV_AVMB1_AVM_CS
tristate "AVM B1/M1/M2 PCMCIA cs module" tristate "AVM B1/M1/M2 PCMCIA cs module"
depends on ISDN_DRV_AVMB1_B1PCMCIA && PCMCIA depends on ISDN_DRV_AVMB1_B1PCMCIA
help help
Enable the PCMCIA client driver for the AVM B1/M1/M2 Enable the PCMCIA client driver for the AVM B1/M1/M2
PCMCIA cards. PCMCIA cards.

View file

@ -928,6 +928,16 @@ config SMC91X
The module will be called smc91x. If you want to compile it as a The module will be called smc91x. If you want to compile it as a
module, say M here and read <file:Documentation/kbuild/modules.txt>. module, say M here and read <file:Documentation/kbuild/modules.txt>.
config PXA168_ETH
tristate "Marvell pxa168 ethernet support"
depends on CPU_PXA168
select PHYLIB
help
This driver supports the pxa168 Ethernet ports.
To compile this driver as a module, choose M here. The module
will be called pxa168_eth.
config NET_NETX config NET_NETX
tristate "NetX Ethernet support" tristate "NetX Ethernet support"
select MII select MII

View file

@ -244,6 +244,7 @@ obj-$(CONFIG_MYRI10GE) += myri10ge/
obj-$(CONFIG_SMC91X) += smc91x.o obj-$(CONFIG_SMC91X) += smc91x.o
obj-$(CONFIG_SMC911X) += smc911x.o obj-$(CONFIG_SMC911X) += smc911x.o
obj-$(CONFIG_SMSC911X) += smsc911x.o obj-$(CONFIG_SMSC911X) += smsc911x.o
obj-$(CONFIG_PXA168_ETH) += pxa168_eth.o
obj-$(CONFIG_BFIN_MAC) += bfin_mac.o obj-$(CONFIG_BFIN_MAC) += bfin_mac.o
obj-$(CONFIG_DM9000) += dm9000.o obj-$(CONFIG_DM9000) += dm9000.o
obj-$(CONFIG_PASEMI_MAC) += pasemi_mac_driver.o obj-$(CONFIG_PASEMI_MAC) += pasemi_mac_driver.o

View file

@ -20,8 +20,8 @@
* (you will need to reboot afterwards) */ * (you will need to reboot afterwards) */
/* #define BNX2X_STOP_ON_ERROR */ /* #define BNX2X_STOP_ON_ERROR */
#define DRV_MODULE_VERSION "1.52.53-3" #define DRV_MODULE_VERSION "1.52.53-4"
#define DRV_MODULE_RELDATE "2010/18/04" #define DRV_MODULE_RELDATE "2010/16/08"
#define BNX2X_BC_VER 0x040200 #define BNX2X_BC_VER 0x040200
#if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE) #if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE)

View file

@ -4328,10 +4328,12 @@ static int bnx2x_init_port(struct bnx2x *bp)
val |= aeu_gpio_mask; val |= aeu_gpio_mask;
REG_WR(bp, offset, val); REG_WR(bp, offset, val);
} }
bp->port.need_hw_lock = 1;
break; break;
case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101:
case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8727: case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8727:
bp->port.need_hw_lock = 1;
case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101:
/* add SPIO 5 to group 0 */ /* add SPIO 5 to group 0 */
{ {
u32 reg_addr = (port ? MISC_REG_AEU_ENABLE1_FUNC_1_OUT_0 : u32 reg_addr = (port ? MISC_REG_AEU_ENABLE1_FUNC_1_OUT_0 :
@ -4341,7 +4343,10 @@ static int bnx2x_init_port(struct bnx2x *bp)
REG_WR(bp, reg_addr, val); REG_WR(bp, reg_addr, val);
} }
break; break;
case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8072:
case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073:
bp->port.need_hw_lock = 1;
break;
default: default:
break; break;
} }

View file

@ -936,12 +936,14 @@ static s32 e1000_reset_hw_82571(struct e1000_hw *hw)
ew32(IMC, 0xffffffff); ew32(IMC, 0xffffffff);
icr = er32(ICR); icr = er32(ICR);
/* Install any alternate MAC address into RAR0 */ if (hw->mac.type == e1000_82571) {
ret_val = e1000_check_alt_mac_addr_generic(hw); /* Install any alternate MAC address into RAR0 */
if (ret_val) ret_val = e1000_check_alt_mac_addr_generic(hw);
return ret_val; if (ret_val)
return ret_val;
e1000e_set_laa_state_82571(hw, true); e1000e_set_laa_state_82571(hw, true);
}
/* Reinitialize the 82571 serdes link state machine */ /* Reinitialize the 82571 serdes link state machine */
if (hw->phy.media_type == e1000_media_type_internal_serdes) if (hw->phy.media_type == e1000_media_type_internal_serdes)
@ -1618,14 +1620,16 @@ static s32 e1000_read_mac_addr_82571(struct e1000_hw *hw)
{ {
s32 ret_val = 0; s32 ret_val = 0;
/* if (hw->mac.type == e1000_82571) {
* If there's an alternate MAC address place it in RAR0 /*
* so that it will override the Si installed default perm * If there's an alternate MAC address place it in RAR0
* address. * so that it will override the Si installed default perm
*/ * address.
ret_val = e1000_check_alt_mac_addr_generic(hw); */
if (ret_val) ret_val = e1000_check_alt_mac_addr_generic(hw);
goto out; if (ret_val)
goto out;
}
ret_val = e1000_read_mac_addr_generic(hw); ret_val = e1000_read_mac_addr_generic(hw);
@ -1833,6 +1837,7 @@ struct e1000_info e1000_82573_info = {
| FLAG_HAS_SMART_POWER_DOWN | FLAG_HAS_SMART_POWER_DOWN
| FLAG_HAS_AMT | FLAG_HAS_AMT
| FLAG_HAS_SWSM_ON_LOAD, | FLAG_HAS_SWSM_ON_LOAD,
.flags2 = FLAG2_DISABLE_ASPM_L1,
.pba = 20, .pba = 20,
.max_hw_frame_size = ETH_FRAME_LEN + ETH_FCS_LEN, .max_hw_frame_size = ETH_FRAME_LEN + ETH_FCS_LEN,
.get_variants = e1000_get_variants_82571, .get_variants = e1000_get_variants_82571,

View file

@ -621,6 +621,7 @@
#define E1000_FLASH_UPDATES 2000 #define E1000_FLASH_UPDATES 2000
/* NVM Word Offsets */ /* NVM Word Offsets */
#define NVM_COMPAT 0x0003
#define NVM_ID_LED_SETTINGS 0x0004 #define NVM_ID_LED_SETTINGS 0x0004
#define NVM_INIT_CONTROL2_REG 0x000F #define NVM_INIT_CONTROL2_REG 0x000F
#define NVM_INIT_CONTROL3_PORT_B 0x0014 #define NVM_INIT_CONTROL3_PORT_B 0x0014
@ -643,6 +644,9 @@
/* Mask bits for fields in Word 0x1a of the NVM */ /* Mask bits for fields in Word 0x1a of the NVM */
#define NVM_WORD1A_ASPM_MASK 0x000C #define NVM_WORD1A_ASPM_MASK 0x000C
/* Mask bits for fields in Word 0x03 of the EEPROM */
#define NVM_COMPAT_LOM 0x0800
/* For checksumming, the sum of all words in the NVM should equal 0xBABA. */ /* For checksumming, the sum of all words in the NVM should equal 0xBABA. */
#define NVM_SUM 0xBABA #define NVM_SUM 0xBABA

View file

@ -183,6 +183,16 @@ s32 e1000_check_alt_mac_addr_generic(struct e1000_hw *hw)
u16 offset, nvm_alt_mac_addr_offset, nvm_data; u16 offset, nvm_alt_mac_addr_offset, nvm_data;
u8 alt_mac_addr[ETH_ALEN]; u8 alt_mac_addr[ETH_ALEN];
ret_val = e1000_read_nvm(hw, NVM_COMPAT, 1, &nvm_data);
if (ret_val)
goto out;
/* Check for LOM (vs. NIC) or one of two valid mezzanine cards */
if (!((nvm_data & NVM_COMPAT_LOM) ||
(hw->adapter->pdev->device == E1000_DEV_ID_82571EB_SERDES_DUAL) ||
(hw->adapter->pdev->device == E1000_DEV_ID_82571EB_SERDES_QUAD)))
goto out;
ret_val = e1000_read_nvm(hw, NVM_ALT_MAC_ADDR_PTR, 1, ret_val = e1000_read_nvm(hw, NVM_ALT_MAC_ADDR_PTR, 1,
&nvm_alt_mac_addr_offset); &nvm_alt_mac_addr_offset);
if (ret_val) { if (ret_val) {

View file

@ -40,7 +40,7 @@
#include <asm/io.h> #include <asm/io.h>
#define DRV_NAME "ehea" #define DRV_NAME "ehea"
#define DRV_VERSION "EHEA_0105" #define DRV_VERSION "EHEA_0106"
/* eHEA capability flags */ /* eHEA capability flags */
#define DLPAR_PORT_ADD_REM 1 #define DLPAR_PORT_ADD_REM 1
@ -400,6 +400,7 @@ struct ehea_port_res {
u32 poll_counter; u32 poll_counter;
struct net_lro_mgr lro_mgr; struct net_lro_mgr lro_mgr;
struct net_lro_desc lro_desc[MAX_LRO_DESCRIPTORS]; struct net_lro_desc lro_desc[MAX_LRO_DESCRIPTORS];
int sq_restart_flag;
}; };

View file

@ -776,6 +776,53 @@ static int ehea_proc_rwqes(struct net_device *dev,
return processed; return processed;
} }
#define SWQE_RESTART_CHECK 0xdeadbeaff00d0000ull
static void reset_sq_restart_flag(struct ehea_port *port)
{
int i;
for (i = 0; i < port->num_def_qps + port->num_add_tx_qps; i++) {
struct ehea_port_res *pr = &port->port_res[i];
pr->sq_restart_flag = 0;
}
}
static void check_sqs(struct ehea_port *port)
{
struct ehea_swqe *swqe;
int swqe_index;
int i, k;
for (i = 0; i < port->num_def_qps + port->num_add_tx_qps; i++) {
struct ehea_port_res *pr = &port->port_res[i];
k = 0;
swqe = ehea_get_swqe(pr->qp, &swqe_index);
memset(swqe, 0, SWQE_HEADER_SIZE);
atomic_dec(&pr->swqe_avail);
swqe->tx_control |= EHEA_SWQE_PURGE;
swqe->wr_id = SWQE_RESTART_CHECK;
swqe->tx_control |= EHEA_SWQE_SIGNALLED_COMPLETION;
swqe->tx_control |= EHEA_SWQE_IMM_DATA_PRESENT;
swqe->immediate_data_length = 80;
ehea_post_swqe(pr->qp, swqe);
while (pr->sq_restart_flag == 0) {
msleep(5);
if (++k == 100) {
ehea_error("HW/SW queues out of sync");
ehea_schedule_port_reset(pr->port);
return;
}
}
}
return;
}
static struct ehea_cqe *ehea_proc_cqes(struct ehea_port_res *pr, int my_quota) static struct ehea_cqe *ehea_proc_cqes(struct ehea_port_res *pr, int my_quota)
{ {
struct sk_buff *skb; struct sk_buff *skb;
@ -793,6 +840,13 @@ static struct ehea_cqe *ehea_proc_cqes(struct ehea_port_res *pr, int my_quota)
cqe_counter++; cqe_counter++;
rmb(); rmb();
if (cqe->wr_id == SWQE_RESTART_CHECK) {
pr->sq_restart_flag = 1;
swqe_av++;
break;
}
if (cqe->status & EHEA_CQE_STAT_ERR_MASK) { if (cqe->status & EHEA_CQE_STAT_ERR_MASK) {
ehea_error("Bad send completion status=0x%04X", ehea_error("Bad send completion status=0x%04X",
cqe->status); cqe->status);
@ -2675,8 +2729,10 @@ static void ehea_flush_sq(struct ehea_port *port)
int k = 0; int k = 0;
while (atomic_read(&pr->swqe_avail) < swqe_max) { while (atomic_read(&pr->swqe_avail) < swqe_max) {
msleep(5); msleep(5);
if (++k == 20) if (++k == 20) {
ehea_error("WARNING: sq not flushed completely");
break; break;
}
} }
} }
} }
@ -2917,6 +2973,7 @@ static void ehea_rereg_mrs(struct work_struct *work)
port_napi_disable(port); port_napi_disable(port);
mutex_unlock(&port->port_lock); mutex_unlock(&port->port_lock);
} }
reset_sq_restart_flag(port);
} }
/* Unregister old memory region */ /* Unregister old memory region */
@ -2951,6 +3008,7 @@ static void ehea_rereg_mrs(struct work_struct *work)
mutex_lock(&port->port_lock); mutex_lock(&port->port_lock);
port_napi_enable(port); port_napi_enable(port);
ret = ehea_restart_qps(dev); ret = ehea_restart_qps(dev);
check_sqs(port);
if (!ret) if (!ret)
netif_wake_queue(dev); netif_wake_queue(dev);
mutex_unlock(&port->port_lock); mutex_unlock(&port->port_lock);

View file

@ -1113,7 +1113,8 @@ static int ibmveth_change_mtu(struct net_device *dev, int new_mtu)
struct ibmveth_adapter *adapter = netdev_priv(dev); struct ibmveth_adapter *adapter = netdev_priv(dev);
struct vio_dev *viodev = adapter->vdev; struct vio_dev *viodev = adapter->vdev;
int new_mtu_oh = new_mtu + IBMVETH_BUFF_OH; int new_mtu_oh = new_mtu + IBMVETH_BUFF_OH;
int i; int i, rc;
int need_restart = 0;
if (new_mtu < IBMVETH_MAX_MTU) if (new_mtu < IBMVETH_MAX_MTU)
return -EINVAL; return -EINVAL;
@ -1127,35 +1128,32 @@ static int ibmveth_change_mtu(struct net_device *dev, int new_mtu)
/* Deactivate all the buffer pools so that the next loop can activate /* Deactivate all the buffer pools so that the next loop can activate
only the buffer pools necessary to hold the new MTU */ only the buffer pools necessary to hold the new MTU */
for (i = 0; i < IbmVethNumBufferPools; i++) if (netif_running(adapter->netdev)) {
if (adapter->rx_buff_pool[i].active) { need_restart = 1;
ibmveth_free_buffer_pool(adapter, adapter->pool_config = 1;
&adapter->rx_buff_pool[i]); ibmveth_close(adapter->netdev);
adapter->rx_buff_pool[i].active = 0; adapter->pool_config = 0;
} }
/* Look for an active buffer pool that can hold the new MTU */ /* Look for an active buffer pool that can hold the new MTU */
for(i = 0; i<IbmVethNumBufferPools; i++) { for(i = 0; i<IbmVethNumBufferPools; i++) {
adapter->rx_buff_pool[i].active = 1; adapter->rx_buff_pool[i].active = 1;
if (new_mtu_oh < adapter->rx_buff_pool[i].buff_size) { if (new_mtu_oh < adapter->rx_buff_pool[i].buff_size) {
if (netif_running(adapter->netdev)) {
adapter->pool_config = 1;
ibmveth_close(adapter->netdev);
adapter->pool_config = 0;
dev->mtu = new_mtu;
vio_cmo_set_dev_desired(viodev,
ibmveth_get_desired_dma
(viodev));
return ibmveth_open(adapter->netdev);
}
dev->mtu = new_mtu; dev->mtu = new_mtu;
vio_cmo_set_dev_desired(viodev, vio_cmo_set_dev_desired(viodev,
ibmveth_get_desired_dma ibmveth_get_desired_dma
(viodev)); (viodev));
if (need_restart) {
return ibmveth_open(adapter->netdev);
}
return 0; return 0;
} }
} }
if (need_restart && (rc = ibmveth_open(adapter->netdev)))
return rc;
return -EINVAL; return -EINVAL;
} }

View file

@ -902,8 +902,8 @@ temac_poll_controller(struct net_device *ndev)
disable_irq(lp->tx_irq); disable_irq(lp->tx_irq);
disable_irq(lp->rx_irq); disable_irq(lp->rx_irq);
ll_temac_rx_irq(lp->tx_irq, lp); ll_temac_rx_irq(lp->tx_irq, ndev);
ll_temac_tx_irq(lp->rx_irq, lp); ll_temac_tx_irq(lp->rx_irq, ndev);
enable_irq(lp->tx_irq); enable_irq(lp->tx_irq);
enable_irq(lp->rx_irq); enable_irq(lp->rx_irq);

View file

@ -53,8 +53,8 @@
#define _NETXEN_NIC_LINUX_MAJOR 4 #define _NETXEN_NIC_LINUX_MAJOR 4
#define _NETXEN_NIC_LINUX_MINOR 0 #define _NETXEN_NIC_LINUX_MINOR 0
#define _NETXEN_NIC_LINUX_SUBVERSION 73 #define _NETXEN_NIC_LINUX_SUBVERSION 74
#define NETXEN_NIC_LINUX_VERSIONID "4.0.73" #define NETXEN_NIC_LINUX_VERSIONID "4.0.74"
#define NETXEN_VERSION_CODE(a, b, c) (((a) << 24) + ((b) << 16) + (c)) #define NETXEN_VERSION_CODE(a, b, c) (((a) << 24) + ((b) << 16) + (c))
#define _major(v) (((v) >> 24) & 0xff) #define _major(v) (((v) >> 24) & 0xff)

View file

@ -1805,8 +1805,6 @@ netxen_post_rx_buffers(struct netxen_adapter *adapter, u32 ringid,
netxen_ctx_msg msg = 0; netxen_ctx_msg msg = 0;
struct list_head *head; struct list_head *head;
spin_lock(&rds_ring->lock);
producer = rds_ring->producer; producer = rds_ring->producer;
head = &rds_ring->free_list; head = &rds_ring->free_list;
@ -1853,8 +1851,6 @@ netxen_post_rx_buffers(struct netxen_adapter *adapter, u32 ringid,
NETXEN_RCV_PRODUCER_OFFSET), msg); NETXEN_RCV_PRODUCER_OFFSET), msg);
} }
} }
spin_unlock(&rds_ring->lock);
} }
static void static void

View file

@ -2032,8 +2032,6 @@ struct net_device_stats *netxen_nic_get_stats(struct net_device *netdev)
struct netxen_adapter *adapter = netdev_priv(netdev); struct netxen_adapter *adapter = netdev_priv(netdev);
struct net_device_stats *stats = &netdev->stats; struct net_device_stats *stats = &netdev->stats;
memset(stats, 0, sizeof(*stats));
stats->rx_packets = adapter->stats.rx_pkts + adapter->stats.lro_pkts; stats->rx_packets = adapter->stats.rx_pkts + adapter->stats.lro_pkts;
stats->tx_packets = adapter->stats.xmitfinished; stats->tx_packets = adapter->stats.xmitfinished;
stats->rx_bytes = adapter->stats.rxbytes; stats->rx_bytes = adapter->stats.rxbytes;

1666
drivers/net/pxa168_eth.c Normal file

File diff suppressed because it is too large Load diff

View file

@ -1983,8 +1983,6 @@ static struct net_device_stats *qlcnic_get_stats(struct net_device *netdev)
struct qlcnic_adapter *adapter = netdev_priv(netdev); struct qlcnic_adapter *adapter = netdev_priv(netdev);
struct net_device_stats *stats = &netdev->stats; struct net_device_stats *stats = &netdev->stats;
memset(stats, 0, sizeof(*stats));
stats->rx_packets = adapter->stats.rx_pkts + adapter->stats.lro_pkts; stats->rx_packets = adapter->stats.rx_pkts + adapter->stats.lro_pkts;
stats->tx_packets = adapter->stats.xmitfinished; stats->tx_packets = adapter->stats.xmitfinished;
stats->rx_bytes = adapter->stats.rxbytes + adapter->stats.lrobytes; stats->rx_bytes = adapter->stats.rxbytes + adapter->stats.lrobytes;

View file

@ -1437,7 +1437,7 @@ static const struct net_device_ops sh_eth_netdev_ops = {
static int sh_eth_drv_probe(struct platform_device *pdev) static int sh_eth_drv_probe(struct platform_device *pdev)
{ {
int ret, i, devno = 0; int ret, devno = 0;
struct resource *res; struct resource *res;
struct net_device *ndev = NULL; struct net_device *ndev = NULL;
struct sh_eth_private *mdp; struct sh_eth_private *mdp;

View file

@ -732,7 +732,7 @@ static int adm8211_rf_set_channel(struct ieee80211_hw *dev, unsigned int chan)
/* Nothing to do for ADMtek BBP */ /* Nothing to do for ADMtek BBP */
} else if (priv->bbp_type != ADM8211_TYPE_ADMTEK) } else if (priv->bbp_type != ADM8211_TYPE_ADMTEK)
wiphy_debug(dev->wiphy, "unsupported bbp type %d\n", wiphy_debug(dev->wiphy, "unsupported BBP type %d\n",
priv->bbp_type); priv->bbp_type);
ADM8211_RESTORE(); ADM8211_RESTORE();
@ -1032,7 +1032,7 @@ static int adm8211_hw_init_bbp(struct ieee80211_hw *dev)
break; break;
} }
} else } else
wiphy_debug(dev->wiphy, "unsupported bbp %d\n", priv->bbp_type); wiphy_debug(dev->wiphy, "unsupported BBP %d\n", priv->bbp_type);
ADM8211_CSR_WRITE(SYNRF, 0); ADM8211_CSR_WRITE(SYNRF, 0);
@ -1525,7 +1525,7 @@ static int adm8211_start(struct ieee80211_hw *dev)
retval = request_irq(priv->pdev->irq, adm8211_interrupt, retval = request_irq(priv->pdev->irq, adm8211_interrupt,
IRQF_SHARED, "adm8211", dev); IRQF_SHARED, "adm8211", dev);
if (retval) { if (retval) {
wiphy_err(dev->wiphy, "failed to register irq handler\n"); wiphy_err(dev->wiphy, "failed to register IRQ handler\n");
goto fail; goto fail;
} }
@ -1902,7 +1902,7 @@ static int __devinit adm8211_probe(struct pci_dev *pdev,
goto err_free_eeprom; goto err_free_eeprom;
} }
wiphy_info(dev->wiphy, "hwaddr %pm, rev 0x%02x\n", wiphy_info(dev->wiphy, "hwaddr %pM, Rev 0x%02x\n",
dev->wiphy->perm_addr, pdev->revision); dev->wiphy->perm_addr, pdev->revision);
return 0; return 0;

View file

@ -655,7 +655,7 @@ static int at76_get_hw_config(struct at76_priv *priv)
exit: exit:
kfree(hwcfg); kfree(hwcfg);
if (ret < 0) if (ret < 0)
wiphy_err(priv->hw->wiphy, "cannot get hw config (error %d)\n", wiphy_err(priv->hw->wiphy, "cannot get HW Config (error %d)\n",
ret); ret);
return ret; return ret;
@ -960,7 +960,7 @@ static void at76_dump_mib_mac_addr(struct at76_priv *priv)
sizeof(struct mib_mac_addr)); sizeof(struct mib_mac_addr));
if (ret < 0) { if (ret < 0) {
wiphy_err(priv->hw->wiphy, wiphy_err(priv->hw->wiphy,
"at76_get_mib (mac_addr) failed: %d\n", ret); "at76_get_mib (MAC_ADDR) failed: %d\n", ret);
goto exit; goto exit;
} }
@ -989,7 +989,7 @@ static void at76_dump_mib_mac_wep(struct at76_priv *priv)
sizeof(struct mib_mac_wep)); sizeof(struct mib_mac_wep));
if (ret < 0) { if (ret < 0) {
wiphy_err(priv->hw->wiphy, wiphy_err(priv->hw->wiphy,
"at76_get_mib (mac_wep) failed: %d\n", ret); "at76_get_mib (MAC_WEP) failed: %d\n", ret);
goto exit; goto exit;
} }
@ -1026,7 +1026,7 @@ static void at76_dump_mib_mac_mgmt(struct at76_priv *priv)
sizeof(struct mib_mac_mgmt)); sizeof(struct mib_mac_mgmt));
if (ret < 0) { if (ret < 0) {
wiphy_err(priv->hw->wiphy, wiphy_err(priv->hw->wiphy,
"at76_get_mib (mac_mgmt) failed: %d\n", ret); "at76_get_mib (MAC_MGMT) failed: %d\n", ret);
goto exit; goto exit;
} }
@ -1062,7 +1062,7 @@ static void at76_dump_mib_mac(struct at76_priv *priv)
ret = at76_get_mib(priv->udev, MIB_MAC, m, sizeof(struct mib_mac)); ret = at76_get_mib(priv->udev, MIB_MAC, m, sizeof(struct mib_mac));
if (ret < 0) { if (ret < 0) {
wiphy_err(priv->hw->wiphy, wiphy_err(priv->hw->wiphy,
"at76_get_mib (mac) failed: %d\n", ret); "at76_get_mib (MAC) failed: %d\n", ret);
goto exit; goto exit;
} }
@ -1099,7 +1099,7 @@ static void at76_dump_mib_phy(struct at76_priv *priv)
ret = at76_get_mib(priv->udev, MIB_PHY, m, sizeof(struct mib_phy)); ret = at76_get_mib(priv->udev, MIB_PHY, m, sizeof(struct mib_phy));
if (ret < 0) { if (ret < 0) {
wiphy_err(priv->hw->wiphy, wiphy_err(priv->hw->wiphy,
"at76_get_mib (phy) failed: %d\n", ret); "at76_get_mib (PHY) failed: %d\n", ret);
goto exit; goto exit;
} }
@ -1132,7 +1132,7 @@ static void at76_dump_mib_local(struct at76_priv *priv)
ret = at76_get_mib(priv->udev, MIB_LOCAL, m, sizeof(struct mib_local)); ret = at76_get_mib(priv->udev, MIB_LOCAL, m, sizeof(struct mib_local));
if (ret < 0) { if (ret < 0) {
wiphy_err(priv->hw->wiphy, wiphy_err(priv->hw->wiphy,
"at76_get_mib (local) failed: %d\n", ret); "at76_get_mib (LOCAL) failed: %d\n", ret);
goto exit; goto exit;
} }
@ -1158,7 +1158,7 @@ static void at76_dump_mib_mdomain(struct at76_priv *priv)
sizeof(struct mib_mdomain)); sizeof(struct mib_mdomain));
if (ret < 0) { if (ret < 0) {
wiphy_err(priv->hw->wiphy, wiphy_err(priv->hw->wiphy,
"at76_get_mib (mdomain) failed: %d\n", ret); "at76_get_mib (MDOMAIN) failed: %d\n", ret);
goto exit; goto exit;
} }
@ -1229,7 +1229,7 @@ static int at76_submit_rx_urb(struct at76_priv *priv)
struct sk_buff *skb = priv->rx_skb; struct sk_buff *skb = priv->rx_skb;
if (!priv->rx_urb) { if (!priv->rx_urb) {
wiphy_err(priv->hw->wiphy, "%s: priv->rx_urb is null\n", wiphy_err(priv->hw->wiphy, "%s: priv->rx_urb is NULL\n",
__func__); __func__);
return -EFAULT; return -EFAULT;
} }
@ -1792,7 +1792,7 @@ static int at76_mac80211_tx(struct ieee80211_hw *hw, struct sk_buff *skb)
wiphy_err(priv->hw->wiphy, "error in tx submit urb: %d\n", ret); wiphy_err(priv->hw->wiphy, "error in tx submit urb: %d\n", ret);
if (ret == -EINVAL) if (ret == -EINVAL)
wiphy_err(priv->hw->wiphy, wiphy_err(priv->hw->wiphy,
"-einval: tx urb %p hcpriv %p complete %p\n", "-EINVAL: tx urb %p hcpriv %p complete %p\n",
priv->tx_urb, priv->tx_urb,
priv->tx_urb->hcpriv, priv->tx_urb->complete); priv->tx_urb->hcpriv, priv->tx_urb->complete);
} }
@ -2310,7 +2310,7 @@ static int at76_init_new_device(struct at76_priv *priv,
priv->mac80211_registered = 1; priv->mac80211_registered = 1;
wiphy_info(priv->hw->wiphy, "usb %s, mac %pm, firmware %d.%d.%d-%d\n", wiphy_info(priv->hw->wiphy, "USB %s, MAC %pM, firmware %d.%d.%d-%d\n",
dev_name(&interface->dev), priv->mac_addr, dev_name(&interface->dev), priv->mac_addr,
priv->fw_version.major, priv->fw_version.minor, priv->fw_version.major, priv->fw_version.minor,
priv->fw_version.patch, priv->fw_version.build); priv->fw_version.patch, priv->fw_version.build);

View file

@ -245,7 +245,7 @@ static void __ar9170_dump_txstats(struct ar9170 *ar)
{ {
int i; int i;
wiphy_debug(ar->hw->wiphy, "qos queue stats\n"); wiphy_debug(ar->hw->wiphy, "QoS queue stats\n");
for (i = 0; i < __AR9170_NUM_TXQ; i++) for (i = 0; i < __AR9170_NUM_TXQ; i++)
wiphy_debug(ar->hw->wiphy, wiphy_debug(ar->hw->wiphy,
@ -387,7 +387,7 @@ static struct sk_buff *ar9170_get_queued_skb(struct ar9170 *ar,
if (mac && compare_ether_addr(ieee80211_get_DA(hdr), mac)) { if (mac && compare_ether_addr(ieee80211_get_DA(hdr), mac)) {
#ifdef AR9170_QUEUE_DEBUG #ifdef AR9170_QUEUE_DEBUG
wiphy_debug(ar->hw->wiphy, wiphy_debug(ar->hw->wiphy,
"skip frame => da %pm != %pm\n", "skip frame => DA %pM != %pM\n",
mac, ieee80211_get_DA(hdr)); mac, ieee80211_get_DA(hdr));
ar9170_print_txheader(ar, skb); ar9170_print_txheader(ar, skb);
#endif /* AR9170_QUEUE_DEBUG */ #endif /* AR9170_QUEUE_DEBUG */

View file

@ -2723,14 +2723,6 @@ static void __ipw2100_rx_process(struct ipw2100_priv *priv)
packet = &priv->rx_buffers[i]; packet = &priv->rx_buffers[i];
/* Sync the DMA for the STATUS buffer so CPU is sure to get
* the correct values */
pci_dma_sync_single_for_cpu(priv->pci_dev,
sq->nic +
sizeof(struct ipw2100_status) * i,
sizeof(struct ipw2100_status),
PCI_DMA_FROMDEVICE);
/* Sync the DMA for the RX buffer so CPU is sure to get /* Sync the DMA for the RX buffer so CPU is sure to get
* the correct values */ * the correct values */
pci_dma_sync_single_for_cpu(priv->pci_dev, packet->dma_addr, pci_dma_sync_single_for_cpu(priv->pci_dev, packet->dma_addr,

View file

@ -265,7 +265,7 @@ struct iwl_cfg iwl1000_bgn_cfg = {
.support_ct_kill_exit = true, .support_ct_kill_exit = true,
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_EXT_LONG_THRESHOLD_DEF, .plcp_delta_threshold = IWL_MAX_PLCP_ERR_EXT_LONG_THRESHOLD_DEF,
.chain_noise_scale = 1000, .chain_noise_scale = 1000,
.monitor_recover_period = IWL_MONITORING_PERIOD, .monitor_recover_period = IWL_DEF_MONITORING_PERIOD,
.max_event_log_size = 128, .max_event_log_size = 128,
.ucode_tracing = true, .ucode_tracing = true,
.sensitivity_calib_by_driver = true, .sensitivity_calib_by_driver = true,
@ -297,7 +297,7 @@ struct iwl_cfg iwl1000_bg_cfg = {
.support_ct_kill_exit = true, .support_ct_kill_exit = true,
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_EXT_LONG_THRESHOLD_DEF, .plcp_delta_threshold = IWL_MAX_PLCP_ERR_EXT_LONG_THRESHOLD_DEF,
.chain_noise_scale = 1000, .chain_noise_scale = 1000,
.monitor_recover_period = IWL_MONITORING_PERIOD, .monitor_recover_period = IWL_DEF_MONITORING_PERIOD,
.max_event_log_size = 128, .max_event_log_size = 128,
.ucode_tracing = true, .ucode_tracing = true,
.sensitivity_calib_by_driver = true, .sensitivity_calib_by_driver = true,

View file

@ -2731,7 +2731,7 @@ static struct iwl_cfg iwl3945_bg_cfg = {
.led_compensation = 64, .led_compensation = 64,
.broken_powersave = true, .broken_powersave = true,
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF, .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
.monitor_recover_period = IWL_MONITORING_PERIOD, .monitor_recover_period = IWL_DEF_MONITORING_PERIOD,
.max_event_log_size = 512, .max_event_log_size = 512,
.tx_power_by_driver = true, .tx_power_by_driver = true,
}; };
@ -2752,7 +2752,7 @@ static struct iwl_cfg iwl3945_abg_cfg = {
.led_compensation = 64, .led_compensation = 64,
.broken_powersave = true, .broken_powersave = true,
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF, .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
.monitor_recover_period = IWL_MONITORING_PERIOD, .monitor_recover_period = IWL_DEF_MONITORING_PERIOD,
.max_event_log_size = 512, .max_event_log_size = 512,
.tx_power_by_driver = true, .tx_power_by_driver = true,
}; };

View file

@ -2322,7 +2322,7 @@ struct iwl_cfg iwl4965_agn_cfg = {
.led_compensation = 61, .led_compensation = 61,
.chain_noise_num_beacons = IWL4965_CAL_NUM_BEACONS, .chain_noise_num_beacons = IWL4965_CAL_NUM_BEACONS,
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
.monitor_recover_period = IWL_MONITORING_PERIOD, .monitor_recover_period = IWL_DEF_MONITORING_PERIOD,
.temperature_kelvin = true, .temperature_kelvin = true,
.max_event_log_size = 512, .max_event_log_size = 512,
.tx_power_by_driver = true, .tx_power_by_driver = true,

View file

@ -510,7 +510,7 @@ struct iwl_cfg iwl5300_agn_cfg = {
.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF, .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
.chain_noise_scale = 1000, .chain_noise_scale = 1000,
.monitor_recover_period = IWL_MONITORING_PERIOD, .monitor_recover_period = IWL_LONG_MONITORING_PERIOD,
.max_event_log_size = 512, .max_event_log_size = 512,
.ucode_tracing = true, .ucode_tracing = true,
.sensitivity_calib_by_driver = true, .sensitivity_calib_by_driver = true,
@ -541,7 +541,7 @@ struct iwl_cfg iwl5100_bgn_cfg = {
.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF, .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
.chain_noise_scale = 1000, .chain_noise_scale = 1000,
.monitor_recover_period = IWL_MONITORING_PERIOD, .monitor_recover_period = IWL_LONG_MONITORING_PERIOD,
.max_event_log_size = 512, .max_event_log_size = 512,
.ucode_tracing = true, .ucode_tracing = true,
.sensitivity_calib_by_driver = true, .sensitivity_calib_by_driver = true,
@ -570,7 +570,7 @@ struct iwl_cfg iwl5100_abg_cfg = {
.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF, .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
.chain_noise_scale = 1000, .chain_noise_scale = 1000,
.monitor_recover_period = IWL_MONITORING_PERIOD, .monitor_recover_period = IWL_LONG_MONITORING_PERIOD,
.max_event_log_size = 512, .max_event_log_size = 512,
.ucode_tracing = true, .ucode_tracing = true,
.sensitivity_calib_by_driver = true, .sensitivity_calib_by_driver = true,
@ -601,7 +601,7 @@ struct iwl_cfg iwl5100_agn_cfg = {
.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF, .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
.chain_noise_scale = 1000, .chain_noise_scale = 1000,
.monitor_recover_period = IWL_MONITORING_PERIOD, .monitor_recover_period = IWL_LONG_MONITORING_PERIOD,
.max_event_log_size = 512, .max_event_log_size = 512,
.ucode_tracing = true, .ucode_tracing = true,
.sensitivity_calib_by_driver = true, .sensitivity_calib_by_driver = true,
@ -632,7 +632,7 @@ struct iwl_cfg iwl5350_agn_cfg = {
.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF, .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
.chain_noise_scale = 1000, .chain_noise_scale = 1000,
.monitor_recover_period = IWL_MONITORING_PERIOD, .monitor_recover_period = IWL_LONG_MONITORING_PERIOD,
.max_event_log_size = 512, .max_event_log_size = 512,
.ucode_tracing = true, .ucode_tracing = true,
.sensitivity_calib_by_driver = true, .sensitivity_calib_by_driver = true,
@ -663,7 +663,7 @@ struct iwl_cfg iwl5150_agn_cfg = {
.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF, .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
.chain_noise_scale = 1000, .chain_noise_scale = 1000,
.monitor_recover_period = IWL_MONITORING_PERIOD, .monitor_recover_period = IWL_LONG_MONITORING_PERIOD,
.max_event_log_size = 512, .max_event_log_size = 512,
.ucode_tracing = true, .ucode_tracing = true,
.sensitivity_calib_by_driver = true, .sensitivity_calib_by_driver = true,
@ -693,7 +693,7 @@ struct iwl_cfg iwl5150_abg_cfg = {
.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF, .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
.chain_noise_scale = 1000, .chain_noise_scale = 1000,
.monitor_recover_period = IWL_MONITORING_PERIOD, .monitor_recover_period = IWL_LONG_MONITORING_PERIOD,
.max_event_log_size = 512, .max_event_log_size = 512,
.ucode_tracing = true, .ucode_tracing = true,
.sensitivity_calib_by_driver = true, .sensitivity_calib_by_driver = true,

View file

@ -388,7 +388,7 @@ struct iwl_cfg iwl6000g2a_2agn_cfg = {
.support_ct_kill_exit = true, .support_ct_kill_exit = true,
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
.chain_noise_scale = 1000, .chain_noise_scale = 1000,
.monitor_recover_period = IWL_MONITORING_PERIOD, .monitor_recover_period = IWL_DEF_MONITORING_PERIOD,
.max_event_log_size = 512, .max_event_log_size = 512,
.ucode_tracing = true, .ucode_tracing = true,
.sensitivity_calib_by_driver = true, .sensitivity_calib_by_driver = true,
@ -424,7 +424,7 @@ struct iwl_cfg iwl6000g2a_2abg_cfg = {
.support_ct_kill_exit = true, .support_ct_kill_exit = true,
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
.chain_noise_scale = 1000, .chain_noise_scale = 1000,
.monitor_recover_period = IWL_MONITORING_PERIOD, .monitor_recover_period = IWL_DEF_MONITORING_PERIOD,
.max_event_log_size = 512, .max_event_log_size = 512,
.sensitivity_calib_by_driver = true, .sensitivity_calib_by_driver = true,
.chain_noise_calib_by_driver = true, .chain_noise_calib_by_driver = true,
@ -459,7 +459,7 @@ struct iwl_cfg iwl6000g2a_2bg_cfg = {
.support_ct_kill_exit = true, .support_ct_kill_exit = true,
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
.chain_noise_scale = 1000, .chain_noise_scale = 1000,
.monitor_recover_period = IWL_MONITORING_PERIOD, .monitor_recover_period = IWL_DEF_MONITORING_PERIOD,
.max_event_log_size = 512, .max_event_log_size = 512,
.sensitivity_calib_by_driver = true, .sensitivity_calib_by_driver = true,
.chain_noise_calib_by_driver = true, .chain_noise_calib_by_driver = true,
@ -496,7 +496,7 @@ struct iwl_cfg iwl6000g2b_2agn_cfg = {
.support_ct_kill_exit = true, .support_ct_kill_exit = true,
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
.chain_noise_scale = 1000, .chain_noise_scale = 1000,
.monitor_recover_period = IWL_MONITORING_PERIOD, .monitor_recover_period = IWL_LONG_MONITORING_PERIOD,
.max_event_log_size = 512, .max_event_log_size = 512,
.sensitivity_calib_by_driver = true, .sensitivity_calib_by_driver = true,
.chain_noise_calib_by_driver = true, .chain_noise_calib_by_driver = true,
@ -532,7 +532,7 @@ struct iwl_cfg iwl6000g2b_2abg_cfg = {
.support_ct_kill_exit = true, .support_ct_kill_exit = true,
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
.chain_noise_scale = 1000, .chain_noise_scale = 1000,
.monitor_recover_period = IWL_MONITORING_PERIOD, .monitor_recover_period = IWL_LONG_MONITORING_PERIOD,
.max_event_log_size = 512, .max_event_log_size = 512,
.sensitivity_calib_by_driver = true, .sensitivity_calib_by_driver = true,
.chain_noise_calib_by_driver = true, .chain_noise_calib_by_driver = true,
@ -570,7 +570,7 @@ struct iwl_cfg iwl6000g2b_2bgn_cfg = {
.support_ct_kill_exit = true, .support_ct_kill_exit = true,
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
.chain_noise_scale = 1000, .chain_noise_scale = 1000,
.monitor_recover_period = IWL_MONITORING_PERIOD, .monitor_recover_period = IWL_LONG_MONITORING_PERIOD,
.max_event_log_size = 512, .max_event_log_size = 512,
.sensitivity_calib_by_driver = true, .sensitivity_calib_by_driver = true,
.chain_noise_calib_by_driver = true, .chain_noise_calib_by_driver = true,
@ -606,7 +606,7 @@ struct iwl_cfg iwl6000g2b_2bg_cfg = {
.support_ct_kill_exit = true, .support_ct_kill_exit = true,
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
.chain_noise_scale = 1000, .chain_noise_scale = 1000,
.monitor_recover_period = IWL_MONITORING_PERIOD, .monitor_recover_period = IWL_LONG_MONITORING_PERIOD,
.max_event_log_size = 512, .max_event_log_size = 512,
.sensitivity_calib_by_driver = true, .sensitivity_calib_by_driver = true,
.chain_noise_calib_by_driver = true, .chain_noise_calib_by_driver = true,
@ -644,7 +644,7 @@ struct iwl_cfg iwl6000g2b_bgn_cfg = {
.support_ct_kill_exit = true, .support_ct_kill_exit = true,
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
.chain_noise_scale = 1000, .chain_noise_scale = 1000,
.monitor_recover_period = IWL_MONITORING_PERIOD, .monitor_recover_period = IWL_LONG_MONITORING_PERIOD,
.max_event_log_size = 512, .max_event_log_size = 512,
.sensitivity_calib_by_driver = true, .sensitivity_calib_by_driver = true,
.chain_noise_calib_by_driver = true, .chain_noise_calib_by_driver = true,
@ -680,7 +680,7 @@ struct iwl_cfg iwl6000g2b_bg_cfg = {
.support_ct_kill_exit = true, .support_ct_kill_exit = true,
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
.chain_noise_scale = 1000, .chain_noise_scale = 1000,
.monitor_recover_period = IWL_MONITORING_PERIOD, .monitor_recover_period = IWL_LONG_MONITORING_PERIOD,
.max_event_log_size = 512, .max_event_log_size = 512,
.sensitivity_calib_by_driver = true, .sensitivity_calib_by_driver = true,
.chain_noise_calib_by_driver = true, .chain_noise_calib_by_driver = true,
@ -721,7 +721,7 @@ struct iwl_cfg iwl6000i_2agn_cfg = {
.support_ct_kill_exit = true, .support_ct_kill_exit = true,
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
.chain_noise_scale = 1000, .chain_noise_scale = 1000,
.monitor_recover_period = IWL_MONITORING_PERIOD, .monitor_recover_period = IWL_DEF_MONITORING_PERIOD,
.max_event_log_size = 1024, .max_event_log_size = 1024,
.ucode_tracing = true, .ucode_tracing = true,
.sensitivity_calib_by_driver = true, .sensitivity_calib_by_driver = true,
@ -756,7 +756,7 @@ struct iwl_cfg iwl6000i_2abg_cfg = {
.support_ct_kill_exit = true, .support_ct_kill_exit = true,
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
.chain_noise_scale = 1000, .chain_noise_scale = 1000,
.monitor_recover_period = IWL_MONITORING_PERIOD, .monitor_recover_period = IWL_DEF_MONITORING_PERIOD,
.max_event_log_size = 1024, .max_event_log_size = 1024,
.ucode_tracing = true, .ucode_tracing = true,
.sensitivity_calib_by_driver = true, .sensitivity_calib_by_driver = true,
@ -791,7 +791,7 @@ struct iwl_cfg iwl6000i_2bg_cfg = {
.support_ct_kill_exit = true, .support_ct_kill_exit = true,
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
.chain_noise_scale = 1000, .chain_noise_scale = 1000,
.monitor_recover_period = IWL_MONITORING_PERIOD, .monitor_recover_period = IWL_DEF_MONITORING_PERIOD,
.max_event_log_size = 1024, .max_event_log_size = 1024,
.ucode_tracing = true, .ucode_tracing = true,
.sensitivity_calib_by_driver = true, .sensitivity_calib_by_driver = true,
@ -828,7 +828,7 @@ struct iwl_cfg iwl6050_2agn_cfg = {
.support_ct_kill_exit = true, .support_ct_kill_exit = true,
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
.chain_noise_scale = 1500, .chain_noise_scale = 1500,
.monitor_recover_period = IWL_MONITORING_PERIOD, .monitor_recover_period = IWL_DEF_MONITORING_PERIOD,
.max_event_log_size = 1024, .max_event_log_size = 1024,
.ucode_tracing = true, .ucode_tracing = true,
.sensitivity_calib_by_driver = true, .sensitivity_calib_by_driver = true,
@ -866,7 +866,7 @@ struct iwl_cfg iwl6050g2_bgn_cfg = {
.support_ct_kill_exit = true, .support_ct_kill_exit = true,
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
.chain_noise_scale = 1500, .chain_noise_scale = 1500,
.monitor_recover_period = IWL_MONITORING_PERIOD, .monitor_recover_period = IWL_DEF_MONITORING_PERIOD,
.max_event_log_size = 1024, .max_event_log_size = 1024,
.ucode_tracing = true, .ucode_tracing = true,
.sensitivity_calib_by_driver = true, .sensitivity_calib_by_driver = true,
@ -902,7 +902,7 @@ struct iwl_cfg iwl6050_2abg_cfg = {
.support_ct_kill_exit = true, .support_ct_kill_exit = true,
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
.chain_noise_scale = 1500, .chain_noise_scale = 1500,
.monitor_recover_period = IWL_MONITORING_PERIOD, .monitor_recover_period = IWL_DEF_MONITORING_PERIOD,
.max_event_log_size = 1024, .max_event_log_size = 1024,
.ucode_tracing = true, .ucode_tracing = true,
.sensitivity_calib_by_driver = true, .sensitivity_calib_by_driver = true,
@ -940,7 +940,7 @@ struct iwl_cfg iwl6000_3agn_cfg = {
.support_ct_kill_exit = true, .support_ct_kill_exit = true,
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
.chain_noise_scale = 1000, .chain_noise_scale = 1000,
.monitor_recover_period = IWL_MONITORING_PERIOD, .monitor_recover_period = IWL_DEF_MONITORING_PERIOD,
.max_event_log_size = 1024, .max_event_log_size = 1024,
.ucode_tracing = true, .ucode_tracing = true,
.sensitivity_calib_by_driver = true, .sensitivity_calib_by_driver = true,

View file

@ -3667,6 +3667,49 @@ out_exit:
IWL_DEBUG_MAC80211(priv, "leave\n"); IWL_DEBUG_MAC80211(priv, "leave\n");
} }
static void iwlagn_configure_filter(struct ieee80211_hw *hw,
unsigned int changed_flags,
unsigned int *total_flags,
u64 multicast)
{
struct iwl_priv *priv = hw->priv;
__le32 filter_or = 0, filter_nand = 0;
#define CHK(test, flag) do { \
if (*total_flags & (test)) \
filter_or |= (flag); \
else \
filter_nand |= (flag); \
} while (0)
IWL_DEBUG_MAC80211(priv, "Enter: changed: 0x%x, total: 0x%x\n",
changed_flags, *total_flags);
CHK(FIF_OTHER_BSS | FIF_PROMISC_IN_BSS, RXON_FILTER_PROMISC_MSK);
CHK(FIF_CONTROL, RXON_FILTER_CTL2HOST_MSK);
CHK(FIF_BCN_PRBRESP_PROMISC, RXON_FILTER_BCON_AWARE_MSK);
#undef CHK
mutex_lock(&priv->mutex);
priv->staging_rxon.filter_flags &= ~filter_nand;
priv->staging_rxon.filter_flags |= filter_or;
iwlcore_commit_rxon(priv);
mutex_unlock(&priv->mutex);
/*
* Receiving all multicast frames is always enabled by the
* default flags setup in iwl_connection_init_rx_config()
* since we currently do not support programming multicast
* filters into the device.
*/
*total_flags &= FIF_OTHER_BSS | FIF_ALLMULTI | FIF_PROMISC_IN_BSS |
FIF_BCN_PRBRESP_PROMISC | FIF_CONTROL;
}
static void iwl_mac_flush(struct ieee80211_hw *hw, bool drop) static void iwl_mac_flush(struct ieee80211_hw *hw, bool drop)
{ {
struct iwl_priv *priv = hw->priv; struct iwl_priv *priv = hw->priv;
@ -3867,7 +3910,7 @@ static struct ieee80211_ops iwl_hw_ops = {
.add_interface = iwl_mac_add_interface, .add_interface = iwl_mac_add_interface,
.remove_interface = iwl_mac_remove_interface, .remove_interface = iwl_mac_remove_interface,
.config = iwl_mac_config, .config = iwl_mac_config,
.configure_filter = iwl_configure_filter, .configure_filter = iwlagn_configure_filter,
.set_key = iwl_mac_set_key, .set_key = iwl_mac_set_key,
.update_tkip_key = iwl_mac_update_tkip_key, .update_tkip_key = iwl_mac_update_tkip_key,
.conf_tx = iwl_mac_conf_tx, .conf_tx = iwl_mac_conf_tx,

View file

@ -1328,51 +1328,6 @@ out:
EXPORT_SYMBOL(iwl_apm_init); EXPORT_SYMBOL(iwl_apm_init);
void iwl_configure_filter(struct ieee80211_hw *hw,
unsigned int changed_flags,
unsigned int *total_flags,
u64 multicast)
{
struct iwl_priv *priv = hw->priv;
__le32 filter_or = 0, filter_nand = 0;
#define CHK(test, flag) do { \
if (*total_flags & (test)) \
filter_or |= (flag); \
else \
filter_nand |= (flag); \
} while (0)
IWL_DEBUG_MAC80211(priv, "Enter: changed: 0x%x, total: 0x%x\n",
changed_flags, *total_flags);
CHK(FIF_OTHER_BSS | FIF_PROMISC_IN_BSS, RXON_FILTER_PROMISC_MSK);
CHK(FIF_CONTROL, RXON_FILTER_CTL2HOST_MSK);
CHK(FIF_BCN_PRBRESP_PROMISC, RXON_FILTER_BCON_AWARE_MSK);
#undef CHK
mutex_lock(&priv->mutex);
priv->staging_rxon.filter_flags &= ~filter_nand;
priv->staging_rxon.filter_flags |= filter_or;
iwlcore_commit_rxon(priv);
mutex_unlock(&priv->mutex);
/*
* Receiving all multicast frames is always enabled by the
* default flags setup in iwl_connection_init_rx_config()
* since we currently do not support programming multicast
* filters into the device.
*/
*total_flags &= FIF_OTHER_BSS | FIF_ALLMULTI | FIF_PROMISC_IN_BSS |
FIF_BCN_PRBRESP_PROMISC | FIF_CONTROL;
}
EXPORT_SYMBOL(iwl_configure_filter);
int iwl_set_hw_params(struct iwl_priv *priv) int iwl_set_hw_params(struct iwl_priv *priv)
{ {
priv->hw_params.max_rxq_size = RX_QUEUE_SIZE; priv->hw_params.max_rxq_size = RX_QUEUE_SIZE;

View file

@ -372,9 +372,6 @@ int iwl_set_decrypted_flag(struct iwl_priv *priv,
u32 decrypt_res, u32 decrypt_res,
struct ieee80211_rx_status *stats); struct ieee80211_rx_status *stats);
void iwl_irq_handle_error(struct iwl_priv *priv); void iwl_irq_handle_error(struct iwl_priv *priv);
void iwl_configure_filter(struct ieee80211_hw *hw,
unsigned int changed_flags,
unsigned int *total_flags, u64 multicast);
int iwl_set_hw_params(struct iwl_priv *priv); int iwl_set_hw_params(struct iwl_priv *priv);
void iwl_post_associate(struct iwl_priv *priv, struct ieee80211_vif *vif); void iwl_post_associate(struct iwl_priv *priv, struct ieee80211_vif *vif);
void iwl_bss_info_changed(struct ieee80211_hw *hw, void iwl_bss_info_changed(struct ieee80211_hw *hw,

View file

@ -1049,7 +1049,8 @@ struct iwl_event_log {
#define IWL_DELAY_NEXT_FORCE_FW_RELOAD (HZ*5) #define IWL_DELAY_NEXT_FORCE_FW_RELOAD (HZ*5)
/* timer constants use to monitor and recover stuck tx queues in mSecs */ /* timer constants use to monitor and recover stuck tx queues in mSecs */
#define IWL_MONITORING_PERIOD (1000) #define IWL_DEF_MONITORING_PERIOD (1000)
#define IWL_LONG_MONITORING_PERIOD (5000)
#define IWL_ONE_HUNDRED_MSECS (100) #define IWL_ONE_HUNDRED_MSECS (100)
#define IWL_SIXTY_SECS (60000) #define IWL_SIXTY_SECS (60000)

View file

@ -3391,6 +3391,55 @@ static int iwl3945_mac_sta_add(struct ieee80211_hw *hw,
return 0; return 0;
} }
static void iwl3945_configure_filter(struct ieee80211_hw *hw,
unsigned int changed_flags,
unsigned int *total_flags,
u64 multicast)
{
struct iwl_priv *priv = hw->priv;
__le32 filter_or = 0, filter_nand = 0;
#define CHK(test, flag) do { \
if (*total_flags & (test)) \
filter_or |= (flag); \
else \
filter_nand |= (flag); \
} while (0)
IWL_DEBUG_MAC80211(priv, "Enter: changed: 0x%x, total: 0x%x\n",
changed_flags, *total_flags);
CHK(FIF_OTHER_BSS | FIF_PROMISC_IN_BSS, RXON_FILTER_PROMISC_MSK);
CHK(FIF_CONTROL, RXON_FILTER_CTL2HOST_MSK);
CHK(FIF_BCN_PRBRESP_PROMISC, RXON_FILTER_BCON_AWARE_MSK);
#undef CHK
mutex_lock(&priv->mutex);
priv->staging_rxon.filter_flags &= ~filter_nand;
priv->staging_rxon.filter_flags |= filter_or;
/*
* Committing directly here breaks for some reason,
* but we'll eventually commit the filter flags
* change anyway.
*/
mutex_unlock(&priv->mutex);
/*
* Receiving all multicast frames is always enabled by the
* default flags setup in iwl_connection_init_rx_config()
* since we currently do not support programming multicast
* filters into the device.
*/
*total_flags &= FIF_OTHER_BSS | FIF_ALLMULTI | FIF_PROMISC_IN_BSS |
FIF_BCN_PRBRESP_PROMISC | FIF_CONTROL;
}
/***************************************************************************** /*****************************************************************************
* *
* sysfs attributes * sysfs attributes
@ -3796,7 +3845,7 @@ static struct ieee80211_ops iwl3945_hw_ops = {
.add_interface = iwl_mac_add_interface, .add_interface = iwl_mac_add_interface,
.remove_interface = iwl_mac_remove_interface, .remove_interface = iwl_mac_remove_interface,
.config = iwl_mac_config, .config = iwl_mac_config,
.configure_filter = iwl_configure_filter, .configure_filter = iwl3945_configure_filter,
.set_key = iwl3945_mac_set_key, .set_key = iwl3945_mac_set_key,
.conf_tx = iwl_mac_conf_tx, .conf_tx = iwl_mac_conf_tx,
.reset_tsf = iwl_mac_reset_tsf, .reset_tsf = iwl_mac_reset_tsf,

View file

@ -486,7 +486,7 @@ static bool mac80211_hwsim_tx_frame(struct ieee80211_hw *hw,
struct ieee80211_rx_status rx_status; struct ieee80211_rx_status rx_status;
if (data->idle) { if (data->idle) {
wiphy_debug(hw->wiphy, "trying to tx when idle - reject\n"); wiphy_debug(hw->wiphy, "Trying to TX when idle - reject\n");
return false; return false;
} }

View file

@ -910,14 +910,14 @@ static int mwl8k_rxq_init(struct ieee80211_hw *hw, int index)
rxq->rxd = pci_alloc_consistent(priv->pdev, size, &rxq->rxd_dma); rxq->rxd = pci_alloc_consistent(priv->pdev, size, &rxq->rxd_dma);
if (rxq->rxd == NULL) { if (rxq->rxd == NULL) {
wiphy_err(hw->wiphy, "failed to alloc rx descriptors\n"); wiphy_err(hw->wiphy, "failed to alloc RX descriptors\n");
return -ENOMEM; return -ENOMEM;
} }
memset(rxq->rxd, 0, size); memset(rxq->rxd, 0, size);
rxq->buf = kmalloc(MWL8K_RX_DESCS * sizeof(*rxq->buf), GFP_KERNEL); rxq->buf = kmalloc(MWL8K_RX_DESCS * sizeof(*rxq->buf), GFP_KERNEL);
if (rxq->buf == NULL) { if (rxq->buf == NULL) {
wiphy_err(hw->wiphy, "failed to alloc rx skbuff list\n"); wiphy_err(hw->wiphy, "failed to alloc RX skbuff list\n");
pci_free_consistent(priv->pdev, size, rxq->rxd, rxq->rxd_dma); pci_free_consistent(priv->pdev, size, rxq->rxd, rxq->rxd_dma);
return -ENOMEM; return -ENOMEM;
} }
@ -1145,14 +1145,14 @@ static int mwl8k_txq_init(struct ieee80211_hw *hw, int index)
txq->txd = pci_alloc_consistent(priv->pdev, size, &txq->txd_dma); txq->txd = pci_alloc_consistent(priv->pdev, size, &txq->txd_dma);
if (txq->txd == NULL) { if (txq->txd == NULL) {
wiphy_err(hw->wiphy, "failed to alloc tx descriptors\n"); wiphy_err(hw->wiphy, "failed to alloc TX descriptors\n");
return -ENOMEM; return -ENOMEM;
} }
memset(txq->txd, 0, size); memset(txq->txd, 0, size);
txq->skb = kmalloc(MWL8K_TX_DESCS * sizeof(*txq->skb), GFP_KERNEL); txq->skb = kmalloc(MWL8K_TX_DESCS * sizeof(*txq->skb), GFP_KERNEL);
if (txq->skb == NULL) { if (txq->skb == NULL) {
wiphy_err(hw->wiphy, "failed to alloc tx skbuff list\n"); wiphy_err(hw->wiphy, "failed to alloc TX skbuff list\n");
pci_free_consistent(priv->pdev, size, txq->txd, txq->txd_dma); pci_free_consistent(priv->pdev, size, txq->txd, txq->txd_dma);
return -ENOMEM; return -ENOMEM;
} }
@ -1573,7 +1573,7 @@ static int mwl8k_post_cmd(struct ieee80211_hw *hw, struct mwl8k_cmd_pkt *cmd)
PCI_DMA_BIDIRECTIONAL); PCI_DMA_BIDIRECTIONAL);
if (!timeout) { if (!timeout) {
wiphy_err(hw->wiphy, "command %s timeout after %u ms\n", wiphy_err(hw->wiphy, "Command %s timeout after %u ms\n",
mwl8k_cmd_name(cmd->code, buf, sizeof(buf)), mwl8k_cmd_name(cmd->code, buf, sizeof(buf)),
MWL8K_CMD_TIMEOUT_MS); MWL8K_CMD_TIMEOUT_MS);
rc = -ETIMEDOUT; rc = -ETIMEDOUT;
@ -1584,11 +1584,11 @@ static int mwl8k_post_cmd(struct ieee80211_hw *hw, struct mwl8k_cmd_pkt *cmd)
rc = cmd->result ? -EINVAL : 0; rc = cmd->result ? -EINVAL : 0;
if (rc) if (rc)
wiphy_err(hw->wiphy, "command %s error 0x%x\n", wiphy_err(hw->wiphy, "Command %s error 0x%x\n",
mwl8k_cmd_name(cmd->code, buf, sizeof(buf)), mwl8k_cmd_name(cmd->code, buf, sizeof(buf)),
le16_to_cpu(cmd->result)); le16_to_cpu(cmd->result));
else if (ms > 2000) else if (ms > 2000)
wiphy_notice(hw->wiphy, "command %s took %d ms\n", wiphy_notice(hw->wiphy, "Command %s took %d ms\n",
mwl8k_cmd_name(cmd->code, mwl8k_cmd_name(cmd->code,
buf, sizeof(buf)), buf, sizeof(buf)),
ms); ms);
@ -3210,7 +3210,7 @@ static int mwl8k_start(struct ieee80211_hw *hw)
rc = request_irq(priv->pdev->irq, mwl8k_interrupt, rc = request_irq(priv->pdev->irq, mwl8k_interrupt,
IRQF_SHARED, MWL8K_NAME, hw); IRQF_SHARED, MWL8K_NAME, hw);
if (rc) { if (rc) {
wiphy_err(hw->wiphy, "failed to register irq handler\n"); wiphy_err(hw->wiphy, "failed to register IRQ handler\n");
return -EIO; return -EIO;
} }
@ -3926,7 +3926,7 @@ static int __devinit mwl8k_probe(struct pci_dev *pdev,
priv->sram = pci_iomap(pdev, 0, 0x10000); priv->sram = pci_iomap(pdev, 0, 0x10000);
if (priv->sram == NULL) { if (priv->sram == NULL) {
wiphy_err(hw->wiphy, "cannot map device sram\n"); wiphy_err(hw->wiphy, "Cannot map device SRAM\n");
goto err_iounmap; goto err_iounmap;
} }
@ -3938,7 +3938,7 @@ static int __devinit mwl8k_probe(struct pci_dev *pdev,
if (priv->regs == NULL) { if (priv->regs == NULL) {
priv->regs = pci_iomap(pdev, 2, 0x10000); priv->regs = pci_iomap(pdev, 2, 0x10000);
if (priv->regs == NULL) { if (priv->regs == NULL) {
wiphy_err(hw->wiphy, "cannot map device registers\n"); wiphy_err(hw->wiphy, "Cannot map device registers\n");
goto err_iounmap; goto err_iounmap;
} }
} }
@ -3950,14 +3950,14 @@ static int __devinit mwl8k_probe(struct pci_dev *pdev,
/* Ask userland hotplug daemon for the device firmware */ /* Ask userland hotplug daemon for the device firmware */
rc = mwl8k_request_firmware(priv); rc = mwl8k_request_firmware(priv);
if (rc) { if (rc) {
wiphy_err(hw->wiphy, "firmware files not found\n"); wiphy_err(hw->wiphy, "Firmware files not found\n");
goto err_stop_firmware; goto err_stop_firmware;
} }
/* Load firmware into hardware */ /* Load firmware into hardware */
rc = mwl8k_load_firmware(hw); rc = mwl8k_load_firmware(hw);
if (rc) { if (rc) {
wiphy_err(hw->wiphy, "cannot start firmware\n"); wiphy_err(hw->wiphy, "Cannot start firmware\n");
goto err_stop_firmware; goto err_stop_firmware;
} }
@ -4047,7 +4047,7 @@ static int __devinit mwl8k_probe(struct pci_dev *pdev,
rc = request_irq(priv->pdev->irq, mwl8k_interrupt, rc = request_irq(priv->pdev->irq, mwl8k_interrupt,
IRQF_SHARED, MWL8K_NAME, hw); IRQF_SHARED, MWL8K_NAME, hw);
if (rc) { if (rc) {
wiphy_err(hw->wiphy, "failed to register irq handler\n"); wiphy_err(hw->wiphy, "failed to register IRQ handler\n");
goto err_free_queues; goto err_free_queues;
} }
@ -4067,7 +4067,7 @@ static int __devinit mwl8k_probe(struct pci_dev *pdev,
rc = mwl8k_cmd_get_hw_spec_sta(hw); rc = mwl8k_cmd_get_hw_spec_sta(hw);
} }
if (rc) { if (rc) {
wiphy_err(hw->wiphy, "cannot initialise firmware\n"); wiphy_err(hw->wiphy, "Cannot initialise firmware\n");
goto err_free_irq; goto err_free_irq;
} }
@ -4081,14 +4081,14 @@ static int __devinit mwl8k_probe(struct pci_dev *pdev,
/* Turn radio off */ /* Turn radio off */
rc = mwl8k_cmd_radio_disable(hw); rc = mwl8k_cmd_radio_disable(hw);
if (rc) { if (rc) {
wiphy_err(hw->wiphy, "cannot disable\n"); wiphy_err(hw->wiphy, "Cannot disable\n");
goto err_free_irq; goto err_free_irq;
} }
/* Clear MAC address */ /* Clear MAC address */
rc = mwl8k_cmd_set_mac_addr(hw, NULL, "\x00\x00\x00\x00\x00\x00"); rc = mwl8k_cmd_set_mac_addr(hw, NULL, "\x00\x00\x00\x00\x00\x00");
if (rc) { if (rc) {
wiphy_err(hw->wiphy, "cannot clear mac address\n"); wiphy_err(hw->wiphy, "Cannot clear MAC address\n");
goto err_free_irq; goto err_free_irq;
} }
@ -4098,7 +4098,7 @@ static int __devinit mwl8k_probe(struct pci_dev *pdev,
rc = ieee80211_register_hw(hw); rc = ieee80211_register_hw(hw);
if (rc) { if (rc) {
wiphy_err(hw->wiphy, "cannot register device\n"); wiphy_err(hw->wiphy, "Cannot register device\n");
goto err_free_queues; goto err_free_queues;
} }

View file

@ -167,7 +167,7 @@ static int p54_generate_band(struct ieee80211_hw *dev,
} }
if (j == 0) { if (j == 0) {
wiphy_err(dev->wiphy, "disabling totally damaged %d GHz band\n", wiphy_err(dev->wiphy, "Disabling totally damaged %d GHz band\n",
(band == IEEE80211_BAND_2GHZ) ? 2 : 5); (band == IEEE80211_BAND_2GHZ) ? 2 : 5);
ret = -ENODATA; ret = -ENODATA;
@ -695,12 +695,12 @@ int p54_parse_eeprom(struct ieee80211_hw *dev, void *eeprom, int len)
u8 perm_addr[ETH_ALEN]; u8 perm_addr[ETH_ALEN];
wiphy_warn(dev->wiphy, wiphy_warn(dev->wiphy,
"invalid hwaddr! using randomly generated mac addr\n"); "Invalid hwaddr! Using randomly generated MAC addr\n");
random_ether_addr(perm_addr); random_ether_addr(perm_addr);
SET_IEEE80211_PERM_ADDR(dev, perm_addr); SET_IEEE80211_PERM_ADDR(dev, perm_addr);
} }
wiphy_info(dev->wiphy, "hwaddr %pm, mac:isl38%02x rf:%s\n", wiphy_info(dev->wiphy, "hwaddr %pM, MAC:isl38%02x RF:%s\n",
dev->wiphy->perm_addr, priv->version, dev->wiphy->perm_addr, priv->version,
p54_rf_chips[priv->rxhw]); p54_rf_chips[priv->rxhw]);

View file

@ -125,7 +125,7 @@ int p54_parse_firmware(struct ieee80211_hw *dev, const struct firmware *fw)
if (fw_version) if (fw_version)
wiphy_info(priv->hw->wiphy, wiphy_info(priv->hw->wiphy,
"fw rev %s - softmac protocol %x.%x\n", "FW rev %s - Softmac protocol %x.%x\n",
fw_version, priv->fw_var >> 8, priv->fw_var & 0xff); fw_version, priv->fw_var >> 8, priv->fw_var & 0xff);
if (priv->fw_var < 0x500) if (priv->fw_var < 0x500)

View file

@ -58,7 +58,7 @@ static void p54_update_leds(struct work_struct *work)
err = p54_set_leds(priv); err = p54_set_leds(priv);
if (err && net_ratelimit()) if (err && net_ratelimit())
wiphy_err(priv->hw->wiphy, wiphy_err(priv->hw->wiphy,
"failed to update leds (%d).\n", err); "failed to update LEDs (%d).\n", err);
if (rerun) if (rerun)
ieee80211_queue_delayed_work(priv->hw, &priv->led_work, ieee80211_queue_delayed_work(priv->hw, &priv->led_work,
@ -103,7 +103,7 @@ static int p54_register_led(struct p54_common *priv,
err = led_classdev_register(wiphy_dev(priv->hw->wiphy), &led->led_dev); err = led_classdev_register(wiphy_dev(priv->hw->wiphy), &led->led_dev);
if (err) if (err)
wiphy_err(priv->hw->wiphy, wiphy_err(priv->hw->wiphy,
"failed to register %s led.\n", name); "Failed to register %s LED.\n", name);
else else
led->registered = 1; led->registered = 1;

View file

@ -466,7 +466,7 @@ static int p54p_open(struct ieee80211_hw *dev)
P54P_READ(dev_int); P54P_READ(dev_int);
if (!wait_for_completion_interruptible_timeout(&priv->boot_comp, HZ)) { if (!wait_for_completion_interruptible_timeout(&priv->boot_comp, HZ)) {
wiphy_err(dev->wiphy, "cannot boot firmware!\n"); wiphy_err(dev->wiphy, "Cannot boot firmware!\n");
p54p_stop(dev); p54p_stop(dev);
return -ETIMEDOUT; return -ETIMEDOUT;
} }

View file

@ -540,7 +540,7 @@ static void p54_rx_trap(struct p54_common *priv, struct sk_buff *skb)
case P54_TRAP_BEACON_TX: case P54_TRAP_BEACON_TX:
break; break;
case P54_TRAP_RADAR: case P54_TRAP_RADAR:
wiphy_info(priv->hw->wiphy, "radar (freq:%d mhz)\n", freq); wiphy_info(priv->hw->wiphy, "radar (freq:%d MHz)\n", freq);
break; break;
case P54_TRAP_NO_BEACON: case P54_TRAP_NO_BEACON:
if (priv->vif) if (priv->vif)

View file

@ -445,7 +445,7 @@ static int rtl8180_init_rx_ring(struct ieee80211_hw *dev)
&priv->rx_ring_dma); &priv->rx_ring_dma);
if (!priv->rx_ring || (unsigned long)priv->rx_ring & 0xFF) { if (!priv->rx_ring || (unsigned long)priv->rx_ring & 0xFF) {
wiphy_err(dev->wiphy, "cannot allocate rx ring\n"); wiphy_err(dev->wiphy, "Cannot allocate RX ring\n");
return -ENOMEM; return -ENOMEM;
} }
@ -502,7 +502,7 @@ static int rtl8180_init_tx_ring(struct ieee80211_hw *dev,
ring = pci_alloc_consistent(priv->pdev, sizeof(*ring) * entries, &dma); ring = pci_alloc_consistent(priv->pdev, sizeof(*ring) * entries, &dma);
if (!ring || (unsigned long)ring & 0xFF) { if (!ring || (unsigned long)ring & 0xFF) {
wiphy_err(dev->wiphy, "cannot allocate tx ring (prio = %d)\n", wiphy_err(dev->wiphy, "Cannot allocate TX ring (prio = %d)\n",
prio); prio);
return -ENOMEM; return -ENOMEM;
} }
@ -568,7 +568,7 @@ static int rtl8180_start(struct ieee80211_hw *dev)
ret = request_irq(priv->pdev->irq, rtl8180_interrupt, ret = request_irq(priv->pdev->irq, rtl8180_interrupt,
IRQF_SHARED, KBUILD_MODNAME, dev); IRQF_SHARED, KBUILD_MODNAME, dev);
if (ret) { if (ret) {
wiphy_err(dev->wiphy, "failed to register irq handler\n"); wiphy_err(dev->wiphy, "failed to register IRQ handler\n");
goto err_free_rings; goto err_free_rings;
} }

View file

@ -573,7 +573,7 @@ static int rtl8187_cmd_reset(struct ieee80211_hw *dev)
} while (--i); } while (--i);
if (!i) { if (!i) {
wiphy_err(dev->wiphy, "reset timeout!\n"); wiphy_err(dev->wiphy, "Reset timeout!\n");
return -ETIMEDOUT; return -ETIMEDOUT;
} }
@ -1526,7 +1526,7 @@ static int __devinit rtl8187_probe(struct usb_interface *intf,
mutex_init(&priv->conf_mutex); mutex_init(&priv->conf_mutex);
skb_queue_head_init(&priv->b_tx_status.queue); skb_queue_head_init(&priv->b_tx_status.queue);
wiphy_info(dev->wiphy, "hwaddr %pm, %s v%d + %s, rfkill mask %d\n", wiphy_info(dev->wiphy, "hwaddr %pM, %s V%d + %s, rfkill mask %d\n",
mac_addr, chip_name, priv->asic_rev, priv->rf->name, mac_addr, chip_name, priv->asic_rev, priv->rf->name,
priv->rfkill_mask); priv->rfkill_mask);

View file

@ -366,7 +366,7 @@ static void rtl8225_rf_init(struct ieee80211_hw *dev)
rtl8225_write(dev, 0x02, 0x044d); rtl8225_write(dev, 0x02, 0x044d);
msleep(100); msleep(100);
if (!(rtl8225_read(dev, 6) & (1 << 7))) if (!(rtl8225_read(dev, 6) & (1 << 7)))
wiphy_warn(dev->wiphy, "rf calibration failed! %x\n", wiphy_warn(dev->wiphy, "RF Calibration Failed! %x\n",
rtl8225_read(dev, 6)); rtl8225_read(dev, 6));
} }
@ -735,7 +735,7 @@ static void rtl8225z2_rf_init(struct ieee80211_hw *dev)
rtl8225_write(dev, 0x02, 0x044D); rtl8225_write(dev, 0x02, 0x044D);
msleep(100); msleep(100);
if (!(rtl8225_read(dev, 6) & (1 << 7))) if (!(rtl8225_read(dev, 6) & (1 << 7)))
wiphy_warn(dev->wiphy, "rf calibration failed! %x\n", wiphy_warn(dev->wiphy, "RF Calibration Failed! %x\n",
rtl8225_read(dev, 6)); rtl8225_read(dev, 6));
} }

View file

@ -119,7 +119,7 @@ struct ethhdr {
unsigned char h_dest[ETH_ALEN]; /* destination eth addr */ unsigned char h_dest[ETH_ALEN]; /* destination eth addr */
unsigned char h_source[ETH_ALEN]; /* source ether addr */ unsigned char h_source[ETH_ALEN]; /* source ether addr */
__be16 h_proto; /* packet type ID field */ __be16 h_proto; /* packet type ID field */
} __packed; } __attribute__((packed));
#ifdef __KERNEL__ #ifdef __KERNEL__
#include <linux/skbuff.h> #include <linux/skbuff.h>

View file

@ -67,7 +67,7 @@ struct fddi_8022_1_hdr {
__u8 dsap; /* destination service access point */ __u8 dsap; /* destination service access point */
__u8 ssap; /* source service access point */ __u8 ssap; /* source service access point */
__u8 ctrl; /* control byte #1 */ __u8 ctrl; /* control byte #1 */
} __packed; } __attribute__((packed));
/* Define 802.2 Type 2 header */ /* Define 802.2 Type 2 header */
struct fddi_8022_2_hdr { struct fddi_8022_2_hdr {
@ -75,7 +75,7 @@ struct fddi_8022_2_hdr {
__u8 ssap; /* source service access point */ __u8 ssap; /* source service access point */
__u8 ctrl_1; /* control byte #1 */ __u8 ctrl_1; /* control byte #1 */
__u8 ctrl_2; /* control byte #2 */ __u8 ctrl_2; /* control byte #2 */
} __packed; } __attribute__((packed));
/* Define 802.2 SNAP header */ /* Define 802.2 SNAP header */
#define FDDI_K_OUI_LEN 3 #define FDDI_K_OUI_LEN 3
@ -85,7 +85,7 @@ struct fddi_snap_hdr {
__u8 ctrl; /* always 0x03 */ __u8 ctrl; /* always 0x03 */
__u8 oui[FDDI_K_OUI_LEN]; /* organizational universal id */ __u8 oui[FDDI_K_OUI_LEN]; /* organizational universal id */
__be16 ethertype; /* packet type ID field */ __be16 ethertype; /* packet type ID field */
} __packed; } __attribute__((packed));
/* Define FDDI LLC frame header */ /* Define FDDI LLC frame header */
struct fddihdr { struct fddihdr {
@ -98,7 +98,7 @@ struct fddihdr {
struct fddi_8022_2_hdr llc_8022_2; struct fddi_8022_2_hdr llc_8022_2;
struct fddi_snap_hdr llc_snap; struct fddi_snap_hdr llc_snap;
} hdr; } hdr;
} __packed; } __attribute__((packed));
#ifdef __KERNEL__ #ifdef __KERNEL__
#include <linux/netdevice.h> #include <linux/netdevice.h>

View file

@ -104,7 +104,7 @@ struct hippi_fp_hdr {
__be32 fixed; __be32 fixed;
#endif #endif
__be32 d2_size; __be32 d2_size;
} __packed; } __attribute__((packed));
struct hippi_le_hdr { struct hippi_le_hdr {
#if defined (__BIG_ENDIAN_BITFIELD) #if defined (__BIG_ENDIAN_BITFIELD)
@ -129,7 +129,7 @@ struct hippi_le_hdr {
__u8 daddr[HIPPI_ALEN]; __u8 daddr[HIPPI_ALEN];
__u16 locally_administered; __u16 locally_administered;
__u8 saddr[HIPPI_ALEN]; __u8 saddr[HIPPI_ALEN];
} __packed; } __attribute__((packed));
#define HIPPI_OUI_LEN 3 #define HIPPI_OUI_LEN 3
/* /*
@ -142,12 +142,12 @@ struct hippi_snap_hdr {
__u8 ctrl; /* always 0x03 */ __u8 ctrl; /* always 0x03 */
__u8 oui[HIPPI_OUI_LEN]; /* organizational universal id (zero)*/ __u8 oui[HIPPI_OUI_LEN]; /* organizational universal id (zero)*/
__be16 ethertype; /* packet type ID field */ __be16 ethertype; /* packet type ID field */
} __packed; } __attribute__((packed));
struct hippi_hdr { struct hippi_hdr {
struct hippi_fp_hdr fp; struct hippi_fp_hdr fp;
struct hippi_le_hdr le; struct hippi_le_hdr le;
struct hippi_snap_hdr snap; struct hippi_snap_hdr snap;
} __packed; } __attribute__((packed));
#endif /* _LINUX_IF_HIPPI_H */ #endif /* _LINUX_IF_HIPPI_H */

View file

@ -59,7 +59,7 @@ struct sockaddr_pppox {
union{ union{
struct pppoe_addr pppoe; struct pppoe_addr pppoe;
}sa_addr; }sa_addr;
} __packed; } __attribute__((packed));
/* The use of the above union isn't viable because the size of this /* The use of the above union isn't viable because the size of this
* struct must stay fixed over time -- applications use sizeof(struct * struct must stay fixed over time -- applications use sizeof(struct
@ -70,7 +70,7 @@ struct sockaddr_pppol2tp {
sa_family_t sa_family; /* address family, AF_PPPOX */ sa_family_t sa_family; /* address family, AF_PPPOX */
unsigned int sa_protocol; /* protocol identifier */ unsigned int sa_protocol; /* protocol identifier */
struct pppol2tp_addr pppol2tp; struct pppol2tp_addr pppol2tp;
} __packed; } __attribute__((packed));
/* The L2TPv3 protocol changes tunnel and session ids from 16 to 32 /* The L2TPv3 protocol changes tunnel and session ids from 16 to 32
* bits. So we need a different sockaddr structure. * bits. So we need a different sockaddr structure.
@ -79,7 +79,7 @@ struct sockaddr_pppol2tpv3 {
sa_family_t sa_family; /* address family, AF_PPPOX */ sa_family_t sa_family; /* address family, AF_PPPOX */
unsigned int sa_protocol; /* protocol identifier */ unsigned int sa_protocol; /* protocol identifier */
struct pppol2tpv3_addr pppol2tp; struct pppol2tpv3_addr pppol2tp;
} __packed; } __attribute__((packed));
/********************************************************************* /*********************************************************************
* *
@ -101,7 +101,7 @@ struct pppoe_tag {
__be16 tag_type; __be16 tag_type;
__be16 tag_len; __be16 tag_len;
char tag_data[0]; char tag_data[0];
} __attribute ((packed)); } __attribute__ ((packed));
/* Tag identifiers */ /* Tag identifiers */
#define PTT_EOL __cpu_to_be16(0x0000) #define PTT_EOL __cpu_to_be16(0x0000)
@ -129,7 +129,7 @@ struct pppoe_hdr {
__be16 sid; __be16 sid;
__be16 length; __be16 length;
struct pppoe_tag tag[0]; struct pppoe_tag tag[0];
} __packed; } __attribute__((packed));
/* Length of entire PPPoE + PPP header */ /* Length of entire PPPoE + PPP header */
#define PPPOE_SES_HLEN 8 #define PPPOE_SES_HLEN 8

View file

@ -58,7 +58,7 @@ struct ipv6_opt_hdr {
/* /*
* TLV encoded option data follows. * TLV encoded option data follows.
*/ */
} __packed; /* required for some archs */ } __attribute__((packed)); /* required for some archs */
#define ipv6_destopt_hdr ipv6_opt_hdr #define ipv6_destopt_hdr ipv6_opt_hdr
#define ipv6_hopopt_hdr ipv6_opt_hdr #define ipv6_hopopt_hdr ipv6_opt_hdr
@ -99,7 +99,7 @@ struct ipv6_destopt_hao {
__u8 type; __u8 type;
__u8 length; __u8 length;
struct in6_addr addr; struct in6_addr addr;
} __packed; } __attribute__((packed));
/* /*
* IPv6 fixed header * IPv6 fixed header

View file

@ -88,7 +88,7 @@ struct nbd_request {
char handle[8]; char handle[8];
__be64 from; __be64 from;
__be32 len; __be32 len;
} __packed; } __attribute__((packed));
/* /*
* This is the reply packet that nbd-server sends back to the client after * This is the reply packet that nbd-server sends back to the client after

View file

@ -27,7 +27,7 @@ struct ncp_request_header {
__u8 conn_high; __u8 conn_high;
__u8 function; __u8 function;
__u8 data[0]; __u8 data[0];
} __packed; } __attribute__((packed));
#define NCP_REPLY (0x3333) #define NCP_REPLY (0x3333)
#define NCP_WATCHDOG (0x3E3E) #define NCP_WATCHDOG (0x3E3E)
@ -42,7 +42,7 @@ struct ncp_reply_header {
__u8 completion_code; __u8 completion_code;
__u8 connection_state; __u8 connection_state;
__u8 data[0]; __u8 data[0];
} __packed; } __attribute__((packed));
#define NCP_VOLNAME_LEN (16) #define NCP_VOLNAME_LEN (16)
#define NCP_NUMBER_OF_VOLUMES (256) #define NCP_NUMBER_OF_VOLUMES (256)
@ -158,7 +158,7 @@ struct nw_info_struct {
#ifdef __KERNEL__ #ifdef __KERNEL__
struct nw_nfs_info nfs; struct nw_nfs_info nfs;
#endif #endif
} __packed; } __attribute__((packed));
/* modify mask - use with MODIFY_DOS_INFO structure */ /* modify mask - use with MODIFY_DOS_INFO structure */
#define DM_ATTRIBUTES (cpu_to_le32(0x02)) #define DM_ATTRIBUTES (cpu_to_le32(0x02))
@ -190,12 +190,12 @@ struct nw_modify_dos_info {
__u16 inheritanceGrantMask; __u16 inheritanceGrantMask;
__u16 inheritanceRevokeMask; __u16 inheritanceRevokeMask;
__u32 maximumSpace; __u32 maximumSpace;
} __packed; } __attribute__((packed));
struct nw_search_sequence { struct nw_search_sequence {
__u8 volNumber; __u8 volNumber;
__u32 dirBase; __u32 dirBase;
__u32 sequence; __u32 sequence;
} __packed; } __attribute__((packed));
#endif /* _LINUX_NCP_H */ #endif /* _LINUX_NCP_H */

View file

@ -39,7 +39,7 @@ struct idletimer_tg_info {
char label[MAX_IDLETIMER_LABEL_SIZE]; char label[MAX_IDLETIMER_LABEL_SIZE];
/* for kernel module internal use only */ /* for kernel module internal use only */
struct idletimer_tg *timer __attribute((aligned(8))); struct idletimer_tg *timer __attribute__((aligned(8)));
}; };
#endif #endif

View file

@ -1,6 +1,8 @@
#ifndef _XT_IPVS_H #ifndef _XT_IPVS_H
#define _XT_IPVS_H #define _XT_IPVS_H
#include <linux/types.h>
enum { enum {
XT_IPVS_IPVS_PROPERTY = 1 << 0, /* all other options imply this one */ XT_IPVS_IPVS_PROPERTY = 1 << 0, /* all other options imply this one */
XT_IPVS_PROTO = 1 << 1, XT_IPVS_PROTO = 1 << 1,

View file

@ -56,7 +56,7 @@ struct phonethdr {
__be16 pn_length; __be16 pn_length;
__u8 pn_robj; __u8 pn_robj;
__u8 pn_sobj; __u8 pn_sobj;
} __packed; } __attribute__((packed));
/* Common Phonet payload header */ /* Common Phonet payload header */
struct phonetmsg { struct phonetmsg {
@ -98,7 +98,7 @@ struct sockaddr_pn {
__u8 spn_dev; __u8 spn_dev;
__u8 spn_resource; __u8 spn_resource;
__u8 spn_zero[sizeof(struct sockaddr) - sizeof(sa_family_t) - 3]; __u8 spn_zero[sizeof(struct sockaddr) - sizeof(sa_family_t) - 3];
} __packed; } __attribute__((packed));
/* Well known address */ /* Well known address */
#define PN_DEV_PC 0x10 #define PN_DEV_PC 0x10

View file

@ -0,0 +1,30 @@
/*
*pxa168 ethernet platform device data definition file.
*/
#ifndef __LINUX_PXA168_ETH_H
#define __LINUX_PXA168_ETH_H
struct pxa168_eth_platform_data {
int port_number;
int phy_addr;
/*
* If speed is 0, then speed and duplex are autonegotiated.
*/
int speed; /* 0, SPEED_10, SPEED_100 */
int duplex; /* DUPLEX_HALF or DUPLEX_FULL */
/*
* Override default RX/TX queue sizes if nonzero.
*/
int rx_queue_size;
int tx_queue_size;
/*
* init callback is used for board specific initialization
* e.g on Aspenite its used to initialize the PHY transceiver.
*/
int (*init)(void);
};
#endif /* __LINUX_PXA168_ETH_H */

View file

@ -81,7 +81,7 @@ struct rfkill_event {
__u8 type; __u8 type;
__u8 op; __u8 op;
__u8 soft, hard; __u8 soft, hard;
} __packed; } __attribute__((packed));
/* /*
* We are planning to be backward and forward compatible with changes * We are planning to be backward and forward compatible with changes

View file

@ -510,7 +510,8 @@ static int vlan_dev_open(struct net_device *dev)
if (vlan->flags & VLAN_FLAG_GVRP) if (vlan->flags & VLAN_FLAG_GVRP)
vlan_gvrp_request_join(dev); vlan_gvrp_request_join(dev);
netif_carrier_on(dev); if (netif_carrier_ok(real_dev))
netif_carrier_on(dev);
return 0; return 0;
clear_allmulti: clear_allmulti:

View file

@ -1420,6 +1420,9 @@ static int translate_compat_table(const char *name,
if (ret != 0) if (ret != 0)
break; break;
++i; ++i;
if (strcmp(arpt_get_target(iter1)->u.user.name,
XT_ERROR_TARGET) == 0)
++newinfo->stacksize;
} }
if (ret) { if (ret) {
/* /*

View file

@ -1751,6 +1751,9 @@ translate_compat_table(struct net *net,
if (ret != 0) if (ret != 0)
break; break;
++i; ++i;
if (strcmp(ipt_get_target(iter1)->u.user.name,
XT_ERROR_TARGET) == 0)
++newinfo->stacksize;
} }
if (ret) { if (ret) {
/* /*

View file

@ -1766,6 +1766,9 @@ translate_compat_table(struct net *net,
if (ret != 0) if (ret != 0)
break; break;
++i; ++i;
if (strcmp(ip6t_get_target(iter1)->u.user.name,
XT_ERROR_TARGET) == 0)
++newinfo->stacksize;
} }
if (ret) { if (ret) {
/* /*

View file

@ -169,6 +169,7 @@ static netdev_tx_t irlan_eth_xmit(struct sk_buff *skb,
{ {
struct irlan_cb *self = netdev_priv(dev); struct irlan_cb *self = netdev_priv(dev);
int ret; int ret;
unsigned int len;
/* skb headroom large enough to contain all IrDA-headers? */ /* skb headroom large enough to contain all IrDA-headers? */
if ((skb_headroom(skb) < self->max_header_size) || (skb_shared(skb))) { if ((skb_headroom(skb) < self->max_header_size) || (skb_shared(skb))) {
@ -188,6 +189,7 @@ static netdev_tx_t irlan_eth_xmit(struct sk_buff *skb,
dev->trans_start = jiffies; dev->trans_start = jiffies;
len = skb->len;
/* Now queue the packet in the transport layer */ /* Now queue the packet in the transport layer */
if (self->use_udata) if (self->use_udata)
ret = irttp_udata_request(self->tsap_data, skb); ret = irttp_udata_request(self->tsap_data, skb);
@ -209,7 +211,7 @@ static netdev_tx_t irlan_eth_xmit(struct sk_buff *skb,
self->stats.tx_dropped++; self->stats.tx_dropped++;
} else { } else {
self->stats.tx_packets++; self->stats.tx_packets++;
self->stats.tx_bytes += skb->len; self->stats.tx_bytes += len;
} }
return NETDEV_TX_OK; return NETDEV_TX_OK;

View file

@ -1406,7 +1406,7 @@ static int netlink_recvmsg(struct kiocb *kiocb, struct socket *sock,
struct netlink_sock *nlk = nlk_sk(sk); struct netlink_sock *nlk = nlk_sk(sk);
int noblock = flags&MSG_DONTWAIT; int noblock = flags&MSG_DONTWAIT;
size_t copied; size_t copied;
struct sk_buff *skb, *frag __maybe_unused = NULL; struct sk_buff *skb, *data_skb;
int err; int err;
if (flags&MSG_OOB) if (flags&MSG_OOB)
@ -1418,45 +1418,35 @@ static int netlink_recvmsg(struct kiocb *kiocb, struct socket *sock,
if (skb == NULL) if (skb == NULL)
goto out; goto out;
data_skb = skb;
#ifdef CONFIG_COMPAT_NETLINK_MESSAGES #ifdef CONFIG_COMPAT_NETLINK_MESSAGES
if (unlikely(skb_shinfo(skb)->frag_list)) { if (unlikely(skb_shinfo(skb)->frag_list)) {
bool need_compat = !!(flags & MSG_CMSG_COMPAT);
/* /*
* If this skb has a frag_list, then here that means that * If this skb has a frag_list, then here that means that we
* we will have to use the frag_list skb for compat tasks * will have to use the frag_list skb's data for compat tasks
* and the regular skb for non-compat tasks. * and the regular skb's data for normal (non-compat) tasks.
* *
* The skb might (and likely will) be cloned, so we can't * If we need to send the compat skb, assign it to the
* just reset frag_list and go on with things -- we need to * 'data_skb' variable so that it will be used below for data
* keep that. For the compat case that's easy -- simply get * copying. We keep 'skb' for everything else, including
* a reference to the compat skb and free the regular one * freeing both later.
* including the frag. For the non-compat case, we need to
* avoid sending the frag to the user -- so assign NULL but
* restore it below before freeing the skb.
*/ */
if (need_compat) { if (flags & MSG_CMSG_COMPAT)
struct sk_buff *compskb = skb_shinfo(skb)->frag_list; data_skb = skb_shinfo(skb)->frag_list;
skb_get(compskb);
kfree_skb(skb);
skb = compskb;
} else {
frag = skb_shinfo(skb)->frag_list;
skb_shinfo(skb)->frag_list = NULL;
}
} }
#endif #endif
msg->msg_namelen = 0; msg->msg_namelen = 0;
copied = skb->len; copied = data_skb->len;
if (len < copied) { if (len < copied) {
msg->msg_flags |= MSG_TRUNC; msg->msg_flags |= MSG_TRUNC;
copied = len; copied = len;
} }
skb_reset_transport_header(skb); skb_reset_transport_header(data_skb);
err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied); err = skb_copy_datagram_iovec(data_skb, 0, msg->msg_iov, copied);
if (msg->msg_name) { if (msg->msg_name) {
struct sockaddr_nl *addr = (struct sockaddr_nl *)msg->msg_name; struct sockaddr_nl *addr = (struct sockaddr_nl *)msg->msg_name;
@ -1476,11 +1466,7 @@ static int netlink_recvmsg(struct kiocb *kiocb, struct socket *sock,
} }
siocb->scm->creds = *NETLINK_CREDS(skb); siocb->scm->creds = *NETLINK_CREDS(skb);
if (flags & MSG_TRUNC) if (flags & MSG_TRUNC)
copied = skb->len; copied = data_skb->len;
#ifdef CONFIG_COMPAT_NETLINK_MESSAGES
skb_shinfo(skb)->frag_list = frag;
#endif
skb_free_datagram(sk, skb); skb_free_datagram(sk, skb);

View file

@ -297,7 +297,7 @@ static int rds_still_queued(struct rds_sock *rs, struct rds_incoming *inc,
int rds_notify_queue_get(struct rds_sock *rs, struct msghdr *msghdr) int rds_notify_queue_get(struct rds_sock *rs, struct msghdr *msghdr)
{ {
struct rds_notifier *notifier; struct rds_notifier *notifier;
struct rds_rdma_notify cmsg; struct rds_rdma_notify cmsg = { 0 }; /* fill holes with zero */
unsigned int count = 0, max_messages = ~0U; unsigned int count = 0, max_messages = ~0U;
unsigned long flags; unsigned long flags;
LIST_HEAD(copy); LIST_HEAD(copy);