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:
Linus Torvalds 2008-11-20 13:12:14 -08:00
commit 4dd61d92d7
26 changed files with 149 additions and 169 deletions

View File

@ -96,7 +96,7 @@ Letting the PHY Abstraction Layer do Everything
static void adjust_link(struct net_device *dev); static void adjust_link(struct net_device *dev);
Next, you need to know the device name of the PHY connected to this device. 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, bus id, and the second is the PHY's address on that bus. Typically,
the bus is responsible for making its ID unique. the bus is responsible for making its ID unique.

View File

@ -1690,9 +1690,11 @@ static int atl2_resume(struct pci_dev *pdev)
ATL2_WRITE_REG(&adapter->hw, REG_WOL_CTRL, 0); ATL2_WRITE_REG(&adapter->hw, REG_WOL_CTRL, 0);
err = atl2_request_irq(adapter); if (netif_running(netdev)) {
if (netif_running(netdev) && err) err = atl2_request_irq(adapter);
return err; if (err)
return err;
}
atl2_reset_hw(&adapter->hw); atl2_reset_hw(&adapter->hw);

View File

@ -1112,7 +1112,7 @@ static void ipg_nic_rx_free_skb(struct net_device *dev)
struct ipg_rx *rxfd = sp->rxd + entry; struct ipg_rx *rxfd = sp->rxd + entry;
pci_unmap_single(sp->pdev, 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); sp->rx_buf_sz, PCI_DMA_FROMDEVICE);
dev_kfree_skb_irq(sp->rx_buff[entry]); dev_kfree_skb_irq(sp->rx_buff[entry]);
sp->rx_buff[entry] = NULL; 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]) { if (sp->rx_buff[entry]) {
pci_unmap_single(sp->pdev, 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); sp->rx_buf_sz, PCI_DMA_FROMDEVICE);
dev_kfree_skb_irq(sp->rx_buff[entry]); 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) if (jumbo->found_start)
dev_kfree_skb_irq(jumbo->skb); 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); sp->rx_buf_sz, PCI_DMA_FROMDEVICE);
skb_put(skb, sp->rxfrag_size); 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; unsigned int entry = curr % IPG_RFDLIST_LENGTH;
struct ipg_rx *rxfd = sp->rxd + entry; 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; break;
switch (ipg_nic_rx_check_frame_type(dev)) { switch (ipg_nic_rx_check_frame_type(dev)) {

View File

@ -1287,7 +1287,34 @@ static void ixgbe_set_itr(struct ixgbe_adapter *adapter)
return; 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 * 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 * ixgbe_configure_msi_and_legacy - Initialize PIN (INTA...) and MSI interrupts
* *

View File

@ -912,23 +912,23 @@ jme_alloc_and_feed_skb(struct jme_adapter *jme, int idx)
skb_put(skb, framesize); skb_put(skb, framesize);
skb->protocol = eth_type_trans(skb, jme->dev); 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; skb->ip_summed = CHECKSUM_UNNECESSARY;
else else
skb->ip_summed = CHECKSUM_NONE; skb->ip_summed = CHECKSUM_NONE;
if (rxdesc->descwb.flags & RXWBFLAG_TAGON) { if (rxdesc->descwb.flags & cpu_to_le16(RXWBFLAG_TAGON)) {
if (jme->vlgrp) { if (jme->vlgrp) {
jme->jme_vlan_rx(skb, 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; NET_STAT(jme).rx_bytes += 4;
} }
} else { } else {
jme->jme_rx(skb); jme->jme_rx(skb);
} }
if ((le16_to_cpu(rxdesc->descwb.flags) & RXWBFLAG_DEST) == if ((rxdesc->descwb.flags & cpu_to_le16(RXWBFLAG_DEST)) ==
RXWBFLAG_DEST_MUL) cpu_to_le16(RXWBFLAG_DEST_MUL))
++(NET_STAT(jme).multicast); ++(NET_STAT(jme).multicast);
jme->dev->last_rx = jiffies; jme->dev->last_rx = jiffies;
@ -961,7 +961,7 @@ jme_process_receive(struct jme_adapter *jme, int limit)
rxdesc = rxring->desc; rxdesc = rxring->desc;
rxdesc += i; rxdesc += i;
if ((rxdesc->descwb.flags & RXWBFLAG_OWN) || if ((rxdesc->descwb.flags & cpu_to_le16(RXWBFLAG_OWN)) ||
!(rxdesc->descwb.desccnt & RXWBDCNT_WBCPL)) !(rxdesc->descwb.desccnt & RXWBDCNT_WBCPL))
goto out; goto out;
@ -1763,10 +1763,9 @@ jme_expand_header(struct jme_adapter *jme, struct sk_buff *skb)
} }
static int static int
jme_tx_tso(struct sk_buff *skb, jme_tx_tso(struct sk_buff *skb, __le16 *mss, u8 *flags)
u16 *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) { if (*mss) {
*flags |= TXFLAG_LSEN; *flags |= TXFLAG_LSEN;
@ -1826,11 +1825,11 @@ jme_tx_csum(struct jme_adapter *jme, struct sk_buff *skb, u8 *flags)
} }
static inline void 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)) { if (vlan_tx_tag_present(skb)) {
*flags |= TXFLAG_TAGON; *flags |= TXFLAG_TAGON;
*vlan = vlan_tx_tag_get(skb); *vlan = cpu_to_le16(vlan_tx_tag_get(skb));
} }
} }

