net/ixgbe: fix zeroing of RSS config
[dpdk.git] / drivers / net / octeontx2 / otx2_flow.c
index 94bd851..bdbf123 100644 (file)
@@ -528,8 +528,10 @@ otx2_flow_destroy(struct rte_eth_dev *dev,
                        return -EINVAL;
 
                /* Clear mark offload flag if there are no more mark actions */
-               if (rte_atomic32_sub_return(&npc->mark_actions, 1) == 0)
+               if (rte_atomic32_sub_return(&npc->mark_actions, 1) == 0) {
                        hw->rx_offload_flags &= ~NIX_RX_OFFLOAD_MARK_UPDATE_F;
+                       otx2_eth_set_rx_function(dev);
+               }
        }
 
        rc = flow_free_rss_action(dev, flow);
@@ -682,6 +684,7 @@ flow_update_kex_info(struct npc_xtract_info *xtract_info,
        xtract_info->hdr_off = (val >> HDR_OFF_SHIFT) & 0xff;
        xtract_info->key_off = val & 0x3f;
        xtract_info->enable = ((val >> 7) & 0x1);
+       xtract_info->flags_enable = ((val >> 6) & 0x1);
 }
 
 static void
@@ -770,6 +773,7 @@ flow_fetch_kex_cfg(struct otx2_eth_dev *dev)
        struct otx2_npc_flow_info *npc = &dev->npc_flow;
        struct npc_get_kex_cfg_rsp *kex_rsp;
        struct otx2_mbox *mbox = dev->mbox;
+       char mkex_pfl_name[MKEX_NAME_LEN];
        struct otx2_idev_kex_cfg *idev;
        int rc = 0;
 
@@ -791,6 +795,12 @@ flow_fetch_kex_cfg(struct otx2_eth_dev *dev)
                       sizeof(struct npc_get_kex_cfg_rsp));
        }
 
+       otx2_mbox_memcpy(mkex_pfl_name,
+                        idev->kex_cfg.mkex_pfl_name, MKEX_NAME_LEN);
+
+       strlcpy((char *)dev->mkex_pfl_name,
+               mkex_pfl_name, sizeof(dev->mkex_pfl_name));
+
        flow_process_mkex_cfg(npc, &idev->kex_cfg);
 
 done:
@@ -834,7 +844,7 @@ otx2_flow_init(struct otx2_eth_dev *hw)
        }
 
        npc->free_entries = rte_zmalloc(NULL, npc->flow_max_priority
-                                       * sizeof(struct rte_bitmap),
+                                       * sizeof(struct rte_bitmap *),
                                        0);
        if (npc->free_entries == NULL) {
                otx2_err("free_entries alloc failed");
@@ -843,7 +853,7 @@ otx2_flow_init(struct otx2_eth_dev *hw)
        }
 
        npc->free_entries_rev = rte_zmalloc(NULL, npc->flow_max_priority
-                                       * sizeof(struct rte_bitmap),
+                                       * sizeof(struct rte_bitmap *),
                                        0);
        if (npc->free_entries_rev == NULL) {
                otx2_err("free_entries_rev alloc failed");
@@ -852,7 +862,7 @@ otx2_flow_init(struct otx2_eth_dev *hw)
        }
 
        npc->live_entries = rte_zmalloc(NULL, npc->flow_max_priority
-                                       * sizeof(struct rte_bitmap),
+                                       * sizeof(struct rte_bitmap *),
                                        0);
        if (npc->live_entries == NULL) {
                otx2_err("live_entries alloc failed");
@@ -861,7 +871,7 @@ otx2_flow_init(struct otx2_eth_dev *hw)
        }
 
        npc->live_entries_rev = rte_zmalloc(NULL, npc->flow_max_priority
-                                       * sizeof(struct rte_bitmap),
+                                       * sizeof(struct rte_bitmap *),
                                        0);
        if (npc->live_entries_rev == NULL) {
                otx2_err("live_entries_rev alloc failed");
@@ -938,8 +948,6 @@ err:
                rte_free(npc->flow_entry_info);
        if (npc_mem)
                rte_free(npc_mem);
-       if (nix_mem)
-               rte_free(nix_mem);
        return rc;
 }