forked from Minki/linux
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: (23 commits) net: fix tiny output corruption of /proc/net/snmp6 atl2: don't request irq on resume if netif running ipv6: use seq_release_private for ip6mr.c /proc entries pkt_sched: fix missing check for packet overrun in qdisc_dump_stab() smc911x: Fix printf format typo in smc911x driver. asix: Fix asix-based cards connecting to 10/100Mbs LAN. mv643xx_eth: fix recycle check bound mv643xx_eth: fix the order of mdiobus_{unregister, free}() calls sh: sh_eth: Update to change of mii_bus TPROXY: supply a struct flowi->flags argument in inet_sk_rebuild_header() TPROXY: fill struct flowi->flags in udp_sendmsg() net: ipg.c fix bracing on endian swapping phylib: Fix auto-negotiation restart avoidance net: jme.c rxdesc.flags is __le16, other missing endian swaps phylib: fix phy name example in documentation net: Do not fire linkwatch events until the device is registered. phonet: fix compilation with gcc-3.4 ixgbe: fix compilation with gcc-3.4 pktgen: fix multiple queue warning net: fix ip_mr_init() error path ...
This commit is contained in:
commit
4dd61d92d7
@ -96,7 +96,7 @@ Letting the PHY Abstraction Layer do Everything
|
||||
static void adjust_link(struct net_device *dev);
|
||||
|
||||
Next, you need to know the device name of the PHY connected to this device.
|
||||
The name will look something like, "phy0:0", where the first number is the
|
||||
The name will look something like, "0:00", where the first number is the
|
||||
bus id, and the second is the PHY's address on that bus. Typically,
|
||||
the bus is responsible for making its ID unique.
|
||||
|
||||
|
@ -1690,9 +1690,11 @@ static int atl2_resume(struct pci_dev *pdev)
|
||||
|
||||
ATL2_WRITE_REG(&adapter->hw, REG_WOL_CTRL, 0);
|
||||
|
||||
err = atl2_request_irq(adapter);
|
||||
if (netif_running(netdev) && err)
|
||||
return err;
|
||||
if (netif_running(netdev)) {
|
||||
err = atl2_request_irq(adapter);
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
|
||||
atl2_reset_hw(&adapter->hw);
|
||||
|
||||
|
@ -1112,7 +1112,7 @@ static void ipg_nic_rx_free_skb(struct net_device *dev)
|
||||
struct ipg_rx *rxfd = sp->rxd + entry;
|
||||
|
||||
pci_unmap_single(sp->pdev,
|
||||
le64_to_cpu(rxfd->frag_info & ~IPG_RFI_FRAGLEN),
|
||||
le64_to_cpu(rxfd->frag_info) & ~IPG_RFI_FRAGLEN,
|
||||
sp->rx_buf_sz, PCI_DMA_FROMDEVICE);
|
||||
dev_kfree_skb_irq(sp->rx_buff[entry]);
|
||||
sp->rx_buff[entry] = NULL;
|
||||
@ -1179,7 +1179,7 @@ static int ipg_nic_rx_check_error(struct net_device *dev)
|
||||
*/
|
||||
if (sp->rx_buff[entry]) {
|
||||
pci_unmap_single(sp->pdev,
|
||||
le64_to_cpu(rxfd->frag_info & ~IPG_RFI_FRAGLEN),
|
||||
le64_to_cpu(rxfd->frag_info) & ~IPG_RFI_FRAGLEN,
|
||||
sp->rx_buf_sz, PCI_DMA_FROMDEVICE);
|
||||
|
||||
dev_kfree_skb_irq(sp->rx_buff[entry]);
|
||||
@ -1246,7 +1246,7 @@ static void ipg_nic_rx_with_start(struct net_device *dev,
|
||||
if (jumbo->found_start)
|
||||
dev_kfree_skb_irq(jumbo->skb);
|
||||
|
||||
pci_unmap_single(pdev, le64_to_cpu(rxfd->frag_info & ~IPG_RFI_FRAGLEN),
|
||||
pci_unmap_single(pdev, le64_to_cpu(rxfd->frag_info) & ~IPG_RFI_FRAGLEN,
|
||||
sp->rx_buf_sz, PCI_DMA_FROMDEVICE);
|
||||
|
||||
skb_put(skb, sp->rxfrag_size);
|
||||
@ -1349,7 +1349,7 @@ static int ipg_nic_rx_jumbo(struct net_device *dev)
|
||||
unsigned int entry = curr % IPG_RFDLIST_LENGTH;
|
||||
struct ipg_rx *rxfd = sp->rxd + entry;
|
||||
|
||||
if (!(rxfd->rfs & le64_to_cpu(IPG_RFS_RFDDONE)))
|
||||
if (!(rxfd->rfs & cpu_to_le64(IPG_RFS_RFDDONE)))
|
||||
break;
|
||||
|
||||
switch (ipg_nic_rx_check_frame_type(dev)) {
|
||||
|
@ -1287,7 +1287,34 @@ static void ixgbe_set_itr(struct ixgbe_adapter *adapter)
|
||||
return;
|
||||
}
|
||||
|
||||
static inline void ixgbe_irq_enable(struct ixgbe_adapter *adapter);
|
||||
/**
|
||||
* ixgbe_irq_disable - Mask off interrupt generation on the NIC
|
||||
* @adapter: board private structure
|
||||
**/
|
||||
static inline void ixgbe_irq_disable(struct ixgbe_adapter *adapter)
|
||||
{
|
||||
IXGBE_WRITE_REG(&adapter->hw, IXGBE_EIMC, ~0);
|
||||
IXGBE_WRITE_FLUSH(&adapter->hw);
|
||||
if (adapter->flags & IXGBE_FLAG_MSIX_ENABLED) {
|
||||
int i;
|
||||
for (i = 0; i < adapter->num_msix_vectors; i++)
|
||||
synchronize_irq(adapter->msix_entries[i].vector);
|
||||
} else {
|
||||
synchronize_irq(adapter->pdev->irq);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* ixgbe_irq_enable - Enable default interrupt generation settings
|
||||
* @adapter: board private structure
|
||||
**/
|
||||
static inline void ixgbe_irq_enable(struct ixgbe_adapter *adapter)
|
||||
{
|
||||
u32 mask;
|
||||
mask = IXGBE_EIMS_ENABLE_MASK;
|
||||
IXGBE_WRITE_REG(&adapter->hw, IXGBE_EIMS, mask);
|
||||
IXGBE_WRITE_FLUSH(&adapter->hw);
|
||||
}
|
||||
|
||||
/**
|
||||
* ixgbe_intr - legacy mode Interrupt Handler
|
||||
@ -1393,35 +1420,6 @@ static void ixgbe_free_irq(struct ixgbe_adapter *adapter)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* ixgbe_irq_disable - Mask off interrupt generation on the NIC
|
||||
* @adapter: board private structure
|
||||
**/
|
||||
static inline void ixgbe_irq_disable(struct ixgbe_adapter *adapter)
|
||||
{
|
||||
IXGBE_WRITE_REG(&adapter->hw, IXGBE_EIMC, ~0);
|
||||
IXGBE_WRITE_FLUSH(&adapter->hw);
|
||||
if (adapter->flags & IXGBE_FLAG_MSIX_ENABLED) {
|
||||
int i;
|
||||
for (i = 0; i < adapter->num_msix_vectors; i++)
|
||||
synchronize_irq(adapter->msix_entries[i].vector);
|
||||
} else {
|
||||
synchronize_irq(adapter->pdev->irq);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* ixgbe_irq_enable - Enable default interrupt generation settings
|
||||
* @adapter: board private structure
|
||||
**/
|
||||
static inline void ixgbe_irq_enable(struct ixgbe_adapter *adapter)
|
||||
{
|
||||
u32 mask;
|
||||
mask = IXGBE_EIMS_ENABLE_MASK;
|
||||
IXGBE_WRITE_REG(&adapter->hw, IXGBE_EIMS, mask);
|
||||
IXGBE_WRITE_FLUSH(&adapter->hw);
|
||||
}
|
||||
|
||||
/**
|
||||
* ixgbe_configure_msi_and_legacy - Initialize PIN (INTA...) and MSI interrupts
|
||||
*
|
||||
|
@ -912,23 +912,23 @@ jme_alloc_and_feed_skb(struct jme_adapter *jme, int idx)
|
||||
skb_put(skb, framesize);
|
||||
skb->protocol = eth_type_trans(skb, jme->dev);
|
||||
|
||||
if (jme_rxsum_ok(jme, rxdesc->descwb.flags))
|
||||
if (jme_rxsum_ok(jme, le16_to_cpu(rxdesc->descwb.flags)))
|
||||
skb->ip_summed = CHECKSUM_UNNECESSARY;
|
||||
else
|
||||
skb->ip_summed = CHECKSUM_NONE;
|
||||
|
||||
if (rxdesc->descwb.flags & RXWBFLAG_TAGON) {
|
||||
if (rxdesc->descwb.flags & cpu_to_le16(RXWBFLAG_TAGON)) {
|
||||
if (jme->vlgrp) {
|
||||
jme->jme_vlan_rx(skb, jme->vlgrp,
|
||||
le32_to_cpu(rxdesc->descwb.vlan));
|
||||
le16_to_cpu(rxdesc->descwb.vlan));
|
||||
NET_STAT(jme).rx_bytes += 4;
|
||||
}
|
||||
} else {
|
||||
jme->jme_rx(skb);
|
||||
}
|
||||
|
||||
if ((le16_to_cpu(rxdesc->descwb.flags) & RXWBFLAG_DEST) ==
|
||||
RXWBFLAG_DEST_MUL)
|
||||
if ((rxdesc->descwb.flags & cpu_to_le16(RXWBFLAG_DEST)) ==
|
||||
cpu_to_le16(RXWBFLAG_DEST_MUL))
|
||||
++(NET_STAT(jme).multicast);
|
||||
|
||||
jme->dev->last_rx = jiffies;
|
||||
@ -961,7 +961,7 @@ jme_process_receive(struct jme_adapter *jme, int limit)
|
||||
rxdesc = rxring->desc;
|
||||
rxdesc += i;
|
||||
|
||||
if ((rxdesc->descwb.flags & RXWBFLAG_OWN) ||
|
||||
if ((rxdesc->descwb.flags & cpu_to_le16(RXWBFLAG_OWN)) ||
|
||||
!(rxdesc->descwb.desccnt & RXWBDCNT_WBCPL))
|
||||
goto out;
|
||||
|
||||
@ -1763,10 +1763,9 @@ jme_expand_header(struct jme_adapter *jme, struct sk_buff *skb)
|
||||
}
|
||||
|
||||
static int
|
||||
jme_tx_tso(struct sk_buff *skb,
|
||||
u16 *mss, u8 *flags)
|
||||
jme_tx_tso(struct sk_buff *skb, __le16 *mss, u8 *flags)
|
||||
{
|
||||
*mss = skb_shinfo(skb)->gso_size << TXDESC_MSS_SHIFT;
|
||||
*mss = cpu_to_le16(skb_shinfo(skb)->gso_size << TXDESC_MSS_SHIFT);
|
||||
if (*mss) {
|
||||
*flags |= TXFLAG_LSEN;
|
||||
|
||||
@ -1826,11 +1825,11 @@ jme_tx_csum(struct jme_adapter *jme, struct sk_buff *skb, u8 *flags)
|
||||
}
|
||||
|
||||
static inline void
|
||||
jme_tx_vlan(struct sk_buff *skb, u16 *vlan, u8 *flags)
|
||||
jme_tx_vlan(struct sk_buff *skb, __le16 *vlan, u8 *flags)
|
||||
{
|
||||
if (vlan_tx_tag_present(skb)) {
|
||||
*flags |= TXFLAG_TAGON;
|
||||
*vlan = vlan_tx_tag_get(skb);
|
||||
*vlan = cpu_to_le16(vlan_tx_tag_get(skb));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -899,7 +899,8 @@ static int txq_reclaim(struct tx_queue *txq, int budget, int force)
|
||||
if (skb != NULL) {
|
||||
if (skb_queue_len(&mp->rx_recycle) <
|
||||
mp->default_rx_ring_size &&
|
||||
skb_recycle_check(skb, mp->skb_size))
|
||||
skb_recycle_check(skb, mp->skb_size +
|
||||
dma_get_cache_alignment() - 1))
|
||||
__skb_queue_head(&mp->rx_recycle, skb);
|
||||
else
|
||||
dev_kfree_skb(skb);
|
||||
@ -2435,8 +2436,8 @@ static int mv643xx_eth_shared_remove(struct platform_device *pdev)
|
||||
struct mv643xx_eth_shared_platform_data *pd = pdev->dev.platform_data;
|
||||
|
||||
if (pd == NULL || pd->shared_smi == NULL) {
|
||||
mdiobus_free(msp->smi_bus);
|
||||
mdiobus_unregister(msp->smi_bus);
|
||||
mdiobus_free(msp->smi_bus);
|
||||
}
|
||||
if (msp->err_interrupt != NO_IRQ)
|
||||
free_irq(msp->err_interrupt, msp);
|
||||
|
@ -564,20 +564,32 @@ EXPORT_SYMBOL(genphy_restart_aneg);
|
||||
*/
|
||||
int genphy_config_aneg(struct phy_device *phydev)
|
||||
{
|
||||
int result = 0;
|
||||
int result;
|
||||
|
||||
if (AUTONEG_ENABLE == phydev->autoneg) {
|
||||
int result = genphy_config_advert(phydev);
|
||||
if (AUTONEG_ENABLE != phydev->autoneg)
|
||||
return genphy_setup_forced(phydev);
|
||||
|
||||
if (result < 0) /* error */
|
||||
return result;
|
||||
result = genphy_config_advert(phydev);
|
||||
|
||||
/* Only restart aneg if we are advertising something different
|
||||
* than we were before. */
|
||||
if (result > 0)
|
||||
result = genphy_restart_aneg(phydev);
|
||||
} else
|
||||
result = genphy_setup_forced(phydev);
|
||||
if (result < 0) /* error */
|
||||
return result;
|
||||
|
||||
if (result == 0) {
|
||||
/* Advertisment hasn't changed, but maybe aneg was never on to
|
||||
* begin with? Or maybe phy was isolated? */
|
||||
int ctl = phy_read(phydev, MII_BMCR);
|
||||
|
||||
if (ctl < 0)
|
||||
return ctl;
|
||||
|
||||
if (!(ctl & BMCR_ANENABLE) || (ctl & BMCR_ISOLATE))
|
||||
result = 1; /* do restart aneg */
|
||||
}
|
||||
|
||||
/* Only restart aneg if we are advertising something different
|
||||
* than we were before. */
|
||||
if (result > 0)
|
||||
result = genphy_restart_aneg(phydev);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
@ -927,7 +927,7 @@ static int sh_eth_start_xmit(struct sk_buff *skb, struct net_device *ndev)
|
||||
struct sh_eth_private *mdp = netdev_priv(ndev);
|
||||
struct sh_eth_txdesc *txdesc;
|
||||
u32 entry;
|
||||
int flags;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&mdp->lock, flags);
|
||||
if ((mdp->cur_tx - mdp->dirty_tx) >= (TX_RING_SIZE - 4)) {
|
||||
@ -1141,7 +1141,7 @@ static int sh_mdio_init(struct net_device *ndev, int id)
|
||||
/* Hook up MII support for ethtool */
|
||||
mdp->mii_bus->name = "sh_mii";
|
||||
mdp->mii_bus->parent = &ndev->dev;
|
||||
mdp->mii_bus->id[0] = id;
|
||||
snprintf(mdp->mii_bus->id, MII_BUS_ID_SIZE, "%x", id);
|
||||
|
||||
/* PHY IRQ */
|
||||
mdp->mii_bus->irq = kmalloc(sizeof(int)*PHY_MAX_ADDR, GFP_KERNEL);
|
||||
|
@ -1813,7 +1813,7 @@ static int __init smc911x_probe(struct net_device *dev)
|
||||
val = SMC_GET_BYTE_TEST(lp);
|
||||
DBG(SMC_DEBUG_MISC, "%s: endian probe returned 0x%04x\n", CARDNAME, val);
|
||||
if (val != 0x87654321) {
|
||||
printk(KERN_ERR "Invalid chip endian 0x08%x\n",val);
|
||||
printk(KERN_ERR "Invalid chip endian 0x%08x\n",val);
|
||||
retval = -ENODEV;
|
||||
goto err_out;
|
||||
}
|
||||
|
@ -1102,12 +1102,14 @@ static int ax88178_link_reset(struct usbnet *dev)
|
||||
mode = AX88178_MEDIUM_DEFAULT;
|
||||
|
||||
if (ecmd.speed == SPEED_1000)
|
||||
mode |= AX_MEDIUM_GM | AX_MEDIUM_ENCK;
|
||||
mode |= AX_MEDIUM_GM;
|
||||
else if (ecmd.speed == SPEED_100)
|
||||
mode |= AX_MEDIUM_PS;
|
||||
else
|
||||
mode &= ~(AX_MEDIUM_PS | AX_MEDIUM_GM);
|
||||
|
||||
mode |= AX_MEDIUM_ENCK;
|
||||
|
||||
if (ecmd.duplex == DUPLEX_FULL)
|
||||
mode |= AX_MEDIUM_FD;
|
||||
else
|
||||
|
@ -1384,7 +1384,7 @@ void iwl_rx_handle(struct iwl_priv *priv)
|
||||
|
||||
rxq->queue[i] = NULL;
|
||||
|
||||
pci_dma_sync_single_for_cpu(priv->pci_dev, rxb->dma_addr,
|
||||
pci_dma_sync_single_for_cpu(priv->pci_dev, rxb->aligned_dma_addr,
|
||||
priv->hw_params.rx_buf_size,
|
||||
PCI_DMA_FROMDEVICE);
|
||||
pkt = (struct iwl_rx_packet *)rxb->skb->data;
|
||||
@ -1436,8 +1436,8 @@ void iwl_rx_handle(struct iwl_priv *priv)
|
||||
rxb->skb = NULL;
|
||||
}
|
||||
|
||||
pci_unmap_single(priv->pci_dev, rxb->dma_addr,
|
||||
priv->hw_params.rx_buf_size,
|
||||
pci_unmap_single(priv->pci_dev, rxb->real_dma_addr,
|
||||
priv->hw_params.rx_buf_size + 256,
|
||||
PCI_DMA_FROMDEVICE);
|
||||
spin_lock_irqsave(&rxq->lock, flags);
|
||||
list_add_tail(&rxb->list, &priv->rxq.rx_used);
|
||||
@ -2341,7 +2341,6 @@ static void iwl_bg_alive_start(struct work_struct *data)
|
||||
mutex_lock(&priv->mutex);
|
||||
iwl_alive_start(priv);
|
||||
mutex_unlock(&priv->mutex);
|
||||
ieee80211_notify_mac(priv->hw, IEEE80211_NOTIFY_RE_ASSOC);
|
||||
}
|
||||
|
||||
static void iwl4965_bg_rf_kill(struct work_struct *work)
|
||||
|
@ -89,7 +89,8 @@ extern struct iwl_cfg iwl5100_abg_cfg;
|
||||
#define DEFAULT_LONG_RETRY_LIMIT 4U
|
||||
|
||||
struct iwl_rx_mem_buffer {
|
||||
dma_addr_t dma_addr;
|
||||
dma_addr_t real_dma_addr;
|
||||
dma_addr_t aligned_dma_addr;
|
||||
struct sk_buff *skb;
|
||||
struct list_head list;
|
||||
};
|
||||
|
@ -204,7 +204,7 @@ int iwl_rx_queue_restock(struct iwl_priv *priv)
|
||||
list_del(element);
|
||||
|
||||
/* Point to Rx buffer via next RBD in circular buffer */
|
||||
rxq->bd[rxq->write] = iwl_dma_addr2rbd_ptr(priv, rxb->dma_addr);
|
||||
rxq->bd[rxq->write] = iwl_dma_addr2rbd_ptr(priv, rxb->aligned_dma_addr);
|
||||
rxq->queue[rxq->write] = rxb;
|
||||
rxq->write = (rxq->write + 1) & RX_QUEUE_MASK;
|
||||
rxq->free_count--;
|
||||
@ -251,7 +251,7 @@ void iwl_rx_allocate(struct iwl_priv *priv)
|
||||
rxb = list_entry(element, struct iwl_rx_mem_buffer, list);
|
||||
|
||||
/* Alloc a new receive buffer */
|
||||
rxb->skb = alloc_skb(priv->hw_params.rx_buf_size,
|
||||
rxb->skb = alloc_skb(priv->hw_params.rx_buf_size + 256,
|
||||
__GFP_NOWARN | GFP_ATOMIC);
|
||||
if (!rxb->skb) {
|
||||
if (net_ratelimit())
|
||||
@ -266,9 +266,17 @@ void iwl_rx_allocate(struct iwl_priv *priv)
|
||||
list_del(element);
|
||||
|
||||
/* Get physical address of RB/SKB */
|
||||
rxb->dma_addr =
|
||||
pci_map_single(priv->pci_dev, rxb->skb->data,
|
||||
priv->hw_params.rx_buf_size, PCI_DMA_FROMDEVICE);
|
||||
rxb->real_dma_addr = pci_map_single(
|
||||
priv->pci_dev,
|
||||
rxb->skb->data,
|
||||
priv->hw_params.rx_buf_size + 256,
|
||||
PCI_DMA_FROMDEVICE);
|
||||
/* dma address must be no more than 36 bits */
|
||||
BUG_ON(rxb->real_dma_addr & ~DMA_BIT_MASK(36));
|
||||
/* and also 256 byte aligned! */
|
||||
rxb->aligned_dma_addr = ALIGN(rxb->real_dma_addr, 256);
|
||||
skb_reserve(rxb->skb, rxb->aligned_dma_addr - rxb->real_dma_addr);
|
||||
|
||||
list_add_tail(&rxb->list, &rxq->rx_free);
|
||||
rxq->free_count++;
|
||||
}
|
||||
@ -300,8 +308,8 @@ void iwl_rx_queue_free(struct iwl_priv *priv, struct iwl_rx_queue *rxq)
|
||||
for (i = 0; i < RX_QUEUE_SIZE + RX_FREE_BUFFERS; i++) {
|
||||
if (rxq->pool[i].skb != NULL) {
|
||||
pci_unmap_single(priv->pci_dev,
|
||||
rxq->pool[i].dma_addr,
|
||||
priv->hw_params.rx_buf_size,
|
||||
rxq->pool[i].real_dma_addr,
|
||||
priv->hw_params.rx_buf_size + 256,
|
||||
PCI_DMA_FROMDEVICE);
|
||||
dev_kfree_skb(rxq->pool[i].skb);
|
||||
}
|
||||
@ -354,8 +362,8 @@ void iwl_rx_queue_reset(struct iwl_priv *priv, struct iwl_rx_queue *rxq)
|
||||
* to an SKB, so we need to unmap and free potential storage */
|
||||
if (rxq->pool[i].skb != NULL) {
|
||||
pci_unmap_single(priv->pci_dev,
|
||||
rxq->pool[i].dma_addr,
|
||||
priv->hw_params.rx_buf_size,
|
||||
rxq->pool[i].real_dma_addr,
|
||||
priv->hw_params.rx_buf_size + 256,
|
||||
PCI_DMA_FROMDEVICE);
|
||||
priv->alloc_rxb_skb--;
|
||||
dev_kfree_skb(rxq->pool[i].skb);
|
||||
|
@ -6012,7 +6012,6 @@ static void iwl3945_bg_alive_start(struct work_struct *data)
|
||||
mutex_lock(&priv->mutex);
|
||||
iwl3945_alive_start(priv);
|
||||
mutex_unlock(&priv->mutex);
|
||||
ieee80211_notify_mac(priv->hw, IEEE80211_NOTIFY_RE_ASSOC);
|
||||
}
|
||||
|
||||
static void iwl3945_bg_rf_kill(struct work_struct *work)
|
||||
|
@ -331,7 +331,7 @@ static int __if_usb_submit_rx_urb(struct if_usb_card *cardp,
|
||||
/* Fill the receive configuration URB and initialise the Rx call back */
|
||||
usb_fill_bulk_urb(cardp->rx_urb, cardp->udev,
|
||||
usb_rcvbulkpipe(cardp->udev, cardp->ep_in),
|
||||
(void *) (skb->tail),
|
||||
skb_tail_pointer(skb),
|
||||
MRVDRV_ETH_RX_PACKET_BUFFER_SIZE, callbackfn, cardp);
|
||||
|
||||
cardp->rx_urb->transfer_flags |= URB_ZERO_PACKET;
|
||||
|
@ -73,14 +73,6 @@
|
||||
* not do so then mac80211 may add this under certain circumstances.
|
||||
*/
|
||||
|
||||
/**
|
||||
* enum ieee80211_notification_type - Low level driver notification
|
||||
* @IEEE80211_NOTIFY_RE_ASSOC: start the re-association sequence
|
||||
*/
|
||||
enum ieee80211_notification_types {
|
||||
IEEE80211_NOTIFY_RE_ASSOC,
|
||||
};
|
||||
|
||||
/**
|
||||
* struct ieee80211_ht_bss_info - describing BSS's HT characteristics
|
||||
*
|
||||
@ -1797,18 +1789,6 @@ void ieee80211_stop_tx_ba_cb(struct ieee80211_hw *hw, u8 *ra, u8 tid);
|
||||
void ieee80211_stop_tx_ba_cb_irqsafe(struct ieee80211_hw *hw, const u8 *ra,
|
||||
u16 tid);
|
||||
|
||||
/**
|
||||
* ieee80211_notify_mac - low level driver notification
|
||||
* @hw: pointer as obtained from ieee80211_alloc_hw().
|
||||
* @notif_type: enum ieee80211_notification_types
|
||||
*
|
||||
* This function must be called by low level driver to inform mac80211 of
|
||||
* low level driver status change or force mac80211 to re-assoc for low
|
||||
* level driver internal error that require re-assoc.
|
||||
*/
|
||||
void ieee80211_notify_mac(struct ieee80211_hw *hw,
|
||||
enum ieee80211_notification_types notif_type);
|
||||
|
||||
/**
|
||||
* ieee80211_find_sta - find a station
|
||||
*
|
||||
|
@ -1973,13 +1973,7 @@ static void pktgen_setup_inject(struct pktgen_dev *pkt_dev)
|
||||
|
||||
/* make sure that we don't pick a non-existing transmit queue */
|
||||
ntxq = pkt_dev->odev->real_num_tx_queues;
|
||||
if (ntxq > num_online_cpus() && (pkt_dev->flags & F_QUEUE_MAP_CPU)) {
|
||||
printk(KERN_WARNING "pktgen: WARNING: QUEUE_MAP_CPU "
|
||||
"disabled because CPU count (%d) exceeds number "
|
||||
"of tx queues (%d) on %s\n", num_online_cpus(), ntxq,
|
||||
pkt_dev->odev->name);
|
||||
pkt_dev->flags &= ~F_QUEUE_MAP_CPU;
|
||||
}
|
||||
|
||||
if (ntxq <= pkt_dev->queue_map_min) {
|
||||
printk(KERN_WARNING "pktgen: WARNING: Requested "
|
||||
"queue_map_min (zero-based) (%d) exceeds valid range "
|
||||
@ -2202,6 +2196,7 @@ static void set_cur_queue_map(struct pktgen_dev *pkt_dev)
|
||||
}
|
||||
pkt_dev->cur_queue_map = t;
|
||||
}
|
||||
pkt_dev->cur_queue_map = pkt_dev->cur_queue_map % pkt_dev->odev->real_num_tx_queues;
|
||||
}
|
||||
|
||||
/* Increment/randomize headers according to flags and current values
|
||||
|
@ -1117,6 +1117,7 @@ int inet_sk_rebuild_header(struct sock *sk)
|
||||
},
|
||||
},
|
||||
.proto = sk->sk_protocol,
|
||||
.flags = inet_sk_flowi_flags(sk),
|
||||
.uli_u = {
|
||||
.ports = {
|
||||
.sport = inet->sport,
|
||||
|
@ -1945,13 +1945,14 @@ int __init ip_mr_init(void)
|
||||
goto proc_cache_fail;
|
||||
#endif
|
||||
return 0;
|
||||
reg_notif_fail:
|
||||
kmem_cache_destroy(mrt_cachep);
|
||||
#ifdef CONFIG_PROC_FS
|
||||
proc_vif_fail:
|
||||
unregister_netdevice_notifier(&ip_mr_notifier);
|
||||
proc_cache_fail:
|
||||
proc_net_remove(&init_net, "ip_mr_vif");
|
||||
proc_vif_fail:
|
||||
unregister_netdevice_notifier(&ip_mr_notifier);
|
||||
#endif
|
||||
reg_notif_fail:
|
||||
del_timer(&ipmr_expire_timer);
|
||||
kmem_cache_destroy(mrt_cachep);
|
||||
return err;
|
||||
}
|
||||
|
@ -633,6 +633,7 @@ int udp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
|
||||
.saddr = saddr,
|
||||
.tos = tos } },
|
||||
.proto = sk->sk_protocol,
|
||||
.flags = inet_sk_flowi_flags(sk),
|
||||
.uli_u = { .ports =
|
||||
{ .sport = inet->sport,
|
||||
.dport = dport } } };
|
||||
|
@ -224,7 +224,7 @@ static struct file_operations ip6mr_vif_fops = {
|
||||
.open = ip6mr_vif_open,
|
||||
.read = seq_read,
|
||||
.llseek = seq_lseek,
|
||||
.release = seq_release,
|
||||
.release = seq_release_private,
|
||||
};
|
||||
|
||||
static void *ipmr_mfc_seq_start(struct seq_file *seq, loff_t *pos)
|
||||
@ -338,7 +338,7 @@ static struct file_operations ip6mr_mfc_fops = {
|
||||
.open = ipmr_mfc_open,
|
||||
.read = seq_read,
|
||||
.llseek = seq_lseek,
|
||||
.release = seq_release,
|
||||
.release = seq_release_private,
|
||||
};
|
||||
#endif
|
||||
|
||||
|
@ -132,7 +132,7 @@ static struct snmp_mib snmp6_udplite6_list[] = {
|
||||
|
||||
static void snmp6_seq_show_icmpv6msg(struct seq_file *seq, void **mib)
|
||||
{
|
||||
static char name[32];
|
||||
char name[32];
|
||||
int i;
|
||||
|
||||
/* print by name -- deprecated items */
|
||||
@ -144,7 +144,7 @@ static void snmp6_seq_show_icmpv6msg(struct seq_file *seq, void **mib)
|
||||
p = icmp6type2name[icmptype];
|
||||
if (!p) /* don't print un-named types here */
|
||||
continue;
|
||||
(void) snprintf(name, sizeof(name)-1, "Icmp6%s%s",
|
||||
snprintf(name, sizeof(name), "Icmp6%s%s",
|
||||
i & 0x100 ? "Out" : "In", p);
|
||||
seq_printf(seq, "%-32s\t%lu\n", name,
|
||||
snmp_fold_field(mib, i));
|
||||
@ -157,7 +157,7 @@ static void snmp6_seq_show_icmpv6msg(struct seq_file *seq, void **mib)
|
||||
val = snmp_fold_field(mib, i);
|
||||
if (!val)
|
||||
continue;
|
||||
(void) snprintf(name, sizeof(name)-1, "Icmp6%sType%u",
|
||||
snprintf(name, sizeof(name), "Icmp6%sType%u",
|
||||
i & 0x100 ? "Out" : "In", i & 0xff);
|
||||
seq_printf(seq, "%-32s\t%lu\n", name, val);
|
||||
}
|
||||
|
@ -2560,25 +2560,3 @@ void ieee80211_mlme_notify_scan_completed(struct ieee80211_local *local)
|
||||
ieee80211_restart_sta_timer(sdata);
|
||||
rcu_read_unlock();
|
||||
}
|
||||
|
||||
/* driver notification call */
|
||||
void ieee80211_notify_mac(struct ieee80211_hw *hw,
|
||||
enum ieee80211_notification_types notif_type)
|
||||
{
|
||||
struct ieee80211_local *local = hw_to_local(hw);
|
||||
struct ieee80211_sub_if_data *sdata;
|
||||
|
||||
switch (notif_type) {
|
||||
case IEEE80211_NOTIFY_RE_ASSOC:
|
||||
rtnl_lock();
|
||||
list_for_each_entry(sdata, &local->interfaces, list) {
|
||||
if (sdata->vif.type != NL80211_IFTYPE_STATION)
|
||||
continue;
|
||||
|
||||
ieee80211_sta_req_auth(sdata, &sdata->u.sta);
|
||||
}
|
||||
rtnl_unlock();
|
||||
break;
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL(ieee80211_notify_mac);
|
||||
|
@ -33,9 +33,30 @@
|
||||
#include <net/phonet/phonet.h>
|
||||
#include <net/phonet/pn_dev.h>
|
||||
|
||||
static struct net_proto_family phonet_proto_family;
|
||||
static struct phonet_protocol *phonet_proto_get(int protocol);
|
||||
static inline void phonet_proto_put(struct phonet_protocol *pp);
|
||||
/* Transport protocol registration */
|
||||
static struct phonet_protocol *proto_tab[PHONET_NPROTO] __read_mostly;
|
||||
static DEFINE_SPINLOCK(proto_tab_lock);
|
||||
|
||||
static struct phonet_protocol *phonet_proto_get(int protocol)
|
||||
{
|
||||
struct phonet_protocol *pp;
|
||||
|
||||
if (protocol >= PHONET_NPROTO)
|
||||
return NULL;
|
||||
|
||||
spin_lock(&proto_tab_lock);
|
||||
pp = proto_tab[protocol];
|
||||
if (pp && !try_module_get(pp->prot->owner))
|
||||
pp = NULL;
|
||||
spin_unlock(&proto_tab_lock);
|
||||
|
||||
return pp;
|
||||
}
|
||||
|
||||
static inline void phonet_proto_put(struct phonet_protocol *pp)
|
||||
{
|
||||
module_put(pp->prot->owner);
|
||||
}
|
||||
|
||||
/* protocol family functions */
|
||||
|
||||
@ -375,10 +396,6 @@ static struct packet_type phonet_packet_type = {
|
||||
.func = phonet_rcv,
|
||||
};
|
||||
|
||||
/* Transport protocol registration */
|
||||
static struct phonet_protocol *proto_tab[PHONET_NPROTO] __read_mostly;
|
||||
static DEFINE_SPINLOCK(proto_tab_lock);
|
||||
|
||||
int __init_or_module phonet_proto_register(int protocol,
|
||||
struct phonet_protocol *pp)
|
||||
{
|
||||
@ -412,27 +429,6 @@ void phonet_proto_unregister(int protocol, struct phonet_protocol *pp)
|
||||
}
|
||||
EXPORT_SYMBOL(phonet_proto_unregister);
|
||||
|
||||
static struct phonet_protocol *phonet_proto_get(int protocol)
|
||||
{
|
||||
struct phonet_protocol *pp;
|
||||
|
||||
if (protocol >= PHONET_NPROTO)
|
||||
return NULL;
|
||||
|
||||
spin_lock(&proto_tab_lock);
|
||||
pp = proto_tab[protocol];
|
||||
if (pp && !try_module_get(pp->prot->owner))
|
||||
pp = NULL;
|
||||
spin_unlock(&proto_tab_lock);
|
||||
|
||||
return pp;
|
||||
}
|
||||
|
||||
static inline void phonet_proto_put(struct phonet_protocol *pp)
|
||||
{
|
||||
module_put(pp->prot->owner);
|
||||
}
|
||||
|
||||
/* Module registration */
|
||||
static int __init phonet_init(void)
|
||||
{
|
||||
|
@ -417,6 +417,8 @@ static int qdisc_dump_stab(struct sk_buff *skb, struct qdisc_size_table *stab)
|
||||
struct nlattr *nest;
|
||||
|
||||
nest = nla_nest_start(skb, TCA_STAB);
|
||||
if (nest == NULL)
|
||||
goto nla_put_failure;
|
||||
NLA_PUT(skb, TCA_STAB_BASE, sizeof(stab->szopts), &stab->szopts);
|
||||
nla_nest_end(skb, nest);
|
||||
|
||||
|
@ -270,6 +270,8 @@ static void dev_watchdog_down(struct net_device *dev)
|
||||
void netif_carrier_on(struct net_device *dev)
|
||||
{
|
||||
if (test_and_clear_bit(__LINK_STATE_NOCARRIER, &dev->state)) {
|
||||
if (dev->reg_state == NETREG_UNINITIALIZED)
|
||||
return;
|
||||
linkwatch_fire_event(dev);
|
||||
if (netif_running(dev))
|
||||
__netdev_watchdog_up(dev);
|
||||
@ -285,8 +287,11 @@ EXPORT_SYMBOL(netif_carrier_on);
|
||||
*/
|
||||
void netif_carrier_off(struct net_device *dev)
|
||||
{
|
||||
if (!test_and_set_bit(__LINK_STATE_NOCARRIER, &dev->state))
|
||||
if (!test_and_set_bit(__LINK_STATE_NOCARRIER, &dev->state)) {
|
||||
if (dev->reg_state == NETREG_UNINITIALIZED)
|
||||
return;
|
||||
linkwatch_fire_event(dev);
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL(netif_carrier_off);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user