Merge tag 'mlx5-fixes-2020-05-22' of git://git.kernel.org/pub/scm/linux/kernel/git...
authorDavid S. Miller <davem@davemloft.net>
Sat, 23 May 2020 23:39:45 +0000 (16:39 -0700)
committerDavid S. Miller <davem@davemloft.net>
Sat, 23 May 2020 23:39:45 +0000 (16:39 -0700)
Saeed Mahameed says:

====================
mlx5 fixes 2020-05-22

This series introduces some fixes to mlx5 driver.

Please pull and let me know if there is any problem.

For -stable v4.13
   ('net/mlx5: Add command entry handling completion')

For -stable v5.2
   ('net/mlx5: Fix error flow in case of function_setup failure')
   ('net/mlx5: Fix memory leak in mlx5_events_init')

For -stable v5.3
   ('net/mlx5e: Update netdev txq on completions during closure')
   ('net/mlx5e: kTLS, Destroy key object after destroying the TIS')
   ('net/mlx5e: Fix inner tirs handling')

For -stable v5.6
   ('net/mlx5: Fix cleaning unmanaged flow tables')
   ('net/mlx5: Fix a race when moving command interface to events mode')
====================

Signed-off-by: David S. Miller <davem@davemloft.net>
14 files changed:
drivers/net/can/ifi_canfd/ifi_canfd.c
drivers/net/can/sun4i_can.c
drivers/net/dsa/b53/b53_srab.c
drivers/net/ethernet/marvell/pxa168_eth.c
drivers/net/ethernet/mellanox/mlx4/fw.c
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
drivers/net/ethernet/ti/cpsw.c
drivers/net/phy/mscc/mscc.h
drivers/net/phy/mscc/mscc_mac.h
drivers/net/phy/mscc/mscc_macsec.c
drivers/net/phy/mscc/mscc_macsec.h
drivers/net/phy/mscc/mscc_main.c
fs/afs/fs_probe.c
net/rxrpc/rxkad.c

index 04d59be..74503ca 100644 (file)
@@ -947,8 +947,11 @@ static int ifi_canfd_plat_probe(struct platform_device *pdev)
        u32 id, rev;
 
        addr = devm_platform_ioremap_resource(pdev, 0);
+       if (IS_ERR(addr))
+               return PTR_ERR(addr);
+
        irq = platform_get_irq(pdev, 0);
-       if (IS_ERR(addr) || irq < 0)
+       if (irq < 0)
                return -EINVAL;
 
        id = readl(addr + IFI_CANFD_IP_ID);
index e3ba8ab..e2c6cf4 100644 (file)
@@ -792,7 +792,7 @@ static int sun4ican_probe(struct platform_device *pdev)
 
        addr = devm_platform_ioremap_resource(pdev, 0);
        if (IS_ERR(addr)) {
-               err = -EBUSY;
+               err = PTR_ERR(addr);
                goto exit;
        }
 
index 0a1be52..38cd828 100644 (file)
@@ -609,7 +609,7 @@ static int b53_srab_probe(struct platform_device *pdev)
 
        priv->regs = devm_platform_ioremap_resource(pdev, 0);
        if (IS_ERR(priv->regs))
-               return -ENOMEM;
+               return PTR_ERR(priv->regs);
 
        dev = b53_switch_alloc(&pdev->dev, &b53_srab_ops, priv);
        if (!dev)
index 7a0d785..17243bb 100644 (file)
@@ -1418,7 +1418,7 @@ static int pxa168_eth_probe(struct platform_device *pdev)
 
        pep->base = devm_platform_ioremap_resource(pdev, 0);
        if (IS_ERR(pep->base)) {
-               err = -ENOMEM;
+               err = PTR_ERR(pep->base);
                goto err_netdev;
        }
 