View File

@ -899,7 +899,8 @@ static int txq_reclaim(struct tx_queue *txq, int budget, int force)
if (skb != NULL) { if (skb != NULL) {
if (skb_queue_len(&mp->rx_recycle) < if (skb_queue_len(&mp->rx_recycle) <
mp->default_rx_ring_size && 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); __skb_queue_head(&mp->rx_recycle, skb);
else else
dev_kfree_skb(skb); 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; struct mv643xx_eth_shared_platform_data *pd = pdev->dev.platform_data;
if (pd == NULL || pd->shared_smi == NULL) { if (pd == NULL || pd->shared_smi == NULL) {
mdiobus_free(msp->smi_bus);
mdiobus_unregister(msp->smi_bus); mdiobus_unregister(msp->smi_bus);
mdiobus_free(msp->smi_bus);
} }
if (msp->err_interrupt != NO_IRQ) if (msp->err_interrupt != NO_IRQ)
free_irq(msp->err_interrupt, msp); free_irq(msp->err_interrupt, msp);

View File

@ -564,20 +564,32 @@ EXPORT_SYMBOL(genphy_restart_aneg);
*/ */
int genphy_config_aneg(struct phy_device *phydev) int genphy_config_aneg(struct phy_device *phydev)
{ {
int result = 0; int result;
if (AUTONEG_ENABLE == phydev->autoneg) { if (AUTONEG_ENABLE != phydev->autoneg)
int result = genphy_config_advert(phydev); return genphy_setup_forced(phydev);
if (result < 0) /* error */ result = genphy_config_advert(phydev);
return result;
/* Only restart aneg if we are advertising something different if (result < 0) /* error */
* than we were before. */ return result;
if (result > 0)
result = genphy_restart_aneg(phydev); if (result == 0) {
} else /* Advertisment hasn't changed, but maybe aneg was never on to
result = genphy_setup_forced(phydev); * 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; return result;
} }

View File

@ -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_private *mdp = netdev_priv(ndev);
struct sh_eth_txdesc *txdesc; struct sh_eth_txdesc *txdesc;
u32 entry; u32 entry;
int flags; unsigned long flags;
spin_lock_irqsave(&mdp->lock, flags); spin_lock_irqsave(&mdp->lock, flags);
if ((mdp->cur_tx - mdp->dirty_tx) >= (TX_RING_SIZE - 4)) { 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 */ /* Hook up MII support for ethtool */
mdp->mii_bus->name = "sh_mii"; mdp->mii_bus->name = "sh_mii";
mdp->mii_bus->parent = &ndev->dev; 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 */ /* PHY IRQ */
mdp->mii_bus->irq = kmalloc(sizeof(int)*PHY_MAX_ADDR, GFP_KERNEL); mdp->mii_bus->irq = kmalloc(sizeof(int)*PHY_MAX_ADDR, GFP_KERNEL);

View File

@ -1813,7 +1813,7 @@ static int __init smc911x_probe(struct net_device *dev)
val = SMC_GET_BYTE_TEST(lp); val = SMC_GET_BYTE_TEST(lp);
DBG(SMC_DEBUG_MISC, "%s: endian probe returned 0x%04x\n", CARDNAME, val); DBG(SMC_DEBUG_MISC, "%s: endian probe returned 0x%04x\n", CARDNAME, val);
if (val != 0x87654321) { 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; retval = -ENODEV;
goto err_out; goto err_out;
} }

View File

@ -1102,12 +1102,14 @@ static int ax88178_link_reset(struct usbnet *dev)
mode = AX88178_MEDIUM_DEFAULT; mode = AX88178_MEDIUM_DEFAULT;
if (ecmd.speed == SPEED_1000) if (ecmd.speed == SPEED_1000)
mode |= AX_MEDIUM_GM | AX_MEDIUM_ENCK; mode |= AX_MEDIUM_GM;
else if (ecmd.speed == SPEED_100) else if (ecmd.speed == SPEED_100)
mode |= AX_MEDIUM_PS; mode |= AX_MEDIUM_PS;
else else
mode &= ~(AX_MEDIUM_PS | AX_MEDIUM_GM); mode &= ~(AX_MEDIUM_PS | AX_MEDIUM_GM);
mode |= AX_MEDIUM_ENCK;
if (ecmd.duplex == DUPLEX_FULL) if (ecmd.duplex == DUPLEX_FULL)
mode |= AX_MEDIUM_FD; mode |= AX_MEDIUM_FD;
else else

View File

@ -1384,7 +1384,7 @@ void iwl_rx_handle(struct iwl_priv *priv)
rxq->queue[i] = NULL; 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, priv->hw_params.rx_buf_size,
PCI_DMA_FROMDEVICE); PCI_DMA_FROMDEVICE);
pkt = (struct iwl_rx_packet *)rxb->skb->data; pkt = (struct iwl_rx_packet *)rxb->skb->data;
@ -1436,8 +1436,8 @@ void iwl_rx_handle(struct iwl_priv *priv)
rxb->skb = NULL; rxb->skb = NULL;
} }
pci_unmap_single(priv->pci_dev, rxb->dma_addr, pci_unmap_single(priv->pci_dev, rxb->real_dma_addr,
priv->hw_params.rx_buf_size, priv->hw_params.rx_buf_size + 256,
PCI_DMA_FROMDEVICE); PCI_DMA_FROMDEVICE);
spin_lock_irqsave(&rxq->lock, flags); spin_lock_irqsave(&rxq->lock, flags);
list_add_tail(&rxb->list, &priv->rxq.rx_used); 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); mutex_lock(&priv->mutex);
iwl_alive_start(priv); iwl_alive_start(priv);
mutex_unlock(&priv->mutex); mutex_unlock(&priv->mutex);
ieee80211_notify_mac(priv->hw, IEEE80211_NOTIFY_RE_ASSOC);
} }
static void iwl4965_bg_rf_kill(struct work_struct *work) static void iwl4965_bg_rf_kill(struct work_struct *work)

