Merge "soc: qcom: Free qmi handle in a worker thread"

This commit is contained in:
Linux Build Service Account 2017-03-08 06:51:07 -08:00 committed by Gerrit - the friendly Code Review server
commit 405c831196

View file

@ -99,6 +99,7 @@ struct ind_req_resp {
*/ */
struct qmi_client_info { struct qmi_client_info {
int instance_id; int instance_id;
int subsys_state;
struct work_struct svc_arrive; struct work_struct svc_arrive;
struct work_struct svc_exit; struct work_struct svc_exit;
struct work_struct svc_rcv_msg; struct work_struct svc_rcv_msg;
@ -436,7 +437,7 @@ static void root_service_exit_work(struct work_struct *work)
{ {
struct qmi_client_info *data = container_of(work, struct qmi_client_info *data = container_of(work,
struct qmi_client_info, svc_exit); struct qmi_client_info, svc_exit);
root_service_service_exit(data, ROOT_PD_DOWN); root_service_service_exit(data, data->subsys_state);
} }
static int service_event_notify(struct notifier_block *this, static int service_event_notify(struct notifier_block *this,
@ -453,6 +454,7 @@ static int service_event_notify(struct notifier_block *this,
break; break;
case QMI_SERVER_EXIT: case QMI_SERVER_EXIT:
pr_debug("Root PD service DOWN\n"); pr_debug("Root PD service DOWN\n");
data->subsys_state = ROOT_PD_DOWN;
queue_work(data->svc_event_wq, &data->svc_exit); queue_work(data->svc_event_wq, &data->svc_exit);
break; break;
default: default:
@ -468,7 +470,6 @@ static int ssr_event_notify(struct notifier_block *this,
struct qmi_client_info *info = container_of(this, struct qmi_client_info *info = container_of(this,
struct qmi_client_info, ssr_notifier); struct qmi_client_info, ssr_notifier);
struct notif_data *notif = data; struct notif_data *notif = data;
enum pd_subsys_state state;
switch (code) { switch (code) {
case SUBSYS_BEFORE_SHUTDOWN: case SUBSYS_BEFORE_SHUTDOWN:
@ -476,16 +477,16 @@ static int ssr_event_notify(struct notifier_block *this,
notif->crashed); notif->crashed);
switch (notif->crashed) { switch (notif->crashed) {
case CRASH_STATUS_ERR_FATAL: case CRASH_STATUS_ERR_FATAL:
state = ROOT_PD_ERR_FATAL; info->subsys_state = ROOT_PD_ERR_FATAL;
break; break;
case CRASH_STATUS_WDOG_BITE: case CRASH_STATUS_WDOG_BITE:
state = ROOT_PD_WDOG_BITE; info->subsys_state = ROOT_PD_WDOG_BITE;
break; break;
default: default:
state = ROOT_PD_SHUTDOWN; info->subsys_state = ROOT_PD_SHUTDOWN;
break; break;
} }
root_service_service_exit(info, state); queue_work(info->svc_event_wq, &info->svc_exit);
break; break;
default: default:
break; break;