Updated from Linux LTS 3.10.22 to 3.10.23
This commit is contained in:
@@ -537,8 +537,9 @@ static ssize_t bonding_store_arp_interval(struct device *d,
|
||||
goto out;
|
||||
}
|
||||
if (bond->params.mode == BOND_MODE_ALB ||
|
||||
bond->params.mode == BOND_MODE_TLB) {
|
||||
pr_info("%s: ARP monitoring cannot be used with ALB/TLB. Only MII monitoring is supported on %s.\n",
|
||||
bond->params.mode == BOND_MODE_TLB ||
|
||||
bond->params.mode == BOND_MODE_8023AD) {
|
||||
pr_info("%s: ARP monitoring cannot be used with ALB/TLB/802.3ad. Only MII monitoring is supported on %s.\n",
|
||||
bond->dev->name, bond->dev->name);
|
||||
ret = -EINVAL;
|
||||
goto out;
|
||||
@@ -696,6 +697,8 @@ static ssize_t bonding_store_downdelay(struct device *d,
|
||||
int new_value, ret = count;
|
||||
struct bonding *bond = to_bond(d);
|
||||
|
||||
if (!rtnl_trylock())
|
||||
return restart_syscall();
|
||||
if (!(bond->params.miimon)) {
|
||||
pr_err("%s: Unable to set down delay as MII monitoring is disabled\n",
|
||||
bond->dev->name);
|
||||
@@ -729,6 +732,7 @@ static ssize_t bonding_store_downdelay(struct device *d,
|
||||
}
|
||||
|
||||
out:
|
||||
rtnl_unlock();
|
||||
return ret;
|
||||
}
|
||||
static DEVICE_ATTR(downdelay, S_IRUGO | S_IWUSR,
|
||||
@@ -751,6 +755,8 @@ static ssize_t bonding_store_updelay(struct device *d,
|
||||
int new_value, ret = count;
|
||||
struct bonding *bond = to_bond(d);
|
||||
|
||||
if (!rtnl_trylock())
|
||||
return restart_syscall();
|
||||
if (!(bond->params.miimon)) {
|
||||
pr_err("%s: Unable to set up delay as MII monitoring is disabled\n",
|
||||
bond->dev->name);
|
||||
@@ -784,6 +790,7 @@ static ssize_t bonding_store_updelay(struct device *d,
|
||||
}
|
||||
|
||||
out:
|
||||
rtnl_unlock();
|
||||
return ret;
|
||||
}
|
||||
static DEVICE_ATTR(updelay, S_IRUGO | S_IWUSR,
|
||||
|
||||
@@ -264,6 +264,10 @@ static void *mlx4_en_add(struct mlx4_dev *dev)
|
||||
mlx4_foreach_port(i, dev, MLX4_PORT_TYPE_ETH)
|
||||
mdev->port_cnt++;
|
||||
|
||||
/* Initialize time stamp mechanism */
|
||||
if (mdev->dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_TS)
|
||||
mlx4_en_init_timestamp(mdev);
|
||||
|
||||
mlx4_foreach_port(i, dev, MLX4_PORT_TYPE_ETH) {
|
||||
if (!dev->caps.comp_pool) {
|
||||
mdev->profile.prof[i].rx_ring_num =
|
||||
@@ -301,10 +305,6 @@ static void *mlx4_en_add(struct mlx4_dev *dev)
|
||||
mdev->pndev[i] = NULL;
|
||||
}
|
||||
|
||||
/* Initialize time stamp mechanism */
|
||||
if (mdev->dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_TS)
|
||||
mlx4_en_init_timestamp(mdev);
|
||||
|
||||
return mdev;
|
||||
|
||||
err_mr:
|
||||
|
||||
@@ -678,9 +678,6 @@ static void cp_tx (struct cp_private *cp)
|
||||
le32_to_cpu(txd->opts1) & 0xffff,
|
||||
PCI_DMA_TODEVICE);
|
||||
|
||||
bytes_compl += skb->len;
|
||||
pkts_compl++;
|
||||
|
||||
if (status & LastFrag) {
|
||||
if (status & (TxError | TxFIFOUnder)) {
|
||||
netif_dbg(cp, tx_err, cp->dev,
|
||||
@@ -702,6 +699,8 @@ static void cp_tx (struct cp_private *cp)
|
||||
netif_dbg(cp, tx_done, cp->dev,
|
||||
"tx done, slot %d\n", tx_tail);
|
||||
}
|
||||
bytes_compl += skb->len;
|
||||
pkts_compl++;
|
||||
dev_kfree_skb_irq(skb);
|
||||
}
|
||||
|
||||
|
||||
@@ -3461,6 +3461,11 @@ static void rtl8168g_1_hw_phy_config(struct rtl8169_private *tp)
|
||||
rtl_writephy(tp, 0x14, 0x9065);
|
||||
rtl_writephy(tp, 0x14, 0x1065);
|
||||
|
||||
/* Check ALDPS bit, disable it if enabled */
|
||||
rtl_writephy(tp, 0x1f, 0x0a43);
|
||||
if (rtl_readphy(tp, 0x10) & 0x0004)
|
||||
rtl_w1w0_phy(tp, 0x10, 0x0000, 0x0004);
|
||||
|
||||
rtl_writephy(tp, 0x1f, 0x0000);
|
||||
}
|
||||
|
||||
|
||||
@@ -661,6 +661,7 @@ static ssize_t macvtap_get_user(struct macvtap_queue *q, struct msghdr *m,
|
||||
const struct iovec *iv, unsigned long total_len,
|
||||
size_t count, int noblock)
|
||||
{
|
||||
int good_linear = SKB_MAX_HEAD(NET_IP_ALIGN);
|
||||
struct sk_buff *skb;
|
||||
struct macvlan_dev *vlan;
|
||||
unsigned long len = total_len;
|
||||
@@ -703,6 +704,8 @@ static ssize_t macvtap_get_user(struct macvtap_queue *q, struct msghdr *m,
|
||||
|
||||
if (m && m->msg_control && sock_flag(&q->sk, SOCK_ZEROCOPY)) {
|
||||
copylen = vnet_hdr.hdr_len ? vnet_hdr.hdr_len : GOODCOPY_LEN;
|
||||
if (copylen > good_linear)
|
||||
copylen = good_linear;
|
||||
linear = copylen;
|
||||
if (iov_pages(iv, vnet_hdr_len + copylen, count)
|
||||
<= MAX_SKB_FRAGS)
|
||||
@@ -711,7 +714,10 @@ static ssize_t macvtap_get_user(struct macvtap_queue *q, struct msghdr *m,
|
||||
|
||||
if (!zerocopy) {
|
||||
copylen = len;
|
||||
linear = vnet_hdr.hdr_len;
|
||||
if (vnet_hdr.hdr_len > good_linear)
|
||||
linear = good_linear;
|
||||
else
|
||||
linear = vnet_hdr.hdr_len;
|
||||
}
|
||||
|
||||
skb = macvtap_alloc_skb(&q->sk, NET_IP_ALIGN, copylen,
|
||||
|
||||
@@ -1217,6 +1217,8 @@ static int team_user_linkup_option_get(struct team *team,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void __team_carrier_check(struct team *team);
|
||||
|
||||
static int team_user_linkup_option_set(struct team *team,
|
||||
struct team_gsetter_ctx *ctx)
|
||||
{
|
||||
@@ -1224,6 +1226,7 @@ static int team_user_linkup_option_set(struct team *team,
|
||||
|
||||
port->user.linkup = ctx->data.bool_val;
|
||||
team_refresh_port_linkup(port);
|
||||
__team_carrier_check(port->team);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1243,6 +1246,7 @@ static int team_user_linkup_en_option_set(struct team *team,
|
||||
|
||||
port->user.linkup_enabled = ctx->data.bool_val;
|
||||
team_refresh_port_linkup(port);
|
||||
__team_carrier_check(port->team);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -1069,6 +1069,7 @@ static ssize_t tun_get_user(struct tun_struct *tun, struct tun_file *tfile,
|
||||
struct sk_buff *skb;
|
||||
size_t len = total_len, align = NET_SKB_PAD, linear;
|
||||
struct virtio_net_hdr gso = { 0 };
|
||||
int good_linear;
|
||||
int offset = 0;
|
||||
int copylen;
|
||||
bool zerocopy = false;
|
||||
@@ -1109,12 +1110,16 @@ static ssize_t tun_get_user(struct tun_struct *tun, struct tun_file *tfile,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
good_linear = SKB_MAX_HEAD(align);
|
||||
|
||||
if (msg_control) {
|
||||
/* There are 256 bytes to be copied in skb, so there is
|
||||
* enough room for skb expand head in case it is used.
|
||||
* The rest of the buffer is mapped from userspace.
|
||||
*/
|
||||
copylen = gso.hdr_len ? gso.hdr_len : GOODCOPY_LEN;
|
||||
if (copylen > good_linear)
|
||||
copylen = good_linear;
|
||||
linear = copylen;
|
||||
if (iov_pages(iv, offset + copylen, count) <= MAX_SKB_FRAGS)
|
||||
zerocopy = true;
|
||||
@@ -1122,7 +1127,10 @@ static ssize_t tun_get_user(struct tun_struct *tun, struct tun_file *tfile,
|
||||
|
||||
if (!zerocopy) {
|
||||
copylen = len;
|
||||
linear = gso.hdr_len;
|
||||
if (gso.hdr_len > good_linear)
|
||||
linear = good_linear;
|
||||
else
|
||||
linear = gso.hdr_len;
|
||||
}
|
||||
|
||||
skb = tun_alloc_skb(tfile, align, copylen, linear, noblock);
|
||||
|
||||
@@ -203,9 +203,6 @@ static void intr_complete (struct urb *urb)
|
||||
break;
|
||||
}
|
||||
|
||||
if (!netif_running (dev->net))
|
||||
return;
|
||||
|
||||
status = usb_submit_urb (urb, GFP_ATOMIC);
|
||||
if (status != 0)
|
||||
netif_err(dev, timer, dev->net,
|
||||
|
||||
Reference in New Issue
Block a user