net: thunderx: add nicvf_send_msg_to_pf result check for set_rx_mode_task [Linux 5.0]

net: thunderx: add nicvf_send_msg_to_pf result check for set_rx_mode_task [Linux 5.0]

This Linux kernel change "net: thunderx: add nicvf_send_msg_to_pf result check for set_rx_mode_task" is included in the Linux 5.0 release. This change is authored by Vadim Lomovtsev <vlomovtsev [at] marvell.com> on Wed Feb 20 11:02:44 2019 +0000. The commit for this change in Linux stable tree is 7db730d (patch).

net: thunderx: add nicvf_send_msg_to_pf result check for set_rx_mode_task

The rx_set_mode invokes number of messages to be send to PF for receive
mode configuration. In case if there any issues we need to stop sending
messages and release allocated memory.

This commit is to implement check of nicvf_msg_send_to_pf() result.

Signed-off-by: Vadim Lomovtsev <[email protected]>
Signed-off-by: David S. Miller <[email protected]>

There are 12 lines of Linux source code added/deleted in this change. Code changes to Linux kernel are as follows.

 drivers/net/ethernet/cavium/thunder/nicvf_main.c | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/cavium/thunder/nicvf_main.c b/drivers/net/ethernet/cavium/thunder/nicvf_main.c
index 19b58fc..45f0650 100644
--- a/drivers/net/ethernet/cavium/thunder/nicvf_main.c
+++ b/drivers/net/ethernet/cavium/thunder/nicvf_main.c
@@ -1953,7 +1953,8 @@ static void __nicvf_set_rx_mode_task(u8 mode, struct xcast_addr_list *mc_addrs,

    /* flush DMAC filters and reset RX mode */
    mbx.xcast.msg = NIC_MBOX_MSG_RESET_XCAST;
-   nicvf_send_msg_to_pf(nic, &mbx);
+   if (nicvf_send_msg_to_pf(nic, &mbx) < 0)
+       goto free_mc;

    if (mode & BGX_XCAST_MCAST_FILTER) {
        /* once enabling filtering, we need to signal to PF to add
@@ -1961,7 +1962,8 @@ static void __nicvf_set_rx_mode_task(u8 mode, struct xcast_addr_list *mc_addrs,
         */
        mbx.xcast.msg = NIC_MBOX_MSG_ADD_MCAST;
        mbx.xcast.data.mac = 0;
-       nicvf_send_msg_to_pf(nic, &mbx);
+       if (nicvf_send_msg_to_pf(nic, &mbx) < 0)
+           goto free_mc;
    }

    /* check if we have any specific MACs to be added to PF DMAC filter */
@@ -1970,9 +1972,9 @@ static void __nicvf_set_rx_mode_task(u8 mode, struct xcast_addr_list *mc_addrs,
        for (idx = 0; idx < mc_addrs->count; idx++) {
            mbx.xcast.msg = NIC_MBOX_MSG_ADD_MCAST;
            mbx.xcast.data.mac = mc_addrs->mc[idx];
-           nicvf_send_msg_to_pf(nic, &mbx);
+           if (nicvf_send_msg_to_pf(nic, &mbx) < 0)
+               goto free_mc;
        }
-       kfree(mc_addrs);
    }

    /* and finally set rx mode for PF accordingly */
@@ -1980,6 +1982,8 @@ static void __nicvf_set_rx_mode_task(u8 mode, struct xcast_addr_list *mc_addrs,
    mbx.xcast.data.mode = mode;

    nicvf_send_msg_to_pf(nic, &mbx);
+free_mc:
+   kfree(mc_addrs);
 }

 static void nicvf_set_rx_mode_task(struct work_struct *work_arg)

Leave a Reply

Your email address will not be published. Required fields are marked *