On Mon, Oct 12, 2020 at 8:30 AM Kalesh A P
<kalesh-anakkur.pura...@broadcom.com> wrote:
>
> From: Kalesh AP <kalesh-anakkur.pura...@broadcom.com>
>
> The HWRM supports only one global destination port for a tunnel type.
>
> When port is stopped, driver deletes the UDP tunnel port configured
> in the HW, but it does not update the counter which causes the
> tunnel port addition to fail after port is started again.
>
> Fixed to update the counter when tunnel port is deleted.
>
> Fixes: 10d074b2022d ("net/bnxt: support tunneling")
> Cc: sta...@dpdk.org
>
> Signed-off-by: Kalesh AP <kalesh-anakkur.pura...@broadcom.com>
> Reviewed-by: Ajit Kumar Khaparde <ajit.khapa...@broadcom.com>
> Reviewed-by: Somnath Kotur <somnath.ko...@broadcom.com>
Patch applied to dpdk-next-net-brcm. Thanks

> ---
>  drivers/net/bnxt/bnxt_ethdev.c |  8 --------
>  drivers/net/bnxt/bnxt_hwrm.c   | 15 +++++++++++++--
>  2 files changed, 13 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c
> index 8b63134..6c1025e 100644
> --- a/drivers/net/bnxt/bnxt_ethdev.c
> +++ b/drivers/net/bnxt/bnxt_ethdev.c
> @@ -2192,14 +2192,6 @@ bnxt_udp_tunnel_port_del_op(struct rte_eth_dev 
> *eth_dev,
>         }
>
>         rc = bnxt_hwrm_tunnel_dst_port_free(bp, port, tunnel_type);
> -       if (!rc) {
> -               if (tunnel_type ==
> -                   HWRM_TUNNEL_DST_PORT_FREE_INPUT_TUNNEL_TYPE_VXLAN)
> -                       bp->vxlan_port = 0;
> -               if (tunnel_type ==
> -                   HWRM_TUNNEL_DST_PORT_FREE_INPUT_TUNNEL_TYPE_GENEVE)
> -                       bp->geneve_port = 0;
> -       }
>         return rc;
>  }
>
> diff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c
> index faeaf4b..a495dac 100644
> --- a/drivers/net/bnxt/bnxt_hwrm.c
> +++ b/drivers/net/bnxt/bnxt_hwrm.c
> @@ -2750,11 +2750,10 @@ bnxt_free_tunnel_ports(struct bnxt *bp)
>         if (bp->vxlan_port_cnt)
>                 bnxt_hwrm_tunnel_dst_port_free(bp, bp->vxlan_fw_dst_port_id,
>                         HWRM_TUNNEL_DST_PORT_FREE_INPUT_TUNNEL_TYPE_VXLAN);
> -       bp->vxlan_port = 0;
> +
>         if (bp->geneve_port_cnt)
>                 bnxt_hwrm_tunnel_dst_port_free(bp, bp->geneve_fw_dst_port_id,
>                         HWRM_TUNNEL_DST_PORT_FREE_INPUT_TUNNEL_TYPE_GENEVE);
> -       bp->geneve_port = 0;
>  }
>
>  void bnxt_free_all_hwrm_resources(struct bnxt *bp)
> @@ -3713,6 +3712,18 @@ int bnxt_hwrm_tunnel_dst_port_free(struct bnxt *bp, 
> uint16_t port,
>         HWRM_CHECK_RESULT();
>         HWRM_UNLOCK();
>
> +       if (tunnel_type ==
> +           HWRM_TUNNEL_DST_PORT_FREE_INPUT_TUNNEL_TYPE_VXLAN) {
> +               bp->vxlan_port = 0;
> +               bp->vxlan_port_cnt = 0;
> +       }
> +
> +       if (tunnel_type ==
> +           HWRM_TUNNEL_DST_PORT_FREE_INPUT_TUNNEL_TYPE_GENEVE) {
> +               bp->geneve_port = 0;
> +               bp->geneve_port_cnt = 0;
> +       }
> +
>         return rc;
>  }
>
> --
> 2.10.1
>

Reply via email to