mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-09 05:39:54 -04:00
bnxt_en: Do not treat DSN (Digital Serial Number) read failure as fatal.
[ Upstream commit d061b2411d5f3d6272187ab734ce0640827fca13 ]
DSN read can fail, for example on a kdump kernel without PCIe extended
config space support. If DSN read fails, don't set the
BNXT_FLAG_DSN_VALID flag and continue loading. Check the flag
to see if the stored DSN is valid before using it. Only VF reps
creation should fail without valid DSN.
Fixes: 03213a9965 ("bnxt: move bp->switch_id initialization to PF probe")
Reported-by: Marc Smith <msmith626@gmail.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
e2c97ff562
commit
698f8c2089
3 changed files with 7 additions and 4 deletions
|
|
@ -11299,7 +11299,7 @@ int bnxt_get_port_parent_id(struct net_device *dev,
|
|||
return -EOPNOTSUPP;
|
||||
|
||||
/* The PF and it's VF-reps only support the switchdev framework */
|
||||
if (!BNXT_PF(bp))
|
||||
if (!BNXT_PF(bp) || !(bp->flags & BNXT_FLAG_DSN_VALID))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
ppid->id_len = sizeof(bp->switch_id);
|
||||
|
|
@ -11691,6 +11691,7 @@ static int bnxt_pcie_dsn_get(struct bnxt *bp, u8 dsn[])
|
|||
put_unaligned_le32(dw, &dsn[0]);
|
||||
pci_read_config_dword(pdev, pos + 4, &dw);
|
||||
put_unaligned_le32(dw, &dsn[4]);
|
||||
bp->flags |= BNXT_FLAG_DSN_VALID;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -11802,9 +11803,7 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
|
||||
if (BNXT_PF(bp)) {
|
||||
/* Read the adapter's DSN to use as the eswitch switch_id */
|
||||
rc = bnxt_pcie_dsn_get(bp, bp->switch_id);
|
||||
if (rc)
|
||||
goto init_err_pci_clean;
|
||||
bnxt_pcie_dsn_get(bp, bp->switch_id);
|
||||
}
|
||||
|
||||
/* MTU range: 60 - FW defined max */
|
||||
|
|
|
|||
|
|
@ -1510,6 +1510,7 @@ struct bnxt {
|
|||
#define BNXT_FLAG_NO_AGG_RINGS 0x20000
|
||||
#define BNXT_FLAG_RX_PAGE_MODE 0x40000
|
||||
#define BNXT_FLAG_MULTI_HOST 0x100000
|
||||
#define BNXT_FLAG_DSN_VALID 0x200000
|
||||
#define BNXT_FLAG_DOUBLE_DB 0x400000
|
||||
#define BNXT_FLAG_CHIP_NITRO_A0 0x1000000
|
||||
#define BNXT_FLAG_DIM 0x2000000
|
||||
|
|
|
|||
|
|
@ -398,6 +398,9 @@ static int bnxt_vf_reps_create(struct bnxt *bp)
|
|||
struct net_device *dev;
|
||||
int rc, i;
|
||||
|
||||
if (!(bp->flags & BNXT_FLAG_DSN_VALID))
|
||||
return -ENODEV;
|
||||
|
||||
bp->vf_reps = kcalloc(num_vfs, sizeof(vf_rep), GFP_KERNEL);
|
||||
if (!bp->vf_reps)
|
||||
return -ENOMEM;
|
||||
|
|
|
|||
Loading…
Reference in a new issue