Merge "msm: ADSPRPC: Add subsystem states for restart, up and down"
This commit is contained in:
committed by
Gerrit - the friendly Code Review server
commit
fc53db744a
@@ -144,6 +144,13 @@
|
||||
#define INIT_MEMLEN_MAX (8*1024*1024)
|
||||
#define MAX_CACHE_BUF_SIZE (8*1024*1024)
|
||||
|
||||
/* FastRPC remote subsystem state*/
|
||||
enum fastrpc_remote_subsys_state {
|
||||
SUBSYSTEM_RESTARTING = 0,
|
||||
SUBSYSTEM_DOWN,
|
||||
SUBSYSTEM_UP,
|
||||
};
|
||||
|
||||
#define PERF_END (void)0
|
||||
|
||||
#define PERF(enb, cnt, ff) \
|
||||
@@ -349,7 +356,7 @@ struct fastrpc_channel_ctx {
|
||||
uint64_t ssrcount;
|
||||
void *handle;
|
||||
uint64_t prevssrcount;
|
||||
int issubsystemup;
|
||||
int subsystemstate;
|
||||
int vmid;
|
||||
struct secure_vm rhvm;
|
||||
int ramdumpenabled;
|
||||
@@ -2936,7 +2943,7 @@ static int fastrpc_get_info_from_dsp(struct fastrpc_file *fl,
|
||||
case ADSP_DOMAIN_ID:
|
||||
case SDSP_DOMAIN_ID:
|
||||
case CDSP_DOMAIN_ID:
|
||||
if (me->channel[domain].issubsystemup)
|
||||
if (me->channel[domain].subsystemstate == SUBSYSTEM_UP)
|
||||
dsp_support = 1;
|
||||
break;
|
||||
case MDSP_DOMAIN_ID:
|
||||
@@ -3060,7 +3067,8 @@ static int fastrpc_release_current_dsp_process(struct fastrpc_file *fl)
|
||||
VERIFY(err, fl->apps->channel[cid].rpdev != NULL);
|
||||
if (err)
|
||||
goto bail;
|
||||
VERIFY(err, fl->apps->channel[cid].issubsystemup == 1);
|
||||
VERIFY(err, fl->apps->channel[cid].subsystemstate !=
|
||||
SUBSYSTEM_RESTARTING);
|
||||
if (err) {
|
||||
wait_for_completion(&fl->shutdown);
|
||||
goto bail;
|
||||
@@ -3926,8 +3934,8 @@ static ssize_t fastrpc_debugfs_read(struct file *filp, char __user *buffer,
|
||||
len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
|
||||
"\n%s %s %s\n", title, " CHANNEL INFO ", title);
|
||||
len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
|
||||
"%-7s|%-10s|%-14s|%-9s|%-13s\n",
|
||||
"subsys", "sesscount", "issubsystemup",
|
||||
"%-7s|%-10s|%-15s|%-9s|%-13s\n",
|
||||
"subsys", "sesscount", "subsystemstate",
|
||||
"ssrcount", "session_used");
|
||||
len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
|
||||
"-%s%s%s%s-\n", single_line, single_line,
|
||||
@@ -3941,8 +3949,8 @@ static ssize_t fastrpc_debugfs_read(struct file *filp, char __user *buffer,
|
||||
DEBUGFS_SIZE - len, "|%-10u",
|
||||
chan->sesscount);
|
||||
len += scnprintf(fileinfo + len,
|
||||
DEBUGFS_SIZE - len, "|%-14d",
|
||||
chan->issubsystemup);
|
||||
DEBUGFS_SIZE - len, "|%-15d",
|
||||
chan->subsystemstate);
|
||||
len += scnprintf(fileinfo + len,
|
||||
DEBUGFS_SIZE - len, "|%-9u",
|
||||
chan->ssrcount);
|
||||
@@ -4163,7 +4171,7 @@ static int fastrpc_channel_open(struct fastrpc_file *fl)
|
||||
mutex_lock(&me->channel[cid].smd_mutex);
|
||||
if (me->channel[cid].ssrcount !=
|
||||
me->channel[cid].prevssrcount) {
|
||||
if (!me->channel[cid].issubsystemup) {
|
||||
if (me->channel[cid].subsystemstate != SUBSYSTEM_UP) {
|
||||
err = -ENOTCONN;
|
||||
mutex_unlock(&me->channel[cid].smd_mutex);
|
||||
goto bail;
|
||||
@@ -4778,7 +4786,7 @@ static int fastrpc_restart_notifier_cb(struct notifier_block *nb,
|
||||
__func__, gcinfo[cid].subsys);
|
||||
mutex_lock(&me->channel[cid].smd_mutex);
|
||||
ctx->ssrcount++;
|
||||
ctx->issubsystemup = 0;
|
||||
ctx->subsystemstate = SUBSYSTEM_RESTARTING;
|
||||
mutex_unlock(&me->channel[cid].smd_mutex);
|
||||
} else if (code == SUBSYS_AFTER_SHUTDOWN) {
|
||||
pr_info("adsprpc: %s: %s subsystem is down\n",
|
||||
@@ -4790,6 +4798,7 @@ static int fastrpc_restart_notifier_cb(struct notifier_block *nb,
|
||||
complete(&fl->shutdown);
|
||||
}
|
||||
spin_unlock(&me->hlock);
|
||||
ctx->subsystemstate = SUBSYSTEM_DOWN;
|
||||
} else if (code == SUBSYS_RAMDUMP_NOTIFICATION) {
|
||||
if (cid == RH_CID) {
|
||||
if (me->ramdump_handle)
|
||||
@@ -4808,7 +4817,7 @@ static int fastrpc_restart_notifier_cb(struct notifier_block *nb,
|
||||
} else if (code == SUBSYS_AFTER_POWERUP) {
|
||||
pr_info("adsprpc: %s: %s subsystem is up\n",
|
||||
__func__, gcinfo[cid].subsys);
|
||||
ctx->issubsystemup = 1;
|
||||
ctx->subsystemstate = SUBSYSTEM_UP;
|
||||
}
|
||||
return NOTIFY_DONE;
|
||||
}
|
||||
@@ -5481,7 +5490,7 @@ static int __init fastrpc_device_init(void)
|
||||
me->channel[i].dev = dev;
|
||||
me->channel[i].ssrcount = 0;
|
||||
me->channel[i].prevssrcount = 0;
|
||||
me->channel[i].issubsystemup = 1;
|
||||
me->channel[i].subsystemstate = SUBSYSTEM_UP;
|
||||
me->channel[i].ramdumpenabled = 0;
|
||||
me->channel[i].rh_dump_dev = NULL;
|
||||
me->channel[i].nb.notifier_call = fastrpc_restart_notifier_cb;
|
||||
|
||||
Reference in New Issue
Block a user