Hi,
I would like to improve the following coccinelle script:
@@
expression a, fmt;
expression list var_args;
@@
- DBG_871X_LEVEL(a, fmt, var_args);
+ printk(fmt, var_args);
I would replace the DBG_871X_LEVEL macro with printk, but
I can't find a way to add KERN_* constant prefix to the fmt
argument in the + code line. If i try this
@@
expression a, fmt;
expression list var_args;
@@
- DBG_871X_LEVEL(a, fmt, var_args);
+ printk(KERN_DEBUG fmt, var_args);
plus: parse error:
File "../test.cocci", line 94, column 20, charpos = 1171
around = 'fmt',
whole content = + printk(KERN_DEBUG fmt, var_args);
how could I do this?
thank you in advance,
fabio
On Tue, Apr 13, 2021 at 11:11:38AM +0200, Greg KH wrote:
> On Tue, Apr 13, 2021 at 11:04:01AM +0200, Fabio Aiuto wrote:
> > Hi,
> >
> > I would like to improve the following coccinelle script:
> >
> > @@
> > expression a, fmt;
> > expression list var_args;
> > @@
> >
> > - DBG_871X_LEVEL(a, fmt, var_args);
> > + printk(fmt, var_args);
> >
> > I would replace the DBG_871X_LEVEL macro with printk,
>
> No you really do not, you want to change that to a dev_*() call instead
> depending on the "level" of the message.
>
> No "raw" printk() calls please, I will just reject them :)
>
> thanks,
>
> greg k-h
but there are very few occurences of DBG_871X_LEVEL in module init functions:
static int __init rtw_drv_entry(void)
{
int ret;
DBG_871X_LEVEL(_drv_always_, "module init start\n");
dump_drv_version(RTW_DBGDUMP);
#ifdef BTCOEXVERSION
DBG_871X_LEVEL(_drv_always_, "rtl8723bs BT-Coex version = %s\n", BTCOEXVERSION);
#endif /* BTCOEXVERSION */
sdio_drvpriv.drv_registered = true;
ret = sdio_register_driver(&sdio_drvpriv.r871xs_drv);
if (ret != 0) {
sdio_drvpriv.drv_registered = false;
rtw_ndev_notifier_unregister();
}
DBG_871X_LEVEL(_drv_always_, "module init ret =%d\n", ret);
return ret;
}
where I don't have a device available... shall I pass NULL to
first argument?
Another question: may I use netdev_dbg in case of rtl8723bs?
thank you,
fabio
On Tue, 13 Apr 2021, Fabio Aiuto wrote:
> Hi,
>
> I would like to improve the following coccinelle script:
>
> @@
> expression a, fmt;
> expression list var_args;
> @@
>
> - DBG_871X_LEVEL(a, fmt, var_args);
> + printk(fmt, var_args);
>
> I would replace the DBG_871X_LEVEL macro with printk, but
> I can't find a way to add KERN_* constant prefix to the fmt
> argument in the + code line. If i try this
>
> @@
> expression a, fmt;
> expression list var_args;
> @@
>
> - DBG_871X_LEVEL(a, fmt, var_args);
> + printk(KERN_DEBUG fmt, var_args);
>
> plus: parse error:
> File "../test.cocci", line 94, column 20, charpos = 1171
> around = 'fmt',
> whole content = + printk(KERN_DEBUG fmt, var_args);
>
> how could I do this?
Although I certainly agree with Greg, I'll answer the question from a
technical point of view.
I'm not sure that that kind of compound string is supported for a
metavariable. It is possible to get around this problem using a python
script. If you ever need to do this for a better reason, you can take a
look at demos/pythontococci.cocci in the Coccinelle source code
distribution.
julia
On Tue, Apr 13, 2021 at 11:56:20AM +0200, Julia Lawall wrote:
>
>
> On Tue, 13 Apr 2021, Fabio Aiuto wrote:
>
> > Hi,
> >
> > I would like to improve the following coccinelle script:
> >
> > @@
> > expression a, fmt;
> > expression list var_args;
> > @@
> >
> > - DBG_871X_LEVEL(a, fmt, var_args);
> > + printk(fmt, var_args);
> >
> > I would replace the DBG_871X_LEVEL macro with printk, but
> > I can't find a way to add KERN_* constant prefix to the fmt
> > argument in the + code line. If i try this
> >
> > @@
> > expression a, fmt;
> > expression list var_args;
> > @@
> >
> > - DBG_871X_LEVEL(a, fmt, var_args);
> > + printk(KERN_DEBUG fmt, var_args);
> >
> > plus: parse error:
> > File "../test.cocci", line 94, column 20, charpos = 1171
> > around = 'fmt',
> > whole content = + printk(KERN_DEBUG fmt, var_args);
> >
> > how could I do this?
>
> Although I certainly agree with Greg, I'll answer the question from a
> technical point of view.
>
> I'm not sure that that kind of compound string is supported for a
> metavariable. It is possible to get around this problem using a python
> script. If you ever need to do this for a better reason, you can take a
> look at demos/pythontococci.cocci in the Coccinelle source code
> distribution.
>
> julia
thank you, this helps a lot!
fabio
On Tue, Apr 13, 2021 at 11:04:01AM +0200, Fabio Aiuto wrote:
> Hi,
>
> I would like to improve the following coccinelle script:
>
> @@
> expression a, fmt;
> expression list var_args;
> @@
>
> - DBG_871X_LEVEL(a, fmt, var_args);
> + printk(fmt, var_args);
>
> I would replace the DBG_871X_LEVEL macro with printk,
No you really do not, you want to change that to a dev_*() call instead
depending on the "level" of the message.
No "raw" printk() calls please, I will just reject them :)
thanks,
greg k-h
On Tue, Apr 13, 2021 at 11:24:56AM +0200, Fabio Aiuto wrote:
> On Tue, Apr 13, 2021 at 11:11:38AM +0200, Greg KH wrote:
> > On Tue, Apr 13, 2021 at 11:04:01AM +0200, Fabio Aiuto wrote:
> > > Hi,
> > >
> > > I would like to improve the following coccinelle script:
> > >
> > > @@
> > > expression a, fmt;
> > > expression list var_args;
> > > @@
> > >
> > > - DBG_871X_LEVEL(a, fmt, var_args);
> > > + printk(fmt, var_args);
> > >
> > > I would replace the DBG_871X_LEVEL macro with printk,
> >
> > No you really do not, you want to change that to a dev_*() call instead
> > depending on the "level" of the message.
> >
> > No "raw" printk() calls please, I will just reject them :)
> >
> > thanks,
> >
> > greg k-h
>
> but there are very few occurences of DBG_871X_LEVEL in module init functions:
Then do those "by hand", if they really are needed.
Drivers, when they are working properly, are totally quiet.
>
> static int __init rtw_drv_entry(void)
> {
> int ret;
>
> DBG_871X_LEVEL(_drv_always_, "module init start\n");
Horrible, please remove.
> dump_drv_version(RTW_DBGDUMP);
> #ifdef BTCOEXVERSION
> DBG_871X_LEVEL(_drv_always_, "rtl8723bs BT-Coex version = %s\n", BTCOEXVERSION);
Not needed at all.
> #endif /* BTCOEXVERSION */
>
> sdio_drvpriv.drv_registered = true;
>
> ret = sdio_register_driver(&sdio_drvpriv.r871xs_drv);
> if (ret != 0) {
> sdio_drvpriv.drv_registered = false;
> rtw_ndev_notifier_unregister();
> }
>
> DBG_871X_LEVEL(_drv_always_, "module init ret =%d\n", ret);
Again, not needed this is noise and if someone really needs to debug
this, they can use the built-in kernel ftrace logic instead.
> return ret;
> }
>
> where I don't have a device available... shall I pass NULL to
> first argument?
No, that would be a mess :)
I bet almost all of these can be removed if they are like the above
examples as we do not need a lot of "look, the code got here!" type of
messages at all.
> Another question: may I use netdev_dbg in case of rtl8723bs?
Yes please, that is even better and recommended.
thanks,
greg k-h