index 6e501af..f6ff962 100644 (file)
@@ -2734,7 +2734,7 @@ void mlx4_opreq_action(struct work_struct *work)
                if (err) {
                        mlx4_err(dev, "Failed to retrieve required operation: %d\n",
                                 err);
-                       return;
+                       goto out;
                }
                MLX4_GET(modifier, outbox, GET_OP_REQ_MODIFIER_OFFSET);
                MLX4_GET(token, outbox, GET_OP_REQ_TOKEN_OFFSET);
index a999d6b..1f319c9 100644 (file)
@@ -5190,8 +5190,6 @@ int stmmac_resume(struct device *dev)
                        return ret;
        }
 
-       netif_device_attach(ndev);
-
        mutex_lock(&priv->lock);
 
        stmmac_reset_queues_param(priv);
@@ -5218,6 +5216,8 @@ int stmmac_resume(struct device *dev)
 
        phylink_mac_change(priv->phylink, true);
 
+       netif_device_attach(ndev);
+
        return 0;
 }
 EXPORT_SYMBOL_GPL(stmmac_resume);
index c2c5bf8..ffeb863 100644 (file)
@@ -1753,11 +1753,15 @@ static int cpsw_suspend(struct device *dev)
        struct cpsw_common *cpsw = dev_get_drvdata(dev);
        int i;
 
+       rtnl_lock();
+
        for (i = 0; i < cpsw->data.slaves; i++)
                if (cpsw->slaves[i].ndev)
                        if (netif_running(cpsw->slaves[i].ndev))
                                cpsw_ndo_stop(cpsw->slaves[i].ndev);
 
+       rtnl_unlock();
+
        /* Select sleep pin state */
        pinctrl_pm_select_sleep_state(dev);
 
