Re: [git patches] net driver fixes

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Jeff ,
didn't you get the qeth patches ? let me know if not I will resend them 
once again ....
Thanks



[email protected] wrote on 14.09.2005 15:14:14:

> 
> Please pull from 'upstream-fixes' branch of
> rsync://rsync.kernel.org/pub/scm/linux/kernel/git/jgarzik/netdev-2.6.git
> 
> to obtain the following fixes:
> 
> 
>  drivers/net/Kconfig            |    2 
>  drivers/net/e100.c             |    4 -
>  drivers/net/e1000/e1000_main.c |    1 
>  drivers/net/ixgb/ixgb_main.c   |    2 
>  drivers/net/s2io.c             |    9 ++-
>  drivers/net/sk98lin/skge.c     |   12 ++---
>  drivers/net/skge.c             |   98 
> ++++++++++++++++++++++-------------------
>  drivers/net/skge.h             |    2 
>  drivers/net/tulip/xircom_cb.c  |    2 
>  drivers/net/wireless/airo.c    |    5 +-
>  drivers/s390/net/ctcmain.c     |   41 +++++++++--------
>  11 files changed, 94 insertions(+), 84 deletions(-)
> 
> 
> 
> Andrew Morton:
>   s2io warning fixes
> 
> Frank Pavlic:
>   s390: ctc driver fixes
> 
> John W. Linville:
>   e1000: correct rx_dropped counting
>   e100: correct rx_dropped and add rx_missed_errors
>   ixgb: correct rx_dropped counting
> 
> Keith Owens:
>   Correct xircom_cb use of CONFIG_NET_POLL_CONTROLLER
> 
> matthieu castet:
>   airo : fix channel number in scan
> 
> Stephen Hemminger:
>   sk98lin: remove PCI id info for cards for conflicting devices
>   skge: gmac register access errors in dual port
> 
> 
> 
> diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
> --- a/drivers/net/Kconfig
> +++ b/drivers/net/Kconfig
> @@ -1951,7 +1951,7 @@ config SKGE
>     ---help---
>       This driver support the Marvell Yukon or SysKonnect 
SK-98xx/SK-95xx
>       and related Gigabit Ethernet adapters. It is a new smaller driver
> -     driver with better performance and more complete ethtool support.
> +     with better performance and more complete ethtool support.
> 
>       It does not support the link failover and network management 
>       features that "portable" vendor supplied sk98lin driver does.
> diff --git a/drivers/net/e100.c b/drivers/net/e100.c
> --- a/drivers/net/e100.c
> +++ b/drivers/net/e100.c
> @@ -1387,13 +1387,13 @@ static void e100_update_stats(struct nic
>        ns->collisions += nic->tx_collisions;
>        ns->tx_errors += le32_to_cpu(s->tx_max_collisions) +
>           le32_to_cpu(s->tx_lost_crs);
> -      ns->rx_dropped += le32_to_cpu(s->rx_resource_errors);
>        ns->rx_length_errors += le32_to_cpu(s->rx_short_frame_errors) +
>           nic->rx_over_length_errors;
>        ns->rx_crc_errors += le32_to_cpu(s->rx_crc_errors);
>        ns->rx_frame_errors += le32_to_cpu(s->rx_alignment_errors);
>        ns->rx_over_errors += le32_to_cpu(s->rx_overrun_errors);
>        ns->rx_fifo_errors += le32_to_cpu(s->rx_overrun_errors);
> +      ns->rx_missed_errors += le32_to_cpu(s->rx_resource_errors);
>        ns->rx_errors += le32_to_cpu(s->rx_crc_errors) +
>           le32_to_cpu(s->rx_alignment_errors) +
>           le32_to_cpu(s->rx_short_frame_errors) +
> @@ -1727,12 +1727,10 @@ static inline int e100_rx_indicate(struc
> 
>     if(unlikely(!(rfd_status & cb_ok))) {
>        /* Don't indicate if hardware indicates errors */
> -      nic->net_stats.rx_dropped++;
>        dev_kfree_skb_any(skb);
>     } else if(actual_size > ETH_DATA_LEN + VLAN_ETH_HLEN) {
>        /* Don't indicate oversized frames */
>        nic->rx_over_length_errors++;
> -      nic->net_stats.rx_dropped++;
>        dev_kfree_skb_any(skb);
>     } else {
>        nic->net_stats.rx_packets++;
> diff --git a/drivers/net/e1000/e1000_main.c 
b/drivers/net/e1000/e1000_main.c
> --- a/drivers/net/e1000/e1000_main.c
> +++ b/drivers/net/e1000/e1000_main.c
> @@ -2544,7 +2544,6 @@ e1000_update_stats(struct e1000_adapter 
>        adapter->stats.crcerrs + adapter->stats.algnerrc +
>        adapter->stats.rlec + adapter->stats.mpc + 
>        adapter->stats.cexterr;
> -   adapter->net_stats.rx_dropped = adapter->stats.mpc;
>     adapter->net_stats.rx_length_errors = adapter->stats.rlec;
>     adapter->net_stats.rx_crc_errors = adapter->stats.crcerrs;
>     adapter->net_stats.rx_frame_errors = adapter->stats.algnerrc;
> diff --git a/drivers/net/ixgb/ixgb_main.c b/drivers/net/ixgb/ixgb_main.c
> --- a/drivers/net/ixgb/ixgb_main.c
> +++ b/drivers/net/ixgb/ixgb_main.c
> @@ -1616,8 +1616,6 @@ ixgb_update_stats(struct ixgb_adapter *a
>         adapter->stats.icbc +
>         adapter->stats.ecbc + adapter->stats.mpc;
> 
> -   adapter->net_stats.rx_dropped = adapter->stats.mpc;
> -
>     /* see above
>      * adapter->net_stats.rx_length_errors = adapter->stats.rlec;
>      */
> diff --git a/drivers/net/s2io.c b/drivers/net/s2io.c
> --- a/drivers/net/s2io.c
> +++ b/drivers/net/s2io.c
> @@ -428,7 +428,7 @@ static int init_shared_mem(struct s2io_n
>              DBG_PRINT(INIT_DBG, 
>              "%s: Zero DMA address for TxDL. ", dev->name);
>              DBG_PRINT(INIT_DBG, 
> -            "Virtual address %llx\n", (u64)tmp_v);
> +            "Virtual address %p\n", tmp_v);
>              tmp_v = pci_alloc_consistent(nic->pdev,
>                         PAGE_SIZE, &tmp_p);
>              if (!tmp_v) {
> @@ -657,9 +657,10 @@ static void free_shared_mem(struct s2io_
>                     mac_control->zerodma_virt_addr,
>                     (dma_addr_t)0);
>           DBG_PRINT(INIT_DBG, 
> -         "%s: Freeing TxDL with zero DMA addr. ", dev->name);
> -         DBG_PRINT(INIT_DBG, "Virtual address %llx\n",
> -         (u64)(mac_control->zerodma_virt_addr));
> +              "%s: Freeing TxDL with zero DMA addr. ",
> +            dev->name);
> +         DBG_PRINT(INIT_DBG, "Virtual address %p\n",
> +            mac_control->zerodma_virt_addr);
>        }
>        kfree(mac_control->fifos[i].list_info);
>     }
> diff --git a/drivers/net/sk98lin/skge.c b/drivers/net/sk98lin/skge.c
> --- a/drivers/net/sk98lin/skge.c
> +++ b/drivers/net/sk98lin/skge.c
> @@ -5216,17 +5216,15 @@ static struct pci_device_id skge_pci_tbl
>     { PCI_VENDOR_ID_3COM, 0x80eb, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
>     { PCI_VENDOR_ID_SYSKONNECT, 0x4300, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 
},
>     { PCI_VENDOR_ID_SYSKONNECT, 0x4320, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 
},
> -   { PCI_VENDOR_ID_DLINK, 0x4c00, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
> +/* DLink card does not have valid VPD so this driver gags
> + *   { PCI_VENDOR_ID_DLINK, 0x4c00, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
> + */
>     { PCI_VENDOR_ID_MARVELL, 0x4320, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
> -#if 0   /* don't handle Yukon2 cards at the moment -- 
> [email protected] */
> -   { PCI_VENDOR_ID_MARVELL, 0x4360, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
> -   { PCI_VENDOR_ID_MARVELL, 0x4361, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
> -#endif
>     { PCI_VENDOR_ID_MARVELL, 0x5005, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
>     { PCI_VENDOR_ID_CNET, 0x434e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
> -   { PCI_VENDOR_ID_LINKSYS, 0x1032, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
> +   { PCI_VENDOR_ID_LINKSYS, 0x1032, PCI_ANY_ID, 0x0015, },
>     { PCI_VENDOR_ID_LINKSYS, 0x1064, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
> -   { 0, }
> +   { 0 }
>  };
> 
>  MODULE_DEVICE_TABLE(pci, skge_pci_tbl);
> diff --git a/drivers/net/skge.c b/drivers/net/skge.c
> --- a/drivers/net/skge.c
> +++ b/drivers/net/skge.c
> @@ -42,7 +42,7 @@
>  #include "skge.h"
> 
>  #define DRV_NAME      "skge"
> -#define DRV_VERSION      "0.9"
> +#define DRV_VERSION      "1.0"
>  #define PFX         DRV_NAME " "
> 
>  #define DEFAULT_TX_RING_SIZE   128
> @@ -669,7 +669,7 @@ static void skge_led(struct skge_port *s
>                   PHY_M_LED_BLINK_RT(BLINK_84MS) |
>                   PHY_M_LEDC_TX_CTRL |
>                   PHY_M_LEDC_DP_CTRL);
> - 
> +
>           gm_phy_write(hw, port, PHY_MARV_LED_OVER,
>                   PHY_M_LED_MO_RX(MO_LED_OFF) |
>                   (skge->speed == SPEED_100 ?
> @@ -876,7 +876,7 @@ static int skge_rx_fill(struct skge_port
> 
>  static void skge_link_up(struct skge_port *skge)
>  {
> -   skge_write8(skge->hw, SK_REG(skge->port, LNK_LED_REG), 
> +   skge_write8(skge->hw, SK_REG(skge->port, LNK_LED_REG),
>            LED_BLK_OFF|LED_SYNC_OFF|LED_ON);
> 
>     netif_carrier_on(skge->netdev);
> @@ -987,6 +987,8 @@ static void genesis_reset(struct skge_hw
>  {
>     const u8 zero[8]  = { 0 };
> 
> +   skge_write8(hw, SK_REG(port, GMAC_IRQ_MSK), 0);
> +
>     /* reset the statistics module */
>     xm_write32(hw, port, XM_GP_PORT, XM_GP_RES_STAT);
>     xm_write16(hw, port, XM_IMSK, 0xffff);   /* disable XMAC IRQs */
> @@ -1021,8 +1023,6 @@ static void bcom_check_link(struct skge_
>     (void) xm_phy_read(hw, port, PHY_BCOM_STAT);
>     status = xm_phy_read(hw, port, PHY_BCOM_STAT);
> 
> -   pr_debug("bcom_check_link status=0x%x\n", status);
> -
>     if ((status & PHY_ST_LSYNC) == 0) {
>        u16 cmd = xm_read16(hw, port, XM_MMU_CMD);
>        cmd &= ~(XM_MMU_ENA_RX | XM_MMU_ENA_TX);
> @@ -1106,8 +1106,6 @@ static void bcom_phy_init(struct skge_po
>        { 0x17, 0x0013 }, { 0x15, 0x0A04 }, { 0x18, 0x0420 },
>     };
> 
> -   pr_debug("bcom_phy_init\n");
> -
>     /* read Id from external PHY (all have the same address) */
>     id1 = xm_phy_read(hw, port, PHY_XMAC_ID1);
> 
> @@ -1340,6 +1338,8 @@ static void genesis_stop(struct skge_por
>     int port = skge->port;
>     u32 reg;
> 
> +   genesis_reset(hw, port);
> +
>     /* Clear Tx packet arbiter timeout IRQ */
>     skge_write16(hw, B3_PA_CTRL,
>             port == 0 ? PA_CLR_TO_TX1 : PA_CLR_TO_TX2);
> @@ -1465,7 +1465,6 @@ static void genesis_link_up(struct skge_
>     u16 cmd;
>     u32 mode, msk;
> 
> -   pr_debug("genesis_link_up\n");
>     cmd = xm_read16(hw, port, XM_MMU_CMD);
> 
>     /*
> @@ -1578,7 +1577,6 @@ static void yukon_init(struct skge_hw *h
>     struct skge_port *skge = netdev_priv(hw->dev[port]);
>     u16 ctrl, ct1000, adv;
> 
> -   pr_debug("yukon_init\n");
>     if (skge->autoneg == AUTONEG_ENABLE) {
>        u16 ectrl = gm_phy_read(hw, port, PHY_MARV_EXT_CTRL);
> 
> @@ -1677,9 +1675,11 @@ static void yukon_mac_init(struct skge_h
> 
>     /* WA code for COMA mode -- set PHY reset */
>     if (hw->chip_id == CHIP_ID_YUKON_LITE &&
> -       hw->chip_rev >= CHIP_REV_YU_LITE_A3)
> -      skge_write32(hw, B2_GP_IO,
> -              (skge_read32(hw, B2_GP_IO) | GP_DIR_9 | GP_IO_9));
> +       hw->chip_rev >= CHIP_REV_YU_LITE_A3) {
> +      reg = skge_read32(hw, B2_GP_IO);
> +      reg |= GP_DIR_9 | GP_IO_9;
> +      skge_write32(hw, B2_GP_IO, reg);
> +   }
> 
>     /* hard reset */
>     skge_write32(hw, SK_REG(port, GPHY_CTRL), GPC_RST_SET);
> @@ -1687,10 +1687,12 @@ static void yukon_mac_init(struct skge_h
> 
>     /* WA code for COMA mode -- clear PHY reset */
>     if (hw->chip_id == CHIP_ID_YUKON_LITE &&
> -       hw->chip_rev >= CHIP_REV_YU_LITE_A3)
> -      skge_write32(hw, B2_GP_IO,
> -              (skge_read32(hw, B2_GP_IO) | GP_DIR_9)
> -              & ~GP_IO_9);
> +       hw->chip_rev >= CHIP_REV_YU_LITE_A3) {
> +      reg = skge_read32(hw, B2_GP_IO);
> +      reg |= GP_DIR_9;
> +      reg &= ~GP_IO_9;
> +      skge_write32(hw, B2_GP_IO, reg);
> +   }
> 
>     /* Set hardware config mode */
>     reg = GPC_INT_POL_HI | GPC_DIS_FC | GPC_DIS_SLEEP |
> @@ -1729,7 +1731,7 @@ static void yukon_mac_init(struct skge_h
>     }
> 
>     gma_write16(hw, port, GM_GP_CTRL, reg);
> -   skge_read16(hw, GMAC_IRQ_SRC);
> +   skge_read16(hw, SK_REG(port, GMAC_IRQ_SRC));
> 
>     yukon_init(hw, port);
> 
> @@ -1801,20 +1803,26 @@ static void yukon_stop(struct skge_port 
>     struct skge_hw *hw = skge->hw;
>     int port = skge->port;
> 
> -   if (hw->chip_id == CHIP_ID_YUKON_LITE &&
> -       hw->chip_rev >= CHIP_REV_YU_LITE_A3) {
> -      skge_write32(hw, B2_GP_IO,
> -              skge_read32(hw, B2_GP_IO) | GP_DIR_9 | GP_IO_9);
> -   }
> +   skge_write8(hw, SK_REG(port, GMAC_IRQ_MSK), 0);
> +   yukon_reset(hw, port);
> 
>     gma_write16(hw, port, GM_GP_CTRL,
>            gma_read16(hw, port, GM_GP_CTRL)
>            & ~(GM_GPCR_TX_ENA|GM_GPCR_RX_ENA));
>     gma_read16(hw, port, GM_GP_CTRL);
> 
> +   if (hw->chip_id == CHIP_ID_YUKON_LITE &&
> +       hw->chip_rev >= CHIP_REV_YU_LITE_A3) {
> +      u32 io = skge_read32(hw, B2_GP_IO);
> +
> +      io |= GP_DIR_9 | GP_IO_9;
> +      skge_write32(hw, B2_GP_IO, io);
> +      skge_read32(hw, B2_GP_IO);
> +   }
> +
>     /* set GPHY Control reset */
> -   skge_write32(hw, SK_REG(port, GPHY_CTRL), GPC_RST_SET);
> -   skge_write32(hw, SK_REG(port, GMAC_CTRL), GMC_RST_SET);
> +   skge_write8(hw, SK_REG(port, GPHY_CTRL), GPC_RST_SET);
> +   skge_write8(hw, SK_REG(port, GMAC_CTRL), GMC_RST_SET);
>  }
> 
>  static void yukon_get_stats(struct skge_port *skge, u64 *data)
> @@ -1873,10 +1881,8 @@ static void yukon_link_up(struct skge_po
>     int port = skge->port;
>     u16 reg;
> 
> -   pr_debug("yukon_link_up\n");
> -
>     /* Enable Transmit FIFO Underrun */
> -   skge_write8(hw, GMAC_IRQ_MSK, GMAC_DEF_MSK);
> +   skge_write8(hw, SK_REG(port, GMAC_IRQ_MSK), GMAC_DEF_MSK);
> 
>     reg = gma_read16(hw, port, GM_GP_CTRL);
>     if (skge->duplex == DUPLEX_FULL || skge->autoneg == AUTONEG_ENABLE)
> @@ -1896,7 +1902,6 @@ static void yukon_link_down(struct skge_
>     int port = skge->port;
>     u16 ctrl;
> 
> -   pr_debug("yukon_link_down\n");
>     gm_phy_write(hw, port, PHY_MARV_INT_MASK, 0);
> 
>     ctrl = gma_read16(hw, port, GM_GP_CTRL);
> @@ -2112,7 +2117,6 @@ static int skge_up(struct net_device *de
>     skge_write8(hw, Q_ADDR(rxqaddr[port], Q_CSR), CSR_START | 
CSR_IRQ_CL_F);
>     skge_led(skge, LED_MODE_ON);
> 
> -   pr_debug("skge_up completed\n");
>     return 0;
> 
>   free_rx_ring:
> @@ -2135,15 +2139,20 @@ static int skge_down(struct net_device *
> 
>     netif_stop_queue(dev);
> 
> +   skge_write8(skge->hw, SK_REG(skge->port, LNK_LED_REG), LED_OFF);
> +   if (hw->chip_id == CHIP_ID_GENESIS)
> +      genesis_stop(skge);
> +   else
> +      yukon_stop(skge);
> +
> +   hw->intr_mask &= ~portirqmask[skge->port];
> +   skge_write32(hw, B0_IMSK, hw->intr_mask);
> +
>     /* Stop transmitter */
>     skge_write8(hw, Q_ADDR(txqaddr[port], Q_CSR), CSR_STOP);
>     skge_write32(hw, RB_ADDR(txqaddr[port], RB_CTRL),
>             RB_RST_SET|RB_DIS_OP_MD);
> 
> -   if (hw->chip_id == CHIP_ID_GENESIS)
> -      genesis_stop(skge);
> -   else
> -      yukon_stop(skge);
> 
>     /* Disable Force Sync bit and Enable Alloc bit */
>     skge_write8(hw, SK_REG(port, TXA_CTRL),
> @@ -2367,8 +2376,6 @@ static void genesis_set_multicast(struct
>     u32 mode;
>     u8 filter[8];
> 
> -   pr_debug("genesis_set_multicast flags=%x count=%d\n", 
> dev->flags, dev->mc_count);
> -
>     mode = xm_read32(hw, port, XM_MODE);
>     mode |= XM_MD_ENA_HASH;
>     if (dev->flags & IFF_PROMISC)
> @@ -2530,8 +2537,6 @@ static int skge_poll(struct net_device *
>     unsigned int to_do = min(dev->quota, *budget);
>     unsigned int work_done = 0;
> 
> -   pr_debug("skge_poll\n");
> -
>     for (e = ring->to_clean; work_done < to_do; e = e->next) {
>        struct skge_rx_desc *rd = e->desc;
>        struct sk_buff *skb;
> @@ -2672,9 +2677,9 @@ static void skge_error_irq(struct skge_h
>     if (hw->chip_id == CHIP_ID_GENESIS) {
>        /* clear xmac errors */
>        if (hwstatus & (IS_NO_STAT_M1|IS_NO_TIST_M1))
> -         skge_write16(hw, SK_REG(0, RX_MFF_CTRL1), MFF_CLR_INSTAT);
> +         skge_write16(hw, RX_MFF_CTRL1, MFF_CLR_INSTAT);
>        if (hwstatus & (IS_NO_STAT_M2|IS_NO_TIST_M2))
> -         skge_write16(hw, SK_REG(0, RX_MFF_CTRL2), MFF_CLR_INSTAT);
> +         skge_write16(hw, RX_MFF_CTRL2, MFF_CLR_INSTAT);
>     } else {
>        /* Timestamp (unused) overflow */
>        if (hwstatus & IS_IRQ_TIST_OV)
> @@ -3000,9 +3005,6 @@ static int skge_reset(struct skge_hw *hw
> 
>     skge_write32(hw, B0_IMSK, hw->intr_mask);
> 
> -   if (hw->chip_id != CHIP_ID_GENESIS)
> -      skge_write8(hw, GMAC_IRQ_MSK, 0);
> -
>     spin_lock_bh(&hw->phy_lock);
>     for (i = 0; i < hw->ports; i++) {
>        if (hw->chip_id == CHIP_ID_GENESIS)
> @@ -3230,6 +3232,11 @@ static void __devexit skge_remove(struct
>     dev0 = hw->dev[0];
>     unregister_netdev(dev0);
> 
> +   skge_write32(hw, B0_IMSK, 0);
> +   skge_write16(hw, B0_LED, LED_STAT_OFF);
> +   skge_pci_clear(hw);
> +   skge_write8(hw, B0_CTST, CS_RST_SET);
> +
>     tasklet_kill(&hw->ext_tasklet);
> 
>     free_irq(pdev->irq, hw);
> @@ -3238,7 +3245,7 @@ static void __devexit skge_remove(struct
>     if (dev1)
>        free_netdev(dev1);
>     free_netdev(dev0);
> -   skge_write16(hw, B0_LED, LED_STAT_OFF);
> +
>     iounmap(hw->regs);
>     kfree(hw);
>     pci_set_drvdata(pdev, NULL);
> @@ -3257,7 +3264,10 @@ static int skge_suspend(struct pci_dev *
>           struct skge_port *skge = netdev_priv(dev);
>           if (netif_running(dev)) {
>              netif_carrier_off(dev);
> -            skge_down(dev);
> +            if (skge->wol)
> +               netif_stop_queue(dev);
> +            else
> +               skge_down(dev);
>           }
>           netif_device_detach(dev);
>           wol |= skge->wol;
> diff --git a/drivers/net/skge.h b/drivers/net/skge.h
> --- a/drivers/net/skge.h
> +++ b/drivers/net/skge.h
> @@ -2008,7 +2008,7 @@ enum {
>     GM_IS_RX_FF_OR   = 1<<1,   /* Receive FIFO Overrun */
>     GM_IS_RX_COMPL   = 1<<0,   /* Frame Reception Complete */
> 
> -#define GMAC_DEF_MSK   (GM_IS_TX_CO_OV | GM_IS_RX_CO_OV | 
GM_IS_TX_FF_UR)
> +#define GMAC_DEF_MSK   (GM_IS_RX_FF_OR | GM_IS_TX_FF_UR)
> 
>  /*   GMAC_LINK_CTRL   16 bit   GMAC Link Control Reg (YUKON only) */
>                    /* Bits 15.. 2:   reserved */
> diff --git a/drivers/net/tulip/xircom_cb.c 
b/drivers/net/tulip/xircom_cb.c
> --- a/drivers/net/tulip/xircom_cb.c
> +++ b/drivers/net/tulip/xircom_cb.c
> @@ -117,7 +117,7 @@ static int xircom_open(struct net_device
>  static int xircom_close(struct net_device *dev);
>  static void xircom_up(struct xircom_private *card);
>  static struct net_device_stats *xircom_get_stats(struct net_device 
*dev);
> -#if CONFIG_NET_POLL_CONTROLLER
> +#ifdef CONFIG_NET_POLL_CONTROLLER
>  static void xircom_poll_controller(struct net_device *dev);
>  #endif
> 
> diff --git a/drivers/net/wireless/airo.c b/drivers/net/wireless/airo.c
> --- a/drivers/net/wireless/airo.c
> +++ b/drivers/net/wireless/airo.c
> @@ -6852,7 +6852,10 @@ static inline char *airo_translate_scan(
>     /* Add frequency */
>     iwe.cmd = SIOCGIWFREQ;
>     iwe.u.freq.m = le16_to_cpu(bss->dsChannel);
> -   iwe.u.freq.m = frequency_list[iwe.u.freq.m] * 100000;
> +   /* iwe.u.freq.m containt the channel (starting 1), our 
> +    * frequency_list array start at index 0...
> +    */
> +   iwe.u.freq.m = frequency_list[iwe.u.freq.m - 1] * 100000;
>     iwe.u.freq.e = 1;
>     current_ev = iwe_stream_add_event(current_ev, end_buf, &iwe, 
> IW_EV_FREQ_LEN);
> 
> diff --git a/drivers/s390/net/ctcmain.c b/drivers/s390/net/ctcmain.c
> --- a/drivers/s390/net/ctcmain.c
> +++ b/drivers/s390/net/ctcmain.c
> @@ -1,5 +1,5 @@
>  /*
> - * $Id: ctcmain.c,v 1.74 2005/03/24 09:04:17 mschwide Exp $
> + * $Id: ctcmain.c,v 1.78 2005/09/07 12:18:02 pavlic Exp $
>   *
>   * CTC / ESCON network driver
>   *
> @@ -37,10 +37,9 @@
>   * along with this program; if not, write to the Free Software
>   * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
>   *
> - * RELEASE-TAG: CTC/ESCON network driver $Revision: 1.74 $
> + * RELEASE-TAG: CTC/ESCON network driver $Revision: 1.78 $
>   *
>   */
> -
>  #undef DEBUG
>  #include <linux/module.h>
>  #include <linux/init.h>
> @@ -135,7 +134,7 @@ static const char *dev_event_names[] = {
>     "TX down",
>     "Restart",
>  };
> -
> +
>  /**
>   * Events of the channel statemachine
>   */
> @@ -249,7 +248,7 @@ static void
>  print_banner(void)
>  {
>     static int printed = 0;
> -   char vbuf[] = "$Revision: 1.74 $";
> +   char vbuf[] = "$Revision: 1.78 $";
>     char *version = vbuf;
> 
>     if (printed)
> @@ -334,7 +333,7 @@ static const char *ch_state_names[] = {
>     "Restarting",
>     "Not operational",
>  };
> -
> +
>  #ifdef DEBUG
>  /**
>   * Dump header and first 16 bytes of an sk_buff for debugging purposes.
> @@ -671,7 +670,7 @@ static void
>  fsm_action_nop(fsm_instance * fi, int event, void *arg)
>  {
>  }
> -
> +
>  /**
>   * Actions for channel - statemachines.
> 
> 
*****************************************************************************/
> @@ -1514,7 +1513,6 @@ ch_action_reinit(fsm_instance *fi, int e
>      fsm_addtimer(&privptr->restart_timer, 1000, DEV_EVENT_RESTART, 
dev);
>  }
> 
> -
>  /**
>   * The statemachine for a channel.
>   */
> @@ -1625,7 +1623,7 @@ static const fsm_node ch_fsm[] = {
>  };
> 
>  static const int CH_FSM_LEN = sizeof (ch_fsm) / sizeof (fsm_node);
> -
> +
>  /**
>   * Functions related to setup and device detection.
> 
> 
*****************************************************************************/
> @@ -1976,7 +1974,7 @@ ctc_irq_handler(struct ccw_device *cdev,
>        fsm_event(ch->fsm, CH_EVENT_IRQ, ch);
> 
>  }
> -
> +
>  /**
>   * Actions for interface - statemachine.
> 
> 
*****************************************************************************/
> @@ -2209,13 +2207,18 @@ transmit_skb(struct channel *ch, struct 
>     int rc = 0;
> 
>     DBF_TEXT(trace, 5, __FUNCTION__);
> +   /* we need to acquire the lock for testing the state
> +    * otherwise we can have an IRQ changing the state to 
> +    * TXIDLE after the test but before acquiring the lock.
> +    */
> +   spin_lock_irqsave(&ch->collect_lock, saveflags);
>     if (fsm_getstate(ch->fsm) != CH_STATE_TXIDLE) {
>        int l = skb->len + LL_HEADER_LENGTH;
> 
> -      spin_lock_irqsave(&ch->collect_lock, saveflags);
> -      if (ch->collect_len + l > ch->max_bufsize - 2)
> -         rc = -EBUSY;
> -      else {
> +      if (ch->collect_len + l > ch->max_bufsize - 2) {
> +         spin_unlock_irqrestore(&ch->collect_lock, saveflags);
> +         return -EBUSY;
> +      } else {
>           atomic_inc(&skb->users);
>           header.length = l;
>           header.type = skb->protocol;
> @@ -2231,7 +2234,7 @@ transmit_skb(struct channel *ch, struct 
>        int ccw_idx;
>        struct sk_buff *nskb;
>        unsigned long hi;
> -
> +      spin_unlock_irqrestore(&ch->collect_lock, saveflags);
>        /**
>         * Protect skb against beeing free'd by upper
>         * layers.
> @@ -2256,6 +2259,7 @@ transmit_skb(struct channel *ch, struct 
>           if (!nskb) {
>              atomic_dec(&skb->users);
>              skb_pull(skb, LL_HEADER_LENGTH + 2);
> +            ctc_clear_busy(ch->netdev);
>              return -ENOMEM;
>           } else {
>              memcpy(skb_put(nskb, skb->len),
> @@ -2281,6 +2285,7 @@ transmit_skb(struct channel *ch, struct 
>               */
>              atomic_dec(&skb->users);
>              skb_pull(skb, LL_HEADER_LENGTH + 2);
> +            ctc_clear_busy(ch->netdev);
>              return -EBUSY;
>           }
> 
> @@ -2327,9 +2332,10 @@ transmit_skb(struct channel *ch, struct 
>        }
>     }
> 
> +   ctc_clear_busy(ch->netdev);
>     return rc;
>  }
> -
> +
>  /**
>   * Interface API for upper network layers
> 
> 
*****************************************************************************/
> @@ -2421,7 +2427,6 @@ ctc_tx(struct sk_buff *skb, struct net_d
>     dev->trans_start = jiffies;
>     if (transmit_skb(privptr->channel[WRITE], skb) != 0)
>        rc = 1;
> -   ctc_clear_busy(dev);
>     return rc;
>  }
> 
> @@ -2610,7 +2615,6 @@ stats_write(struct device *dev, struct d
>     return count;
>  }
> 
> -
>  static void
>  ctc_netdev_unregister(struct net_device * dev)
>  {
> @@ -2685,7 +2689,6 @@ ctc_proto_store(struct device *dev, stru
>     return count;
>  }
> 
> -
>  static ssize_t
>  ctc_type_show(struct device *dev, struct device_attribute *attr, char 
*buf)
>  {
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" 
in
> the body of a message to [email protected]
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]
  Powered by Linux