ASoC: Intel: Check Haswell IPC process_reply/notification return value.
authorLiam Girdwood <liam.r.girdwood@linux.intel.com>
Thu, 6 Mar 2014 14:56:04 +0000 (14:56 +0000)
committerMark Brown <broonie@linaro.org>
Fri, 7 Mar 2014 02:51:05 +0000 (10:51 +0800)
Check the return value for error when processing replies and notifications.

The patch 22981243589c: "ASoC: Intel: Add Haswell/Broadwell IPC" from
> Feb 20, 2014, leads to the following imaginary static checker warning:
>
>  sound/soc/intel/sst-haswell-ipc.c:898 hsw_irq_thread()
>  warn: this is always true.
>
> sound/soc/intel/sst-haswell-ipc.c
>    895                  /* Handle Immediate reply from DSP Core */
>    896                  handled = hsw_process_reply(hsw, ipcx);
>                                   ^^^^^^^^^^^^^^^^^
> Returns 1 on success/error and -EIO on error.
>
>    897
>    898                  if (handled) {
>    899                          /* clear DONE bit - tell DSP we have completed */
>    900                          sst_dsp_shim_update_bits_unlocked(sst, SST_IPCX,
>    901                                  SST_IPCX_DONE, 0);
>    902
>    903                          /* unmask Done interrupt */
>    904                          sst_dsp_shim_update_bits_unlocked(sst, SST_IMRX,
>    905                                  SST_IMRX_DONE, 0);
>    906                  }
>

Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
sound/soc/intel/sst-haswell-ipc.c

index 1f1576a..f46bb4d 100644 (file)
@@ -895,7 +895,7 @@ static irqreturn_t hsw_irq_thread(int irq, void *context)
                /* Handle Immediate reply from DSP Core */
                handled = hsw_process_reply(hsw, ipcx);
 
-               if (handled) {
+               if (handled > 0) {
                        /* clear DONE bit - tell DSP we have completed */
                        sst_dsp_shim_update_bits_unlocked(sst, SST_IPCX,
                                SST_IPCX_DONE, 0);
@@ -913,7 +913,7 @@ static irqreturn_t hsw_irq_thread(int irq, void *context)
                handled = hsw_process_notification(hsw);
 
                /* clear BUSY bit and set DONE bit - accept new messages */
-               if (handled) {
+               if (handled > 0) {
                        sst_dsp_shim_update_bits_unlocked(sst, SST_IPCD,
                                SST_IPCD_BUSY | SST_IPCD_DONE, SST_IPCD_DONE);