Merge "diag: Open glink channels in workqueue context"
This commit is contained in:
commit
0a9ca6c6b2
2 changed files with 15 additions and 1 deletions
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue