greybus: interface: fix hot-unplug control-connection timeouts
Set an interface disconnected flag when the interface has been hot-unplugged (e.g. forcibly removed or after a reboot), and use it to disable the control connection early when deregistering the interface and its bundles. This avoids a one-second (default) timeout for every enabled connection (e.g. one per bundle) at hot-unplug, something which for the default gpbridge manifest currently amounts to five seconds. Signed-off-by: Johan Hovold <johan@hovoldconsulting.com> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
parent
c634650ecc
commit
141af4f054
@ -130,6 +130,9 @@ void gb_interface_remove(struct gb_interface *intf)
|
||||
struct gb_bundle *bundle;
|
||||
struct gb_bundle *next;
|
||||
|
||||
if (intf->disconnected)
|
||||
gb_control_disable(intf->control);
|
||||
|
||||
list_for_each_entry_safe(bundle, next, &intf->bundles, links)
|
||||
gb_bundle_destroy(bundle);
|
||||
|
||||
|
@ -35,6 +35,7 @@ struct gb_interface {
|
||||
|
||||
/* The interface needs to boot over unipro */
|
||||
bool boot_over_unipro;
|
||||
bool disconnected;
|
||||
};
|
||||
#define to_gb_interface(d) container_of(d, struct gb_interface, dev)
|
||||
|
||||
|
@ -335,9 +335,10 @@ static int gb_svc_hello(struct gb_operation *op)
|
||||
static void gb_svc_intf_remove(struct gb_svc *svc, struct gb_interface *intf)
|
||||
{
|
||||
u8 intf_id = intf->interface_id;
|
||||
u8 device_id;
|
||||
u8 device_id = intf->device_id;
|
||||
|
||||
intf->disconnected = true;
|
||||
|
||||
device_id = intf->device_id;
|
||||
gb_interface_remove(intf);
|
||||
|
||||
/*
|
||||
|
Loading…
x
Reference in New Issue
Block a user