mirror of https://gitee.com/openkylin/linux.git
greybus: interface: move interface-removal helper
Move helper to remove all interfaces of a host-device to the svc code and call it when removing the svc device as this needs to be coordinated with flushing the SVC work queue. Signed-off-by: Johan Hovold <johan@hovoldconsulting.com> Reviewed-by: Jeffrey Carlyle <jcarlyle@google.com> Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
parent
64acb6611f
commit
66d674cfaf
|
@ -138,7 +138,6 @@ void gb_hd_del(struct gb_host_device *hd)
|
|||
* removing the remaining interfaces.
|
||||
*/
|
||||
gb_svc_del(hd->svc);
|
||||
gb_interfaces_remove(hd);
|
||||
|
||||
device_del(&hd->dev);
|
||||
}
|
||||
|
|
|
@ -167,14 +167,6 @@ void gb_interface_remove(struct gb_interface *intf)
|
|||
put_device(&intf->dev);
|
||||
}
|
||||
|
||||
void gb_interfaces_remove(struct gb_host_device *hd)
|
||||
{
|
||||
struct gb_interface *intf, *temp;
|
||||
|
||||
list_for_each_entry_safe(intf, temp, &hd->interfaces, links)
|
||||
gb_interface_remove(intf);
|
||||
}
|
||||
|
||||
/*
|
||||
* Intialise an interface by enabling the control connection and fetching the
|
||||
* manifest and other information over it.
|
||||
|
|
|
@ -50,6 +50,5 @@ struct gb_interface *gb_interface_create(struct gb_host_device *hd,
|
|||
int gb_interface_init(struct gb_interface *intf);
|
||||
int gb_interface_add(struct gb_interface *intf);
|
||||
void gb_interface_remove(struct gb_interface *intf);
|
||||
void gb_interfaces_remove(struct gb_host_device *hd);
|
||||
|
||||
#endif /* __INTERFACE_H */
|
||||
|
|
|
@ -997,6 +997,14 @@ int gb_svc_add(struct gb_svc *svc)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void gb_svc_remove_interfaces(struct gb_svc *svc)
|
||||
{
|
||||
struct gb_interface *intf, *tmp;
|
||||
|
||||
list_for_each_entry_safe(intf, tmp, &svc->hd->interfaces, links)
|
||||
gb_interface_remove(intf);
|
||||
}
|
||||
|
||||
void gb_svc_del(struct gb_svc *svc)
|
||||
{
|
||||
gb_connection_disable(svc->connection);
|
||||
|
@ -1012,6 +1020,8 @@ void gb_svc_del(struct gb_svc *svc)
|
|||
}
|
||||
|
||||
flush_workqueue(svc->wq);
|
||||
|
||||
gb_svc_remove_interfaces(svc);
|
||||
}
|
||||
|
||||
void gb_svc_put(struct gb_svc *svc)
|
||||
|
|
Loading…
Reference in New Issue