mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-01 01:14:19 -04:00
greybus: svc: refactor interface-route destruction
Add interface-route-destroy helper to tear down the route and release the interface device id. Note that we currently need to grab a reference to the interface to prevent it from being deallocated before tearing down the route. 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:
committed by
Greg Kroah-Hartman
parent
bb2533a974
commit
39495a2bea
@@ -518,21 +518,23 @@ static int gb_svc_interface_route_create(struct gb_svc *svc,
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void gb_svc_interface_route_destroy(struct gb_svc *svc,
|
||||
struct gb_interface *intf)
|
||||
{
|
||||
gb_svc_route_destroy(svc, svc->ap_intf_id, intf->interface_id);
|
||||
ida_simple_remove(&svc->device_id_map, intf->device_id);
|
||||
}
|
||||
|
||||
static void gb_svc_intf_remove(struct gb_svc *svc, struct gb_interface *intf)
|
||||
{
|
||||
u8 intf_id = intf->interface_id;
|
||||
u8 device_id = intf->device_id;
|
||||
|
||||
intf->disconnected = true;
|
||||
|
||||
get_device(&intf->dev);
|
||||
|
||||
gb_interface_remove(intf);
|
||||
gb_svc_interface_route_destroy(svc, intf);
|
||||
|
||||
/*
|
||||
* Destroy the two-way route between the AP and the interface.
|
||||
*/
|
||||
gb_svc_route_destroy(svc, svc->ap_intf_id, intf_id);
|
||||
|
||||
ida_simple_remove(&svc->device_id_map, device_id);
|
||||
put_device(&intf->dev);
|
||||
}
|
||||
|
||||
static void gb_svc_process_intf_hotplug(struct gb_operation *operation)
|
||||
@@ -630,8 +632,7 @@ static void gb_svc_process_intf_hotplug(struct gb_operation *operation)
|
||||
return;
|
||||
|
||||
destroy_route:
|
||||
gb_svc_route_destroy(svc, svc->ap_intf_id, intf_id);
|
||||
ida_simple_remove(&svc->device_id_map, intf->device_id);
|
||||
gb_svc_interface_route_destroy(svc, intf);
|
||||
destroy_interface:
|
||||
gb_interface_remove(intf);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user