aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2018-10-04 12:53:03 -0400
committerDavid S. Miller <davem@davemloft.net>2018-10-04 12:53:03 -0400
commitb576eddb5d8d8bdd5fe4fada5e397c19b7ea4ffc (patch)
treef20dee6d3425f4512464374c4ed1a7996c235048
parentcec4de302c5ff2c5eb3bfcb0c4845a095f5149b9 (diff)
parentc360867ec46a4ec5cb19e5c329d65dff522cc69d (diff)
Merge branch 'mlxsw-fixes'
Ido Schimmel says: ==================== mlxsw: Couple of fixes First patch works around an hardware issue in Spectrum-2 where a field indicating the event type is always set to the same value. Since there are only two event types and they are reported using different queues, we can use the queue number to derive the event type. Second patch prevents a router interface (RIF) leakage when a VLAN device is deleted from on top a bridge device. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/mellanox/mlxsw/pci.c11
-rw-r--r--drivers/net/ethernet/mellanox/mlxsw/spectrum.c2
2 files changed, 9 insertions, 4 deletions
diff --git a/drivers/net/ethernet/mellanox/mlxsw/pci.c b/drivers/net/ethernet/mellanox/mlxsw/pci.c
index 4d271fb3de3d..5890fdfd62c3 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/pci.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/pci.c
@@ -718,14 +718,17 @@ static void mlxsw_pci_eq_tasklet(unsigned long data)
718 memset(&active_cqns, 0, sizeof(active_cqns)); 718 memset(&active_cqns, 0, sizeof(active_cqns));
719 719
720 while ((eqe = mlxsw_pci_eq_sw_eqe_get(q))) { 720 while ((eqe = mlxsw_pci_eq_sw_eqe_get(q))) {
721 u8 event_type = mlxsw_pci_eqe_event_type_get(eqe);
722 721
723 switch (event_type) { 722 /* Command interface completion events are always received on
724 case MLXSW_PCI_EQE_EVENT_TYPE_CMD: 723 * queue MLXSW_PCI_EQ_ASYNC_NUM (EQ0) and completion events
724 * are mapped to queue MLXSW_PCI_EQ_COMP_NUM (EQ1).
725 */
726 switch (q->num) {
727 case MLXSW_PCI_EQ_ASYNC_NUM:
725 mlxsw_pci_eq_cmd_event(mlxsw_pci, eqe); 728 mlxsw_pci_eq_cmd_event(mlxsw_pci, eqe);
726 q->u.eq.ev_cmd_count++; 729 q->u.eq.ev_cmd_count++;
727 break; 730 break;
728 case MLXSW_PCI_EQE_EVENT_TYPE_COMP: 731 case MLXSW_PCI_EQ_COMP_NUM:
729 cqn = mlxsw_pci_eqe_cqn_get(eqe); 732 cqn = mlxsw_pci_eqe_cqn_get(eqe);
730 set_bit(cqn, active_cqns); 733 set_bit(cqn, active_cqns);
731 cq_handle = true; 734 cq_handle = true;
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
index b492152c8881..30bb2c533cec 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
@@ -4845,6 +4845,8 @@ static int mlxsw_sp_netdevice_bridge_event(struct net_device *br_dev,
4845 upper_dev = info->upper_dev; 4845 upper_dev = info->upper_dev;
4846 if (info->linking) 4846 if (info->linking)
4847 break; 4847 break;
4848 if (is_vlan_dev(upper_dev))
4849 mlxsw_sp_rif_destroy_by_dev(mlxsw_sp, upper_dev);
4848 if (netif_is_macvlan(upper_dev)) 4850 if (netif_is_macvlan(upper_dev))
4849 mlxsw_sp_rif_macvlan_del(mlxsw_sp, upper_dev); 4851 mlxsw_sp_rif_macvlan_del(mlxsw_sp, upper_dev);
4850 break; 4852 break;