Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
This commit is contained in:
commit
c337ffb68e
|
@ -2558,18 +2558,15 @@ enslaved.
|
|||
16. Resources and Links
|
||||
=======================
|
||||
|
||||
The latest version of the bonding driver can be found in the latest
|
||||
The latest version of the bonding driver can be found in the latest
|
||||
version of the linux kernel, found on http://kernel.org
|
||||
|
||||
The latest version of this document can be found in either the latest
|
||||
kernel source (named Documentation/networking/bonding.txt), or on the
|
||||
bonding sourceforge site:
|
||||
The latest version of this document can be found in the latest kernel
|
||||
source (named Documentation/networking/bonding.txt).
|
||||
|
||||
http://www.sourceforge.net/projects/bonding
|
||||
|
||||
Discussions regarding the bonding driver take place primarily on the
|
||||
bonding-devel mailing list, hosted at sourceforge.net. If you have
|
||||
questions or problems, post them to the list. The list address is:
|
||||
Discussions regarding the usage of the bonding driver take place on the
|
||||
bonding-devel mailing list, hosted at sourceforge.net. If you have questions or
|
||||
problems, post them to the list. The list address is:
|
||||
|
||||
bonding-devel@lists.sourceforge.net
|
||||
|
||||
|
@ -2578,6 +2575,17 @@ be found at:
|
|||
|
||||
https://lists.sourceforge.net/lists/listinfo/bonding-devel
|
||||
|
||||
Discussions regarding the developpement of the bonding driver take place
|
||||
on the main Linux network mailing list, hosted at vger.kernel.org. The list
|
||||
address is:
|
||||
|
||||
netdev@vger.kernel.org
|
||||
|
||||
The administrative interface (to subscribe or unsubscribe) can
|
||||
be found at:
|
||||
|
||||
http://vger.kernel.org/vger-lists.html#netdev
|
||||
|
||||
Donald Becker's Ethernet Drivers and diag programs may be found at :
|
||||
- http://web.archive.org/web/*/http://www.scyld.com/network/
|
||||
|
||||
|
|
|
@ -425,11 +425,6 @@ static irqreturn_t ariadne_interrupt(int irq, void *data)
|
|||
int csr0, boguscnt;
|
||||
int handled = 0;
|
||||
|
||||
if (dev == NULL) {
|
||||
printk(KERN_WARNING "ariadne_interrupt(): irq for unknown device.\n");
|
||||
return IRQ_NONE;
|
||||
}
|
||||
|
||||
lance->RAP = CSR0; /* PCnet-ISA Controller Status */
|
||||
|
||||
if (!(lance->RDP & INTR)) /* Check if any interrupt has been */
|
||||
|
|
|
@ -4229,7 +4229,7 @@ void bnx2x_update_coalesce(struct bnx2x *bp)
|
|||
|
||||
for_each_eth_queue(bp, i)
|
||||
bnx2x_update_coalesce_sb(bp, bp->fp[i].fw_sb_id,
|
||||
bp->rx_ticks, bp->tx_ticks);
|
||||
bp->tx_ticks, bp->rx_ticks);
|
||||
}
|
||||
|
||||
static void bnx2x_init_sp_ring(struct bnx2x *bp)
|
||||
|
|
|
@ -659,7 +659,7 @@ failed:
|
|||
static void unlink_all_urbs(struct esd_usb2 *dev)
|
||||
{
|
||||
struct esd_usb2_net_priv *priv;
|
||||
int i;
|
||||
int i, j;
|
||||
|
||||
usb_kill_anchored_urbs(&dev->rx_submitted);
|
||||
for (i = 0; i < dev->net_count; i++) {
|
||||
|
@ -668,8 +668,8 @@ static void unlink_all_urbs(struct esd_usb2 *dev)
|
|||
usb_kill_anchored_urbs(&priv->tx_submitted);
|
||||
atomic_set(&priv->active_tx_jobs, 0);
|
||||
|
||||
for (i = 0; i < MAX_TX_URBS; i++)
|
||||
priv->tx_contexts[i].echo_index = MAX_TX_URBS;
|
||||
for (j = 0; j < MAX_TX_URBS; j++)
|
||||
priv->tx_contexts[j].echo_index = MAX_TX_URBS;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1730,7 +1730,7 @@ static struct net_device_stats *emac_dev_getnetstats(struct net_device *ndev)
|
|||
emac_read(EMAC_TXCARRIERSENSE);
|
||||
emac_write(EMAC_TXCARRIERSENSE, stats_clear_mask);
|
||||
|
||||
ndev->stats.tx_fifo_errors = emac_read(EMAC_TXUNDERRUN);
|
||||
ndev->stats.tx_fifo_errors += emac_read(EMAC_TXUNDERRUN);
|
||||
emac_write(EMAC_TXUNDERRUN, stats_clear_mask);
|
||||
|
||||
return &ndev->stats;
|
||||
|
|
|
@ -219,9 +219,11 @@ static int macvlan_queue_xmit(struct sk_buff *skb, struct net_device *dev)
|
|||
const struct macvlan_dev *vlan = netdev_priv(dev);
|
||||
const struct macvlan_port *port = vlan->port;
|
||||
const struct macvlan_dev *dest;
|
||||
__u8 ip_summed = skb->ip_summed;
|
||||
|
||||
if (vlan->mode == MACVLAN_MODE_BRIDGE) {
|
||||
const struct ethhdr *eth = (void *)skb->data;
|
||||
skb->ip_summed = CHECKSUM_UNNECESSARY;
|
||||
|
||||
/* send to other bridge ports directly */
|
||||
if (is_multicast_ether_addr(eth->h_dest)) {
|
||||
|
@ -241,6 +243,7 @@ static int macvlan_queue_xmit(struct sk_buff *skb, struct net_device *dev)
|
|||
}
|
||||
|
||||
xmit_world:
|
||||
skb->ip_summed = ip_summed;
|
||||
skb_set_dev(skb, vlan->lowerdev);
|
||||
return dev_queue_xmit(skb);
|
||||
}
|
||||
|
|
|
@ -791,8 +791,8 @@ static int smsc911x_mii_probe(struct net_device *dev)
|
|||
return -ENODEV;
|
||||
}
|
||||
|
||||
SMSC_TRACE(PROBE, "PHY %d: addr %d, phy_id 0x%08X",
|
||||
phy_addr, phydev->addr, phydev->phy_id);
|
||||
SMSC_TRACE(PROBE, "PHY: addr %d, phy_id 0x%08X",
|
||||
phydev->addr, phydev->phy_id);
|
||||
|
||||
ret = phy_connect_direct(dev, phydev,
|
||||
&smsc911x_phy_adjust_link, 0,
|
||||
|
|
|
@ -328,13 +328,13 @@ int usbpn_probe(struct usb_interface *intf, const struct usb_device_id *id)
|
|||
{
|
||||
static const char ifname[] = "usbpn%d";
|
||||
const struct usb_cdc_union_desc *union_header = NULL;
|
||||
const struct usb_cdc_header_desc *phonet_header = NULL;
|
||||
const struct usb_host_interface *data_desc;
|
||||
struct usb_interface *data_intf;
|
||||
struct usb_device *usbdev = interface_to_usbdev(intf);
|
||||
struct net_device *dev;
|
||||
struct usbpn_dev *pnd;
|
||||
u8 *data;
|
||||
int phonet = 0;
|
||||
int len, err;
|
||||
|
||||
data = intf->altsetting->extra;
|
||||
|
@ -355,10 +355,7 @@ int usbpn_probe(struct usb_interface *intf, const struct usb_device_id *id)
|
|||
(struct usb_cdc_union_desc *)data;
|
||||
break;
|
||||
case 0xAB:
|
||||
if (phonet_header || dlen < 5)
|
||||
break;
|
||||
phonet_header =
|
||||
(struct usb_cdc_header_desc *)data;
|
||||
phonet = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -366,7 +363,7 @@ int usbpn_probe(struct usb_interface *intf, const struct usb_device_id *id)
|
|||
len -= dlen;
|
||||
}
|
||||
|
||||
if (!union_header || !phonet_header)
|
||||
if (!union_header || !phonet)
|
||||
return -EINVAL;
|
||||
|
||||
data_intf = usb_ifnum_to_if(usbdev, union_header->bSlaveInterface0);
|
||||
|
@ -392,7 +389,6 @@ int usbpn_probe(struct usb_interface *intf, const struct usb_device_id *id)
|
|||
|
||||
pnd = netdev_priv(dev);
|
||||
SET_NETDEV_DEV(dev, &intf->dev);
|
||||
netif_stop_queue(dev);
|
||||
|
||||
pnd->dev = dev;
|
||||
pnd->usb = usb_get_dev(usbdev);
|
||||
|
|
|
@ -122,7 +122,7 @@ struct netfront_info {
|
|||
struct mmu_update rx_mmu[NET_RX_RING_SIZE];
|
||||
|
||||
/* Statistics */
|
||||
int rx_gso_checksum_fixup;
|
||||
unsigned long rx_gso_checksum_fixup;
|
||||
};
|
||||
|
||||
struct netfront_rx_info {
|
||||
|
@ -1692,7 +1692,7 @@ static void xennet_get_ethtool_stats(struct net_device *dev,
|
|||
int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(xennet_stats); i++)
|
||||
data[i] = *(int *)(np + xennet_stats[i].offset);
|
||||
data[i] = *(unsigned long *)(np + xennet_stats[i].offset);
|
||||
}
|
||||
|
||||
static void xennet_get_strings(struct net_device *dev, u32 stringset, u8 * data)
|
||||
|
|
|
@ -375,12 +375,12 @@ static void br_make_forwarding(struct net_bridge_port *p)
|
|||
if (p->state != BR_STATE_BLOCKING)
|
||||
return;
|
||||
|
||||
if (br->forward_delay == 0) {
|
||||
if (br->stp_enabled == BR_NO_STP || br->forward_delay == 0) {
|
||||
p->state = BR_STATE_FORWARDING;
|
||||
br_topology_change_detection(br);
|
||||
del_timer(&p->forward_delay_timer);
|
||||
}
|
||||
else if (p->br->stp_enabled == BR_KERNEL_STP)
|
||||
else if (br->stp_enabled == BR_KERNEL_STP)
|
||||
p->state = BR_STATE_LISTENING;
|
||||
else
|
||||
p->state = BR_STATE_LEARNING;
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
|
||||
/* Number of delay samples for detecting the increase of delay */
|
||||
#define HYSTART_MIN_SAMPLES 8
|
||||
#define HYSTART_DELAY_MIN (2U<<3)
|
||||
#define HYSTART_DELAY_MIN (4U<<3)
|
||||
#define HYSTART_DELAY_MAX (16U<<3)
|
||||
#define HYSTART_DELAY_THRESH(x) clamp(x, HYSTART_DELAY_MIN, HYSTART_DELAY_MAX)
|
||||
|
||||
|
@ -52,6 +52,7 @@ static int tcp_friendliness __read_mostly = 1;
|
|||
static int hystart __read_mostly = 1;
|
||||
static int hystart_detect __read_mostly = HYSTART_ACK_TRAIN | HYSTART_DELAY;
|
||||
static int hystart_low_window __read_mostly = 16;
|
||||
static int hystart_ack_delta __read_mostly = 2;
|
||||
|
||||
static u32 cube_rtt_scale __read_mostly;
|
||||
static u32 beta_scale __read_mostly;
|
||||
|
@ -75,6 +76,8 @@ MODULE_PARM_DESC(hystart_detect, "hyrbrid slow start detection mechanisms"
|
|||
" 1: packet-train 2: delay 3: both packet-train and delay");
|
||||
module_param(hystart_low_window, int, 0644);
|
||||
MODULE_PARM_DESC(hystart_low_window, "lower bound cwnd for hybrid slow start");
|
||||
module_param(hystart_ack_delta, int, 0644);
|
||||
MODULE_PARM_DESC(hystart_ack_delta, "spacing between ack's indicating train (msecs)");
|
||||
|
||||
/* BIC TCP Parameters */
|
||||
struct bictcp {
|
||||
|
@ -85,7 +88,7 @@ struct bictcp {
|
|||
u32 last_time; /* time when updated last_cwnd */
|
||||
u32 bic_origin_point;/* origin point of bic function */
|
||||
u32 bic_K; /* time to origin point from the beginning of the current epoch */
|
||||
u32 delay_min; /* min delay */
|
||||
u32 delay_min; /* min delay (msec << 3) */
|
||||
u32 epoch_start; /* beginning of an epoch */
|
||||
u32 ack_cnt; /* number of acks */
|
||||
u32 tcp_cwnd; /* estimated tcp cwnd */
|
||||
|
@ -95,7 +98,7 @@ struct bictcp {
|
|||
u8 found; /* the exit point is found? */
|
||||
u32 round_start; /* beginning of each round */
|
||||
u32 end_seq; /* end_seq of the round */
|
||||
u32 last_jiffies; /* last time when the ACK spacing is close */
|
||||
u32 last_ack; /* last time when the ACK spacing is close */
|
||||
u32 curr_rtt; /* the minimum rtt of current round */
|
||||
};
|
||||
|
||||
|
@ -116,12 +119,21 @@ static inline void bictcp_reset(struct bictcp *ca)
|
|||
ca->found = 0;
|
||||
}
|
||||
|
||||
static inline u32 bictcp_clock(void)
|
||||
{
|
||||
#if HZ < 1000
|
||||
return ktime_to_ms(ktime_get_real());
|
||||
#else
|
||||
return jiffies_to_msecs(jiffies);
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline void bictcp_hystart_reset(struct sock *sk)
|
||||
{
|
||||
struct tcp_sock *tp = tcp_sk(sk);
|
||||
struct bictcp *ca = inet_csk_ca(sk);
|
||||
|
||||
ca->round_start = ca->last_jiffies = jiffies;
|
||||
ca->round_start = ca->last_ack = bictcp_clock();
|
||||
ca->end_seq = tp->snd_nxt;
|
||||
ca->curr_rtt = 0;
|
||||
ca->sample_cnt = 0;
|
||||
|
@ -236,8 +248,8 @@ static inline void bictcp_update(struct bictcp *ca, u32 cwnd)
|
|||
*/
|
||||
|
||||
/* change the unit from HZ to bictcp_HZ */
|
||||
t = ((tcp_time_stamp + (ca->delay_min>>3) - ca->epoch_start)
|
||||
<< BICTCP_HZ) / HZ;
|
||||
t = ((tcp_time_stamp + msecs_to_jiffies(ca->delay_min>>3)
|
||||
- ca->epoch_start) << BICTCP_HZ) / HZ;
|
||||
|
||||
if (t < ca->bic_K) /* t - K */
|
||||
offs = ca->bic_K - t;
|
||||
|
@ -258,6 +270,13 @@ static inline void bictcp_update(struct bictcp *ca, u32 cwnd)
|
|||
ca->cnt = 100 * cwnd; /* very small increment*/
|
||||
}
|
||||
|
||||
/*
|
||||
* The initial growth of cubic function may be too conservative
|
||||
* when the available bandwidth is still unknown.
|
||||
*/
|
||||
if (ca->loss_cwnd == 0 && ca->cnt > 20)
|
||||
ca->cnt = 20; /* increase cwnd 5% per RTT */
|
||||
|
||||
/* TCP Friendly */
|
||||
if (tcp_friendliness) {
|
||||
u32 scale = beta_scale;
|
||||
|
@ -339,12 +358,12 @@ static void hystart_update(struct sock *sk, u32 delay)
|
|||
struct bictcp *ca = inet_csk_ca(sk);
|
||||
|
||||
if (!(ca->found & hystart_detect)) {
|
||||
u32 curr_jiffies = jiffies;
|
||||
u32 now = bictcp_clock();
|
||||
|
||||
/* first detection parameter - ack-train detection */
|
||||
if (curr_jiffies - ca->last_jiffies <= msecs_to_jiffies(2)) {
|
||||
ca->last_jiffies = curr_jiffies;
|
||||
if (curr_jiffies - ca->round_start >= ca->delay_min>>4)
|
||||
if ((s32)(now - ca->last_ack) <= hystart_ack_delta) {
|
||||
ca->last_ack = now;
|
||||
if ((s32)(now - ca->round_start) > ca->delay_min >> 4)
|
||||
ca->found |= HYSTART_ACK_TRAIN;
|
||||
}
|
||||
|
||||
|
@ -391,7 +410,7 @@ static void bictcp_acked(struct sock *sk, u32 cnt, s32 rtt_us)
|
|||
if ((s32)(tcp_time_stamp - ca->epoch_start) < HZ)
|
||||
return;
|
||||
|
||||
delay = usecs_to_jiffies(rtt_us) << 3;
|
||||
delay = (rtt_us << 3) / USEC_PER_MSEC;
|
||||
if (delay == 0)
|
||||
delay = 1;
|
||||
|
||||
|
@ -447,6 +466,10 @@ static int __init cubictcp_register(void)
|
|||
/* divide by bic_scale and by constant Srtt (100ms) */
|
||||
do_div(cube_factor, bic_scale * 10);
|
||||
|
||||
/* hystart needs ms clock resolution */
|
||||
if (hystart && HZ < 1000)
|
||||
cubictcp.flags |= TCP_CONG_RTT_STAMP;
|
||||
|
||||
return tcp_register_congestion_control(&cubictcp);
|
||||
}
|
||||
|
||||
|
|
|
@ -3350,7 +3350,7 @@ static int tcp_clean_rtx_queue(struct sock *sk, int prior_fackets,
|
|||
net_invalid_timestamp()))
|
||||
rtt_us = ktime_us_delta(ktime_get_real(),
|
||||
last_ackt);
|
||||
else if (ca_seq_rtt > 0)
|
||||
else if (ca_seq_rtt >= 0)
|
||||
rtt_us = jiffies_to_usecs(ca_seq_rtt);
|
||||
}
|
||||
|
||||
|
|
|
@ -1124,7 +1124,7 @@ restart:
|
|||
|
||||
/* Latch our state.
|
||||
|
||||
It is tricky place. We need to grab write lock and cannot
|
||||
It is tricky place. We need to grab our state lock and cannot
|
||||
drop lock on peer. It is dangerous because deadlock is
|
||||
possible. Connect to self case and simultaneous
|
||||
attempt to connect are eliminated by checking socket
|
||||
|
|
Loading…
Reference in New Issue