void fw_devlink_resume(void)
{
	struct device *dev, *tmp;
	LIST_HEAD(probe_list);

	mutex_lock(&defer_fw_devlink_lock);
	if (!defer_fw_devlink_count) {
		WARN(true, "Unmatched fw_devlink pause/resume!");
		goto out;
	}

	defer_fw_devlink_count--;
	if (defer_fw_devlink_count)
		goto out;

	device_link_add_missing_supplier_links();
	list_splice_tail_init(&deferred_fw_devlink, &probe_list);
out:
	mutex_unlock(&defer_fw_devlink_lock);

	/*
	 * bus_probe_device() can cause new devices to get added and they'll
	 * try to grab defer_fw_devlink_lock. So, this needs to be done outside
	 * the defer_fw_devlink_lock.
	 */
	list_for_each_entry_safe(dev, tmp, &probe_list, links.defer_hook) {
		list_del_init(&dev->links.defer_hook);
		bus_probe_device(dev);
	}
}
void fw_devlink_resume(void)
{
	struct device *dev, *tmp;
	LIST_HEAD(probe_list);

	mutex_lock(&defer_fw_devlink_lock);
	if (!defer_fw_devlink_count) {
		WARN(true, "Unmatched fw_devlink pause/resume!");
		goto out;
	}

	defer_fw_devlink_count--;
	if (defer_fw_devlink_count)
		goto out;

	device_link_add_missing_supplier_links();
	list_splice_tail_init(&deferred_fw_devlink, &probe_list);
out:
	mutex_unlock(&defer_fw_devlink_lock);

	 
	list_for_each_entry_safe(dev, tmp, &probe_list, links.defer_hook) {
		list_del_init(&dev->links.defer_hook);
		bus_probe_device(dev);
	}
}