diff options
author | Sathya Perla <sathya.perla@broadcom.com> | 2017-08-28 20:40:32 +0300 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-08-29 02:57:10 +0300 |
commit | 70855603e0a129d1c810947a4e4dd7ecd6f4560d (patch) | |
tree | a29c77bbb76ed7408e90586aa3083ae95e70557e /drivers/net/ethernet/broadcom/bnxt/bnxt_vfr.h | |
parent | d5430d31ca72ec37fd539fd1c5230859509be4ef (diff) | |
download | linux-70855603e0a129d1c810947a4e4dd7ecd6f4560d.tar.xz |
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: 4ab0c6a8ffd7 ("bnxt_en: add support to enable VF-representors")
Signed-off-by: Sathya Perla <sathya.perla@broadcom.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/broadcom/bnxt/bnxt_vfr.h')
-rw-r--r-- | drivers/net/ethernet/broadcom/bnxt/bnxt_vfr.h | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_vfr.h b/drivers/net/ethernet/broadcom/bnxt/bnxt_vfr.h index e55a3b693e20..3e997c9e2580 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_vfr.h +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_vfr.h @@ -24,13 +24,17 @@ static inline struct bnxt *bnxt_get_bp_from_dl(struct devlink *dl) 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; - if (bp) - bp->dl = dl; + /* add a back pointer in dl to bp */ + if (dl) { + struct bnxt_dl *bp_dl = devlink_priv(dl); + + bp_dl->bp = bp; + } } int bnxt_dl_register(struct bnxt *bp); |