View File

@ -89,7 +89,8 @@ extern struct iwl_cfg iwl5100_abg_cfg;
#define DEFAULT_LONG_RETRY_LIMIT 4U #define DEFAULT_LONG_RETRY_LIMIT 4U
struct iwl_rx_mem_buffer { 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 sk_buff *skb;
struct list_head list; struct list_head list;
}; };

View File

@ -204,7 +204,7 @@ int iwl_rx_queue_restock(struct iwl_priv *priv)
list_del(element); list_del(element);
/* Point to Rx buffer via next RBD in circular buffer */ /* 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->queue[rxq->write] = rxb;
rxq->write = (rxq->write + 1) & RX_QUEUE_MASK; rxq->write = (rxq->write + 1) & RX_QUEUE_MASK;
rxq->free_count--; 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); rxb = list_entry(element, struct iwl_rx_mem_buffer, list);
/* Alloc a new receive buffer */ /* 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); __GFP_NOWARN | GFP_ATOMIC);
if (!rxb->skb) { if (!rxb->skb) {
if (net_ratelimit()) if (net_ratelimit())
@ -266,9 +266,17 @@ void iwl_rx_allocate(struct iwl_priv *priv)
list_del(element); list_del(element);
/* Get physical address of RB/SKB */ /* Get physical address of RB/SKB */
rxb->dma_addr = rxb->real_dma_addr = pci_map_single(
pci_map_single(priv->pci_dev, rxb->skb->data, priv->pci_dev,
priv->hw_params.rx_buf_size, PCI_DMA_FROMDEVICE); 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); list_add_tail(&rxb->list, &rxq->rx_free);
rxq->free_count++; 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++) { for (i = 0; i < RX_QUEUE_SIZE + RX_FREE_BUFFERS; i++) {
if (rxq->pool[i].skb != NULL) { if (rxq->pool[i].skb != NULL) {
pci_unmap_single(priv->pci_dev, pci_unmap_single(priv->pci_dev,
rxq->pool[i].dma_addr, rxq->pool[i].real_dma_addr,
priv->hw_params.rx_buf_size, priv->hw_params.rx_buf_size + 256,
PCI_DMA_FROMDEVICE); PCI_DMA_FROMDEVICE);
dev_kfree_skb(rxq->pool[i].skb); 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 */ * to an SKB, so we need to unmap and free potential storage */
if (rxq->pool[i].skb != NULL) { if (rxq->pool[i].skb != NULL) {
pci_unmap_single(priv->pci_dev, pci_unmap_single(priv->pci_dev,
rxq->pool[i].dma_addr, rxq->pool[i].real_dma_addr,
priv->hw_params.rx_buf_size, priv->hw_params.rx_buf_size + 256,
PCI_DMA_FROMDEVICE); PCI_DMA_FROMDEVICE);
priv->alloc_rxb_skb--; priv->alloc_rxb_skb--;
dev_kfree_skb(rxq->pool[i].skb); dev_kfree_skb(rxq->pool[i].skb);

View File

@ -6012,7 +6012,6 @@ static void iwl3945_bg_alive_start(struct work_struct *data)
mutex_lock(&priv->mutex); mutex_lock(&priv->mutex);
iwl3945_alive_start(priv); iwl3945_alive_start(priv);
mutex_unlock(&priv->mutex); mutex_unlock(&priv->mutex);
ieee80211_notify_mac(priv->hw, IEEE80211_NOTIFY_RE_ASSOC);
} }
static void iwl3945_bg_rf_kill(struct work_struct *work) static void iwl3945_bg_rf_kill(struct work_struct *work)

View File

@ -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 */ /* Fill the receive configuration URB and initialise the Rx call back */
usb_fill_bulk_urb(cardp->rx_urb, cardp->udev, usb_fill_bulk_urb(cardp->rx_urb, cardp->udev,
usb_rcvbulkpipe(cardp->udev, cardp->ep_in), usb_rcvbulkpipe(cardp->udev, cardp->ep_in),
(void *) (skb->tail), skb_tail_pointer(skb),
MRVDRV_ETH_RX_PACKET_BUFFER_SIZE, callbackfn, cardp); MRVDRV_ETH_RX_PACKET_BUFFER_SIZE, callbackfn, cardp);
cardp->rx_urb->transfer_flags |= URB_ZERO_PACKET; cardp->rx_urb->transfer_flags |= URB_ZERO_PACKET;

View File

@ -73,14 +73,6 @@
* not do so then mac80211 may add this under certain circumstances. * 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 * 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, void ieee80211_stop_tx_ba_cb_irqsafe(struct ieee80211_hw *hw, const u8 *ra,
u16 tid); 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 * ieee80211_find_sta - find a station
* *

View File

@ -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 */ /* make sure that we don't pick a non-existing transmit queue */
ntxq = pkt_dev->odev->real_num_tx_queues; 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) { if (ntxq <= pkt_dev->queue_map_min) {
printk(KERN_WARNING "pktgen: WARNING: Requested " printk(KERN_WARNING "pktgen: WARNING: Requested "
"queue_map_min (zero-based) (%d) exceeds valid range " "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 = 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 /* Increment/randomize headers according to flags and current values

View File

@ -1117,6 +1117,7 @@ int inet_sk_rebuild_header(struct sock *sk)
}, },
}, },
.proto = sk->sk_protocol, .proto = sk->sk_protocol,
.flags = inet_sk_flowi_flags(sk),
.uli_u = { .uli_u = {
.ports = { .ports = {
.sport = inet->sport, .sport = inet->sport,

View File

@ -1945,13 +1945,14 @@ int __init ip_mr_init(void)
goto proc_cache_fail; goto proc_cache_fail;
#endif #endif
return 0; return 0;
reg_notif_fail:
kmem_cache_destroy(mrt_cachep);
#ifdef CONFIG_PROC_FS #ifdef CONFIG_PROC_FS
proc_vif_fail:
unregister_netdevice_notifier(&ip_mr_notifier);
proc_cache_fail: proc_cache_fail:
proc_net_remove(&init_net, "ip_mr_vif"); proc_net_remove(&init_net, "ip_mr_vif");
proc_vif_fail:
unregister_netdevice_notifier(&ip_mr_notifier);
#endif #endif
reg_notif_fail:
del_timer(&ipmr_expire_timer);
kmem_cache_destroy(mrt_cachep);
return err; return err;
} }

View File

@ -633,6 +633,7 @@ int udp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
.saddr = saddr, .saddr = saddr,
.tos = tos } }, .tos = tos } },
.proto = sk->sk_protocol, .proto = sk->sk_protocol,
.flags = inet_sk_flowi_flags(sk),
.uli_u = { .ports = .uli_u = { .ports =
{ .sport = inet->sport, { .sport = inet->sport,
.dport = dport } } }; .dport = dport } } };

