Re: [Outreachy kernel] [PATCH] :staging: rtl8723bs: Remove useless led_blink_hdl()

From: Fabio M. De Francesco
Date: Tue Apr 13 2021 - 15:45:13 EST


On Tuesday, April 13, 2021 9:25:05 PM CEST Julia Lawall wrote:
> On Tue, 13 Apr 2021, Fabio M. De Francesco wrote:
> > On Tuesday, April 13, 2021 8:57:20 PM CEST Julia Lawall wrote:
> > > On Tue, 13 Apr 2021, Fabio M. De Francesco wrote:
> > > > On Tuesday, April 13, 2021 8:20:50 PM CEST Dan Carpenter wrote:
> > > > > On Tue, Apr 13, 2021 at 06:47:06PM +0200, Fabio M. De Francesco
> >
> > wrote:
> > > > > > On Tuesday, April 13, 2021 6:27:17 PM CEST Julia Lawall wrote:
> > > > > > > On Tue, 13 Apr 2021, Fabio M. De Francesco wrote:
> > > > > > > > On Tuesday, April 13, 2021 6:04:16 PM CEST Julia Lawall
wrote:
> > > > > > > > > On Tue, 13 Apr 2021, Fabio M. De Francesco wrote:
> > > > > > > > > > Removed the led_blink_hdl() function (declaration,
> > > > > > > > > > definition,
> > > > > > > > > > and
> > > > > > > > > > caller code) because it's useless. It only seems to
> > > > > > > > > > check
> > > > > > > > > > whether
> > > > > > > > > > or
> > > > > > > > > > not a given pointer is NULL. There are other (simpler)
> > > > > > > > > > means
> > > > > > > > > > for
> > > > > > > > > > that
> > > > > > > > > > purpose.
> > > > > > > > > >
> > > > > > > > > > Signed-off-by: Fabio M. De Francesco
> > > > > > > > > > <fmdefrancesco@xxxxxxxxx>
> > > > > > > > > > ---
> > > > > > > > > >
> > > > > > > > > > drivers/staging/rtl8723bs/core/rtw_cmd.c | 1 -
> > > > > > > > > > drivers/staging/rtl8723bs/core/rtw_mlme_ext.c | 9
> > > > > > > > > > ---------
> > > > > > > > > > drivers/staging/rtl8723bs/include/rtw_mlme_ext.h | 1 -
> > > > > > > > > > 3 files changed, 11 deletions(-)
> > > > > > > > > >
> > > > > > > > > > diff --git a/drivers/staging/rtl8723bs/core/rtw_cmd.c
> > > > > > > > > > b/drivers/staging/rtl8723bs/core/rtw_cmd.c index
> > > > > > > > > > 0297fbad7bce..4c44dfd21514 100644
> > > > > > > > > > --- a/drivers/staging/rtl8723bs/core/rtw_cmd.c
> > > > > > > > > > +++ b/drivers/staging/rtl8723bs/core/rtw_cmd.c
> > > > > > > > > > @@ -150,7 +150,6 @@ static struct cmd_hdl wlancmds[] =
> > > > > > > > > > {
> > > > > > > > > >
> > > > > > > > > > GEN_MLME_EXT_HANDLER(0, h2c_msg_hdl) /*58*/
> > > > > > > > > > GEN_MLME_EXT_HANDLER(sizeof(struct
> >
> > SetChannelPlan_param),
> >
> > > > > > > > > > set_chplan_hdl) /*59*/>
> > > > > > > > > >
> > > > > > > > > > - GEN_MLME_EXT_HANDLER(sizeof(struct
> >
> > LedBlink_param),
> >
> > > > > > > > led_blink_hdl)
> > > > > > > >
> > > > > > > > > > /*60*/
> > > > > > > > >
> > > > > > > > > This is worrisome. Doyou fully understand the impact of
> > > > > > > > > this?
> > > > > > > > > If
> > > > > > > > > not,
> > > > > > > > > the change is probably not a good idea.
> > > > > > > >
> > > > > > > > This is that macro definition:
> > > > > > > >
> > > > > > > > #define GEN_MLME_EXT_HANDLER(size, cmd) {size, cmd},
> > > > > > > >
> > > > > > > > struct C2HEvent_Header {
> > > > > > > >
> > > > > > > > #ifdef __LITTLE_ENDIAN
> > > > > > > >
> > > > > > > > unsigned int len:16;
> > > > > > > > unsigned int ID:8;
> > > > > > > > unsigned int seq:8;
> > > > > > > >
> > > > > > > > #else
> > > > > > > >
> > > > > > > > unsigned int seq:8;
> > > > > > > > unsigned int ID:8;
> > > > > > > > unsigned int len:16;
> > > > > > > >
> > > > > > > > #endif
> > > > > > > >
> > > > > > > > unsigned int rsvd;
> > > > > > > >
> > > > > > > > };
> > > > > > > >
> > > > > > > > It's a bit convoluted with regard to my experience.
> > > > > > > > Probably I
> > > > > > > > don't
> > > > > > > > understand it fully, but it seems to me to not having
> > > > > > > > effects
> > > > > > > > to
> > > > > > > > the
> > > > > > > > code where I removed its use within core/rtw_cmd.c.
> > > > > > > >
> > > > > > > > What am I missing?
> > > > > > >
> > > > > > > It seems that the function is being put into an array.
> > > > > > > Probably
> > > > > > > someone
> > > > > > > expects to find it there. Probably you have shifted all of
> > > > > > > the
> > > > > > > functions that come afterwards back one slot so that they are
> > > > > > > all
> > > > > > > in
> > > > > > > the wrong places.
> > > > > > >
> > > > > > > julia
> > > > > >
> > > > > > Thanks for your explanation. Obviously this implies that the
> > > > > > function
> > > > > > cannot be removed, unless one fill the slot that is deleted by
> > > > > > to
> > > > > > not
> > > > > > calling this macro at the right moment.
> > > > > >
> > > > > > I also suppose that providing a function pointer with a NULL
> > > > > > value
> > > > > > wouldn't work either.
> > > > >
> > > > > It would work. That array is full of NULL function pointers.
> > > >
> > > > Interesting, thanks.
> > > >
> > > > I'm going to remove that function and replace its name in the macro
> > > > with a NULL function pointer.
> > > >
> > > > I couldn't believe it would work when I wrote about that.
> > >
> > > Have you checked that a value of NULL in that place is going to have
> > > the
> > > same effect as the function?
> >
> > No, I have not, but perhaps is not relevant.
> >
> > I want to give to the macro the name of an empty function that I define
> > in the same header where there the prototype of led_blink_hdl() is
> > defined now: something like "u8 empty_function { return 0; }"
> >
> > Can it work
> > What do you think about it?
>
> The previous function didn't return 0. It returned something else.
>
> To do anything this, you have to find where it is called and what result
> the call site expects. If you don't have that information, it does not
> seem safe to modify the function.
>
> julia
>
> > Fabio
> >
> > > julia
>
OK, let's summarize:

1) The driver doesn't call that function from anywhere else than the macro.
2) You have explained that the macro add its symbol to a slot in an array
that would shift all the subsequent elements down if that macro is not used
exactly in the line where it is.
3) Dan Carpenter said that that array is full of null functions (or empty
slots?).

Unless that function is called anonymously dereferencing its address from
the position it occupies in the array, I'm not able to see what else means
can any caller use.

I know I have much less experience than you with C: what can go wrong?

Thanks for your time,

Fabio