]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
rtl8712: pwrctrl_priv: Replace semaphore lock with mutex
authorBinoy Jayan <binoy.jayan@linaro.org>
Mon, 22 Aug 2016 04:39:42 +0000 (10:09 +0530)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 1 Sep 2016 15:44:01 +0000 (17:44 +0200)
The semaphore 'lock' in 'pwrctrl_priv' is used as a simple mutex, so it
should be written as one. Semaphores are going away in the future.
_enter_pwrlock was using down_interruptible(), so the lock could be broken
by sending a signal. This could be a bug, because nothing checks the return
code here. Hence, using mutex_lock instead of the interruptible version.
Removing the now unused _enter_pwrlock and _down_sema.

Signed-off-by: Binoy Jayan <binoy.jayan@linaro.org>
Reviewed-by: Arnd Bergmann <arnd@arndb.de>
Tested-by: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/rtl8712/osdep_service.h
drivers/staging/rtl8712/rtl8712_cmd.c
drivers/staging/rtl8712/rtl871x_pwrctrl.c
drivers/staging/rtl8712/rtl871x_pwrctrl.h

index ad041c96fdb84817a6e7e19cb60b33d197f535ef..c9ea50daffff0a28ca919404cc270380d45ee676 100644 (file)
@@ -57,13 +57,6 @@ struct       __queue {
                spin_lock_init(&((pqueue)->lock));      \
        } while (0)
 
-static inline u32 _down_sema(struct semaphore *sema)
-{
-       if (down_interruptible(sema))
-               return _FAIL;
-       return _SUCCESS;
-}
-
 static inline u32 end_of_queue_search(struct list_head *head,
                struct list_head *plist)
 {
index 3877fcf65d95581db0a5ab307367237b9f3ef828..9f61583af15016bb5900a1c9f2ba13dae5659c2e 100644 (file)
@@ -264,9 +264,9 @@ static struct cmd_obj *cmd_hdl_filter(struct _adapter *padapter,
                 */
                if (padapter->pwrctrlpriv.pwr_mode > PS_MODE_ACTIVE) {
                        padapter->pwrctrlpriv.pwr_mode = PS_MODE_ACTIVE;
-                       _enter_pwrlock(&(padapter->pwrctrlpriv.lock));
+                       mutex_lock(&padapter->pwrctrlpriv.mutex_lock);
                        r8712_set_rpwm(padapter, PS_STATE_S4);
-                       up(&(padapter->pwrctrlpriv.lock));
+                       mutex_unlock(&padapter->pwrctrlpriv.mutex_lock);
                }
                pcmd_r = pcmd;
                break;
@@ -395,10 +395,10 @@ _next:
                        }
                        if (pcmd->cmdcode == GEN_CMD_CODE(_SetPwrMode)) {
                                if (padapter->pwrctrlpriv.bSleep) {
-                                       _enter_pwrlock(&(padapter->
-                                                      pwrctrlpriv.lock));
+                                       mutex_lock(&padapter->
+                                                      pwrctrlpriv.mutex_lock);
                                        r8712_set_rpwm(padapter, PS_STATE_S2);
-                                       up(&padapter->pwrctrlpriv.lock);
+                                       mutex_unlock(&padapter->pwrctrlpriv.mutex_lock);
                                }
                        }
                        r8712_free_cmd_obj(pcmd);
index 98a5e74b6f9e0bb0c0b4412a52add7a823f8aadc..8d7ead636c7afa8338ae900640153bfc93eb9253 100644 (file)
@@ -103,14 +103,14 @@ void r8712_cpwm_int_hdl(struct _adapter *padapter,
        if (pwrpriv->cpwm_tog == ((preportpwrstate->state) & 0x80))
                return;
        del_timer(&padapter->pwrctrlpriv.rpwm_check_timer);
-       _enter_pwrlock(&pwrpriv->lock);
+       mutex_lock(&pwrpriv->mutex_lock);
        pwrpriv->cpwm = (preportpwrstate->state) & 0xf;
        if (pwrpriv->cpwm >= PS_STATE_S2) {
                if (pwrpriv->alives & CMD_ALIVE)
                        complete(&(pcmdpriv->cmd_queue_comp));
        }
        pwrpriv->cpwm_tog = (preportpwrstate->state) & 0x80;
-       up(&pwrpriv->lock);
+       mutex_unlock(&pwrpriv->mutex_lock);
 }
 
 static inline void register_task_alive(struct pwrctrl_priv *pwrctrl, uint tag)
@@ -141,10 +141,10 @@ static void SetPSModeWorkItemCallback(struct work_struct *work)
        struct _adapter *padapter = container_of(pwrpriv,
                                    struct _adapter, pwrctrlpriv);
        if (!pwrpriv->bSleep) {
-               _enter_pwrlock(&pwrpriv->lock);
+               mutex_lock(&pwrpriv->mutex_lock);
                if (pwrpriv->pwr_mode == PS_MODE_ACTIVE)
                        r8712_set_rpwm(padapter, PS_STATE_S4);
-               up(&pwrpriv->lock);
+               mutex_lock(&pwrpriv->mutex_lock);
        }
 }
 
