Merge "diag: Do not open glink channel twice"
This commit is contained in:
commit
cd601585c7
2 changed files with 12 additions and 7 deletions
|
@ -475,7 +475,7 @@ static void diag_glink_open_work_fn(struct work_struct *work)
|
||||||
struct glink_open_config open_cfg;
|
struct glink_open_config open_cfg;
|
||||||
void *handle = NULL;
|
void *handle = NULL;
|
||||||
|
|
||||||
if (!glink_info)
|
if (!glink_info || glink_info->hdl)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
memset(&open_cfg, 0, sizeof(struct glink_open_config));
|
memset(&open_cfg, 0, sizeof(struct glink_open_config));
|
||||||
|
@ -499,11 +499,12 @@ static void diag_glink_close_work_fn(struct work_struct *work)
|
||||||
struct diag_glink_info *glink_info = container_of(work,
|
struct diag_glink_info *glink_info = container_of(work,
|
||||||
struct diag_glink_info,
|
struct diag_glink_info,
|
||||||
close_work);
|
close_work);
|
||||||
if (!glink_info->inited)
|
if (!glink_info || !glink_info->inited || !glink_info->hdl)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
glink_close(glink_info->hdl);
|
glink_close(glink_info->hdl);
|
||||||
atomic_set(&glink_info->opened, 0);
|
atomic_set(&glink_info->opened, 0);
|
||||||
|
glink_info->hdl = NULL;
|
||||||
diagfwd_channel_close(glink_info->fwd_ctxt);
|
diagfwd_channel_close(glink_info->fwd_ctxt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -586,6 +587,7 @@ static void __diag_glink_init(struct diag_glink_info *glink_info)
|
||||||
{
|
{
|
||||||
char wq_name[DIAG_GLINK_NAME_SZ + 12];
|
char wq_name[DIAG_GLINK_NAME_SZ + 12];
|
||||||
struct glink_link_info link_info;
|
struct glink_link_info link_info;
|
||||||
|
void *link_state_handle = NULL;
|
||||||
|
|
||||||
if (!glink_info)
|
if (!glink_info)
|
||||||
return;
|
return;
|
||||||
|
@ -606,23 +608,25 @@ static void __diag_glink_init(struct diag_glink_info *glink_info)
|
||||||
INIT_WORK(&(glink_info->read_work), diag_glink_read_work_fn);
|
INIT_WORK(&(glink_info->read_work), diag_glink_read_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;
|
||||||
strlcpy((char *)link_info.edge, glink_info->edge,
|
link_info.edge = glink_info->edge;
|
||||||
sizeof(link_info.edge));
|
glink_info->link_state_handle = NULL;
|
||||||
glink_info->hdl = glink_register_link_state_cb(&link_info,
|
link_state_handle = glink_register_link_state_cb(&link_info,
|
||||||
(void *)glink_info);
|
(void *)glink_info);
|
||||||
if (IS_ERR_OR_NULL(glink_info->hdl)) {
|
if (IS_ERR_OR_NULL(link_state_handle)) {
|
||||||
pr_err("diag: In %s, unable to register for glink channel %s\n",
|
pr_err("diag: In %s, unable to register for glink channel %s\n",
|
||||||
__func__, glink_info->name);
|
__func__, glink_info->name);
|
||||||
destroy_workqueue(glink_info->wq);
|
destroy_workqueue(glink_info->wq);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
glink_info->link_state_handle = link_state_handle;
|
||||||
glink_info->fwd_ctxt = NULL;
|
glink_info->fwd_ctxt = NULL;
|
||||||
atomic_set(&glink_info->tx_intent_ready, 0);
|
atomic_set(&glink_info->tx_intent_ready, 0);
|
||||||
atomic_set(&glink_info->opened, 0);
|
atomic_set(&glink_info->opened, 0);
|
||||||
atomic_set(&glink_info->diag_state, 0);
|
atomic_set(&glink_info->diag_state, 0);
|
||||||
DIAG_LOG(DIAG_DEBUG_PERIPHERALS,
|
DIAG_LOG(DIAG_DEBUG_PERIPHERALS,
|
||||||
"%s initialized fwd_ctxt: %pK hdl: %pK\n",
|
"%s initialized fwd_ctxt: %pK hdl: %pK\n",
|
||||||
glink_info->name, glink_info->fwd_ctxt, glink_info->hdl);
|
glink_info->name, glink_info->fwd_ctxt,
|
||||||
|
glink_info->link_state_handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
void diag_glink_invalidate(void *ctxt, struct diagfwd_info *fwd_ctxt)
|
void diag_glink_invalidate(void *ctxt, struct diagfwd_info *fwd_ctxt)
|
||||||
|
|
|
@ -25,6 +25,7 @@ struct diag_glink_info {
|
||||||
uint32_t fifo_size;
|
uint32_t fifo_size;
|
||||||
atomic_t tx_intent_ready;
|
atomic_t tx_intent_ready;
|
||||||
void *hdl;
|
void *hdl;
|
||||||
|
void *link_state_handle;
|
||||||
char edge[DIAG_GLINK_NAME_SZ];
|
char edge[DIAG_GLINK_NAME_SZ];
|
||||||
char name[DIAG_GLINK_NAME_SZ];
|
char name[DIAG_GLINK_NAME_SZ];
|
||||||
struct mutex lock;
|
struct mutex lock;
|
||||||
|
|
Loading…
Add table
Reference in a new issue