devlink_port->index = port_index;
        devlink_port->registered = true;
        spin_lock_init(&devlink_port->type_lock);
+       INIT_LIST_HEAD(&devlink_port->reporter_list);
+       mutex_init(&devlink_port->reporters_lock);
        list_add_tail(&devlink_port->list, &devlink->port_list);
        INIT_LIST_HEAD(&devlink_port->param_list);
        mutex_unlock(&devlink->lock);
-       INIT_LIST_HEAD(&devlink_port->reporter_list);
-       mutex_init(&devlink_port->reporters_lock);
        INIT_DELAYED_WORK(&devlink_port->type_warn_dw, &devlink_port_type_warn);
        devlink_port_type_warn_schedule(devlink_port);
        devlink_port_notify(devlink_port, DEVLINK_CMD_PORT_NEW);
 {
        struct devlink *devlink = devlink_port->devlink;
 
-       WARN_ON(!list_empty(&devlink_port->reporter_list));
-       mutex_destroy(&devlink_port->reporters_lock);
        devlink_port_type_warn_cancel(devlink_port);
        devlink_port_notify(devlink_port, DEVLINK_CMD_PORT_DEL);
        mutex_lock(&devlink->lock);
        list_del(&devlink_port->list);
        mutex_unlock(&devlink->lock);
+       WARN_ON(!list_empty(&devlink_port->reporter_list));
+       mutex_destroy(&devlink_port->reporters_lock);
 }
 EXPORT_SYMBOL_GPL(devlink_port_unregister);