Re: [PATCH v3 01/11] libtracefs: Add new public macros for bits manipulations

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 3 Nov 2021 18:34:49 +0200
Tzvetomir Stoyanov <tz.stoyanov@xxxxxxxxx> wrote:

> On Wed, Nov 3, 2021 at 6:24 PM Steven Rostedt <rostedt@xxxxxxxxxxx> wrote:
> >
> > On Wed,  3 Nov 2021 17:44:07 +0200
> > "Tzvetomir Stoyanov (VMware)" <tz.stoyanov@xxxxxxxxx> wrote:
> >  
> > > diff --git a/include/tracefs.h b/include/tracefs.h
> > > index a2cda30..fa7f316 100644
> > > --- a/include/tracefs.h
> > > +++ b/include/tracefs.h
> > > @@ -10,6 +10,10 @@
> > >  #include <sched.h>
> > >  #include <event-parse.h>
> > >
> > > +#define TRACEFS_BIT_SET(M, B)        do { (M) |= (1ULL << (B)); } while (0)
> > > +#define TRACEFS_BIT_TEST(M, B)       ((M) & (1ULL<<(B)))
> > > +#define TRACEFS_BIT_CLEAR(M, B)      do { (M) &= ~(1ULL << (B)); } while (0)  
> >
> > Does this really need to be public?
> >
> > I was thinking that this would just be used internally, and thus in the
> > tracefs-local.h.
> >  
> 
> The  only reason to export it is because of these APIs, which get
> bitmask of enum tracefs_dynevent_type types:
>      int tracefs_dynevent_destroy_all(unsigned long type_mask, bool force);
>      struct tracefs_dynevent **tracefs_dynevent_get_all(unsigned long
> type_mask, const char *system);
> Currently that type is simple enum, and those macros are used to
> construct the bitmask:
> enum tracefs_dynevent_type {
>     TRACEFS_DYNEVENT_KPROBE = 0,
>     TRACEFS_DYNEVENT_KRETPROBE,
>     TRACEFS_DYNEVENT_UPROBE,
>     TRACEFS_DYNEVENT_URETPROBE,
>     TRACEFS_DYNEVENT_EPROBE,
>     TRACEFS_DYNEVENT_SYNTH,
>     TRACEFS_DYNEVENT_MAX,
> };
> 
> The other possible approach is to define the eum in that way, then no
> macros will be needed:
> enum tracefs_dynevent_type {
>     TRACEFS_DYNEVENT_KPROBE = 1,

For consistency we usually use "1 << 0" for this.

>     TRACEFS_DYNEVENT_KRETPROBE = 1 << 1,
>     TRACEFS_DYNEVENT_UPROBE = 1 << 2,
>     TRACEFS_DYNEVENT_URETPROBE = 1 << 3,
>     TRACEFS_DYNEVENT_EPROBE = 1 << 4,
>     TRACEFS_DYNEVENT_SYNTH = 1 << 5,

The above is very common, but make sure to tab it:

     TRACEFS_DYNEVENT_KPROBE		= 1 << 0,
     TRACEFS_DYNEVENT_KRETPROBE		= 1 << 1,
     TRACEFS_DYNEVENT_UPROBE		= 1 << 2,
     TRACEFS_DYNEVENT_URETPROBE		= 1 << 3,
     TRACEFS_DYNEVENT_EPROBE		= 1 << 4,
     TRACEFS_DYNEVENT_SYNTH		= 1 << 5,


>     TRACEFS_DYNEVENT_MAX = 0,

Although 0 does not make sense. What you do is this:

	TRACEFS_DYNEVENT_MAX		= 1 << 6;

And then you can also have:

#define TRACEFS_DYNEVENT_MASK (TRACEFS_DYNEVENT_MAX - 1)

-- Steve



[Index of Archives]     [Linux USB Development]     [Linux USB Development]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux