Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 141af4f0 authored by Johan Hovold's avatar Johan Hovold Committed by Greg Kroah-Hartman
Browse files

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: default avatarJohan Hovold <johan@hovoldconsulting.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@google.com>
parent c634650e
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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);

+1 −0
Original line number Diff line number Diff line
@@ -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)

+3 −2
Original line number Diff line number Diff line
@@ -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);

	/*