Commit b5f1f555 authored by Linus Torvalds's avatar Linus Torvalds

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:
  bnx2: fix poll_controller to pass proper structures and check all rx queues
  niu: Fix readq implementation when architecture does not provide one.
  hostap: pad the skb->cb usage in lieu of a proper fix
  rtl8187 : support for Sitecom WL-168 0001 v4
  mac80211: fix notify_mac function
  rtl8187: Add Abocom USB ID
  net: put_cmsg_compat + SO_TIMESTAMP[NS]: use same name for value as caller
  tcp_htcp: last_cong bug fix
  [netdrvr] smc911x: fix for driver resume (and compilation warning)
  RDMA/cxgb3: deadlock in iw_cxgb3 can cause hang when configuring interface.
  cxgb3 - Limit multiqueue setting to msi-x
  cxgb3 - eeprom read fixes
  myri10ge: fix stop/go ordering even more
parents 45a9524a b2af2c1d
...@@ -7204,10 +7204,13 @@ static void ...@@ -7204,10 +7204,13 @@ static void
poll_bnx2(struct net_device *dev) poll_bnx2(struct net_device *dev)
{ {
struct bnx2 *bp = netdev_priv(dev); struct bnx2 *bp = netdev_priv(dev);
int i;
disable_irq(bp->pdev->irq); for (i = 0; i < bp->irq_nvecs; i++) {
bnx2_interrupt(bp->pdev->irq, dev); disable_irq(bp->irq_tbl[i].vector);
enable_irq(bp->pdev->irq); bnx2_interrupt(bp->irq_tbl[i].vector, &bp->bnx2_napi[i]);
enable_irq(bp->irq_tbl[i].vector);
}
} }
#endif #endif
......
...@@ -2701,7 +2701,7 @@ static void set_nqsets(struct adapter *adap) ...@@ -2701,7 +2701,7 @@ static void set_nqsets(struct adapter *adap)
int hwports = adap->params.nports; int hwports = adap->params.nports;
int nqsets = SGE_QSETS; int nqsets = SGE_QSETS;
if (adap->params.rev > 0) { if (adap->params.rev > 0 && adap->flags & USING_MSIX) {
if (hwports == 2 && if (hwports == 2 &&
(hwports * nqsets > SGE_QSETS || (hwports * nqsets > SGE_QSETS ||
num_cpus >= nqsets / hwports)) num_cpus >= nqsets / hwports))
......
...@@ -572,7 +572,7 @@ struct t3_vpd { ...@@ -572,7 +572,7 @@ struct t3_vpd {
u32 pad; /* for multiple-of-4 sizing and alignment */ u32 pad; /* for multiple-of-4 sizing and alignment */
}; };
#define EEPROM_MAX_POLL 4 #define EEPROM_MAX_POLL 40
#define EEPROM_STAT_ADDR 0x4000 #define EEPROM_STAT_ADDR 0x4000
#define VPD_BASE 0xc00 #define VPD_BASE 0xc00
...@@ -3690,6 +3690,12 @@ int t3_prep_adapter(struct adapter *adapter, const struct adapter_info *ai, ...@@ -3690,6 +3690,12 @@ int t3_prep_adapter(struct adapter *adapter, const struct adapter_info *ai,
; ;
pti = &port_types[adapter->params.vpd.port_type[j]]; pti = &port_types[adapter->params.vpd.port_type[j]];
if (!pti->phy_prep) {
CH_ALERT(adapter, "Invalid port type index %d\n",
adapter->params.vpd.port_type[j]);
return -EINVAL;
}
ret = pti->phy_prep(&p->phy, adapter, ai->phy_base_addr + j, ret = pti->phy_prep(&p->phy, adapter, ai->phy_base_addr + j,
ai->mdio_ops); ai->mdio_ops);
if (ret) if (ret)
......
...@@ -75,7 +75,7 @@ ...@@ -75,7 +75,7 @@
#include "myri10ge_mcp.h" #include "myri10ge_mcp.h"
#include "myri10ge_mcp_gen_header.h" #include "myri10ge_mcp_gen_header.h"
#define MYRI10GE_VERSION_STR "1.4.3-1.375" #define MYRI10GE_VERSION_STR "1.4.3-1.378"
MODULE_DESCRIPTION("Myricom 10G driver (10GbE)"); MODULE_DESCRIPTION("Myricom 10G driver (10GbE)");
MODULE_AUTHOR("Maintainer: help@myri.com"); MODULE_AUTHOR("Maintainer: help@myri.com");
...@@ -1393,6 +1393,7 @@ myri10ge_tx_done(struct myri10ge_slice_state *ss, int mcp_index) ...@@ -1393,6 +1393,7 @@ myri10ge_tx_done(struct myri10ge_slice_state *ss, int mcp_index)
if (tx->req == tx->done) { if (tx->req == tx->done) {
tx->queue_active = 0; tx->queue_active = 0;
put_be32(htonl(1), tx->send_stop); put_be32(htonl(1), tx->send_stop);
mb();
mmiowb(); mmiowb();
} }
__netif_tx_unlock(dev_queue); __netif_tx_unlock(dev_queue);
...@@ -2865,6 +2866,7 @@ static int myri10ge_xmit(struct sk_buff *skb, struct net_device *dev) ...@@ -2865,6 +2866,7 @@ static int myri10ge_xmit(struct sk_buff *skb, struct net_device *dev)
if ((mgp->dev->real_num_tx_queues > 1) && tx->queue_active == 0) { if ((mgp->dev->real_num_tx_queues > 1) && tx->queue_active == 0) {
tx->queue_active = 1; tx->queue_active = 1;
put_be32(htonl(1), tx->send_go); put_be32(htonl(1), tx->send_go);
mb();
mmiowb(); mmiowb();
} }
tx->pkt_start++; tx->pkt_start++;
......
...@@ -51,8 +51,7 @@ MODULE_VERSION(DRV_MODULE_VERSION); ...@@ -51,8 +51,7 @@ MODULE_VERSION(DRV_MODULE_VERSION);
#ifndef readq #ifndef readq
static u64 readq(void __iomem *reg) static u64 readq(void __iomem *reg)
{ {
return (((u64)readl(reg + 0x4UL) << 32) | return ((u64) readl(reg)) | (((u64) readl(reg + 4UL)) << 32);
(u64)readl(reg));
} }
static void writeq(u64 val, void __iomem *reg) static void writeq(u64 val, void __iomem *reg)
......
...@@ -2050,7 +2050,9 @@ static int __init smc911x_probe(struct net_device *dev) ...@@ -2050,7 +2050,9 @@ static int __init smc911x_probe(struct net_device *dev)
*/ */
static int smc911x_drv_probe(struct platform_device *pdev) static int smc911x_drv_probe(struct platform_device *pdev)
{ {
#ifdef SMC_DYNAMIC_BUS_CONFIG
struct smc911x_platdata *pd = pdev->dev.platform_data; struct smc911x_platdata *pd = pdev->dev.platform_data;
#endif
struct net_device *ndev; struct net_device *ndev;
struct resource *res; struct resource *res;
struct smc911x_local *lp; struct smc911x_local *lp;
...@@ -2182,9 +2184,9 @@ static int smc911x_drv_resume(struct platform_device *dev) ...@@ -2182,9 +2184,9 @@ static int smc911x_drv_resume(struct platform_device *dev)
if (netif_running(ndev)) { if (netif_running(ndev)) {
smc911x_reset(ndev); smc911x_reset(ndev);
smc911x_enable(ndev);
if (lp->phy_type != 0) if (lp->phy_type != 0)
smc911x_phy_configure(&lp->phy_configure); smc911x_phy_configure(&lp->phy_configure);
smc911x_enable(ndev);
netif_device_attach(ndev); netif_device_attach(ndev);
} }
} }
......
...@@ -918,9 +918,12 @@ struct hostap_interface { ...@@ -918,9 +918,12 @@ struct hostap_interface {
/* /*
* TX meta data - stored in skb->cb buffer, so this must not be increased over * TX meta data - stored in skb->cb buffer, so this must not be increased over
* the 40-byte limit * the 48-byte limit.
* THE PADDING THIS STARTS WITH IS A HORRIBLE HACK THAT SHOULD NOT LIVE
* TO SEE THE DAY.
*/ */
struct hostap_skb_tx_data { struct hostap_skb_tx_data {
unsigned int __padding_for_default_qdiscs;
u32 magic; /* HOSTAP_SKB_TX_DATA_MAGIC */ u32 magic; /* HOSTAP_SKB_TX_DATA_MAGIC */
u8 rate; /* transmit rate */ u8 rate; /* transmit rate */
#define HOSTAP_TX_FLAGS_WDS BIT(0) #define HOSTAP_TX_FLAGS_WDS BIT(0)
......
...@@ -48,6 +48,9 @@ static struct usb_device_id rtl8187_table[] __devinitdata = { ...@@ -48,6 +48,9 @@ static struct usb_device_id rtl8187_table[] __devinitdata = {
{USB_DEVICE(0x03f0, 0xca02), .driver_info = DEVICE_RTL8187}, {USB_DEVICE(0x03f0, 0xca02), .driver_info = DEVICE_RTL8187},
/* Sitecom */ /* Sitecom */
{USB_DEVICE(0x0df6, 0x000d), .driver_info = DEVICE_RTL8187}, {USB_DEVICE(0x0df6, 0x000d), .driver_info = DEVICE_RTL8187},
{USB_DEVICE(0x0df6, 0x0028), .driver_info = DEVICE_RTL8187B},
/* Abocom */
{USB_DEVICE(0x13d1, 0xabe6), .driver_info = DEVICE_RTL8187},
{} {}
}; };
......
...@@ -226,14 +226,14 @@ int put_cmsg_compat(struct msghdr *kmsg, int level, int type, int len, void *dat ...@@ -226,14 +226,14 @@ int put_cmsg_compat(struct msghdr *kmsg, int level, int type, int len, void *dat
return 0; /* XXX: return error? check spec. */ return 0; /* XXX: return error? check spec. */
} }
if (level == SOL_SOCKET && type == SO_TIMESTAMP) { if (level == SOL_SOCKET && type == SCM_TIMESTAMP) {
struct timeval *tv = (struct timeval *)data; struct timeval *tv = (struct timeval *)data;
ctv.tv_sec = tv->tv_sec; ctv.tv_sec = tv->tv_sec;
ctv.tv_usec = tv->tv_usec; ctv.tv_usec = tv->tv_usec;
data = &ctv; data = &ctv;
len = sizeof(ctv); len = sizeof(ctv);
} }
if (level == SOL_SOCKET && type == SO_TIMESTAMPNS) { if (level == SOL_SOCKET && type == SCM_TIMESTAMPNS) {
struct timespec *ts = (struct timespec *)data; struct timespec *ts = (struct timespec *)data;
cts.tv_sec = ts->tv_sec; cts.tv_sec = ts->tv_sec;
cts.tv_nsec = ts->tv_nsec; cts.tv_nsec = ts->tv_nsec;
......
...@@ -69,9 +69,12 @@ static u32 htcp_cwnd_undo(struct sock *sk) ...@@ -69,9 +69,12 @@ static u32 htcp_cwnd_undo(struct sock *sk)
const struct tcp_sock *tp = tcp_sk(sk); const struct tcp_sock *tp = tcp_sk(sk);
struct htcp *ca = inet_csk_ca(sk); struct htcp *ca = inet_csk_ca(sk);
if (ca->undo_last_cong) {
ca->last_cong = ca->undo_last_cong; ca->last_cong = ca->undo_last_cong;
ca->maxRTT = ca->undo_maxRTT; ca->maxRTT = ca->undo_maxRTT;
ca->old_maxB = ca->undo_old_maxB; ca->old_maxB = ca->undo_old_maxB;
ca->undo_last_cong = 0;
}
return max(tp->snd_cwnd, (tp->snd_ssthresh << 7) / ca->beta); return max(tp->snd_cwnd, (tp->snd_ssthresh << 7) / ca->beta);
} }
...@@ -268,7 +271,10 @@ static void htcp_state(struct sock *sk, u8 new_state) ...@@ -268,7 +271,10 @@ static void htcp_state(struct sock *sk, u8 new_state)
case TCP_CA_Open: case TCP_CA_Open:
{ {
struct htcp *ca = inet_csk_ca(sk); struct htcp *ca = inet_csk_ca(sk);
if (ca->undo_last_cong) {
ca->last_cong = jiffies; ca->last_cong = jiffies;
ca->undo_last_cong = 0;
}
} }
break; break;
case TCP_CA_CWR: case TCP_CA_CWR:
......
...@@ -2570,14 +2570,14 @@ void ieee80211_notify_mac(struct ieee80211_hw *hw, ...@@ -2570,14 +2570,14 @@ void ieee80211_notify_mac(struct ieee80211_hw *hw,
switch (notif_type) { switch (notif_type) {
case IEEE80211_NOTIFY_RE_ASSOC: case IEEE80211_NOTIFY_RE_ASSOC:
rcu_read_lock(); rtnl_lock();
list_for_each_entry_rcu(sdata, &local->interfaces, list) { list_for_each_entry(sdata, &local->interfaces, list) {
if (sdata->vif.type != NL80211_IFTYPE_STATION) if (sdata->vif.type != NL80211_IFTYPE_STATION)
continue; continue;
ieee80211_sta_req_auth(sdata, &sdata->u.sta); ieee80211_sta_req_auth(sdata, &sdata->u.sta);
} }
rcu_read_unlock(); rtnl_unlock();
break; break;
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment