The flow engine reached back to the bus device to read the MC firmware version. The bus_info pointer behind it is only attached by the primary process, so a secondary process that creates a flow dereferences a pointer it never set up.
The version is already cached in priv->mc_rev at probe time and the rest of the driver reads it from there, so use that here too. This removes the last user of DPAA2_DEV_PRIV_TO_DPAA2_DEV(), so drop the macro. Signed-off-by: Prashant Gupta <[email protected]> --- drivers/net/dpaa2/dpaa2_ethdev.h | 4 --- drivers/net/dpaa2/dpaa2_flow.c | 59 ++++++++++---------------------- 2 files changed, 18 insertions(+), 45 deletions(-) diff --git a/drivers/net/dpaa2/dpaa2_ethdev.h b/drivers/net/dpaa2/dpaa2_ethdev.h index 7d93b75be3..e02fa9a622 100644 --- a/drivers/net/dpaa2/dpaa2_ethdev.h +++ b/drivers/net/dpaa2/dpaa2_ethdev.h @@ -43,10 +43,6 @@ #define MAX_DPNI 8 #define DPAA2_MAX_CHANNELS 16 -#define DPAA2_DEV_PRIV_TO_DPAA2_DEV(priv) \ - container_of((((struct dpaa2_dev_priv *)priv)->eth_dev->device), \ - struct rte_dpaa2_device, device) - #define DPAA2_EXTRACT_PARAM_MAX_SIZE \ RTE_ALIGN(sizeof(struct dpni_ext_set_rx_tc_dist), 256) diff --git a/drivers/net/dpaa2/dpaa2_flow.c b/drivers/net/dpaa2/dpaa2_flow.c index 8456b3b80d..187381c5dd 100644 --- a/drivers/net/dpaa2/dpaa2_flow.c +++ b/drivers/net/dpaa2/dpaa2_flow.c @@ -781,13 +781,10 @@ static int dpaa2_flow_add_fs_rule(struct dpaa2_dev_priv *priv, struct dpaa2_generic_flow *flow) { - struct rte_dpaa2_device *dpaa2_dev; struct dpaa2_flow_tbl_profile *tbl_profile; int ret; struct fsl_mc_io *dpni = priv->hw; - dpaa2_dev = DPAA2_DEV_PRIV_TO_DPAA2_DEV(priv); - tbl_profile = &priv->flow_profile.tc_profile[flow->tc_id]; if (dpaa2_flow_entry_map_get(tbl_profile->entry_map, flow->entry_index)) { @@ -798,7 +795,7 @@ dpaa2_flow_add_fs_rule(struct dpaa2_dev_priv *priv, dpaa2_flow_fs_entry_log("Add", flow); - if (dpaa2_dev->bus_info->mc_rev >= DPAA2_FLOW_FRM_REPLICATION_ACTION_MC_REV) { + if (priv->mc_rev >= DPAA2_FLOW_FRM_REPLICATION_ACTION_MC_REV) { ret = dpni_add_fs_entry(dpni, CMD_PRI_LOW, priv->token, flow->tc_id, flow->entry_index, &flow->rule_cfg, &flow->flow_action.fs_action.fs_action_cfg); @@ -3642,7 +3639,6 @@ dpaa2_flow_fs_action_config(struct dpaa2_dev_priv *priv, struct dpaa2_generic_flow *flow, const struct rte_flow_action *rte_action) { - struct rte_dpaa2_device *dpaa2_dev; struct rte_eth_dev *dest_dev; struct dpaa2_dev_priv *dest_priv; const struct rte_flow_action_queue *dest_queue; @@ -3651,11 +3647,9 @@ dpaa2_flow_fs_action_config(struct dpaa2_dev_priv *priv, uint16_t num_tokens; struct dpaa2_dev_flow_fs_action *fs_action; - dpaa2_dev = DPAA2_DEV_PRIV_TO_DPAA2_DEV(priv); - fs_action = &flow->flow_action.fs_action; if (fs_action->action_type != RTE_FLOW_ACTION_TYPE_END) { - if (dpaa2_dev->bus_info->mc_rev >= DPAA2_FLOW_FRM_REPLICATION_ACTION_MC_REV && + if (priv->mc_rev >= DPAA2_FLOW_FRM_REPLICATION_ACTION_MC_REV && (fs_action->action_type == RTE_FLOW_ACTION_TYPE_PORT_ID || fs_action->action_type == RTE_FLOW_ACTION_TYPE_PORT_REPRESENTOR)) { if (rte_action->type != RTE_FLOW_ACTION_TYPE_PORT_ID && @@ -3807,21 +3801,19 @@ dpaa2_flow_fs_table_set_default(struct dpaa2_dev_priv *priv, uint8_t tc_id, int discard, uint16_t default_queue) { int ret; - struct rte_dpaa2_device *dpaa2_dev; struct dpni_rx_dist_cfg *tc_cfg; struct fsl_mc_io *dpni = priv->hw; struct dpaa2_flow_tbl_profile *tbl_profile; struct dpaa2_queue *queue; char mc_rev[1024]; - dpaa2_dev = DPAA2_DEV_PRIV_TO_DPAA2_DEV(priv); tbl_profile = &priv->flow_profile.tc_profile[tc_id]; snprintf(mc_rev, 1024, "MC rev(%d.%d.%d)", - RTE_FSL_MC_REV_MAJOR(dpaa2_dev->bus_info->mc_rev), - RTE_FSL_MC_REV_MINOR(dpaa2_dev->bus_info->mc_rev), - RTE_FSL_MC_REV_REVISION(dpaa2_dev->bus_info->mc_rev)); + RTE_FSL_MC_REV_MAJOR(priv->mc_rev), + RTE_FSL_MC_REV_MINOR(priv->mc_rev), + RTE_FSL_MC_REV_REVISION(priv->mc_rev)); if (!tbl_profile->dpkg.num_extracts && - dpaa2_dev->bus_info->mc_rev < DPAA2_QOS_FLOW_TABLE_SET_V3_MC_REV) { + priv->mc_rev < DPAA2_QOS_FLOW_TABLE_SET_V3_MC_REV) { DPAA2_PMD_DEBUG("%s can't set miss action of FS table indepentently.", mc_rev); return 0; @@ -3946,26 +3938,24 @@ dpaa2_flow_qos_table_set_default(struct dpaa2_dev_priv *priv, int discard, uint8_t default_tc, uint16_t default_flow) { int ret; - struct rte_dpaa2_device *dpaa2_dev; struct dpni_qos_tbl_cfg qos_cfg; struct fsl_mc_io *dpni = priv->hw; struct dpaa2_flow_tbl_profile *tbl_profile; char mc_rev[1024]; - dpaa2_dev = DPAA2_DEV_PRIV_TO_DPAA2_DEV(priv); tbl_profile = &priv->flow_profile.qos_profile; snprintf(mc_rev, 1024, "MC rev(%d.%d.%d)", - RTE_FSL_MC_REV_MAJOR(dpaa2_dev->bus_info->mc_rev), - RTE_FSL_MC_REV_MINOR(dpaa2_dev->bus_info->mc_rev), - RTE_FSL_MC_REV_REVISION(dpaa2_dev->bus_info->mc_rev)); + RTE_FSL_MC_REV_MAJOR(priv->mc_rev), + RTE_FSL_MC_REV_MINOR(priv->mc_rev), + RTE_FSL_MC_REV_REVISION(priv->mc_rev)); if (!tbl_profile->dpkg.num_extracts && - dpaa2_dev->bus_info->mc_rev < DPAA2_QOS_FLOW_TABLE_SET_V3_MC_REV) { + priv->mc_rev < DPAA2_QOS_FLOW_TABLE_SET_V3_MC_REV) { DPAA2_PMD_DEBUG("%s can't set miss action of QoS table indepentently.", mc_rev); return 0; } if (default_flow < priv->dist_queues && - dpaa2_dev->bus_info->mc_rev < DPAA2_QOS_FLOW_TABLE_MISS_FLOW_ACTION_MC_REV) { + priv->mc_rev < DPAA2_QOS_FLOW_TABLE_MISS_FLOW_ACTION_MC_REV) { DPAA2_PMD_WARN("%s can't direct miss traffic to TC%d-flow%d by QoS table only.", mc_rev, default_tc, default_flow); return 0; @@ -4002,7 +3992,6 @@ static int dpaa2_flow_qos_table_config(struct dpaa2_dev_priv *priv, int rss_dist) { - struct rte_dpaa2_device *dpaa2_dev; struct dpaa2_flow_tbl_profile *tbl_profile; uint8_t *key_cfg_buf; int ret; @@ -4064,8 +4053,7 @@ dpaa2_flow_qos_table_config(struct dpaa2_dev_priv *priv, qos_cfg->discard_on_miss = false; } - dpaa2_dev = DPAA2_DEV_PRIV_TO_DPAA2_DEV(priv); - if (dpaa2_dev->bus_info->mc_rev < DPAA2_QOS_FLOW_TABLE_SET_V3_MC_REV) + if (priv->mc_rev < DPAA2_QOS_FLOW_TABLE_SET_V3_MC_REV) ret = dpni_set_qos_table_v2(dpni, CMD_PRI_LOW, priv->token, qos_cfg); else ret = dpni_set_qos_table(dpni, CMD_PRI_LOW, priv->token, qos_cfg); @@ -4209,7 +4197,6 @@ static int dpaa2_flow_set_police_action(struct dpaa2_dev_priv *priv, uint8_t tc_id, const struct rte_flow_action_meter_mark *meter_mark) { - struct rte_dpaa2_device *dpaa2_dev; struct dpni_rx_tc_policing_cfg policing_cfg = {0}; const struct dpaa2_dev_meter_profile *dpaa2_profile; const struct dpaa2_dev_meter_policy *dpaa2_policy = NULL; @@ -4221,8 +4208,6 @@ dpaa2_flow_set_police_action(struct dpaa2_dev_priv *priv, return -ENOTSUP; } - dpaa2_dev = DPAA2_DEV_PRIV_TO_DPAA2_DEV(priv); - dpaa2_profile = (void *)meter_mark->profile; if (!dpaa2_profile) { DPAA2_PMD_ERR("Meter profile not specified!"); @@ -4244,9 +4229,8 @@ dpaa2_flow_set_police_action(struct dpaa2_dev_priv *priv, if (priv->flow_profile.mtr_flow[tc_id]) { /** Update existing policer.*/ - dpaa2_dev = DPAA2_DEV_PRIV_TO_DPAA2_DEV(priv); policing_cfg.options |= DPNI_POLICER_OPT_DO_NOT_RESET_COUNTERS; - if (dpaa2_dev->bus_info->mc_rev < DPAA2_POLICER_NOT_RESET_COUNTER_MC_REV) + if (priv->mc_rev < DPAA2_POLICER_NOT_RESET_COUNTER_MC_REV) DPAA2_PMD_WARN("The existing policer's counters will be cleaned."); } @@ -4269,7 +4253,7 @@ dpaa2_flow_set_police_action(struct dpaa2_dev_priv *priv, policing_cfg.eir = dpaa2_profile->pir; policing_cfg.ebs = dpaa2_profile->pbs; - if (dpaa2_dev->bus_info->mc_rev < DPAA2_POLICER_SET_V2_MC_REV) { + if (priv->mc_rev < DPAA2_POLICER_SET_V2_MC_REV) { ret = dpni_set_rx_tc_policing_v1(priv->hw, CMD_PRI_LOW, priv->token, tc_id, &policing_cfg); } else { @@ -5400,7 +5384,6 @@ dpaa2_flow_generic_flow_create(struct rte_eth_dev *dev, int mix_extract, int is_rss) { struct dpaa2_generic_flow *flow = NULL; - struct rte_dpaa2_device *dpaa2_dev; struct dpaa2_dev_priv *priv = dev->data->dev_private; int ret, idx = -1; uint64_t iova, mc_rev; @@ -5416,8 +5399,7 @@ dpaa2_flow_generic_flow_create(struct rte_eth_dev *dev, if (type != DPAA2_FLOW_QOS_TYPE && type != DPAA2_FLOW_FS_TYPE) return NULL; - dpaa2_dev = DPAA2_DEV_PRIV_TO_DPAA2_DEV(priv); - mc_rev = dpaa2_dev->bus_info->mc_rev; + mc_rev = priv->mc_rev; if (actions) { ret = dpaa2_flow_qos_fs_action_set(actions, qos_actions, @@ -5912,19 +5894,17 @@ static int dpaa2_flow_destroy_meter_flow(struct rte_eth_dev *dev, struct dpaa2_dev_flow *flow) { - struct rte_dpaa2_device *dpaa2_dev; struct dpaa2_dev_priv *priv = dev->data->dev_private; struct dpni_rx_tc_policing_cfg cfg; int ret; uint8_t tc_id; RTE_ASSERT(!flow->qos_flow && flow->fs_flow); - dpaa2_dev = DPAA2_DEV_PRIV_TO_DPAA2_DEV(priv); tc_id = flow->fs_flow->tc_id; RTE_ASSERT(priv->flow_profile.mtr_flow[tc_id] == flow); memset(&cfg, 0, sizeof(cfg)); cfg.mode = DPNI_POLICER_MODE_NONE; - if (dpaa2_dev->bus_info->mc_rev < DPAA2_POLICER_SET_V2_MC_REV) { + if (priv->mc_rev < DPAA2_POLICER_SET_V2_MC_REV) { ret = dpni_set_rx_tc_policing_v1(priv->hw, CMD_PRI_LOW, priv->token, tc_id, &cfg); } else { @@ -6141,7 +6121,6 @@ dpaa2_flow_actions_update(struct rte_eth_dev *dev, const struct rte_flow_action actions[], struct rte_flow_error *error) { - struct rte_dpaa2_device *dpaa2_dev; struct dpaa2_dev_priv *priv = dev->data->dev_private; struct dpaa2_dev_flow *flow; struct dpaa2_flow_tbl_profile *tbl_profile = NULL; @@ -6162,8 +6141,6 @@ dpaa2_flow_actions_update(struct rte_eth_dev *dev, const struct rte_flow_action_queue *action_q; struct dpaa2_queue *rxq = NULL; - dpaa2_dev = DPAA2_DEV_PRIV_TO_DPAA2_DEV(priv); - /* check for the valid flow */ flow = (void *)_flow; if (flow->is_meter_flow) { @@ -6275,7 +6252,7 @@ dpaa2_flow_actions_update(struct rte_eth_dev *dev, if (fs_action_num > 0 && fs_actions[0].type != RTE_FLOW_ACTION_TYPE_PORT_ID && fs_actions[0].type != RTE_FLOW_ACTION_TYPE_REPRESENTED_PORT && - dpaa2_dev->bus_info->mc_rev >= DPAA2_FS_FLOW_HW_ACTION_UPDATE_MC_REV) { + priv->mc_rev >= DPAA2_FS_FLOW_HW_ACTION_UPDATE_MC_REV) { /** Action HW update doesn't support redirecting frames to other DPNIs.*/ hw_update = true; goto skip_remove_fs_entry; @@ -6365,7 +6342,7 @@ dpaa2_flow_actions_update(struct rte_eth_dev *dev, } hw_update = false; - if (dpaa2_dev->bus_info->mc_rev >= DPAA2_QOS_FLOW_HW_ACTION_UPDATE_MC_REV) { + if (priv->mc_rev >= DPAA2_QOS_FLOW_HW_ACTION_UPDATE_MC_REV) { /** Action HW update doesn't support redirecting frames to other DPNIs.*/ hw_update = true; goto skip_remove_qos_entry; -- 2.43.0

