mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-01 03:44:27 -04:00
Merge branch 'bnxt_en-bug-fixes'
Michael Chan says: ==================== bnxt_en: Bug fixes This small series contains 2 fixes. The first one fixes the PTP initialization logic on older chips to avoid logging a warning. The second one fixes a potenial NULL pointer dereference in the driver's aux bus unload path. ==================== Link: https://lore.kernel.org/r/20230417065819.122055-1-michael.chan@broadcom.com Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
@@ -7627,7 +7627,7 @@ static int __bnxt_hwrm_ptp_qcfg(struct bnxt *bp)
|
||||
u8 flags;
|
||||
int rc;
|
||||
|
||||
if (bp->hwrm_spec_code < 0x10801) {
|
||||
if (bp->hwrm_spec_code < 0x10801 || !BNXT_CHIP_P5_THOR(bp)) {
|
||||
rc = -ENODEV;
|
||||
goto no_ptp;
|
||||
}
|
||||
|
||||
@@ -304,7 +304,7 @@ void bnxt_rdma_aux_device_uninit(struct bnxt *bp)
|
||||
struct auxiliary_device *adev;
|
||||
|
||||
/* Skip if no auxiliary device init was done. */
|
||||
if (!(bp->flags & BNXT_FLAG_ROCE_CAP))
|
||||
if (!bp->aux_priv)
|
||||
return;
|
||||
|
||||
aux_priv = bp->aux_priv;
|
||||
@@ -324,6 +324,7 @@ static void bnxt_aux_dev_release(struct device *dev)
|
||||
bp->edev = NULL;
|
||||
kfree(aux_priv->edev);
|
||||
kfree(aux_priv);
|
||||
bp->aux_priv = NULL;
|
||||
}
|
||||
|
||||
static void bnxt_set_edev_info(struct bnxt_en_dev *edev, struct bnxt *bp)
|
||||
@@ -359,19 +360,18 @@ void bnxt_rdma_aux_device_init(struct bnxt *bp)
|
||||
if (!(bp->flags & BNXT_FLAG_ROCE_CAP))
|
||||
return;
|
||||
|
||||
bp->aux_priv = kzalloc(sizeof(*bp->aux_priv), GFP_KERNEL);
|
||||
if (!bp->aux_priv)
|
||||
aux_priv = kzalloc(sizeof(*bp->aux_priv), GFP_KERNEL);
|
||||
if (!aux_priv)
|
||||
goto exit;
|
||||
|
||||
bp->aux_priv->id = ida_alloc(&bnxt_aux_dev_ids, GFP_KERNEL);
|
||||
if (bp->aux_priv->id < 0) {
|
||||
aux_priv->id = ida_alloc(&bnxt_aux_dev_ids, GFP_KERNEL);
|
||||
if (aux_priv->id < 0) {
|
||||
netdev_warn(bp->dev,
|
||||
"ida alloc failed for ROCE auxiliary device\n");
|
||||
kfree(bp->aux_priv);
|
||||
kfree(aux_priv);
|
||||
goto exit;
|
||||
}
|
||||
|
||||
aux_priv = bp->aux_priv;
|
||||
aux_dev = &aux_priv->aux_dev;
|
||||
aux_dev->id = aux_priv->id;
|
||||
aux_dev->name = "rdma";
|
||||
@@ -380,10 +380,11 @@ void bnxt_rdma_aux_device_init(struct bnxt *bp)
|
||||
|
||||
rc = auxiliary_device_init(aux_dev);
|
||||
if (rc) {
|
||||
ida_free(&bnxt_aux_dev_ids, bp->aux_priv->id);
|
||||
kfree(bp->aux_priv);
|
||||
ida_free(&bnxt_aux_dev_ids, aux_priv->id);
|
||||
kfree(aux_priv);
|
||||
goto exit;
|
||||
}
|
||||
bp->aux_priv = aux_priv;
|
||||
|
||||
/* From this point, all cleanup will happen via the .release callback &
|
||||
* any error unwinding will need to include a call to
|
||||
|
||||
Reference in New Issue
Block a user