Commit d3ede18e authored by Fabio M. De Francesco's avatar Fabio M. De Francesco Committed by Greg Kroah-Hartman
Browse files

staging: r8188eu: Remove _enter/_exit_critical_mutex()



Remove _enter_critical_mutex() and _exit_critical_mutex(). They are
unnecessary wrappers, respectively to mutex_lock_interruptible() and
to mutex_unlock(). They also have an odd interface that takes an unused
argument named pirqL of type unsigned long.
The original code enters the critical section if the mutex API is
interrupted while waiting to acquire the lock; therefore it could lead
to a race condition. Use mutex_lock() because it is uninterruptible and
so avoid that above-mentioned potential race condition.

Tested-by: default avatarPavel Skripkin <paskripkin@gmail.com>
Reviewed-by: default avatarPavel Skripkin <paskripkin@gmail.com>
Signed-off-by: default avatarFabio M. De Francesco <fmdefrancesco@gmail.com>
Link: https://lore.kernel.org/r/20210828113656.6963-1-fmdefrancesco@gmail.com


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent f75a4eec
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -4350,7 +4350,7 @@ s32 dump_mgntframe_and_wait_ack(struct adapter *padapter, struct xmit_frame *pmg
	if (padapter->bSurpriseRemoved || padapter->bDriverStopped)
		return -1;

	_enter_critical_mutex(&pxmitpriv->ack_tx_mutex, NULL);
	mutex_lock(&pxmitpriv->ack_tx_mutex);
	pxmitpriv->ack_tx = true;

	pmgntframe->ack_report = 1;
@@ -4359,7 +4359,7 @@ s32 dump_mgntframe_and_wait_ack(struct adapter *padapter, struct xmit_frame *pmg
	}

	pxmitpriv->ack_tx = false;
	_exit_critical_mutex(&pxmitpriv->ack_tx_mutex, NULL);
	mutex_unlock(&pxmitpriv->ack_tx_mutex);

	return ret;
}
+2 −2
Original line number Diff line number Diff line
@@ -29,7 +29,7 @@ static int usbctrl_vendorreq(struct intf_hdl *pintfhdl, u16 value, void *pdata,
		goto exit;
	}

	_enter_critical_mutex(&dvobjpriv->usb_vendor_req_mutex, NULL);
	mutex_lock(&dvobjpriv->usb_vendor_req_mutex);

	/*  Acquire IO memory for vendorreq */
	pIo_buf = dvobjpriv->usb_vendor_req_buf;
@@ -92,7 +92,7 @@ static int usbctrl_vendorreq(struct intf_hdl *pintfhdl, u16 value, void *pdata,
			break;
	}
release_mutex:
	_exit_critical_mutex(&dvobjpriv->usb_vendor_req_mutex, NULL);
	mutex_unlock(&dvobjpriv->usb_vendor_req_mutex);
exit:
	return status;
}
+0 −13
Original line number Diff line number Diff line
@@ -56,19 +56,6 @@ static inline struct list_head *get_list_head(struct __queue *queue)
	return (&(queue->queue));
}

static inline int _enter_critical_mutex(struct mutex *pmutex, unsigned long *pirqL)
{
	int ret;

	ret = mutex_lock_interruptible(pmutex);
	return ret;
}

static inline void _exit_critical_mutex(struct mutex *pmutex, unsigned long *pirqL)
{
		mutex_unlock(pmutex);
}

static inline void rtw_list_delete(struct list_head *plist)
{
	list_del_init(plist);
+2 −2
Original line number Diff line number Diff line
@@ -1060,9 +1060,9 @@ int netdev_open(struct net_device *pnetdev)
	int ret;
	struct adapter *padapter = (struct adapter *)rtw_netdev_priv(pnetdev);

	_enter_critical_mutex(padapter->hw_init_mutex, NULL);
	mutex_lock(padapter->hw_init_mutex);
	ret = _netdev_open(pnetdev);
	_exit_critical_mutex(padapter->hw_init_mutex, NULL);
	mutex_unlock(padapter->hw_init_mutex);
	return ret;
}