Skip to content

Commit cae61ba

Browse files
committed
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Pull networking fixes from David Miller: 1) Unbreak zebra and other netlink apps, from Eric W Biederman. 2) Some new qmi_wwan device IDs, from Aleksander Morgado. 3) Fix info leak in DCB netlink handler of qlcnic driver, from Dan Carpenter. 4) inet_getid() and ipv6_select_ident() do not generate monotonically increasing ID numbers, fix from Eric Dumazet. 5) Fix memory leak in __sk_prepare_filter(), from Leon Yu. 6) Netlink leftover bytes warning message is user triggerable, rate limit it. From Michal Schmidt. 7) Fix non-linear SKB panic in ipvs, from Peter Christensen. 8) Congestion window undo needs to be performed even if only never retransmitted data is SACK'd, fix from Yuching Cheng. * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (24 commits) net: filter: fix possible memory leak in __sk_prepare_filter() net: ec_bhf: Add runtime dependencies tcp: fix cwnd undo on DSACK in F-RTO netlink: Only check file credentials for implicit destinations ipheth: Add support for iPad 2 and iPad 3 team: fix mtu setting net: fix inet_getid() and ipv6_select_ident() bugs net: qmi_wwan: interface #11 in Sierra Wireless MC73xx is not QMI net: qmi_wwan: add additional Sierra Wireless QMI devices bridge: Prevent insertion of FDB entry with disallowed vlan netlink: rate-limit leftover bytes warning and print process name bridge: notify user space after fdb update net: qmi_wwan: add Netgear AirCard 341U net: fix wrong mac_len calculation for vlans batman-adv: fix NULL pointer dereferences net/mlx4_core: Reset RoCE VF gids when guest driver goes down emac: aggregation of v1-2 PLB errors for IER register emac: add missing support of 10mbit in emac/rgmii can: only rename enabled led triggers when changing the netdev name ipvs: Fix panic due to non-linear skb ...
2 parents ca75517 + 418c96a commit cae61ba

File tree

31 files changed

+279
-87
lines changed

31 files changed

+279
-87
lines changed

MAINTAINERS

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3153,10 +3153,9 @@ S: Maintained
31533153
F: drivers/scsi/eata_pio.*
31543154

31553155
EBTABLES
3156-
M: Bart De Schuymer <[email protected]>
31573156
31583157
W: http://ebtables.sourceforge.net/
3159-
S: Maintained
3158+
S: Orphan
31603159
F: include/linux/netfilter_bridge/ebt_*.h
31613160
F: include/uapi/linux/netfilter_bridge/ebt_*.h
31623161
F: net/bridge/netfilter/ebt*.c

