From: Geetha sowjanya Previously, BPID assignment under CONFIG_DCB assumed `queue_to_pfc_map` was always initialized. For SDP VFs this leads to invalid memory access as it was not initialized. This patch adds a NULL check for `queue_to_pfc_map` before dereferencing it. Also, simplifies the logic by always assigning a default BPID first, then conditionally overriding it if CONFIG_DCB is enabled and the map exists. Fixes: 184fb40f731b ("octeontx2-pf: Avoid adding dcbnl_ops for LBK and SDP vf"). Signed-off-by: Geetha sowjanya Signed-off-by: Subrat Pandey --- drivers/net/ethernet/marvell/octeontx2/nic/cn20k.c | 8 +++++--- .../ethernet/marvell/octeontx2/nic/otx2_common.c | 13 +++++++------ 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/cn20k.c b/drivers/net/ethernet/marvell/octeontx2/nic/cn20k.c index dbf173196608..f3903cce9bf7 100644 --- a/drivers/net/ethernet/marvell/octeontx2/nic/cn20k.c +++ b/drivers/net/ethernet/marvell/octeontx2/nic/cn20k.c @@ -245,10 +245,12 @@ int cn20k_register_pfvf_mbox_intr(struct otx2_nic *pf, int numvfs) static u8 cn20k_aura_bpid_idx(struct otx2_nic *pfvf, int aura_id) { #ifdef CONFIG_DCB - return pfvf->queue_to_pfc_map[aura_id]; -#else - return 0; + if (pfvf->queue_to_pfc_map) + return pfvf->queue_to_pfc_map[aura_id]; + else + return 0; #endif + return 0; } static int cn20k_tc_get_entry_index(struct otx2_flow_config *flow_cfg, diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c index 3d253132a17f..b4691472d2a3 100644 --- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c +++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c @@ -1132,10 +1132,10 @@ int otx2_cq_init(struct otx2_nic *pfvf, u16 qidx) if (!is_otx2_lbkvf(pfvf->pdev)) { /* Enable receive CQ backpressure */ aq->cq.bp_ena = 1; -#ifdef CONFIG_DCB - aq->cq.bpid = pfvf->bpid[pfvf->queue_to_pfc_map[qidx]]; -#else aq->cq.bpid = pfvf->bpid[0]; +#ifdef CONFIG_DCB + if (pfvf->queue_to_pfc_map) + aq->cq.bpid = pfvf->bpid[pfvf->queue_to_pfc_map[qidx]]; #endif /* Set backpressure level is same as cq pass level */ @@ -1433,10 +1433,11 @@ int otx2_aura_aq_init(struct otx2_nic *pfvf, int aura_id, */ if (pfvf->nix_blkaddr == BLKADDR_NIX1) aq->aura.bp_ena = 1; -#ifdef CONFIG_DCB - aq->aura.nix0_bpid = pfvf->bpid[pfvf->queue_to_pfc_map[aura_id]]; -#else + aq->aura.nix0_bpid = pfvf->bpid[0]; +#ifdef CONFIG_DCB + if (pfvf->queue_to_pfc_map) + aq->aura.nix0_bpid = pfvf->bpid[pfvf->queue_to_pfc_map[aura_id]]; #endif /* Set backpressure level for RQ's Aura */ -- 2.43.0