[PORT FROM R2] intel_scu_ipc: fix scu_ready_sem rlease in intel_scu_ipc_medfw_upgrade
authorRamachandra Sudarshan N <sudarshan.n.ramachandra@intel.com>
Fri, 23 Dec 2011 16:24:22 +0000 (21:54 +0530)
committerbuildbot <buildbot@intel.com>
Tue, 27 Dec 2011 12:46:00 +0000 (04:46 -0800)
BZ: 18346

Found a bug where we don't release scu_ready_sem
in intel_scu_ipc_medfw_upgrade.

Fixed this by releasing the scu_ready_sem in the failure
path.

Change-Id: Ie31d18acf7bf8fbedce756ce8ce94cd9926cd4ce
Signed-off-by: Illyas Mansoor <illyas.mansoor@intel.com>
Reviewed-on: http://android.intel.com:8080/29864
Reviewed-by: Ramachandra, Sudarshan N <sudarshan.n.ramachandra@intel.com>
Tested-by: Martin, LoicX <loicx.martin@intel.com>
Reviewed-by: buildbot <buildbot@intel.com>
Tested-by: buildbot <buildbot@intel.com>
drivers/platform/x86/intel_scu_ipc.c

index a9e5f3d..81a15d0 100644 (file)
@@ -1271,9 +1271,11 @@ int intel_scu_ipc_medfw_upgrade(void)
 
        mfld_fw_upd.wscu = !mfld_fw_upd.wscu;
 
-       ret_val = busy_wait(&mfld_fw_upd);
-       if (ret_val < 0)
+       if (busy_wait(&mfld_fw_upd) < 0) {
+               ret_val = -1;
+               release_scu_ready_sem();
                goto term;
+       }
 
        /* TODO:Add a count for iteration, based on sizes of security firmware,
         * so that we determine finite number of iterations to loop thro.
@@ -1290,6 +1292,7 @@ int intel_scu_ipc_medfw_upgrade(void)
                if (mb_state == MB_ERROR) {
                        dev_dbg(&ipcdev.pdev->dev, "check_mb_status,error\n");
                        ret_val = -1;
+                       release_scu_ready_sem();
                        goto term;
                }
 
@@ -1311,6 +1314,7 @@ int intel_scu_ipc_medfw_upgrade(void)
 
                        if (busy_wait(&mfld_fw_upd) < 0) {
                                ret_val = -1;
+                               release_scu_ready_sem();
                                goto term;
                        }
 
@@ -1322,6 +1326,7 @@ int intel_scu_ipc_medfw_upgrade(void)
                        dev_err(&ipcdev.pdev->dev,
                        "calc_offset_and_length_error,error\n");
                        ret_val = -1;
+                       release_scu_ready_sem();
                        goto term;
                }
 
@@ -1331,6 +1336,7 @@ int intel_scu_ipc_medfw_upgrade(void)
                        "Error processing fw chunk=%s\n",
                        mfld_fw_upd.mb_status);
                        ret_val = -1;
+                       release_scu_ready_sem();
                        goto term;
                } else
                        dev_dbg(&ipcdev.pdev->dev,