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>
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);
/* 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)
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);
/*