View File

@ -224,7 +224,7 @@ static struct file_operations ip6mr_vif_fops = {
.open = ip6mr_vif_open, .open = ip6mr_vif_open,
.read = seq_read, .read = seq_read,
.llseek = seq_lseek, .llseek = seq_lseek,
.release = seq_release, .release = seq_release_private,
}; };
static void *ipmr_mfc_seq_start(struct seq_file *seq, loff_t *pos) 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, .open = ipmr_mfc_open,
.read = seq_read, .read = seq_read,
.llseek = seq_lseek, .llseek = seq_lseek,
.release = seq_release, .release = seq_release_private,
}; };
#endif #endif

View File

@ -132,7 +132,7 @@ static struct snmp_mib snmp6_udplite6_list[] = {
static void snmp6_seq_show_icmpv6msg(struct seq_file *seq, void **mib) static void snmp6_seq_show_icmpv6msg(struct seq_file *seq, void **mib)
{ {
static char name[32]; char name[32];
int i; int i;
/* print by name -- deprecated items */ /* print by name -- deprecated items */
@ -144,7 +144,7 @@ static void snmp6_seq_show_icmpv6msg(struct seq_file *seq, void **mib)
p = icmp6type2name[icmptype]; p = icmp6type2name[icmptype];
if (!p) /* don't print un-named types here */ if (!p) /* don't print un-named types here */
continue; continue;
(void) snprintf(name, sizeof(name)-1, "Icmp6%s%s", snprintf(name, sizeof(name), "Icmp6%s%s",
i & 0x100 ? "Out" : "In", p); i & 0x100 ? "Out" : "In", p);
seq_printf(seq, "%-32s\t%lu\n", name, seq_printf(seq, "%-32s\t%lu\n", name,
snmp_fold_field(mib, i)); 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); val = snmp_fold_field(mib, i);
if (!val) if (!val)
continue; continue;
(void) snprintf(name, sizeof(name)-1, "Icmp6%sType%u", snprintf(name, sizeof(name), "Icmp6%sType%u",
i & 0x100 ? "Out" : "In", i & 0xff); i & 0x100 ? "Out" : "In", i & 0xff);
seq_printf(seq, "%-32s\t%lu\n", name, val); seq_printf(seq, "%-32s\t%lu\n", name, val);
} }

View File

@ -2560,25 +2560,3 @@ void ieee80211_mlme_notify_scan_completed(struct ieee80211_local *local)
ieee80211_restart_sta_timer(sdata); ieee80211_restart_sta_timer(sdata);
rcu_read_unlock(); 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);

