lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Mon, 8 Jan 2007 18:09:04 +0800
From:	"Li Yang-r58472" <LeoLi@...escale.com>
To:	"Jeff Garzik" <jeff@...zik.org>
Cc:	<netdev@...r.kernel.org>
Subject: RE: [git patches] net driver fixes

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: linux-kernel-owner@...r.kernel.org
> [mailto:linux-kernel-owner@...r.kernel.org] On Behalf Of Jeff Garzik
> Sent: Monday, January 08, 2007 5:48 PM
> To: Andrew Morton; Linus Torvalds
> Cc: netdev@...r.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 majordomo@...r.kernel.org
> 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 majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