sfxge(4): add API to set an RSS context for a filter

Submitted by:   Mark Spender <mspender at solarflare.com>
Sponsored by:   Solarflare Communications, Inc.
Differential Revision:  https://reviews.freebsd.org/D18081
This commit is contained in:
arybchik 2018-11-23 09:15:56 +00:00
parent 469d2e136a
commit cced2ad775
3 changed files with 42 additions and 10 deletions

View File

@ -229,10 +229,20 @@ efx_mcdi_filter_op_add(
MC_CMD_FILTER_OP_EXT_IN_RX_DEST_HOST);
MCDI_IN_SET_DWORD(req, FILTER_OP_EXT_IN_RX_QUEUE,
spec->efs_dmaq_id);
#if EFSYS_OPT_RX_SCALE
if (spec->efs_flags & EFX_FILTER_FLAG_RX_RSS) {
uint32_t rss_context;
if (spec->efs_rss_context == EFX_RSS_CONTEXT_DEFAULT)
rss_context = enp->en_rss_context;
else
rss_context = spec->efs_rss_context;
MCDI_IN_SET_DWORD(req, FILTER_OP_EXT_IN_RX_CONTEXT,
spec->efs_rss_context);
rss_context);
}
#endif
MCDI_IN_SET_DWORD(req, FILTER_OP_EXT_IN_RX_MODE,
spec->efs_flags & EFX_FILTER_FLAG_RX_RSS ?
MC_CMD_FILTER_OP_EXT_IN_RX_MODE_RSS :
@ -589,10 +599,6 @@ ef10_filter_add_internal(
EFSYS_ASSERT(enp->en_family == EFX_FAMILY_HUNTINGTON ||
enp->en_family == EFX_FAMILY_MEDFORD);
#if EFSYS_OPT_RX_SCALE
spec->efs_rss_context = enp->en_rss_context;
#endif
hash = ef10_filter_hash(spec);
/*

View File

@ -2426,7 +2426,12 @@ efx_filter_spec_set_encap_type(
__in efx_tunnel_protocol_t encap_type,
__in efx_filter_inner_frame_match_t inner_frame_match);
#if EFSYS_OPT_RX_SCALE
extern __checkReturn efx_rc_t
efx_filter_spec_set_rss_context(
__inout efx_filter_spec_t *spec,
__in uint32_t rss_context);
#endif
#endif /* EFSYS_OPT_FILTER */
/* HASH */

View File

@ -122,10 +122,6 @@ efx_filter_remove(
EFSYS_ASSERT3P(spec, !=, NULL);
EFSYS_ASSERT3U(spec->efs_flags, &, EFX_FILTER_FLAG_RX);
#if EFSYS_OPT_RX_SCALE
spec->efs_rss_context = enp->en_rss_context;
#endif
return (efop->efo_delete(enp, spec));
}
@ -495,7 +491,32 @@ efx_filter_spec_set_encap_type(
return (rc);
}
#if EFSYS_OPT_RX_SCALE
__checkReturn efx_rc_t
efx_filter_spec_set_rss_context(
__inout efx_filter_spec_t *spec,
__in uint32_t rss_context)
{
efx_rc_t rc;
EFSYS_ASSERT3P(spec, !=, NULL);
/* The filter must have been created with EFX_FILTER_FLAG_RX_RSS. */
if ((spec->efs_flags & EFX_FILTER_FLAG_RX_RSS) == 0) {
rc = EINVAL;
goto fail1;
}
spec->efs_rss_context = rss_context;
return (0);
fail1:
EFSYS_PROBE1(fail1, efx_rc_t, rc);
return (rc);
}
#endif
#if EFSYS_OPT_SIENA