net/hns3: fix RSS hardware configuration restore
[dpdk.git] / drivers / net / mlx5 / mlx5_rxtx_vec_sse.h
index 7bd254f..35b7761 100644 (file)
@@ -533,12 +533,12 @@ rxq_burst_v(struct mlx5_rxq_data *rxq, struct rte_mbuf **pkts, uint16_t pkts_n,
                cqe_tmp1 = _mm_load_si128((__m128i *)&cq[pos + p2]);
                cqes[3] = _mm_blendv_epi8(cqes[3], cqe_tmp2, blend_mask);
                cqes[2] = _mm_blendv_epi8(cqes[2], cqe_tmp1, blend_mask);
-               cqe_tmp2 = _mm_loadu_si128((__m128i *)&cq[pos + p3].rsvd1[3]);
-               cqe_tmp1 = _mm_loadu_si128((__m128i *)&cq[pos + p2].rsvd1[3]);
+               cqe_tmp2 = _mm_loadu_si128((__m128i *)&cq[pos + p3].csum);
+               cqe_tmp1 = _mm_loadu_si128((__m128i *)&cq[pos + p2].csum);
                cqes[3] = _mm_blend_epi16(cqes[3], cqe_tmp2, 0x30);
                cqes[2] = _mm_blend_epi16(cqes[2], cqe_tmp1, 0x30);
-               cqe_tmp2 = _mm_loadl_epi64((__m128i *)&cq[pos + p3].rsvd2[10]);
-               cqe_tmp1 = _mm_loadl_epi64((__m128i *)&cq[pos + p2].rsvd2[10]);
+               cqe_tmp2 = _mm_loadl_epi64((__m128i *)&cq[pos + p3].rsvd4[2]);
+               cqe_tmp1 = _mm_loadl_epi64((__m128i *)&cq[pos + p2].rsvd4[2]);
                cqes[3] = _mm_blend_epi16(cqes[3], cqe_tmp2, 0x04);
                cqes[2] = _mm_blend_epi16(cqes[2], cqe_tmp1, 0x04);
                /* C.2 generate final structure for mbuf with swapping bytes. */
@@ -560,12 +560,12 @@ rxq_burst_v(struct mlx5_rxq_data *rxq, struct rte_mbuf **pkts, uint16_t pkts_n,
                cqe_tmp1 = _mm_load_si128((__m128i *)&cq[pos]);
                cqes[1] = _mm_blendv_epi8(cqes[1], cqe_tmp2, blend_mask);
                cqes[0] = _mm_blendv_epi8(cqes[0], cqe_tmp1, blend_mask);
-               cqe_tmp2 = _mm_loadu_si128((__m128i *)&cq[pos + p1].rsvd1[3]);
-               cqe_tmp1 = _mm_loadu_si128((__m128i *)&cq[pos].rsvd1[3]);
+               cqe_tmp2 = _mm_loadu_si128((__m128i *)&cq[pos + p1].csum);
+               cqe_tmp1 = _mm_loadu_si128((__m128i *)&cq[pos].csum);
                cqes[1] = _mm_blend_epi16(cqes[1], cqe_tmp2, 0x30);
                cqes[0] = _mm_blend_epi16(cqes[0], cqe_tmp1, 0x30);
-               cqe_tmp2 = _mm_loadl_epi64((__m128i *)&cq[pos + p1].rsvd2[10]);
-               cqe_tmp1 = _mm_loadl_epi64((__m128i *)&cq[pos].rsvd2[10]);
+               cqe_tmp2 = _mm_loadl_epi64((__m128i *)&cq[pos + p1].rsvd4[2]);
+               cqe_tmp1 = _mm_loadl_epi64((__m128i *)&cq[pos].rsvd4[2]);
                cqes[1] = _mm_blend_epi16(cqes[1], cqe_tmp2, 0x04);
                cqes[0] = _mm_blend_epi16(cqes[0], cqe_tmp1, 0x04);
                /* C.2 generate final structure for mbuf with swapping bytes. */
@@ -640,6 +640,25 @@ rxq_burst_v(struct mlx5_rxq_data *rxq, struct rte_mbuf **pkts, uint16_t pkts_n,
                        pkts[pos + 3]->timestamp =
                                rte_be_to_cpu_64(cq[pos + p3].timestamp);
                }
+               if (rte_flow_dynf_metadata_avail()) {
+                       /* This code is subject for futher optimization. */
+                       *RTE_FLOW_DYNF_METADATA(pkts[pos]) =
+                               cq[pos].flow_table_metadata;
+                       *RTE_FLOW_DYNF_METADATA(pkts[pos + 1]) =
+                               cq[pos + p1].flow_table_metadata;
+                       *RTE_FLOW_DYNF_METADATA(pkts[pos + 2]) =
+                               cq[pos + p2].flow_table_metadata;
+                       *RTE_FLOW_DYNF_METADATA(pkts[pos + 3]) =
+                               cq[pos + p3].flow_table_metadata;
+                       if (*RTE_FLOW_DYNF_METADATA(pkts[pos]))
+                               pkts[pos]->ol_flags |= PKT_RX_DYNF_METADATA;
+                       if (*RTE_FLOW_DYNF_METADATA(pkts[pos + 1]))
+                               pkts[pos + 1]->ol_flags |= PKT_RX_DYNF_METADATA;
+                       if (*RTE_FLOW_DYNF_METADATA(pkts[pos + 2]))
+                               pkts[pos + 2]->ol_flags |= PKT_RX_DYNF_METADATA;
+                       if (*RTE_FLOW_DYNF_METADATA(pkts[pos + 3]))
+                               pkts[pos + 3]->ol_flags |= PKT_RX_DYNF_METADATA;
+               }
 #ifdef MLX5_PMD_SOFT_COUNTERS
                /* Add up received bytes count. */
                byte_cnt = _mm_shuffle_epi8(op_own, len_shuf_mask);