staging: most: move channel disconnect to function most_deregister_interface

This patch moves the code that disconnects linked channels. It is needed
to have cleaning things up done right.

Signed-off-by: Christian Gromm <christian.gromm@microchip.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Christian Gromm 2015-12-22 10:52:55 +01:00 committed by Greg Kroah-Hartman
parent 245dc23d23
commit a0fceb1fb8
1 changed files with 11 additions and 13 deletions

View File

@ -738,20 +738,7 @@ static void destroy_most_inst_obj(struct most_inst_obj *inst)
{
struct most_c_obj *c, *tmp;
/* need to destroy channels first, since
* each channel incremented the
* reference count of the inst->kobj
*/
list_for_each_entry_safe(c, tmp, &inst->channel_list, list) {
if (c->aim0.ptr)
c->aim0.ptr->disconnect_channel(c->iface,
c->channel_id);
if (c->aim1.ptr)
c->aim1.ptr->disconnect_channel(c->iface,
c->channel_id);
c->aim0.ptr = NULL;
c->aim1.ptr = NULL;
mutex_lock(&deregister_mutex);
flush_trash_fifo(c);
flush_channel_fifos(c);
@ -1837,6 +1824,17 @@ void most_deregister_interface(struct most_interface *iface)
pr_info("deregistering MOST device %s (%s)\n", i->kobj.name,
iface->description);
list_for_each_entry(c, &i->channel_list, list) {
if (c->aim0.ptr)
c->aim0.ptr->disconnect_channel(c->iface,
c->channel_id);
if (c->aim1.ptr)
c->aim1.ptr->disconnect_channel(c->iface,
c->channel_id);
c->aim0.ptr = NULL;
c->aim1.ptr = NULL;
}
mutex_lock(&deregister_mutex);
atomic_set(&i->tainted, 1);
mutex_unlock(&deregister_mutex);