Re: [RFC PATCH] staging: r8188eu: Use completions instead of semaphores

From: Fabio M. De Francesco
Date: Sat Oct 16 2021 - 02:43:42 EST


On Friday, October 15, 2021 2:50:20 PM CEST Dan Carpenter wrote:
> On Fri, Oct 15, 2021 at 02:11:41PM +0200, Fabio M. De Francesco wrote:

[...]

> > Hi Dan,
> >
> > Thanks for your review.
> >
> > I wasn't aware of Arnd's patch. If I were I would have sent a "normal"
patch.
> >
> > Beyond this, I noticed that other semaphore (pcmdpriv->cmd_queue_sema)
but,
> > since I was not 100% sure that my changes would be accepted, I decided to
> > leave it as-is for now and wait for reviews like yours.
> >
> > Now that I know that this changes are welcome I'll also make the other
> > changes.
> >
> > I guess that I have to change one semaphore per patch and make a series.
> > However, now I see that Arnd's patch makes all the necessary changes in a
> > single patch. What is the correct approach? Is one patch per semaphore
> > preferred or one big patch for all of those that need to be changed?
> >
>
> The two semaphores used in that function are very connected so I don't
> think it makes sense to split those up.

I agree with you: the two semaphores in rtw_cmd_thread() are (somewhat)
connected. However they serve different purposes.

The first is used in to signal start and end of command thread
(rtw_cmd_thread()). The second is used to notify that same thread that some
commands have been enqueued. They serve two different purposes.

I prefer to make a series of three patches that I'll call "staging: r8188eu:
use conditions variables and clean rtw_cmd_thread()". This choice is based on
the above-mentioned fact that the two semaphores are there for different
purposes. Let me explain what I'll put in each of the three patches...

1) The first semaphore came to my attention because of a Smatch warning about
duplicate releases ("up(s)) of the same semaphore in the same function. While
addressing that problem I noticed that completions variables are more suited
than semaphores for doing the work.

So I didn't merely change the names of the semaphores in order to silence
Smatch, instead I chose a more radical approach that is to replace semaphores
with condition variables.

The first patch is there, I have the commit message ready to be re-used, and
it is self-contained even if we still have a second semaphore that is there
for servicing another purpose.

2) The second semaphore came to my attention while working on the first and
trying to understand what rtw_cmd_thread() is meant for. It is there for very
different reasons. There is only one relation between them, that is that they
are used into the same function. Nothing else.

So I prefer to write a second commit message (in patch 2/3) that explains
what the semaphore does and why it is better to replace it with a condition
variable. Obviously, this "why are you changing it?" has a different answer
with respect of what I say in patch 1/3.

3) With 3/3 there is the "clean" part of "staging: r8188eu: use conditions
variables and clean rtw_cmd_thread()". While reading rtw_cmd_thread(), I
noticed that there is an unnecessary duplicate of an 'if' statement. I want
to remove the first (the one before the "_next:" label.

Other semaphores is r8188eu (if there are more) will be eventually addressed
in future patches.

I hope that you and Phillip agree with me on this step by step approach.

Regards,

Fabio M. De Francesco

> The others are less connected.
>
> regards,
> dan carpenter
>
>