index 030bf8b..414e3b3 100644 (file)
@@ -354,6 +354,8 @@ struct vsc8531_private {
        u64 *stats;
        int nstats;
        bool pkg_init;
+       /* PHY address within the package. */
+       u8 addr;
        /* For multiple port PHYs; the MDIO address of the base PHY in the
         * package.
         */
index fcb5ba5..59b6837 100644 (file)
 #define MSCC_MAC_PAUSE_CFG_STATE_PAUSE_STATE                   BIT(0)
 #define MSCC_MAC_PAUSE_CFG_STATE_MAC_TX_PAUSE_GEN              BIT(4)
 
-#define MSCC_PROC_0_IP_1588_TOP_CFG_STAT_MODE_CTL                      0x2
-#define MSCC_PROC_0_IP_1588_TOP_CFG_STAT_MODE_CTL_PROTOCOL_MODE(x)     (x)
-#define MSCC_PROC_0_IP_1588_TOP_CFG_STAT_MODE_CTL_PROTOCOL_MODE_M      GENMASK(2, 0)
+#define MSCC_PROC_IP_1588_TOP_CFG_STAT_MODE_CTL                        0x2
+#define MSCC_PROC_IP_1588_TOP_CFG_STAT_MODE_CTL_PROTOCOL_MODE(x)       (x)
+#define MSCC_PROC_IP_1588_TOP_CFG_STAT_MODE_CTL_PROTOCOL_MODE_M        GENMASK(2, 0)
 
 #endif /* _MSCC_PHY_LINE_MAC_H_ */
index e99e2cd..b4d3dc4 100644 (file)
@@ -316,6 +316,8 @@ static void vsc8584_macsec_mac_init(struct phy_device *phydev,
 /* Must be called with mdio_lock taken */
 static int __vsc8584_macsec_init(struct phy_device *phydev)
 {
+       struct vsc8531_private *priv = phydev->priv;
+       enum macsec_bank proc_bank;
        u32 val;
 
        vsc8584_macsec_block_init(phydev, MACSEC_INGR);
@@ -351,12 +353,14 @@ static int __vsc8584_macsec_init(struct phy_device *phydev)
        val |= MSCC_FCBUF_ENA_CFG_TX_ENA | MSCC_FCBUF_ENA_CFG_RX_ENA;
        vsc8584_macsec_phy_write(phydev, FC_BUFFER, MSCC_FCBUF_ENA_CFG, val);
 
-       val = vsc8584_macsec_phy_read(phydev, IP_1588,
-                                     MSCC_PROC_0_IP_1588_TOP_CFG_STAT_MODE_CTL);
-       val &= ~MSCC_PROC_0_IP_1588_TOP_CFG_STAT_MODE_CTL_PROTOCOL_MODE_M;
-       val |= MSCC_PROC_0_IP_1588_TOP_CFG_STAT_MODE_CTL_PROTOCOL_MODE(4);
-       vsc8584_macsec_phy_write(phydev, IP_1588,
-                                MSCC_PROC_0_IP_1588_TOP_CFG_STAT_MODE_CTL, val);
+       proc_bank = (priv->addr < 2) ? PROC_0 : PROC_2;
+
+       val = vsc8584_macsec_phy_read(phydev, proc_bank,
+                                     MSCC_PROC_IP_1588_TOP_CFG_STAT_MODE_CTL);
+       val &= ~MSCC_PROC_IP_1588_TOP_CFG_STAT_MODE_CTL_PROTOCOL_MODE_M;
+       val |= MSCC_PROC_IP_1588_TOP_CFG_STAT_MODE_CTL_PROTOCOL_MODE(4);
+       vsc8584_macsec_phy_write(phydev, proc_bank,
+                                MSCC_PROC_IP_1588_TOP_CFG_STAT_MODE_CTL, val);
 
        return 0;
 }
index d078394..d751f29 100644 (file)
@@ -64,7 +64,8 @@ enum macsec_bank {
        FC_BUFFER   = 0x04,
        HOST_MAC    = 0x05,
        LINE_MAC    = 0x06,
-       IP_1588     = 0x0e,
+       PROC_0      = 0x0e,
+       PROC_2      = 0x0f,
        MACSEC_INGR = 0x38,
        MACSEC_EGR  = 0x3c,
 };
index acddef7..c8aa6d9 100644 (file)
@@ -1347,6 +1347,8 @@ static int vsc8584_config_init(struct phy_device *phydev)
        else
                vsc8531->base_addr = phydev->mdio.addr - addr;
 
+       vsc8531->addr = addr;
+
        /* Some parts of the init sequence are identical for every PHY in the
         * package. Some parts are modifying the GPIO register bank which is a
         * set of registers that are affecting all PHYs, a few resetting the
@@ -1771,6 +1773,8 @@ static int vsc8514_config_init(struct phy_device *phydev)
        else
                vsc8531->base_addr = phydev->mdio.addr - addr;
 
+       vsc8531->addr = addr;
+
        /* Some parts of the init sequence are identical for every PHY in the
         * package. Some parts are modifying the GPIO register bank which is a
         * set of registers that are affecting all PHYs, a few resetting the
index 237352d..37d1bba 100644 (file)
@@ -32,7 +32,7 @@ void afs_fileserver_probe_result(struct afs_call *call)
        struct afs_server *server = call->server;
        unsigned int server_index = call->server_index;
        unsigned int index = call->addr_ix;
-       unsigned int rtt_us;
+       unsigned int rtt_us = 0;
        bool have_result = false;
        int ret = call->error;
 
index 098f1f9..52a24d4 100644 (file)
@@ -1148,7 +1148,7 @@ static int rxkad_verify_response(struct rxrpc_connection *conn,
        ret = rxkad_decrypt_ticket(conn, skb, ticket, ticket_len, &session_key,
                                   &expiry, _abort_code);
        if (ret < 0)
-               goto temporary_error_free_resp;
+               goto temporary_error_free_ticket;
 
        /* use the session key from inside the ticket to decrypt the
         * response */
@@ -1230,7 +1230,6 @@ protocol_error:
 
 temporary_error_free_ticket:
        kfree(ticket);
-temporary_error_free_resp:
        kfree(response);
 temporary_error:
        /* Ignore the response packet if we got a temporary error such as