···143143144144 /* reply message from DSP */145145 if (ipcx & SHIM_BYT_IPCX_DONE) {146146-147147- spin_lock_irq(&sdev->ipc_lock);148148-149146 /*150147 * handle immediate reply from DSP core. If the msg is151148 * found, set done bit in cmd_done which is called at the···150153 * because the done bit can't be set in cmd_done function151154 * which is triggered by msg152155 */156156+ guard(spinlock_irq)(&sdev->ipc_lock);153157 snd_sof_ipc_process_reply(sdev, ipcx);154154-155158 atom_dsp_done(sdev);156156-157157- spin_unlock_irq(&sdev->ipc_lock);158159 }159160160161 /* new message from DSP */
+1-6
sound/soc/sof/intel/bdw.c
···315315 snd_sof_dsp_update_bits_unlocked(sdev, BDW_DSP_BAR,316316 SHIM_IMRX, SHIM_IMRX_DONE,317317 SHIM_IMRX_DONE);318318-319319- spin_lock_irq(&sdev->ipc_lock);320320-321318 /*322319 * handle immediate reply from DSP core. If the msg is323320 * found, set done bit in cmd_done which is called at the···322325 * because the done bit can't be set in cmd_done function323326 * which is triggered by msg324327 */328328+ guard(spinlock_irq)(&sdev->ipc_lock);325329 snd_sof_ipc_process_reply(sdev, ipcx);326326-327330 bdw_dsp_done(sdev);328328-329329- spin_unlock_irq(&sdev->ipc_lock);330331 }331332332333 ipcd = snd_sof_dsp_read(sdev, BDW_DSP_BAR, SHIM_IPCD);
···724724 struct hdac_bus *bus = sof_to_bus(sdev);725725 u32 mask = BIT(hstream->index);726726727727- spin_lock_irq(&bus->reg_lock);727727+ guard(spinlock_irq)(&bus->reg_lock);728728+728729 /* couple host and link DMA if link DMA channel is idle */729730 if (!hext_stream->link_locked)730731 snd_sof_dsp_update_bits(sdev, HDA_DSP_PP_BAR,731732 SOF_HDA_REG_PP_PPCTL, mask, 0);732732- spin_unlock_irq(&bus->reg_lock);733733 }734734735735 hda_dsp_stream_spib_config(sdev, hext_stream, HDA_DSP_SPIB_DISABLE, 0);···747747 u32 status;748748749749 /* The function can be called at irq thread, so use spin_lock_irq */750750- spin_lock_irq(&bus->reg_lock);750750+ guard(spinlock_irq)(&bus->reg_lock);751751752752 status = snd_sof_dsp_read(sdev, HDA_DSP_HDA_BAR, SOF_HDA_INTSTS);753753···756756 /* if Register inaccessible, ignore it.*/757757 if (status != 0xffffffff)758758 ret = true;759759-760760- spin_unlock_irq(&bus->reg_lock);761759762760 return ret;763761}···840842 * unsolicited responses from the codec841843 */842844 for (i = 0, active = true; i < 10 && active; i++) {843843- spin_lock_irq(&bus->reg_lock);845845+ guard(spinlock_irq)(&bus->reg_lock);844846845847 status = snd_sof_dsp_read(sdev, HDA_DSP_HDA_BAR, SOF_HDA_INTSTS);846848···851853 if (status & AZX_INT_CTRL_EN) {852854 active |= hda_codec_check_rirb_status(sdev);853855 }854854- spin_unlock_irq(&bus->reg_lock);855856 }856857857858 return IRQ_HANDLED;
···4747 * The spin-lock is needed to protect message objects against other4848 * atomic contexts.4949 */5050- spin_lock_irq(&sdev->ipc_lock);5050+ guard(spinlock_irq)(&sdev->ipc_lock);51515252 /* initialise the message */5353 msg = &ipc->msg;···6565 /* Next reply that we receive will be related to this message */6666 if (!ret)6767 msg->ipc_complete = false;6868-6969- spin_unlock_irq(&sdev->ipc_lock);70687169 return ret;7270}···223225 return;224226225227 /* disable sending of ipc's */226226- mutex_lock(&ipc->tx_mutex);227227- ipc->disable_ipc_tx = true;228228- mutex_unlock(&ipc->tx_mutex);228228+ scoped_guard(mutex, &ipc->tx_mutex)229229+ ipc->disable_ipc_tx = true;229230230231 if (ipc->ops->exit)231232 ipc->ops->exit(sdev);
+3-3
sound/soc/sof/ipc3-topology.c
···24272427 /* Do not free widgets for static pipelines with FW older than SOF2.2 */24282428 if (!verify && !swidget->dynamic_pipeline_widget &&24292429 SOF_FW_VER(v->major, v->minor, v->micro) < SOF_FW_VER(2, 2, 0)) {24302430- mutex_lock(&swidget->setup_mutex);24312431- swidget->use_count = 0;24322432- mutex_unlock(&swidget->setup_mutex);24302430+ scoped_guard(mutex, &swidget->setup_mutex)24312431+ swidget->use_count = 0;24322432+24332433 if (swidget->spipe)24342434 swidget->spipe->complete = 0;24352435 continue;
+2-6
sound/soc/sof/ipc3.c
···378378 }379379380380 /* Serialise IPC TX */381381- mutex_lock(&ipc->tx_mutex);381381+ guard(mutex)(&ipc->tx_mutex);382382383383 ret = ipc3_tx_msg_unlocked(ipc, msg_data, msg_bytes, reply_data, reply_bytes);384384···404404 sof_ipc3_dump_payload(sdev, payload, payload_bytes);405405 }406406 }407407-408408- mutex_unlock(&ipc->tx_mutex);409407410408 return ret;411409}···475477 memcpy(cdata_chunk, cdata, hdr_bytes);476478477479 /* Serialise IPC TX */478478- mutex_lock(&sdev->ipc->tx_mutex);480480+ guard(mutex)(&ipc->tx_mutex);479481480482 /* copy the payload data in a loop */481483 for (i = 0; i < num_msg; i++) {···508510 payload += header_bytes;509511 sof_ipc3_dump_payload(sdev, payload, data_bytes - header_bytes);510512 }511511-512512- mutex_unlock(&sdev->ipc->tx_mutex);513513514514 kfree(cdata_chunk);515515
+9-15
sound/soc/sof/ipc4-mtrace.c
···118118 struct sof_mtrace_core_data *core_data = inode->i_private;119119 int ret;120120121121- mutex_lock(&core_data->buffer_lock);121121+ guard(mutex)(&core_data->buffer_lock);122122123123- if (core_data->log_buffer) {124124- ret = -EBUSY;125125- goto out;126126- }123123+ if (core_data->log_buffer)124124+ return -EBUSY;127125128126 ret = debugfs_file_get(file->f_path.dentry);129127 if (unlikely(ret))130130- goto out;128128+ return ret;131129132130 core_data->log_buffer = kmalloc(SOF_IPC4_DEBUG_SLOT_SIZE, GFP_KERNEL);133131 if (!core_data->log_buffer) {134132 debugfs_file_put(file->f_path.dentry);135135- ret = -ENOMEM;136136- goto out;133133+ return -ENOMEM;137134 }138135139136 ret = simple_open(inode, file);···138141 kfree(core_data->log_buffer);139142 debugfs_file_put(file->f_path.dentry);140143 }141141-142142-out:143143- mutex_unlock(&core_data->buffer_lock);144144145145 return ret;146146}···275281276282 debugfs_file_put(file->f_path.dentry);277283278278- mutex_lock(&core_data->buffer_lock);279279- kfree(core_data->log_buffer);280280- core_data->log_buffer = NULL;281281- mutex_unlock(&core_data->buffer_lock);284284+ scoped_guard(mutex, &core_data->buffer_lock) {285285+ kfree(core_data->log_buffer);286286+ core_data->log_buffer = NULL;287287+ }282288283289 return 0;284290}
+1-2
sound/soc/sof/ipc4-pcm.c
···487487 return -ENOMEM;488488 }489489490490- mutex_lock(&ipc4_data->pipeline_state_mutex);490490+ guard(mutex)(&ipc4_data->pipeline_state_mutex);491491492492 /*493493 * IPC4 requires pipelines to be triggered in order starting at the sink and···580580 }581581582582free:583583- mutex_unlock(&ipc4_data->pipeline_state_mutex);584583 kfree(trigger_list);585584 kfree(pipe_priority);586585 return ret;
+1-4
sound/soc/sof/ipc4-topology.c
···32413241 struct sof_ipc4_fw_data *ipc4_data = sdev->private;32423242 int ret = 0;3243324332443244- mutex_lock(&ipc4_data->pipeline_state_mutex);32443244+ guard(mutex)(&ipc4_data->pipeline_state_mutex);3245324532463246 /* freeing a pipeline frees all the widgets associated with it */32473247 if (swidget->id == snd_soc_dapm_scheduler) {···32523252 if (pipeline->use_chain_dma) {32533253 dev_warn(sdev->dev, "use_chain_dma set for scheduler %s",32543254 swidget->widget->name);32553255- mutex_unlock(&ipc4_data->pipeline_state_mutex);32563255 return 0;32573256 }32583257···32783279 if (!pipeline->use_chain_dma)32793280 ida_free(&fw_module->m_ida, swidget->instance_id);32803281 }32813281-32823282- mutex_unlock(&ipc4_data->pipeline_state_mutex);3283328232843283 return ret;32853284}
···287287snd_sof_dsp_set_power_state(struct snd_sof_dev *sdev,288288 const struct sof_dsp_power_state *target_state)289289{290290- int ret = 0;291291-292292- mutex_lock(&sdev->power_state_access);290290+ guard(mutex)(&sdev->power_state_access);293291294292 if (sof_ops(sdev)->set_power_state)295295- ret = sof_ops(sdev)->set_power_state(sdev, target_state);293293+ return sof_ops(sdev)->set_power_state(sdev, target_state);296294297297- mutex_unlock(&sdev->power_state_access);298298-299299- return ret;295295+ return 0;300296}301297302298/* debug */
+17-29
sound/soc/sof/sof-audio.c
···121121122122int sof_widget_free(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget)123123{124124- int ret;125125-126126- mutex_lock(&swidget->setup_mutex);127127- ret = sof_widget_free_unlocked(sdev, swidget);128128- mutex_unlock(&swidget->setup_mutex);129129-130130- return ret;124124+ guard(mutex)(&swidget->setup_mutex);125125+ return sof_widget_free_unlocked(sdev, swidget);131126}132127EXPORT_SYMBOL(sof_widget_free);133128···235240236241int sof_widget_setup(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget)237242{238238- int ret;239239-240240- mutex_lock(&swidget->setup_mutex);241241- ret = sof_widget_setup_unlocked(sdev, swidget);242242- mutex_unlock(&swidget->setup_mutex);243243-244244- return ret;243243+ guard(mutex)(&swidget->setup_mutex);244244+ return sof_widget_setup_unlocked(sdev, swidget);245245}246246EXPORT_SYMBOL(sof_widget_setup);247247···367377 else368378 swidget = sroute->src_widget;369379370370- mutex_lock(&swidget->setup_mutex);371371- if (!swidget->use_count) {372372- mutex_unlock(&swidget->setup_mutex);373373- continue;374374- }380380+ scoped_guard(mutex, &swidget->setup_mutex) {381381+ if (!swidget->use_count)382382+ continue;375383376376- if (tplg_ops && tplg_ops->route_setup) {377377- /*378378- * this route will get freed when either the source widget or the sink379379- * widget is freed during hw_free380380- */381381- ret = tplg_ops->route_setup(sdev, sroute);382382- if (!ret)383383- sroute->setup = true;384384+ if (tplg_ops && tplg_ops->route_setup) {385385+ /*386386+ * this route will get freed when either the387387+ * source widget or the sink widget is freed388388+ * during hw_free389389+ */390390+ ret = tplg_ops->route_setup(sdev, sroute);391391+ if (!ret)392392+ sroute->setup = true;393393+ }384394 }385385-386386- mutex_unlock(&swidget->setup_mutex);387395388396 if (ret < 0)389397 return ret;