Commit 66d674cf authored by Johan Hovold's avatar Johan Hovold Committed by Greg Kroah-Hartman

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: default avatarJohan Hovold <johan@hovoldconsulting.com>
Reviewed-by: default avatarJeffrey Carlyle <jcarlyle@google.com>
Reviewed-by: default avatarViresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@google.com>
parent 64acb661
...@@ -138,7 +138,6 @@ void gb_hd_del(struct gb_host_device *hd) ...@@ -138,7 +138,6 @@ void gb_hd_del(struct gb_host_device *hd)
* removing the remaining interfaces. * removing the remaining interfaces.
*/ */
gb_svc_del(hd->svc); gb_svc_del(hd->svc);
gb_interfaces_remove(hd);
device_del(&hd->dev); device_del(&hd->dev);
} }
......
...@@ -167,14 +167,6 @@ void gb_interface_remove(struct gb_interface *intf) ...@@ -167,14 +167,6 @@ void gb_interface_remove(struct gb_interface *intf)
put_device(&intf->dev); 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 * Intialise an interface by enabling the control connection and fetching the
* manifest and other information over it. * manifest and other information over it.
......
...@@ -50,6 +50,5 @@ struct gb_interface *gb_interface_create(struct gb_host_device *hd, ...@@ -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_init(struct gb_interface *intf);
int gb_interface_add(struct gb_interface *intf); int gb_interface_add(struct gb_interface *intf);
void gb_interface_remove(struct gb_interface *intf); void gb_interface_remove(struct gb_interface *intf);
void gb_interfaces_remove(struct gb_host_device *hd);
#endif /* __INTERFACE_H */ #endif /* __INTERFACE_H */
...@@ -997,6 +997,14 @@ int gb_svc_add(struct gb_svc *svc) ...@@ -997,6 +997,14 @@ int gb_svc_add(struct gb_svc *svc)
return 0; 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) void gb_svc_del(struct gb_svc *svc)
{ {
gb_connection_disable(svc->connection); gb_connection_disable(svc->connection);
...@@ -1012,6 +1020,8 @@ void gb_svc_del(struct gb_svc *svc) ...@@ -1012,6 +1020,8 @@ void gb_svc_del(struct gb_svc *svc)
} }
flush_workqueue(svc->wq); flush_workqueue(svc->wq);
gb_svc_remove_interfaces(svc);
} }
void gb_svc_put(struct gb_svc *svc) void gb_svc_put(struct gb_svc *svc)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment