Commit 70855603 authored by Sathya Perla's avatar Sathya Perla Committed by David S. Miller

bnxt_en: fix clearing devlink ptr from bnxt struct

The routine bnxt_link_bp_to_dl() is used to set the devlink ptr
in bnxt struct (bp) and also to set the bnxt back ptr in
the devlink struct.  If devlink_register() fails, bp->dl must
be cleared which is not happening currently. This patch fixes
bnxt_link_bp_to_dl() to clear bp->dl by passing  a NULL dl ptr.

Fixes: 4ab0c6a8 ("bnxt_en: add support to enable VF-representors")
Signed-off-by: default avatarSathya Perla <sathya.perla@broadcom.com>
Signed-off-by: default avatarMichael Chan <michael.chan@broadcom.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent d5430d31
...@@ -468,11 +468,11 @@ int bnxt_dl_register(struct bnxt *bp) ...@@ -468,11 +468,11 @@ int bnxt_dl_register(struct bnxt *bp)
return -ENOMEM; return -ENOMEM;
} }
bnxt_link_bp_to_dl(dl, bp); bnxt_link_bp_to_dl(bp, dl);
bp->eswitch_mode = DEVLINK_ESWITCH_MODE_LEGACY; bp->eswitch_mode = DEVLINK_ESWITCH_MODE_LEGACY;
rc = devlink_register(dl, &bp->pdev->dev); rc = devlink_register(dl, &bp->pdev->dev);
if (rc) { if (rc) {
bnxt_link_bp_to_dl(dl, NULL); bnxt_link_bp_to_dl(bp, NULL);
devlink_free(dl); devlink_free(dl);
netdev_warn(bp->dev, "devlink_register failed. rc=%d", rc); netdev_warn(bp->dev, "devlink_register failed. rc=%d", rc);
return rc; return rc;
......
...@@ -24,13 +24,17 @@ static inline struct bnxt *bnxt_get_bp_from_dl(struct devlink *dl) ...@@ -24,13 +24,17 @@ static inline struct bnxt *bnxt_get_bp_from_dl(struct devlink *dl)
return ((struct bnxt_dl *)devlink_priv(dl))->bp; return ((struct bnxt_dl *)devlink_priv(dl))->bp;
} }
static inline void bnxt_link_bp_to_dl(struct devlink *dl, struct bnxt *bp) /* To clear devlink pointer from bp, pass NULL dl */
static inline void bnxt_link_bp_to_dl(struct bnxt *bp, struct devlink *dl)
{ {
struct bnxt_dl *bp_dl = devlink_priv(dl); bp->dl = dl;
bp_dl->bp = bp; /* add a back pointer in dl to bp */
if (bp) if (dl) {
bp->dl = dl; struct bnxt_dl *bp_dl = devlink_priv(dl);
bp_dl->bp = bp;
}
} }
int bnxt_dl_register(struct bnxt *bp); int bnxt_dl_register(struct bnxt *bp);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment