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

Commit 0a9ca6c6 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "diag: Open glink channels in workqueue context"

parents 52f8817d 34164b74
Loading
Loading
Loading
Loading
+14 −1
Original line number Original line Diff line number Diff line
@@ -487,6 +487,18 @@ static void diag_glink_remote_disconnect_work_fn(struct work_struct *work)
	atomic_set(&glink_info->tx_intent_ready, 0);
	atomic_set(&glink_info->tx_intent_ready, 0);
}
}


static void diag_glink_late_init_work_fn(struct work_struct *work)
{
	struct diag_glink_info *glink_info = container_of(work,
							struct diag_glink_info,
							late_init_work);
	if (!glink_info || !glink_info->hdl)
		return;
	DIAG_LOG(DIAG_DEBUG_PERIPHERALS, "p: %d t: %d\n",
			glink_info->peripheral, glink_info->type);
	diagfwd_channel_open(glink_info->fwd_ctxt);
}

static void diag_glink_transport_notify_state(void *handle, const void *priv,
static void diag_glink_transport_notify_state(void *handle, const void *priv,
					  unsigned event)
					  unsigned event)
{
{
@@ -617,7 +629,7 @@ static void glink_late_init(struct diag_glink_info *glink_info)
	glink_info->inited = 1;
	glink_info->inited = 1;


	if (atomic_read(&glink_info->opened))
	if (atomic_read(&glink_info->opened))
		diagfwd_channel_open(glink_info->fwd_ctxt);
		queue_work(glink_info->wq, &(glink_info->late_init_work));


	DIAG_LOG(DIAG_DEBUG_PERIPHERALS, "%s exiting\n",
	DIAG_LOG(DIAG_DEBUG_PERIPHERALS, "%s exiting\n",
		 glink_info->name);
		 glink_info->name);
@@ -665,6 +677,7 @@ static void __diag_glink_init(struct diag_glink_info *glink_info)
	INIT_WORK(&(glink_info->connect_work), diag_glink_connect_work_fn);
	INIT_WORK(&(glink_info->connect_work), diag_glink_connect_work_fn);
	INIT_WORK(&(glink_info->remote_disconnect_work),
	INIT_WORK(&(glink_info->remote_disconnect_work),
		diag_glink_remote_disconnect_work_fn);
		diag_glink_remote_disconnect_work_fn);
	INIT_WORK(&(glink_info->late_init_work), diag_glink_late_init_work_fn);
	link_info.glink_link_state_notif_cb = diag_glink_notify_cb;
	link_info.glink_link_state_notif_cb = diag_glink_notify_cb;
	link_info.transport = NULL;
	link_info.transport = NULL;
	link_info.edge = glink_info->edge;
	link_info.edge = glink_info->edge;
+1 −0
Original line number Original line Diff line number Diff line
@@ -37,6 +37,7 @@ struct diag_glink_info {
	struct work_struct read_work;
	struct work_struct read_work;
	struct work_struct connect_work;
	struct work_struct connect_work;
	struct work_struct remote_disconnect_work;
	struct work_struct remote_disconnect_work;
	struct work_struct late_init_work;
	struct diagfwd_info *fwd_ctxt;
	struct diagfwd_info *fwd_ctxt;
};
};