View File

@ -33,9 +33,30 @@
#include <net/phonet/phonet.h> #include <net/phonet/phonet.h>
#include <net/phonet/pn_dev.h> #include <net/phonet/pn_dev.h>
static struct net_proto_family phonet_proto_family; /* Transport protocol registration */
static struct phonet_protocol *phonet_proto_get(int protocol); static struct phonet_protocol *proto_tab[PHONET_NPROTO] __read_mostly;
static inline void phonet_proto_put(struct phonet_protocol *pp); 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 */ /* protocol family functions */
@ -375,10 +396,6 @@ static struct packet_type phonet_packet_type = {
.func = phonet_rcv, .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, int __init_or_module phonet_proto_register(int protocol,
struct phonet_protocol *pp) struct phonet_protocol *pp)
{ {
@ -412,27 +429,6 @@ void phonet_proto_unregister(int protocol, struct phonet_protocol *pp)
} }
EXPORT_SYMBOL(phonet_proto_unregister); 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 */ /* Module registration */
static int __init phonet_init(void) static int __init phonet_init(void)
{ {

View File

@ -417,6 +417,8 @@ static int qdisc_dump_stab(struct sk_buff *skb, struct qdisc_size_table *stab)
struct nlattr *nest; struct nlattr *nest;
nest = nla_nest_start(skb, TCA_STAB); 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_PUT(skb, TCA_STAB_BASE, sizeof(stab->szopts), &stab->szopts);
nla_nest_end(skb, nest); nla_nest_end(skb, nest);

View File

@ -270,6 +270,8 @@ static void dev_watchdog_down(struct net_device *dev)
void netif_carrier_on(struct net_device *dev) void netif_carrier_on(struct net_device *dev)
{ {
if (test_and_clear_bit(__LINK_STATE_NOCARRIER, &dev->state)) { if (test_and_clear_bit(__LINK_STATE_NOCARRIER, &dev->state)) {
if (dev->reg_state == NETREG_UNINITIALIZED)
return;
linkwatch_fire_event(dev); linkwatch_fire_event(dev);
if (netif_running(dev)) if (netif_running(dev))
__netdev_watchdog_up(dev); __netdev_watchdog_up(dev);
@ -285,8 +287,11 @@ EXPORT_SYMBOL(netif_carrier_on);
*/ */
void netif_carrier_off(struct net_device *dev) 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); linkwatch_fire_event(dev);
}
} }
EXPORT_SYMBOL(netif_carrier_off); EXPORT_SYMBOL(netif_carrier_off);