Loading drivers/char/adsprpc.c +20 −11 Original line number Diff line number Diff line Loading @@ -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) \ Loading Loading @@ -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; Loading Loading @@ -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: Loading Loading @@ -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; Loading Loading @@ -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, Loading @@ -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); Loading Loading @@ -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; Loading Loading @@ -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", Loading @@ -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) Loading @@ -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; } Loading Loading @@ -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; Loading Loading
drivers/char/adsprpc.c +20 −11 Original line number Diff line number Diff line Loading @@ -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) \ Loading Loading @@ -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; Loading Loading @@ -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: Loading Loading @@ -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; Loading Loading @@ -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, Loading @@ -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); Loading Loading @@ -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; Loading Loading @@ -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", Loading @@ -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) Loading @@ -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; } Loading Loading @@ -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; Loading