drivers/net/can/led.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,9 @@ static int can_led_notifier(struct notifier_block *nb, unsigned long msg,
9797
if (!priv)
9898
return NOTIFY_DONE;
9999

100+
if (!priv->tx_led_trig || !priv->rx_led_trig)
101+
return NOTIFY_DONE;
102+
100103
if (msg == NETDEV_CHANGENAME) {
101104
snprintf(name, sizeof(name), "%s-tx", netdev->name);
102105
led_trigger_rename_static(name, priv->tx_led_trig);

drivers/net/ethernet/Kconfig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ source "drivers/net/ethernet/cisco/Kconfig"
3939
config CX_ECAT
4040
tristate "Beckhoff CX5020 EtherCAT master support"
4141
depends on PCI
42+
depends on X86 || COMPILE_TEST
4243
---help---
4344
Driver for EtherCAT master module located on CCAT FPGA
4445
that can be found on Beckhoff CX5020, and possibly other of CX

drivers/net/ethernet/ibm/emac/mal.c

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -682,10 +682,7 @@ static int mal_probe(struct platform_device *ofdev)
682682
goto fail6;
683683

684684
/* Enable all MAL SERR interrupt sources */
685-
if (mal->version == 2)
686-
set_mal_dcrn(mal, MAL_IER, MAL2_IER_EVENTS);
687-
else
688-
set_mal_dcrn(mal, MAL_IER, MAL1_IER_EVENTS);
685+
set_mal_dcrn(mal, MAL_IER, MAL_IER_EVENTS);
689686

690687
/* Enable EOB interrupt */
691688
mal_enable_eob_irq(mal);

drivers/net/ethernet/ibm/emac/mal.h

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -95,24 +95,20 @@
9595

9696

9797
#define MAL_IER 0x02
98+
/* MAL IER bits */
9899
#define MAL_IER_DE 0x00000010
99100
#define MAL_IER_OTE 0x00000004
100101
#define MAL_IER_OE 0x00000002
101102
#define MAL_IER_PE 0x00000001
102-
/* MAL V1 IER bits */
103-
#define MAL1_IER_NWE 0x00000008
104-
#define MAL1_IER_SOC_EVENTS MAL1_IER_NWE
105-
#define MAL1_IER_EVENTS (MAL1_IER_SOC_EVENTS | MAL_IER_DE | \
106-
MAL_IER_OTE | MAL_IER_OE | MAL_IER_PE)
107103

108-
/* MAL V2 IER bits */
109-
#define MAL2_IER_PT 0x00000080
110-
#define MAL2_IER_PRE 0x00000040
111-
#define MAL2_IER_PWE 0x00000020
112-
#define MAL2_IER_SOC_EVENTS (MAL2_IER_PT | MAL2_IER_PRE | MAL2_IER_PWE)
113-
#define MAL2_IER_EVENTS (MAL2_IER_SOC_EVENTS | MAL_IER_DE | \
114-
MAL_IER_OTE | MAL_IER_OE | MAL_IER_PE)
104+
/* PLB read/write/timeout errors */
105+
#define MAL_IER_PTE 0x00000080
106+
#define MAL_IER_PRE 0x00000040
107+
#define MAL_IER_PWE 0x00000020
115108

109+
#define MAL_IER_SOC_EVENTS (MAL_IER_PTE | MAL_IER_PRE | MAL_IER_PWE)
110+
#define MAL_IER_EVENTS (MAL_IER_SOC_EVENTS | MAL_IER_DE | \
111+
MAL_IER_OTE | MAL_IER_OE | MAL_IER_PE)
116112

117113
#define MAL_TXCASR 0x04
118114
#define MAL_TXCARR 0x05

drivers/net/ethernet/ibm/emac/rgmii.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545

4646
/* RGMIIx_SSR */
4747
#define RGMII_SSR_MASK(idx) (0x7 << ((idx) * 8))
48+
#define RGMII_SSR_10(idx) (0x1 << ((idx) * 8))
4849
#define RGMII_SSR_100(idx) (0x2 << ((idx) * 8))
4950
#define RGMII_SSR_1000(idx) (0x4 << ((idx) * 8))
5051

@@ -139,6 +140,8 @@ void rgmii_set_speed(struct platform_device *ofdev, int input, int speed)
139140
ssr |= RGMII_SSR_1000(input);
140141
else if (speed == SPEED_100)
141142
ssr |= RGMII_SSR_100(input);
143+
else if (speed == SPEED_10)
144+
ssr |= RGMII_SSR_10(input);
142145

143146
out_be32(&p->ssr, ssr);
144147

drivers/net/ethernet/mellanox/mlx4/main.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2044,6 +2044,7 @@ static int mlx4_init_port_info(struct mlx4_dev *dev, int port)
20442044
if (!mlx4_is_slave(dev)) {
20452045
mlx4_init_mac_table(dev, &info->mac_table);
20462046
mlx4_init_vlan_table(dev, &info->vlan_table);
2047+
mlx4_init_roce_gid_table(dev, &info->gid_table);
20472048
info->base_qpn = mlx4_get_base_qpn(dev, port);
20482049
}
20492050

drivers/net/ethernet/mellanox/mlx4/mlx4.h

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -695,6 +695,17 @@ struct mlx4_mac_table {
695695
int max;
696696
};
697697

