Merge "msm: ADSPRPC: Add subsystem states for restart, up and down"

This commit is contained in:
qctecmdr
2023-06-05 00:21:50 -07:00
committed by Gerrit - the friendly Code Review server

View File

@@ -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;