@@ -155,11 +155,11 @@ static void rpwm_workitem_callback(struct work_struct *work)
        struct _adapter *padapter = container_of(pwrpriv,
                                    struct _adapter, pwrctrlpriv);
        if (pwrpriv->cpwm != pwrpriv->rpwm) {
-               _enter_pwrlock(&pwrpriv->lock);
+               mutex_lock(&pwrpriv->mutex_lock);
                r8712_read8(padapter, SDIO_HCPWM);
                pwrpriv->rpwm_retry = 1;
                r8712_set_rpwm(padapter, pwrpriv->rpwm);
-               up(&pwrpriv->lock);
+               mutex_unlock(&pwrpriv->mutex_lock);
        }
 }
 
@@ -175,7 +175,7 @@ void r8712_init_pwrctrl_priv(struct _adapter *padapter)
        struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv;
 
        memset((unsigned char *)pwrctrlpriv, 0, sizeof(struct pwrctrl_priv));
-       sema_init(&pwrctrlpriv->lock, 1);
+       mutex_init(&pwrctrlpriv->mutex_lock);
        pwrctrlpriv->cpwm = PS_STATE_S4;
        pwrctrlpriv->pwr_mode = PS_MODE_ACTIVE;
        pwrctrlpriv->smart_ps = 0;
@@ -207,13 +207,13 @@ sint r8712_register_cmd_alive(struct _adapter *padapter)
        uint res = _SUCCESS;
        struct pwrctrl_priv *pwrctrl = &padapter->pwrctrlpriv;
 
-       _enter_pwrlock(&pwrctrl->lock);
+       mutex_lock(&pwrctrl->mutex_lock);
        register_task_alive(pwrctrl, CMD_ALIVE);
        if (pwrctrl->cpwm < PS_STATE_S2) {
                r8712_set_rpwm(padapter, PS_STATE_S3);
                res = _FAIL;
        }
-       up(&pwrctrl->lock);
+       mutex_unlock(&pwrctrl->mutex_lock);
        return res;
 }
 
@@ -229,7 +229,7 @@ void r8712_unregister_cmd_alive(struct _adapter *padapter)
 {
        struct pwrctrl_priv *pwrctrl = &padapter->pwrctrlpriv;
 
-       _enter_pwrlock(&pwrctrl->lock);
+       mutex_lock(&pwrctrl->mutex_lock);
        unregister_task_alive(pwrctrl, CMD_ALIVE);
        if ((pwrctrl->cpwm > PS_STATE_S2) &&
           (pwrctrl->pwr_mode > PS_MODE_ACTIVE)) {
@@ -239,5 +239,5 @@ void r8712_unregister_cmd_alive(struct _adapter *padapter)
                        r8712_set_rpwm(padapter, PS_STATE_S0);
                }
        }
-       up(&pwrctrl->lock);
+       mutex_unlock(&pwrctrl->mutex_lock);
 }
index dbfb555235450c8aa369d66c9d7baa0ee94ed597..231445e75f93983bbceb35f0d7080fe129ddf94a 100644 (file)
@@ -87,13 +87,8 @@ struct reportpwrstate_parm {
        unsigned short rsvd;
 };
 
-static inline void _enter_pwrlock(struct semaphore *plock)
-{
-       _down_sema(plock);
-}
-
 struct pwrctrl_priv {
-       struct semaphore lock;
+       struct mutex mutex_lock;
        /*volatile*/ u8 rpwm; /* requested power state for fw */
        /* fw current power state. updated when 1. read from HCPWM or
         * 2. driver lowers power level */