From: Fabio M. De Francesco <hidden> Date: 2021-10-17 14:28:36
This series replaces two semaphores with three completion variables
in rtw_cmd_thread(). Completions variables are better suited for the
purposes that are explained in detail in the commit messages of patches
1/3 and 2/3. Furthermore, patch 3/3 removes a redundant 'if' statement
from that same rtw_cmd_thread().
Tested with ASUSTek Computer, Inc. Realtek 8188EUS [USB-N10 Nano]
Many thanks to Dan Carpenter [off-list ref] who helped with
his review of the RFC Patch.
v1 => v2:
Patch 1/3: No changes;
Patch 2/3: Replace wait_for_completion_killable() with
wait_for_completion() because killing the kthread is
not allowed and so there is no need for killable
wait;
Patch 3/3: No changes.
Fabio M. De Francesco (3):
staging: r8188eu: Use completions for signaling start and end of
kthread
staging: r8188eu: Use completions for signaling enqueueing
staging: r8188eu: Remove redundant 'if' statement
drivers/staging/r8188eu/core/rtw_cmd.c | 20 +++++++-------------
drivers/staging/r8188eu/include/rtw_cmd.h | 5 +++--
drivers/staging/r8188eu/os_dep/os_intfs.c | 8 +++++---
3 files changed, 15 insertions(+), 18 deletions(-)
--
2.33.0
From: Fabio M. De Francesco <hidden> Date: 2021-10-17 14:28:39
rtw_cmd_thread() "up(s)" a semaphore twice, first to notify callers when
its execution is started and then to notify when it is about to end.
It makes the same semaphore go "up" twice in the same thread. This
construct makes Smatch to warn of duplicate "up(s)".
This thread uses interruptible semaphores where instead completions are
more suitable. For this purpose it calls an helper (_rtw_down_sema())
that returns values that are never checked. It may lead to bugs.
To address the above-mentioned issues, use two completions variables
instead of semaphores. Use the uninterruptible versions of
wake_for_completion*() because the interruptible / killable versions are
not necessary.
Tested with "ASUSTek Computer, Inc. Realtek 8188EUS [USB-N10 Nano]".
Acked-by: Phillip Potter <phil@philpotter.co.uk>
Signed-off-by: Fabio M. De Francesco <redacted>
---
drivers/staging/r8188eu/core/rtw_cmd.c | 7 ++++---
drivers/staging/r8188eu/include/rtw_cmd.h | 3 ++-
drivers/staging/r8188eu/os_dep/os_intfs.c | 6 ++++--
3 files changed, 10 insertions(+), 6 deletions(-)
@@ -385,7 +385,8 @@ u32 rtw_start_drv_threads(struct adapter *padapter)if(IS_ERR(padapter->cmdThread))_status=_FAIL;else-_rtw_down_sema(&padapter->cmdpriv.terminate_cmdthread_sema);/* wait for cmd_thread to run */+/* wait for rtw_cmd_thread() to start running */+wait_for_completion(&padapter->cmdpriv.start_cmd_thread);return_status;}
@@ -395,7 +396,8 @@ void rtw_stop_drv_threads(struct adapter *padapter)/* Below is to termindate rtw_cmd_thread & event_thread... */up(&padapter->cmdpriv.cmd_queue_sema);if(padapter->cmdThread)-_rtw_down_sema(&padapter->cmdpriv.terminate_cmdthread_sema);+/* wait for rtw_cmd_thread() to stop running */+wait_for_completion(&padapter->cmdpriv.stop_cmd_thread);}staticu8rtw_init_default_value(structadapter*padapter)
From: Fabio M. De Francesco <hidden> Date: 2021-10-17 14:28:41
rtw_enqueue_cmd() uses a semaphore to notify rtw_cmd_thread() that it
has enqueued commands. rtw_cmd_thread() "down(s)" in interruptible mode
to wait to be notified.
Use completion variables because they are better suited for the purpose.
In rtw_cmd_thread(), wait in uninterruptible mode, even if the original
code uses down_interruptible(), because the interruption of
rtw_cmd_thread() is not allowed and unwanted.
Acked-by: Phillip Potter <phil@philpotter.co.uk>
Signed-off-by: Fabio M. De Francesco <redacted>
---
drivers/staging/r8188eu/core/rtw_cmd.c | 7 +++----
drivers/staging/r8188eu/include/rtw_cmd.h | 2 +-
drivers/staging/r8188eu/os_dep/os_intfs.c | 2 +-
3 files changed, 5 insertions(+), 6 deletions(-)
From: Fabio M. De Francesco <hidden> Date: 2021-10-17 14:28:43
Remove a redundant 'if' statement.
Acked-by: Martin Kaiser <redacted>
Acked-by: Phillip Potter <phil@philpotter.co.uk>
Signed-off-by: Fabio M. De Francesco <redacted>
---
drivers/staging/r8188eu/core/rtw_cmd.c | 6 ------
1 file changed, 6 deletions(-)
@@ -254,12 +254,6 @@ int rtw_cmd_thread(void *context)while(1){wait_for_completion(&pcmdpriv->enqueue_cmd);-if(padapter->bDriverStopped||-padapter->bSurpriseRemoved){-DBG_88E("%s: DriverStopped(%d) SurpriseRemoved(%d) break at line %d\n",-__func__,padapter->bDriverStopped,padapter->bSurpriseRemoved,__LINE__);-break;-}_next:if(padapter->bDriverStopped||padapter->bSurpriseRemoved){
On Sun, Oct 17, 2021 at 04:28:12PM +0200, Fabio M. De Francesco wrote:
Remove a redundant 'if' statement.
Acked-by: Martin Kaiser <redacted>
Acked-by: Phillip Potter <phil@philpotter.co.uk>
Signed-off-by: Fabio M. De Francesco <redacted>
---
drivers/staging/r8188eu/core/rtw_cmd.c | 6 ------
1 file changed, 6 deletions(-)
Why is there not a "v2" in the subject line like the other patches in
this series?
@@ -254,12 +254,6 @@ int rtw_cmd_thread(void *context)while(1){wait_for_completion(&pcmdpriv->enqueue_cmd);-if(padapter->bDriverStopped||-padapter->bSurpriseRemoved){-DBG_88E("%s: DriverStopped(%d) SurpriseRemoved(%d) break at line %d\n",-__func__,padapter->bDriverStopped,padapter->bSurpriseRemoved,__LINE__);-break;-}
Why is this redundant?
It is not obvious from the diff what is going on so you should say a bit
more in the changelog text please.
thanks,
greg k-h
From: Fabio M. De Francesco <hidden> Date: 2021-10-18 16:28:54
On Monday, October 18, 2021 4:42:51 PM CEST Greg Kroah-Hartman wrote:
On Sun, Oct 17, 2021 at 04:28:12PM +0200, Fabio M. De Francesco wrote:
quoted
Remove a redundant 'if' statement.
Acked-by: Martin Kaiser <redacted>
Acked-by: Phillip Potter <phil@philpotter.co.uk>
Signed-off-by: Fabio M. De Francesco <redacted>
---
drivers/staging/r8188eu/core/rtw_cmd.c | 6 ------
1 file changed, 6 deletions(-)
Why is there not a "v2" in the subject line like the other patches in
this series?
Simply because I edited manually the "Subject" and overlooked to write "v2".
Why is this redundant?
It is not obvious from the diff what is going on so you should say a bit
more in the changelog text please.
Yes you are right. I wrongly thought that is was "obvious", but re-reading my
own text I noticed that it is not.
In 1/3 and 2/3 I was particularly careful in writing changelogs. Instead in
3/3 I forgot that commit messages _must_ explain "what" and "why" :(
I've just sent version 3 of the series.
Thanks for reviewing my work,
Fabio
On Mon, Oct 18, 2021 at 06:28:46PM +0200, Fabio M. De Francesco wrote:
On Monday, October 18, 2021 4:42:51 PM CEST Greg Kroah-Hartman wrote:
quoted
On Sun, Oct 17, 2021 at 04:28:12PM +0200, Fabio M. De Francesco wrote:
quoted
Remove a redundant 'if' statement.
Acked-by: Martin Kaiser <redacted>
Acked-by: Phillip Potter <phil@philpotter.co.uk>
Signed-off-by: Fabio M. De Francesco <redacted>
---
drivers/staging/r8188eu/core/rtw_cmd.c | 6 ------
1 file changed, 6 deletions(-)
Why is there not a "v2" in the subject line like the other patches in
this series?
Simply because I edited manually the "Subject" and overlooked to write "v2".