On Mon, Jun 15, 2026 at 04:38:22PM +0700, [email protected] wrote: > From: bui duc phuc <[email protected]> > > Clean up the code using guard() for mutex & spin locks. > Merely code refactoring, and no behavior change. > > Signed-off-by: bui duc phuc <[email protected]> > ---
Reviewed-by: Frank Li <[email protected]> > sound/soc/fsl/imx-pcm-rpmsg.c | 69 +++++++++++++++-------------------- > 1 file changed, 30 insertions(+), 39 deletions(-) > > diff --git a/sound/soc/fsl/imx-pcm-rpmsg.c b/sound/soc/fsl/imx-pcm-rpmsg.c > index 031e5272215d..7210393dfa5d 100644 > --- a/sound/soc/fsl/imx-pcm-rpmsg.c > +++ b/sound/soc/fsl/imx-pcm-rpmsg.c > @@ -39,10 +39,9 @@ static int imx_rpmsg_pcm_send_message(struct rpmsg_msg > *msg, > struct rpmsg_device *rpdev = info->rpdev; > int ret = 0; > > - mutex_lock(&info->msg_lock); > + guard(mutex)(&info->msg_lock); > if (!rpdev) { > dev_err(info->dev, "rpmsg channel not ready\n"); > - mutex_unlock(&info->msg_lock); > return -EINVAL; > } > > @@ -55,15 +54,12 @@ static int imx_rpmsg_pcm_send_message(struct rpmsg_msg > *msg, > sizeof(struct rpmsg_s_msg)); > if (ret) { > dev_err(&rpdev->dev, "rpmsg_send failed: %d\n", ret); > - mutex_unlock(&info->msg_lock); > return ret; > } > > /* No receive msg for TYPE_C command */ > - if (msg->s_msg.header.type == MSG_TYPE_C) { > - mutex_unlock(&info->msg_lock); > + if (msg->s_msg.header.type == MSG_TYPE_C) > return 0; > - } > > /* wait response from rpmsg */ > ret = wait_for_completion_timeout(&info->cmd_complete, > @@ -71,7 +67,6 @@ static int imx_rpmsg_pcm_send_message(struct rpmsg_msg *msg, > if (!ret) { > dev_err(&rpdev->dev, "rpmsg_send cmd %d timeout!\n", > msg->s_msg.header.cmd); > - mutex_unlock(&info->msg_lock); > return -ETIMEDOUT; > } > > @@ -100,8 +95,6 @@ static int imx_rpmsg_pcm_send_message(struct rpmsg_msg > *msg, > dev_dbg(&rpdev->dev, "cmd:%d, resp %d\n", msg->s_msg.header.cmd, > info->r_msg.param.resp); > > - mutex_unlock(&info->msg_lock); > - > return 0; > } > > @@ -109,14 +102,13 @@ static int imx_rpmsg_insert_workqueue(struct > snd_pcm_substream *substream, > struct rpmsg_msg *msg, > struct rpmsg_info *info) > { > - unsigned long flags; > int ret = 0; > > /* > * Queue the work to workqueue. > * If the queue is full, drop the message. > */ > - spin_lock_irqsave(&info->wq_lock, flags); > + guard(spinlock_irqsave)(&info->wq_lock); > if (info->work_write_index != info->work_read_index) { > int index = info->work_write_index; > > @@ -130,7 +122,6 @@ static int imx_rpmsg_insert_workqueue(struct > snd_pcm_substream *substream, > info->msg_drop_count[substream->stream]++; > ret = -EPIPE; > } > - spin_unlock_irqrestore(&info->wq_lock, flags); > > return ret; > } > @@ -523,7 +514,6 @@ static int imx_rpmsg_pcm_ack(struct snd_soc_component > *component, > snd_pcm_sframes_t avail; > struct timer_list *timer; > struct rpmsg_msg *msg; > - unsigned long flags; > int buffer_tail = 0; > int written_num; > > @@ -553,11 +543,11 @@ static int imx_rpmsg_pcm_ack(struct snd_soc_component > *component, > msg->s_msg.param.buffer_tail = buffer_tail; > > /* The notification message is updated to latest */ > - spin_lock_irqsave(&info->lock[substream->stream], flags); > - memcpy(&info->notify[substream->stream], msg, > - sizeof(struct rpmsg_s_msg)); > - info->notify_updated[substream->stream] = true; > - spin_unlock_irqrestore(&info->lock[substream->stream], flags); > + scoped_guard(spinlock_irqsave, &info->lock[substream->stream]) { > + memcpy(&info->notify[substream->stream], msg, > + sizeof(struct rpmsg_s_msg)); > + info->notify_updated[substream->stream] = true; > + } > > if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) > avail = snd_pcm_playback_hw_avail(runtime); > @@ -640,7 +630,7 @@ static void imx_rpmsg_pcm_work(struct work_struct *work) > bool is_notification = false; > struct rpmsg_info *info; > struct rpmsg_msg msg; > - unsigned long flags; > + bool updated; > > work_of_rpmsg = container_of(work, struct work_of_rpmsg, work); > info = work_of_rpmsg->info; > @@ -651,25 +641,26 @@ static void imx_rpmsg_pcm_work(struct work_struct *work) > * enough data in M core side, need to let M core know > * data is updated immediately. > */ > - spin_lock_irqsave(&info->lock[TX], flags); > - if (info->notify_updated[TX]) { > - memcpy(&msg, &info->notify[TX], sizeof(struct rpmsg_s_msg)); > - info->notify_updated[TX] = false; > - spin_unlock_irqrestore(&info->lock[TX], flags); > - info->send_message(&msg, info); > - } else { > - spin_unlock_irqrestore(&info->lock[TX], flags); > + scoped_guard(spinlock_irqsave, &info->lock[TX]) { > + updated = info->notify_updated[TX]; > + if (updated) { > + memcpy(&msg, &info->notify[TX], sizeof(struct > rpmsg_s_msg)); > + info->notify_updated[TX] = false; > + } > } > - > - spin_lock_irqsave(&info->lock[RX], flags); > - if (info->notify_updated[RX]) { > - memcpy(&msg, &info->notify[RX], sizeof(struct rpmsg_s_msg)); > - info->notify_updated[RX] = false; > - spin_unlock_irqrestore(&info->lock[RX], flags); > + if (updated) > info->send_message(&msg, info); > - } else { > - spin_unlock_irqrestore(&info->lock[RX], flags); > + > + scoped_guard(spinlock_irqsave, &info->lock[RX]) { > + updated = info->notify_updated[RX]; > + if (updated) { > + memcpy(&msg, &info->notify[RX], sizeof(struct > rpmsg_s_msg)); > + info->notify_updated[RX] = false; > + } > } > + if (updated) > + info->send_message(&msg, info); > + > > /* Skip the notification message for it has been processed above */ > if (work_of_rpmsg->msg.s_msg.header.type == MSG_TYPE_C && > @@ -681,10 +672,10 @@ static void imx_rpmsg_pcm_work(struct work_struct *work) > info->send_message(&work_of_rpmsg->msg, info); > > /* update read index */ > - spin_lock_irqsave(&info->wq_lock, flags); > - info->work_read_index++; > - info->work_read_index %= WORK_MAX_NUM; > - spin_unlock_irqrestore(&info->wq_lock, flags); > + scoped_guard(spinlock_irqsave, &info->wq_lock) { > + info->work_read_index++; > + info->work_read_index %= WORK_MAX_NUM; > + } > } > > static int imx_rpmsg_pcm_probe(struct platform_device *pdev) > -- > 2.43.0 > >
