const struct ethtool_ops bnxt_ethtool_ops = {
        .cap_link_lanes_supported       = 1,
        .cap_rss_ctx_supported          = 1,
-       .rxfh_max_context_id            = BNXT_MAX_ETH_RSS_CTX,
+       .rxfh_max_num_contexts          = BNXT_MAX_ETH_RSS_CTX + 1,
        .rxfh_indir_space               = BNXT_MAX_RSS_TABLE_ENTRIES_P5,
        .rxfh_priv_size                 = sizeof(struct bnxt_rss_ctx),
        .supported_coalesce_params = ETHTOOL_COALESCE_USECS |
 
  * @rxfh_key_space: same as @rxfh_indir_space, but for the key.
  * @rxfh_priv_size: size of the driver private data area the core should
  *     allocate for an RSS context (in &struct ethtool_rxfh_context).
- * @rxfh_max_context_id: maximum (exclusive) supported RSS context ID.  If this
- *     is zero then the core may choose any (nonzero) ID, otherwise the core
- *     will only use IDs strictly less than this value, as the @rss_context
- *     argument to @create_rxfh_context and friends.
+ * @rxfh_max_num_contexts: maximum (exclusive) supported RSS context ID.
+ *     If this is zero then the core may choose any (nonzero) ID, otherwise
+ *     the core will only use IDs strictly less than this value, as the
+ *     @rss_context argument to @create_rxfh_context and friends.
  * @supported_coalesce_params: supported types of interrupt coalescing.
  * @supported_ring_params: supported ring params.
  * @get_drvinfo: Report driver/device information. Modern drivers no
        u32     rxfh_indir_space;
        u16     rxfh_key_space;
        u16     rxfh_priv_size;
-       u32     rxfh_max_context_id;
+       u32     rxfh_max_num_contexts;
        u32     supported_coalesce_params;
        u32     supported_ring_params;
        void    (*get_drvinfo)(struct net_device *, struct ethtool_drvinfo *);
 
                }
 
                if (ops->create_rxfh_context) {
-                       u32 limit = ops->rxfh_max_context_id ?: U32_MAX;
+                       u32 limit = ops->rxfh_max_num_contexts ?: U32_MAX;
                        u32 ctx_id;
 
                        /* driver uses new API, core allocates ID */
                        ret = xa_alloc(&dev->ethtool->rss_ctx, &ctx_id, ctx,
-                                      XA_LIMIT(1, limit), GFP_KERNEL_ACCOUNT);
+                                      XA_LIMIT(1, limit - 1),
+                                      GFP_KERNEL_ACCOUNT);
                        if (ret < 0) {
                                kfree(ctx);
                                goto out;