Merge "msm: ADSPRPC: Fix deadlock during SSR"

This commit is contained in:
qctecmdr
2021-07-12 22:35:58 -07:00
committed by Gerrit - the friendly Code Review server

View File

@@ -3198,13 +3198,18 @@ static int fastrpc_mmap_remove_ssr(struct fastrpc_file *fl)
kfree(ramdump_segments_rh);
}
}
mutex_lock(&fl->map_mutex);
fastrpc_mmap_free(match, 0);
mutex_unlock(&fl->map_mutex);
}
} while (match);
me->enable_ramdump = false;
bail:
if (err && match)
if (err && match) {
mutex_lock(&fl->map_mutex);
fastrpc_mmap_add(match);
mutex_unlock(&fl->map_mutex);
}
return err;
}
@@ -4013,13 +4018,13 @@ static int fastrpc_channel_open(struct fastrpc_file *fl)
if (cid == ADSP_DOMAIN_ID && me->channel[cid].ssrcount !=
me->channel[cid].prevssrcount) {
mutex_lock(&fl->map_mutex);
mutex_unlock(&me->channel[cid].smd_mutex);
err = fastrpc_mmap_remove_ssr(fl);
if (err)
pr_warn("adsprpc: %s: %s: failed to unmap remote heap for %s (err %d)\n",
__func__, current->comm,
me->channel[cid].subsys, err);
mutex_unlock(&fl->map_mutex);
mutex_lock(&me->channel[cid].smd_mutex);
me->channel[cid].prevssrcount =
me->channel[cid].ssrcount;
}