Commit e99f305b authored by Viresh Kumar's avatar Viresh Kumar Committed by Greg Kroah-Hartman
Browse files

greybus: Cleanup connection leftovers



This wouldn't happen normally, but in a buggy corner case it is possible
that all the connections aren't removed properly and they are still
present after the interfaces and endo are removed.

Warn in such a case and cleanup connections, so that /sys/bus/greybus/
can be removed while removing greybus modules.

Signed-off-by: default avatarViresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@google.com>
parent e4340b13
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -313,3 +313,13 @@ void gb_connection_exit(struct gb_connection *connection)
				 cport_id, ret);
	}
}

void gb_hd_connections_exit(struct greybus_host_device *hd)
{
	struct gb_connection *connection;

	list_for_each_entry(connection, &hd->connections, hd_links) {
		gb_connection_exit(connection);
		gb_connection_destroy(connection);
	}
}
+1 −0
Original line number Diff line number Diff line
@@ -50,6 +50,7 @@ void gb_connection_destroy(struct gb_connection *connection);

int gb_connection_init(struct gb_connection *connection);
void gb_connection_exit(struct gb_connection *connection);
void gb_hd_connections_exit(struct greybus_host_device *hd);

void greybus_data_rcvd(struct greybus_host_device *hd, u16 cport_id,
			u8 *data, size_t length);
+7 −0
Original line number Diff line number Diff line
@@ -235,6 +235,13 @@ void greybus_remove_hd(struct greybus_host_device *hd)
	 */
	gb_interfaces_remove(hd);
	gb_endo_remove(hd->endo);

	/*
	 * Make sure there are no leftovers that can potentially corrupt sysfs.
	 */
	if (WARN_ON(!list_empty(&hd->connections)))
		gb_hd_connections_exit(hd);

	kref_put_mutex(&hd->kref, free_hd, &hd_mutex);
}
EXPORT_SYMBOL_GPL(greybus_remove_hd);