Author: arybchik
Date: Fri Nov 23 09:15:56 2018
New Revision: 340811
URL: https://svnweb.freebsd.org/changeset/base/340811

Log:
  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

Modified:
  head/sys/dev/sfxge/common/ef10_filter.c
  head/sys/dev/sfxge/common/efx.h
  head/sys/dev/sfxge/common/efx_filter.c

Modified: head/sys/dev/sfxge/common/ef10_filter.c
==============================================================================
--- head/sys/dev/sfxge/common/ef10_filter.c     Fri Nov 23 09:15:44 2018        
(r340810)
+++ head/sys/dev/sfxge/common/ef10_filter.c     Fri Nov 23 09:15:56 2018        
(r340811)
@@ -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 :
@@ -588,10 +598,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);
 

Modified: head/sys/dev/sfxge/common/efx.h
==============================================================================
--- head/sys/dev/sfxge/common/efx.h     Fri Nov 23 09:15:44 2018        
(r340810)
+++ head/sys/dev/sfxge/common/efx.h     Fri Nov 23 09:15:56 2018        
(r340811)
@@ -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 */

Modified: head/sys/dev/sfxge/common/efx_filter.c
==============================================================================
--- head/sys/dev/sfxge/common/efx_filter.c      Fri Nov 23 09:15:44 2018        
(r340810)
+++ head/sys/dev/sfxge/common/efx_filter.c      Fri Nov 23 09:15:56 2018        
(r340811)
@@ -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 @@ fail1:
        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
 
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to