diff options
| author | Linux Build Service Account <lnxbuild@localhost> | 2016-07-13 15:45:34 -0700 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2016-07-13 15:45:34 -0700 |
| commit | 2b8fc67b852558e75370923897a52fd2970832db (patch) | |
| tree | dabf4ee2384d296f841e3c039eff797ef7d27f58 | |
| parent | a6a02749f003669284814713bb3169c156613f2b (diff) | |
| parent | 898efa1fa20397db604667577834bcd79d747589 (diff) | |
Merge "soc: qcom: glink_smd_xprt: Fix ssr sync during intent request"
| -rw-r--r-- | drivers/soc/qcom/glink_smd_xprt.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/soc/qcom/glink_smd_xprt.c b/drivers/soc/qcom/glink_smd_xprt.c index 52eedb507709..cb5bf94b8e67 100644 --- a/drivers/soc/qcom/glink_smd_xprt.c +++ b/drivers/soc/qcom/glink_smd_xprt.c @@ -1854,8 +1854,14 @@ static int tx_cmd_rx_intent_req(struct glink_transport_if *if_ptr, struct edge_info *einfo; struct channel *ch; unsigned long flags; + int rcu_id; einfo = container_of(if_ptr, struct edge_info, xprt_if); + rcu_id = srcu_read_lock(&einfo->ssr_sync); + if (einfo->in_ssr) { + srcu_read_unlock(&einfo->ssr_sync, rcu_id); + return -EFAULT; + } spin_lock_irqsave(&einfo->channels_lock, flags); list_for_each_entry(ch, &einfo->channels, node) { if (lcid == ch->lcid) @@ -1871,6 +1877,7 @@ static int tx_cmd_rx_intent_req(struct glink_transport_if *if_ptr, ch->rcid, ch->next_intent_id++, size); + srcu_read_unlock(&einfo->ssr_sync, rcu_id); return 0; } |
