{
        if (bp->flags & BNXT_FLAG_RFS) {
                if (BNXT_SUPPORTS_NTUPLE_VNIC(bp))
-                       return 2;
+                       return 2 + bp->num_rss_ctx;
                if (!(bp->flags & BNXT_FLAG_CHIP_P5_PLUS))
                        return rx_rings + 1;
        }
 }
 
 /* If runtime conditions support RFS */
-static bool bnxt_rfs_capable(struct bnxt *bp)
+bool bnxt_rfs_capable(struct bnxt *bp, bool new_rss_ctx)
 {
        struct bnxt_hw_rings hwr = {0};
        int max_vnics, max_rss_ctxs;
 
        hwr.grp = bp->rx_nr_rings;
        hwr.vnic = bnxt_get_total_vnics(bp, bp->rx_nr_rings);
+       if (new_rss_ctx)
+               hwr.vnic++;
        hwr.rss_ctx = bnxt_get_total_rss_ctxs(bp, &hwr);
        max_vnics = bnxt_get_max_func_vnics(bp);
        max_rss_ctxs = bnxt_get_max_func_rss_ctxs(bp);
        struct bnxt *bp = netdev_priv(dev);
        netdev_features_t vlan_features;
 
-       if ((features & NETIF_F_NTUPLE) && !bnxt_rfs_capable(bp))
+       if ((features & NETIF_F_NTUPLE) && !bnxt_rfs_capable(bp, false))
                features &= ~NETIF_F_NTUPLE;
 
        if ((bp->flags & BNXT_FLAG_NO_AGG_RINGS) || bp->xdp_prog)
        bp->flags &= ~BNXT_FLAG_RFS;
        if (bnxt_rfs_supported(bp)) {
                dev->hw_features |= NETIF_F_NTUPLE;
-               if (bnxt_rfs_capable(bp)) {
+               if (bnxt_rfs_capable(bp, false)) {
                        bp->flags |= BNXT_FLAG_RFS;
                        dev->features |= NETIF_F_NTUPLE;
                }
 
 void bnxt_close_nic(struct bnxt *, bool, bool);
 void bnxt_get_ring_err_stats(struct bnxt *bp,
                             struct bnxt_total_ring_err_stats *stats);
+bool bnxt_rfs_capable(struct bnxt *bp, bool new_rss_ctx);
 int bnxt_dbg_hwrm_rd_reg(struct bnxt *bp, u32 reg_off, u16 num_words,
                         u32 *reg_buf);
 void bnxt_fw_exception(struct bnxt *bp);