Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

rtl8712: pwrctrl_priv: Replace semaphore lock with mutex

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>

authored by

Binoy Jayan and committed by
Greg Kroah-Hartman
5c2ba8b8 b2bcdadc

+17 -29
-7
drivers/staging/rtl8712/osdep_service.h
··· 57 57 spin_lock_init(&((pqueue)->lock)); \ 58 58 } while (0) 59 59 60 - static inline u32 _down_sema(struct semaphore *sema) 61 - { 62 - if (down_interruptible(sema)) 63 - return _FAIL; 64 - return _SUCCESS; 65 - } 66 - 67 60 static inline u32 end_of_queue_search(struct list_head *head, 68 61 struct list_head *plist) 69 62 {
+5 -5
drivers/staging/rtl8712/rtl8712_cmd.c
··· 264 264 */ 265 265 if (padapter->pwrctrlpriv.pwr_mode > PS_MODE_ACTIVE) { 266 266 padapter->pwrctrlpriv.pwr_mode = PS_MODE_ACTIVE; 267 - _enter_pwrlock(&(padapter->pwrctrlpriv.lock)); 267 + mutex_lock(&padapter->pwrctrlpriv.mutex_lock); 268 268 r8712_set_rpwm(padapter, PS_STATE_S4); 269 - up(&(padapter->pwrctrlpriv.lock)); 269 + mutex_unlock(&padapter->pwrctrlpriv.mutex_lock); 270 270 } 271 271 pcmd_r = pcmd; 272 272 break; ··· 395 395 } 396 396 if (pcmd->cmdcode == GEN_CMD_CODE(_SetPwrMode)) { 397 397 if (padapter->pwrctrlpriv.bSleep) { 398 - _enter_pwrlock(&(padapter-> 399 - pwrctrlpriv.lock)); 398 + mutex_lock(&padapter-> 399 + pwrctrlpriv.mutex_lock); 400 400 r8712_set_rpwm(padapter, PS_STATE_S2); 401 - up(&padapter->pwrctrlpriv.lock); 401 + mutex_unlock(&padapter->pwrctrlpriv.mutex_lock); 402 402 } 403 403 } 404 404 r8712_free_cmd_obj(pcmd);
+11 -11
drivers/staging/rtl8712/rtl871x_pwrctrl.c
··· 103 103 if (pwrpriv->cpwm_tog == ((preportpwrstate->state) & 0x80)) 104 104 return; 105 105 del_timer(&padapter->pwrctrlpriv.rpwm_check_timer); 106 - _enter_pwrlock(&pwrpriv->lock); 106 + mutex_lock(&pwrpriv->mutex_lock); 107 107 pwrpriv->cpwm = (preportpwrstate->state) & 0xf; 108 108 if (pwrpriv->cpwm >= PS_STATE_S2) { 109 109 if (pwrpriv->alives & CMD_ALIVE) 110 110 complete(&(pcmdpriv->cmd_queue_comp)); 111 111 } 112 112 pwrpriv->cpwm_tog = (preportpwrstate->state) & 0x80; 113 - up(&pwrpriv->lock); 113 + mutex_unlock(&pwrpriv->mutex_lock); 114 114 } 115 115 116 116 static inline void register_task_alive(struct pwrctrl_priv *pwrctrl, uint tag) ··· 141 141 struct _adapter *padapter = container_of(pwrpriv, 142 142 struct _adapter, pwrctrlpriv); 143 143 if (!pwrpriv->bSleep) { 144 - _enter_pwrlock(&pwrpriv->lock); 144 + mutex_lock(&pwrpriv->mutex_lock); 145 145 if (pwrpriv->pwr_mode == PS_MODE_ACTIVE) 146 146 r8712_set_rpwm(padapter, PS_STATE_S4); 147 - up(&pwrpriv->lock); 147 + mutex_lock(&pwrpriv->mutex_lock); 148 148 } 149 149 } 150 150 ··· 155 155 struct _adapter *padapter = container_of(pwrpriv, 156 156 struct _adapter, pwrctrlpriv); 157 157 if (pwrpriv->cpwm != pwrpriv->rpwm) { 158 - _enter_pwrlock(&pwrpriv->lock); 158 + mutex_lock(&pwrpriv->mutex_lock); 159 159 r8712_read8(padapter, SDIO_HCPWM); 160 160 pwrpriv->rpwm_retry = 1; 161 161 r8712_set_rpwm(padapter, pwrpriv->rpwm); 162 - up(&pwrpriv->lock); 162 + mutex_unlock(&pwrpriv->mutex_lock); 163 163 } 164 164 } 165 165 ··· 175 175 struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv; 176 176 177 177 memset((unsigned char *)pwrctrlpriv, 0, sizeof(struct pwrctrl_priv)); 178 - sema_init(&pwrctrlpriv->lock, 1); 178 + mutex_init(&pwrctrlpriv->mutex_lock); 179 179 pwrctrlpriv->cpwm = PS_STATE_S4; 180 180 pwrctrlpriv->pwr_mode = PS_MODE_ACTIVE; 181 181 pwrctrlpriv->smart_ps = 0; ··· 207 207 uint res = _SUCCESS; 208 208 struct pwrctrl_priv *pwrctrl = &padapter->pwrctrlpriv; 209 209 210 - _enter_pwrlock(&pwrctrl->lock); 210 + mutex_lock(&pwrctrl->mutex_lock); 211 211 register_task_alive(pwrctrl, CMD_ALIVE); 212 212 if (pwrctrl->cpwm < PS_STATE_S2) { 213 213 r8712_set_rpwm(padapter, PS_STATE_S3); 214 214 res = _FAIL; 215 215 } 216 - up(&pwrctrl->lock); 216 + mutex_unlock(&pwrctrl->mutex_lock); 217 217 return res; 218 218 } 219 219 ··· 229 229 { 230 230 struct pwrctrl_priv *pwrctrl = &padapter->pwrctrlpriv; 231 231 232 - _enter_pwrlock(&pwrctrl->lock); 232 + mutex_lock(&pwrctrl->mutex_lock); 233 233 unregister_task_alive(pwrctrl, CMD_ALIVE); 234 234 if ((pwrctrl->cpwm > PS_STATE_S2) && 235 235 (pwrctrl->pwr_mode > PS_MODE_ACTIVE)) { ··· 239 239 r8712_set_rpwm(padapter, PS_STATE_S0); 240 240 } 241 241 } 242 - up(&pwrctrl->lock); 242 + mutex_unlock(&pwrctrl->mutex_lock); 243 243 }
+1 -6
drivers/staging/rtl8712/rtl871x_pwrctrl.h
··· 87 87 unsigned short rsvd; 88 88 }; 89 89 90 - static inline void _enter_pwrlock(struct semaphore *plock) 91 - { 92 - _down_sema(plock); 93 - } 94 - 95 90 struct pwrctrl_priv { 96 - struct semaphore lock; 91 + struct mutex mutex_lock; 97 92 /*volatile*/ u8 rpwm; /* requested power state for fw */ 98 93 /* fw current power state. updated when 1. read from HCPWM or 99 94 * 2. driver lowers power level */