On Thu, Oct 08, 2020 at 08:22:44AM -0400, Willem de Bruijn wrote:
On Thu, Oct 8, 2020 at 7:58 AM Coiby Xu <coiby...@gmail.com> wrote:

Initialize devlink health dump framework for the dlge driver so the
coredump could be done via devlink.

Signed-off-by: Coiby Xu <coiby...@gmail.com>

@@ -4556,6 +4559,13 @@ static int qlge_probe(struct pci_dev *pdev,
        struct ql_adapter *qdev = NULL;
        static int cards_found;
        int err = 0;
+       struct devlink *devlink;
+       struct qlge_devlink *ql_devlink;
+
+       devlink = devlink_alloc(&qlge_devlink_ops, sizeof(struct qlge_devlink));
+       if (!devlink)
+               return -ENOMEM;
+       ql_devlink = devlink_priv(devlink);

        ndev = alloc_etherdev_mq(sizeof(struct ql_adapter),
                                 min(MAX_CPUS,

need to goto devlink_free instead of return -ENOMEM here, too.

devlink_alloc return NULL only if kzalloc return NULL. So we
shouldn't go to devlink_free which will call kfree.

@@ -4614,6 +4624,16 @@ static int qlge_probe(struct pci_dev *pdev,
                free_netdev(ndev);
                return err;

and here

But I should goto devlink_free here. Thank you for pointing out my
neglect.

        }
+
+       err = devlink_register(devlink, &pdev->dev);
+       if (err) {
+               goto devlink_free;
+       }
+
+       qlge_health_create_reporters(ql_devlink);
+       ql_devlink->qdev = qdev;
+       ql_devlink->ndev = ndev;
+       qdev->ql_devlink = ql_devlink;
        /* Start up the timer to trigger EEH if
         * the bus goes dead
         */
@@ -4624,6 +4644,10 @@ static int qlge_probe(struct pci_dev *pdev,
        atomic_set(&qdev->lb_count, 0);
        cards_found++;
        return 0;
+
+devlink_free:
+       devlink_free(devlink);
+       return err;
 }

--
Best regards,
Coiby
_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to