diff options
| -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; } |
