net/sfc: fix multicast address list copy memory leak
[dpdk.git] / drivers / net / sfc / base / ef10_filter.c
index 068882e..9e16243 100644 (file)
@@ -226,10 +226,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 :
@@ -586,10 +596,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);
 
        /*
@@ -989,7 +995,7 @@ ef10_filter_supported_filters(
        size_t list_length;
        uint32_t i;
        efx_rc_t rc;
-       uint32_t all_filter_flags =
+       efx_filter_match_flags_t all_filter_flags =
            (EFX_FILTER_MATCH_REM_HOST | EFX_FILTER_MATCH_LOC_HOST |
            EFX_FILTER_MATCH_REM_MAC | EFX_FILTER_MATCH_REM_PORT |
            EFX_FILTER_MATCH_LOC_MAC | EFX_FILTER_MATCH_LOC_PORT |
@@ -1237,8 +1243,8 @@ typedef struct ef10_filter_encap_entry_s {
        uint32_t                inner_frame_match;
 } ef10_filter_encap_entry_t;
 
-#define EF10_ENCAP_FILTER_ENTRY(ipv, encap_type, inner_frame_match)    \
-       { EFX_ETHER_TYPE_##ipv, EFX_TUNNEL_PROTOCOL_##encap_type,               \
+#define        EF10_ENCAP_FILTER_ENTRY(ipv, encap_type, inner_frame_match)     \
+       { EFX_ETHER_TYPE_##ipv, EFX_TUNNEL_PROTOCOL_##encap_type,       \
            EFX_FILTER_INNER_FRAME_MATCH_UNKNOWN_##inner_frame_match }
 
 static ef10_filter_encap_entry_t ef10_filter_encap_list[] = {
@@ -1299,8 +1305,8 @@ ef10_filter_insert_encap_filters(
                 */
                if ((mulcst == B_FALSE) &&
                    (encap_filter->inner_frame_match ==
-                    EFX_FILTER_INNER_FRAME_MATCH_UNKNOWN_MCAST_DST))
-                               continue;
+                   EFX_FILTER_INNER_FRAME_MATCH_UNKNOWN_MCAST_DST))
+                       continue;
 
                efx_filter_spec_init_rx(&spec, EFX_FILTER_PRI_AUTO,
                                        filter_flags,