Hi Jeff,

Could you apply the updates for ucc_geth driver?

The patches from Timur that make the driver compile correctly on 2.6.20.
[PATCH] Fix phy_read/write redefinition errors in ucc_geth_phy.c
[PATCH] Update ucc_geth.c for new workqueue structure

The patch from Ahmed that cleans up some unnecessary casts.
[PATCH 2.6.20-rc3] UCC Ether driver: kmalloc casting cleanups


- Leo

> -----Original Message-----
> From: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED] On Behalf Of Jeff Garzik
> Sent: Monday, January 08, 2007 5:48 PM
> To: Andrew Morton; Linus Torvalds
> Cc: netdev@vger.kernel.org; LKML
> Subject: [git patches] net driver fixes
> 
> 
> Please pull from 'upstream-linus' branch of
> master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6.git
> upstream-linus
> 
> to receive the following updates:
> 
>  drivers/net/e1000/e1000_main.c  |    6 ----
>  drivers/net/ixgb/ixgb.h         |    1 +
>  drivers/net/ixgb/ixgb_ethtool.c |    1 +
>  drivers/net/ixgb/ixgb_hw.c      |    3 +-
>  drivers/net/ixgb/ixgb_main.c    |   57
++++++++++++++++++++++++++++++++++----
>  drivers/net/qla3xxx.c           |   38 +++++++++++++++----------
>  drivers/net/wireless/ipw2100.c  |    2 +-
>  drivers/s390/net/qeth_main.c    |   13 +++++---
>  include/net/ieee80211.h         |    2 +-
>  9 files changed, 88 insertions(+), 35 deletions(-)
> 
> Aaron Salter (1):
>       ixgb: Write RA register high word first, increment version
> 
> Heiko Carstens (1):
>       qeth: fix uaccess handling and get rid of unused variable
> 
> Jeff Garzik (1):
>       Revert "e1000: disable TSO on the 82544 with slab debugging"
> 
> Jesse Brandeburg (2):
>       ixgb: Fix early TSO completion
>       ixgb: Maybe stop TX if not enough free descriptors
> 
> Ron Mercer (2):
>       qla3xxx: Remove NETIF_F_LLTX from driver features.
>       qla3xxx: Add delay to NVRAM register access.
> 
> Zhu Yi (2):
>       ieee80211: WLAN_GET_SEQ_SEQ fix (select correct region)
>       ipw2100: Fix dropping fragmented small packet problem
> 
> diff --git a/drivers/net/e1000/e1000_main.c
b/drivers/net/e1000/e1000_main.c
> index 4c1ff75..c6259c7 100644
> --- a/drivers/net/e1000/e1000_main.c
> +++ b/drivers/net/e1000/e1000_main.c
> @@ -995,12 +995,6 @@ e1000_probe(struct pci_dev *pdev,
>          (adapter->hw.mac_type != e1000_82547))
>               netdev->features |= NETIF_F_TSO;
> 
> -#ifdef CONFIG_DEBUG_SLAB
> -     /* 82544's work arounds do not play nicely with DEBUG SLAB */
> -     if (adapter->hw.mac_type == e1000_82544)
> -             netdev->features &= ~NETIF_F_TSO;
> -#endif
> -
>  #ifdef NETIF_F_TSO6
>       if (adapter->hw.mac_type > e1000_82547_rev_2)
>               netdev->features |= NETIF_F_TSO6;
> diff --git a/drivers/net/ixgb/ixgb.h b/drivers/net/ixgb/ixgb.h
> index 50ffe90..f4aba43 100644
> --- a/drivers/net/ixgb/ixgb.h
> +++ b/drivers/net/ixgb/ixgb.h
> @@ -171,6 +171,7 @@ struct ixgb_adapter {
> 
>       /* TX */
>       struct ixgb_desc_ring tx_ring ____cacheline_aligned_in_smp;
> +     unsigned int restart_queue;
>       unsigned long timeo_start;
>       uint32_t tx_cmd_type;
>       uint64_t hw_csum_tx_good;
> diff --git a/drivers/net/ixgb/ixgb_ethtool.c
b/drivers/net/ixgb/ixgb_ethtool.c
> index cd22523..82c044d 100644
> --- a/drivers/net/ixgb/ixgb_ethtool.c
> +++ b/drivers/net/ixgb/ixgb_ethtool.c
> @@ -79,6 +79,7 @@ static struct ixgb_stats ixgb_gstrings_stats[] = {
>       {"tx_window_errors", IXGB_STAT(net_stats.tx_window_errors)},
>       {"tx_deferred_ok", IXGB_STAT(stats.dc)},
>       {"tx_timeout_count", IXGB_STAT(tx_timeout_count) },
> +     {"tx_restart_queue", IXGB_STAT(restart_queue) },
>       {"rx_long_length_errors", IXGB_STAT(stats.roc)},
>       {"rx_short_length_errors", IXGB_STAT(stats.ruc)},
>  #ifdef NETIF_F_TSO
> diff --git a/drivers/net/ixgb/ixgb_hw.c b/drivers/net/ixgb/ixgb_hw.c
> index 02089b6..ecbf458 100644
> --- a/drivers/net/ixgb/ixgb_hw.c
> +++ b/drivers/net/ixgb/ixgb_hw.c
> @@ -399,8 +399,9 @@ ixgb_init_rx_addrs(struct ixgb_hw *hw)
>       /* Zero out the other 15 receive addresses. */
>       DEBUGOUT("Clearing RAR[1-15]\n");
>       for(i = 1; i < IXGB_RAR_ENTRIES; i++) {
> -             IXGB_WRITE_REG_ARRAY(hw, RA, (i << 1), 0);
> +             /* Write high reg first to disable the AV bit first */
>               IXGB_WRITE_REG_ARRAY(hw, RA, ((i << 1) + 1), 0);
> +             IXGB_WRITE_REG_ARRAY(hw, RA, (i << 1), 0);
>       }
> 
>       return;
> diff --git a/drivers/net/ixgb/ixgb_main.c
b/drivers/net/ixgb/ixgb_main.c
> index e628126..a083a91 100644
> --- a/drivers/net/ixgb/ixgb_main.c
> +++ b/drivers/net/ixgb/ixgb_main.c
> @@ -36,7 +36,7 @@ static char ixgb_driver_string[] = "Intel(R)
PRO/10GbE Network
> Driver";
>  #else
>  #define DRIVERNAPI "-NAPI"
>  #endif
> -#define DRV_VERSION          "1.0.117-k2"DRIVERNAPI
> +#define DRV_VERSION          "1.0.126-k2"DRIVERNAPI
>  char ixgb_driver_version[] = DRV_VERSION;
>  static char ixgb_copyright[] = "Copyright (c) 1999-2006 Intel
Corporation.";
> 
> @@ -1287,6 +1287,7 @@ ixgb_tx_map(struct ixgb_adapter *adapter, struct
sk_buff
> *skb,
>       struct ixgb_buffer *buffer_info;
>       int len = skb->len;
>       unsigned int offset = 0, size, count = 0, i;
> +     unsigned int mss = skb_shinfo(skb)->gso_size;
> 
>       unsigned int nr_frags = skb_shinfo(skb)->nr_frags;
>       unsigned int f;
> @@ -1298,6 +1299,11 @@ ixgb_tx_map(struct ixgb_adapter *adapter,
struct sk_buff
> *skb,
>       while(len) {
>               buffer_info = &tx_ring->buffer_info[i];
>               size = min(len, IXGB_MAX_DATA_PER_TXD);
> +             /* Workaround for premature desc write-backs
> +              * in TSO mode.  Append 4-byte sentinel desc */
> +             if (unlikely(mss && !nr_frags && size == len && size >
8))
> +                     size -= 4;
> +
>               buffer_info->length = size;
>               WARN_ON(buffer_info->dma != 0);
>               buffer_info->dma =
> @@ -1324,6 +1330,13 @@ ixgb_tx_map(struct ixgb_adapter *adapter,
struct sk_buff
> *skb,
>               while(len) {
>                       buffer_info = &tx_ring->buffer_info[i];
>                       size = min(len, IXGB_MAX_DATA_PER_TXD);
> +
> +                     /* Workaround for premature desc write-backs
> +                      * in TSO mode.  Append 4-byte sentinel desc */
> +                     if (unlikely(mss && !nr_frags && size == len
> +                                  && size > 8))
> +                             size -= 4;
> +
>                       buffer_info->length = size;
>                       buffer_info->dma =
>                               pci_map_page(adapter->pdev,
> @@ -1398,11 +1411,43 @@ ixgb_tx_queue(struct ixgb_adapter *adapter,
int count, int
> vlan_id,int tx_flags)
>       IXGB_WRITE_REG(&adapter->hw, TDT, i);
>  }
> 
> +static int __ixgb_maybe_stop_tx(struct net_device *netdev, int size)
> +{
> +     struct ixgb_adapter *adapter = netdev_priv(netdev);
> +     struct ixgb_desc_ring *tx_ring = &adapter->tx_ring;
> +
> +     netif_stop_queue(netdev);
> +     /* Herbert's original patch had:
> +      *  smp_mb__after_netif_stop_queue();
> +      * but since that doesn't exist yet, just open code it. */
> +     smp_mb();
> +
> +     /* We need to check again in a case another CPU has just
> +      * made room available. */
> +     if (likely(IXGB_DESC_UNUSED(tx_ring) < size))
> +             return -EBUSY;
> +
> +     /* A reprieve! */
> +     netif_start_queue(netdev);
> +     ++adapter->restart_queue;
> +     return 0;
> +}
> +
> +static int ixgb_maybe_stop_tx(struct net_device *netdev,
> +                              struct ixgb_desc_ring *tx_ring, int
size)
> +{
> +     if (likely(IXGB_DESC_UNUSED(tx_ring) >= size))
> +             return 0;
> +     return __ixgb_maybe_stop_tx(netdev, size);
> +}
> +
> +
>  /* Tx Descriptors needed, worst case */
>  #define TXD_USE_COUNT(S) (((S) >> IXGB_MAX_TXD_PWR) + \
>                        (((S) & (IXGB_MAX_DATA_PER_TXD - 1)) ? 1 : 0))
> -#define DESC_NEEDED TXD_USE_COUNT(IXGB_MAX_DATA_PER_TXD) + \
> -     MAX_SKB_FRAGS * TXD_USE_COUNT(PAGE_SIZE) + 1
> +#define DESC_NEEDED TXD_USE_COUNT(IXGB_MAX_DATA_PER_TXD) /* skb->date
*/ + \
> +     MAX_SKB_FRAGS * TXD_USE_COUNT(PAGE_SIZE) + 1 /* for context */ \
> +     + 1 /* one more needed for sentinel TSO workaround */
> 
>  static int
>  ixgb_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
> @@ -1430,7 +1475,8 @@ ixgb_xmit_frame(struct sk_buff *skb, struct
net_device
> *netdev)
>       spin_lock_irqsave(&adapter->tx_lock, flags);
>  #endif
> 
> -     if(unlikely(IXGB_DESC_UNUSED(&adapter->tx_ring) < DESC_NEEDED))
{
> +     if (unlikely(ixgb_maybe_stop_tx(netdev, &adapter->tx_ring,
> +                     DESC_NEEDED))) {
>               netif_stop_queue(netdev);
>               spin_unlock_irqrestore(&adapter->tx_lock, flags);
>               return NETDEV_TX_BUSY;
> @@ -1468,8 +1514,7 @@ ixgb_xmit_frame(struct sk_buff *skb, struct
net_device
> *netdev)
> 
>  #ifdef NETIF_F_LLTX
>       /* Make sure there is space in the ring for the next send. */
> -     if(unlikely(IXGB_DESC_UNUSED(&adapter->tx_ring) < DESC_NEEDED))
> -             netif_stop_queue(netdev);
> +     ixgb_maybe_stop_tx(netdev, &adapter->tx_ring, DESC_NEEDED);
> 
>       spin_unlock_irqrestore(&adapter->tx_lock, flags);
> 
> diff --git a/drivers/net/qla3xxx.c b/drivers/net/qla3xxx.c
> index d79d141..8844c20 100644
> --- a/drivers/net/qla3xxx.c
> +++ b/drivers/net/qla3xxx.c
> @@ -208,6 +208,15 @@ static void ql_write_common_reg(struct
ql3_adapter *qdev,
>       return;
>  }
> 
> +static void ql_write_nvram_reg(struct ql3_adapter *qdev,
> +                             u32 __iomem *reg, u32 value)
> +{
> +     writel(value, reg);
> +     readl(reg);
> +     udelay(1);
> +     return;
> +}
> +
>  static void ql_write_page0_reg(struct ql3_adapter *qdev,
>                              u32 __iomem *reg, u32 value)
>  {
> @@ -336,9 +345,9 @@ static void fm93c56a_select(struct ql3_adapter
*qdev)
>                       qdev->mem_map_registers;
> 
>       qdev->eeprom_cmd_data = AUBURN_EEPROM_CS_1;
> -     ql_write_common_reg(qdev,
&port_regs->CommonRegs.serialPortInterfaceReg,
> +     ql_write_nvram_reg(qdev,
&port_regs->CommonRegs.serialPortInterfaceReg,
>                           ISP_NVRAM_MASK | qdev->eeprom_cmd_data);
> -     ql_write_common_reg(qdev,
&port_regs->CommonRegs.serialPortInterfaceReg,
> +     ql_write_nvram_reg(qdev,
&port_regs->CommonRegs.serialPortInterfaceReg,
>                           ((ISP_NVRAM_MASK << 16) |
qdev->eeprom_cmd_data));
>  }
> 
> @@ -355,14 +364,14 @@ static void fm93c56a_cmd(struct ql3_adapter
*qdev, u32 cmd,
> u32 eepromAddr)
>                       qdev->mem_map_registers;
> 
>       /* Clock in a zero, then do the start bit */
> -     ql_write_common_reg(qdev,
&port_regs->CommonRegs.serialPortInterfaceReg,
> +     ql_write_nvram_reg(qdev,
&port_regs->CommonRegs.serialPortInterfaceReg,
>                           ISP_NVRAM_MASK | qdev->eeprom_cmd_data |
>                           AUBURN_EEPROM_DO_1);
> -     ql_write_common_reg(qdev,
&port_regs->CommonRegs.serialPortInterfaceReg,
> +     ql_write_nvram_reg(qdev,
&port_regs->CommonRegs.serialPortInterfaceReg,
>                           ISP_NVRAM_MASK | qdev->
>                           eeprom_cmd_data | AUBURN_EEPROM_DO_1 |
>                           AUBURN_EEPROM_CLK_RISE);
> -     ql_write_common_reg(qdev,
&port_regs->CommonRegs.serialPortInterfaceReg,
> +     ql_write_nvram_reg(qdev,
&port_regs->CommonRegs.serialPortInterfaceReg,
>                           ISP_NVRAM_MASK | qdev->
>                           eeprom_cmd_data | AUBURN_EEPROM_DO_1 |
>                           AUBURN_EEPROM_CLK_FALL);
> @@ -378,20 +387,20 @@ static void fm93c56a_cmd(struct ql3_adapter
*qdev, u32 cmd,
> u32 eepromAddr)
>                        * If the bit changed, then change the DO state
to
>                        * match
>                        */
> -                     ql_write_common_reg(qdev,
> +                     ql_write_nvram_reg(qdev,
>                                           &port_regs->CommonRegs.
>                                           serialPortInterfaceReg,
>                                           ISP_NVRAM_MASK | qdev->
>                                           eeprom_cmd_data | dataBit);
>                       previousBit = dataBit;
>               }
> -             ql_write_common_reg(qdev,
> +             ql_write_nvram_reg(qdev,
>                                   &port_regs->CommonRegs.
>                                   serialPortInterfaceReg,
>                                   ISP_NVRAM_MASK | qdev->
>                                   eeprom_cmd_data | dataBit |
>                                   AUBURN_EEPROM_CLK_RISE);
> -             ql_write_common_reg(qdev,
> +             ql_write_nvram_reg(qdev,
>                                   &port_regs->CommonRegs.
>                                   serialPortInterfaceReg,
>                                   ISP_NVRAM_MASK | qdev->
> @@ -412,20 +421,20 @@ static void fm93c56a_cmd(struct ql3_adapter
*qdev, u32 cmd,
> u32 eepromAddr)
>                        * If the bit changed, then change the DO state
to
>                        * match
>                        */
> -                     ql_write_common_reg(qdev,
> +                     ql_write_nvram_reg(qdev,
>                                           &port_regs->CommonRegs.
>                                           serialPortInterfaceReg,
>                                           ISP_NVRAM_MASK | qdev->
>                                           eeprom_cmd_data | dataBit);
>                       previousBit = dataBit;
>               }
> -             ql_write_common_reg(qdev,
> +             ql_write_nvram_reg(qdev,
>                                   &port_regs->CommonRegs.
>                                   serialPortInterfaceReg,
>                                   ISP_NVRAM_MASK | qdev->
>                                   eeprom_cmd_data | dataBit |
>                                   AUBURN_EEPROM_CLK_RISE);
> -             ql_write_common_reg(qdev,
> +             ql_write_nvram_reg(qdev,
>                                   &port_regs->CommonRegs.
>                                   serialPortInterfaceReg,
>                                   ISP_NVRAM_MASK | qdev->
> @@ -443,7 +452,7 @@ static void fm93c56a_deselect(struct ql3_adapter
*qdev)
>       struct ql3xxx_port_registers __iomem *port_regs =
>                       qdev->mem_map_registers;
>       qdev->eeprom_cmd_data = AUBURN_EEPROM_CS_0;
> -     ql_write_common_reg(qdev,
&port_regs->CommonRegs.serialPortInterfaceReg,
> +     ql_write_nvram_reg(qdev,
&port_regs->CommonRegs.serialPortInterfaceReg,
>                           ISP_NVRAM_MASK | qdev->eeprom_cmd_data);
>  }
> 
> @@ -461,12 +470,12 @@ static void fm93c56a_datain(struct ql3_adapter
*qdev,
> unsigned short *value)
>       /* Read the data bits */
>       /* The first bit is a dummy.  Clock right over it. */
>       for (i = 0; i < dataBits; i++) {
> -             ql_write_common_reg(qdev,
> +             ql_write_nvram_reg(qdev,
>                                   &port_regs->CommonRegs.
>                                   serialPortInterfaceReg,
>                                   ISP_NVRAM_MASK |
qdev->eeprom_cmd_data |
>                                   AUBURN_EEPROM_CLK_RISE);
> -             ql_write_common_reg(qdev,
> +             ql_write_nvram_reg(qdev,
>                                   &port_regs->CommonRegs.
>                                   serialPortInterfaceReg,
>                                   ISP_NVRAM_MASK |
qdev->eeprom_cmd_data |
> @@ -3370,7 +3379,6 @@ static int __devinit ql3xxx_probe(struct pci_dev
*pdev,
>       SET_MODULE_OWNER(ndev);
>       SET_NETDEV_DEV(ndev, &pdev->dev);
> 
> -     ndev->features = NETIF_F_LLTX;
>       if (pci_using_dac)
>               ndev->features |= NETIF_F_HIGHDMA;
> 
> diff --git a/drivers/net/wireless/ipw2100.c
b/drivers/net/wireless/ipw2100.c
> index 0e94fbb..b85857a 100644
> --- a/drivers/net/wireless/ipw2100.c
> +++ b/drivers/net/wireless/ipw2100.c
> @@ -2664,7 +2664,7 @@ static void __ipw2100_rx_process(struct
ipw2100_priv *priv)
>                               break;
>                       }
>  #endif
> -                     if (stats.len < sizeof(u->rx_data.header))
> +                     if (stats.len < sizeof(struct
ieee80211_hdr_3addr))
>                               break;
>                       switch
(WLAN_FC_GET_TYPE(u->rx_data.header.frame_ctl)) {
>                       case IEEE80211_FTYPE_MGMT:
> diff --git a/drivers/s390/net/qeth_main.c
b/drivers/s390/net/qeth_main.c
> index 2bde4f1..f17d7cf 100644
> --- a/drivers/s390/net/qeth_main.c
> +++ b/drivers/s390/net/qeth_main.c
> @@ -2560,7 +2560,6 @@ qeth_process_inbound_buffer(struct qeth_card
*card,
>       int offset;
>       int rxrc;
>       __u16 vlan_tag = 0;
> -     __u16 *vlan_addr;
> 
>       /* get first element of current buffer */
>       element = (struct qdio_buffer_element
*)&buf->buffer->element[0];
> @@ -4844,9 +4843,11 @@ qeth_arp_query(struct qeth_card *card, char
__user *udata)
>                          "(0x%x/%d)\n",
>                          QETH_CARD_IFNAME(card),
qeth_arp_get_error_cause(&rc),
>                          tmp, tmp);
> -             copy_to_user(udata, qinfo.udata, 4);
> +             if (copy_to_user(udata, qinfo.udata, 4))
> +                     rc = -EFAULT;
>       } else {
> -             copy_to_user(udata, qinfo.udata, qinfo.udata_len);
> +             if (copy_to_user(udata, qinfo.udata, qinfo.udata_len))
> +                     rc = -EFAULT;
>       }
>       kfree(qinfo.udata);
>       return rc;
> @@ -4992,8 +4993,10 @@ qeth_snmp_command(struct qeth_card *card, char
__user
> *udata)
>       if (rc)
>               PRINT_WARN("SNMP command failed on %s: (0x%x)\n",
>                          QETH_CARD_IFNAME(card), rc);
> -      else
> -             copy_to_user(udata, qinfo.udata, qinfo.udata_len);
> +     else {
> +             if (copy_to_user(udata, qinfo.udata, qinfo.udata_len))
> +                     rc = -EFAULT;
> +     }
> 
>       kfree(ureq);
>       kfree(qinfo.udata);
> diff --git a/include/net/ieee80211.h b/include/net/ieee80211.h
> index e6af381..e02d85f 100644
> --- a/include/net/ieee80211.h
> +++ b/include/net/ieee80211.h
> @@ -218,7 +218,7 @@ struct ieee80211_snap_hdr {
>  #define WLAN_FC_GET_STYPE(fc) ((fc) & IEEE80211_FCTL_STYPE)
> 
>  #define WLAN_GET_SEQ_FRAG(seq) ((seq) & IEEE80211_SCTL_FRAG)
> -#define WLAN_GET_SEQ_SEQ(seq)  ((seq) & IEEE80211_SCTL_SEQ)
> +#define WLAN_GET_SEQ_SEQ(seq)  (((seq) & IEEE80211_SCTL_SEQ) >> 4)
> 
>  /* Authentication algorithms */
>  #define WLAN_AUTH_OPEN 0
> -
> 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 netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to