698+
#define MLX4_ROCE_GID_ENTRY_SIZE 16
699+
700+
struct mlx4_roce_gid_entry {
701+
u8 raw[MLX4_ROCE_GID_ENTRY_SIZE];
702+
};
703+
704+
struct mlx4_roce_gid_table {
705+
struct mlx4_roce_gid_entry roce_gids[MLX4_ROCE_MAX_GIDS];
706+
struct mutex mutex;
707+
};
708+
698709
#define MLX4_MAX_VLAN_NUM 128
699710
#define MLX4_VLAN_TABLE_SIZE (MLX4_MAX_VLAN_NUM << 2)
700711

@@ -758,6 +769,7 @@ struct mlx4_port_info {
758769
struct device_attribute port_mtu_attr;
759770
struct mlx4_mac_table mac_table;
760771
struct mlx4_vlan_table vlan_table;
772+
struct mlx4_roce_gid_table gid_table;
761773
int base_qpn;
762774
};
763775

@@ -788,10 +800,6 @@ enum {
788800
MLX4_USE_RR = 1,
789801
};
790802

791-
struct mlx4_roce_gid_entry {
792-
u8 raw[16];
793-
};
794-
795803
struct mlx4_priv {
796804
struct mlx4_dev dev;
797805

@@ -839,7 +847,6 @@ struct mlx4_priv {
839847
int fs_hash_mode;
840848
u8 virt2phys_pkey[MLX4_MFUNC_MAX][MLX4_MAX_PORTS][MLX4_MAX_PORT_PKEYS];
841849
__be64 slave_node_guids[MLX4_MFUNC_MAX];
842-
struct mlx4_roce_gid_entry roce_gids[MLX4_MAX_PORTS][MLX4_ROCE_MAX_GIDS];
843850

844851
atomic_t opreq_count;
845852
struct work_struct opreq_task;
@@ -1140,6 +1147,8 @@ int mlx4_change_port_types(struct mlx4_dev *dev,
11401147

11411148
void mlx4_init_mac_table(struct mlx4_dev *dev, struct mlx4_mac_table *table);
11421149
void mlx4_init_vlan_table(struct mlx4_dev *dev, struct mlx4_vlan_table *table);
1150+
void mlx4_init_roce_gid_table(struct mlx4_dev *dev,
1151+
struct mlx4_roce_gid_table *table);
11431152
void __mlx4_unregister_vlan(struct mlx4_dev *dev, u8 port, u16 vlan);
11441153
int __mlx4_register_vlan(struct mlx4_dev *dev, u8 port, u16 vlan, int *index);
11451154

@@ -1149,6 +1158,7 @@ int mlx4_get_slave_from_resource_id(struct mlx4_dev *dev,
11491158
enum mlx4_resource resource_type,
11501159
u64 resource_id, int *slave);
11511160
void mlx4_delete_all_resources_for_slave(struct mlx4_dev *dev, int slave_id);
1161+
void mlx4_reset_roce_gids(struct mlx4_dev *dev, int slave);
11521162
int mlx4_init_resource_tracker(struct mlx4_dev *dev);
11531163

11541164
void mlx4_free_resource_tracker(struct mlx4_dev *dev,

drivers/net/ethernet/mellanox/mlx4/port.c

Lines changed: 109 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,16 @@ void mlx4_init_vlan_table(struct mlx4_dev *dev, struct mlx4_vlan_table *table)
7575
table->total = 0;
7676
}
7777

78+
void mlx4_init_roce_gid_table(struct mlx4_dev *dev,
79+
struct mlx4_roce_gid_table *table)
80+
{
81+
int i;
82+
83+
mutex_init(&table->mutex);
84+
for (i = 0; i < MLX4_ROCE_MAX_GIDS; i++)
85+
memset(table->roce_gids[i].raw, 0, MLX4_ROCE_GID_ENTRY_SIZE);
86+
}
87+
7888
static int validate_index(struct mlx4_dev *dev,
7989
struct mlx4_mac_table *table, int index)
8090
{
@@ -584,6 +594,84 @@ int mlx4_get_base_gid_ix(struct mlx4_dev *dev, int slave, int port)
584594
}
585595
EXPORT_SYMBOL_GPL(mlx4_get_base_gid_ix);
586596

597+
static int mlx4_reset_roce_port_gids(struct mlx4_dev *dev, int slave,
598+
int port, struct mlx4_cmd_mailbox *mailbox)
599+
{
600+
struct mlx4_roce_gid_entry *gid_entry_mbox;
601+
struct mlx4_priv *priv = mlx4_priv(dev);
602+
int num_gids, base, offset;
603+
int i, err;
604+
605+
num_gids = mlx4_get_slave_num_gids(dev, slave, port);
606+
base = mlx4_get_base_gid_ix(dev, slave, port);
607+
608+
memset(mailbox->buf, 0, MLX4_MAILBOX_SIZE);
609+
610+
mutex_lock(&(priv->port[port].gid_table.mutex));
611+
/* Zero-out gids belonging to that slave in the port GID table */
612+
for (i = 0, offset = base; i < num_gids; offset++, i++)
613+
memcpy(priv->port[port].gid_table.roce_gids[offset].raw,
614+
zgid_entry.raw, MLX4_ROCE_GID_ENTRY_SIZE);
615+
616+
/* Now, copy roce port gids table to mailbox for passing to FW */
617+
gid_entry_mbox = (struct mlx4_roce_gid_entry *)mailbox->buf;
618+
for (i = 0; i < MLX4_ROCE_MAX_GIDS; gid_entry_mbox++, i++)
619+
memcpy(gid_entry_mbox->raw,
620+
priv->port[port].gid_table.roce_gids[i].raw,
621+
MLX4_ROCE_GID_ENTRY_SIZE);
622+
623+
err = mlx4_cmd(dev, mailbox->dma,
624+
((u32)port) | (MLX4_SET_PORT_GID_TABLE << 8), 1,
625+
MLX4_CMD_SET_PORT, MLX4_CMD_TIME_CLASS_B,
626+
MLX4_CMD_NATIVE);
627+
mutex_unlock(&(priv->port[port].gid_table.mutex));
628+
return err;
629+
}
630+
631+
632+
void mlx4_reset_roce_gids(struct mlx4_dev *dev, int slave)
633+
{
634+
struct mlx4_active_ports actv_ports;
635+
struct mlx4_cmd_mailbox *mailbox;
636+
int num_eth_ports, err;
637+
int i;
638+
639+
if (slave < 0 || slave > dev->num_vfs)
640+
return;
641+
642+
actv_ports = mlx4_get_active_ports(dev, slave);
643+
644+
for (i = 0, num_eth_ports = 0; i < dev->caps.num_ports; i++) {
645+
if (test_bit(i, actv_ports.ports)) {
646+
if (dev->caps.port_type[i + 1] != MLX4_PORT_TYPE_ETH)
647+
continue;
648+
num_eth_ports++;
649+
}
650+
}
651+
652+
if (!num_eth_ports)
653+
return;
654+
655+
/* have ETH ports. Alloc mailbox for SET_PORT command */
656+
mailbox = mlx4_alloc_cmd_mailbox(dev);
657+
if (IS_ERR(mailbox))
658+
return;
659+
660+
for (i = 0; i < dev->caps.num_ports; i++) {
661+
if (test_bit(i, actv_ports.ports)) {
662+
if (dev->caps.port_type[i + 1] != MLX4_PORT_TYPE_ETH)
663+
continue;
664+
err = mlx4_reset_roce_port_gids(dev, slave, i + 1, mailbox);
665+
if (err)
666+
mlx4_warn(dev, "Could not reset ETH port GID table for slave %d, port %d (%d)\n",
667+
slave, i + 1, err);
668+
}
669+
}
670+
671+
mlx4_free_cmd_mailbox(dev, mailbox);
672+
return;
673+
}
674+
587675
static int mlx4_common_set_port(struct mlx4_dev *dev, int slave, u32 in_mod,
588676
u8 op_mod, struct mlx4_cmd_mailbox *inbox)
589677
{
@@ -692,10 +780,12 @@ static int mlx4_common_set_port(struct mlx4_dev *dev, int slave, u32 in_mod,
692780
/* 2. Check that do not have duplicates in OTHER
693781
* entries in the port GID table
694782
*/
783+
784+
mutex_lock(&(priv->port[port].gid_table.mutex));
695785
for (i = 0; i < MLX4_ROCE_MAX_GIDS; i++) {
696786
if (i >= base && i < base + num_gids)
697787
continue; /* don't compare to slave's current gids */
698-
gid_entry_tbl = &priv->roce_gids[port - 1][i];
788+
gid_entry_tbl = &priv->port[port].gid_table.roce_gids[i];
699789
if (!memcmp(gid_entry_tbl->raw, zgid_entry.raw, sizeof(zgid_entry)))
700790
continue;
701791
gid_entry_mbox = (struct mlx4_roce_gid_entry *)(inbox->buf);
@@ -709,6 +799,7 @@ static int mlx4_common_set_port(struct mlx4_dev *dev, int slave, u32 in_mod,
709799
mlx4_warn(dev, "requested gid entry for slave:%d "
710800
"is a duplicate of gid at index %d\n",
711801
slave, i);
802+
mutex_unlock(&(priv->port[port].gid_table.mutex));
712803
return -EINVAL;
713804
}
714805
}
@@ -717,16 +808,24 @@ static int mlx4_common_set_port(struct mlx4_dev *dev, int slave, u32 in_mod,
717808
/* insert slave GIDs with memcpy, starting at slave's base index */
718809
gid_entry_mbox = (struct mlx4_roce_gid_entry *)(inbox->buf);
719810
for (i = 0, offset = base; i < num_gids; gid_entry_mbox++, offset++, i++)
720-
memcpy(priv->roce_gids[port - 1][offset].raw, gid_entry_mbox->raw, 16);
811+
memcpy(priv->port[port].gid_table.roce_gids[offset].raw,
812+
gid_entry_mbox->raw, MLX4_ROCE_GID_ENTRY_SIZE);
721813

722814
/* Now, copy roce port gids table to current mailbox for passing to FW */
723815
gid_entry_mbox = (struct mlx4_roce_gid_entry *)(inbox->buf);
724816
for (i = 0; i < MLX4_ROCE_MAX_GIDS; gid_entry_mbox++, i++)
725-
memcpy(gid_entry_mbox->raw, priv->roce_gids[port - 1][i].raw, 16);
726-
727-
break;
817+
memcpy(gid_entry_mbox->raw,
818+
priv->port[port].gid_table.roce_gids[i].raw,
819+
MLX4_ROCE_GID_ENTRY_SIZE);
820+
821+
err = mlx4_cmd(dev, inbox->dma, in_mod & 0xffff, op_mod,
822+
MLX4_CMD_SET_PORT, MLX4_CMD_TIME_CLASS_B,
823+
MLX4_CMD_NATIVE);
824+
mutex_unlock(&(priv->port[port].gid_table.mutex));
825+
return err;
728826
}
729-
return mlx4_cmd(dev, inbox->dma, in_mod, op_mod,
827+
828+
return mlx4_cmd(dev, inbox->dma, in_mod & 0xffff, op_mod,
730829
MLX4_CMD_SET_PORT, MLX4_CMD_TIME_CLASS_B,
731830
MLX4_CMD_NATIVE);
732831
}
@@ -1099,7 +1198,8 @@ int mlx4_get_slave_from_roce_gid(struct mlx4_dev *dev, int port, u8 *gid,
10991198
num_vfs = bitmap_weight(slaves_pport.slaves, dev->num_vfs + 1) - 1;
11001199

11011200
for (i = 0; i < MLX4_ROCE_MAX_GIDS; i++) {
1102-
if (!memcmp(priv->roce_gids[port - 1][i].raw, gid, 16)) {
1201+
if (!memcmp(priv->port[port].gid_table.roce_gids[i].raw, gid,
1202+
MLX4_ROCE_GID_ENTRY_SIZE)) {
11031203
found_ix = i;
11041204
break;
11051205
}
@@ -1187,7 +1287,8 @@ int mlx4_get_roce_gid_from_slave(struct mlx4_dev *dev, int port, int slave_id,
11871287
if (!mlx4_is_master(dev))
11881288
return -EINVAL;
11891289

1190-
memcpy(gid, priv->roce_gids[port - 1][slave_id].raw, 16);
1290+
memcpy(gid, priv->port[port].gid_table.roce_gids[slave_id].raw,
1291+
MLX4_ROCE_GID_ENTRY_SIZE);
11911292
return 0;
11921293
}
11931294
EXPORT_SYMBOL(mlx4_get_roce_gid_from_slave);

drivers/net/ethernet/mellanox/mlx4/resource_tracker.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -586,6 +586,7 @@ void mlx4_free_resource_tracker(struct mlx4_dev *dev,
586586
}
587587
/* free master's vlans */
588588
i = dev->caps.function;
589+
mlx4_reset_roce_gids(dev, i);
589590
mutex_lock(&priv->mfunc.master.res_tracker.slave_list[i].mutex);
590591
rem_slave_vlans(dev, i);
591592
mutex_unlock(&priv->mfunc.master.res_tracker.slave_list[i].mutex);
@@ -4681,7 +4682,7 @@ static void rem_slave_xrcdns(struct mlx4_dev *dev, int slave)
46814682
void mlx4_delete_all_resources_for_slave(struct mlx4_dev *dev, int slave)
46824683
{
46834684
struct mlx4_priv *priv = mlx4_priv(dev);
4684-
4685+
mlx4_reset_roce_gids(dev, slave);
46854686
mutex_lock(&priv->mfunc.master.res_tracker.slave_list[slave].mutex);
46864687
rem_slave_vlans(dev, slave);
46874688
rem_slave_macs(dev, slave);

drivers/net/ethernet/qlogic/qlcnic/qlcnic_dcb.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1020,6 +1020,7 @@ static int qlcnic_dcb_peer_app_info(struct net_device *netdev,
10201020
struct qlcnic_dcb_cee *peer;
10211021
int i;
10221022

1023+
memset(info, 0, sizeof(*info));
10231024
*app_count = 0;
10241025

10251026
if (!test_bit(QLCNIC_DCB_STATE, &adapter->dcb->state))

drivers/net/team/team.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1724,6 +1724,7 @@ static int team_change_mtu(struct net_device *dev, int new_mtu)
17241724
* to traverse list in reverse under rcu_read_lock
17251725
*/
17261726
mutex_lock(&team->lock);
1727+
team->port_mtu_change_allowed = true;
17271728
list_for_each_entry(port, &team->port_list, list) {
17281729
err = dev_set_mtu(port->dev, new_mtu);
17291730
if (err) {
@@ -1732,6 +1733,7 @@ static int team_change_mtu(struct net_device *dev, int new_mtu)
17321733
goto unwind;
17331734
}
17341735
}
1736+
team->port_mtu_change_allowed = false;
17351737
mutex_unlock(&team->lock);
17361738

17371739
dev->mtu = new_mtu;
@@ -1741,6 +1743,7 @@ static int team_change_mtu(struct net_device *dev, int new_mtu)
17411743
unwind:
17421744
list_for_each_entry_continue_reverse(port, &team->port_list, list)
17431745
dev_set_mtu(port->dev, dev->mtu);
1746+
team->port_mtu_change_allowed = false;
17441747
mutex_unlock(&team->lock);
17451748

17461749
return err;
@@ -2851,7 +2854,9 @@ static int team_device_event(struct notifier_block *unused,
28512854
break;
28522855
case NETDEV_PRECHANGEMTU:
28532856
/* Forbid to change mtu of underlaying device */
2854-
return NOTIFY_BAD;
2857+
if (!port->team->port_mtu_change_allowed)
2858+
return NOTIFY_BAD;
2859+
break;
28552860
case NETDEV_PRE_TYPE_CHANGE:
28562861
/* Forbid to change type of underlaying device */
28572862
return NOTIFY_BAD;

0 commit comments

Comments
 (0)