On 10/9/21 09:12, Gang Li wrote: > By using DECLARE_EVENT_CLASS and TRACE_EVENT_FN, we can save a lot > of space from duplicate code. > > Signed-off-by: Gang Li <ligang.bdlg@xxxxxxxxxxxxx> Acked-by: Vlastimil Babka <vbabka@xxxxxxx> > @@ -36,11 +36,19 @@ TRACE_EVENT_FN(mmap_lock_start_locking, > __entry->mm, > __get_str(memcg_path), > __entry->write ? "true" : "false" > - ), > - > - trace_mmap_lock_reg, trace_mmap_lock_unreg > + ) > ); > > +#define DEFINE_MMAP_LOCK_EVENT(name) \ > + DEFINE_EVENT_FN(mmap_lock, name, \ > + TP_PROTO(struct mm_struct *mm, const char *memcg_path, \ > + bool write), \ > + TP_ARGS(mm, memcg_path, write), \ > + trace_mmap_lock_reg, trace_mmap_lock_unreg) A question (for Steven). I've several times wondered why DEFINE_EVENT has to pass TP_PROTO/TP_ARGS even if they are often the same. Is it not possible to have a variant that doesn't need that, and thus also doesn't need such extra wrapping as above? > + > +DEFINE_MMAP_LOCK_EVENT(mmap_lock_start_locking); > +DEFINE_MMAP_LOCK_EVENT(mmap_lock_released); > + > TRACE_EVENT_FN(mmap_lock_acquire_returned, > > TP_PROTO(struct mm_struct *mm, const char *memcg_path, bool write, > @@ -73,34 +81,6 @@ TRACE_EVENT_FN(mmap_lock_acquire_returned, > trace_mmap_lock_reg, trace_mmap_lock_unreg > ); > > -TRACE_EVENT_FN(mmap_lock_released, > - > - TP_PROTO(struct mm_struct *mm, const char *memcg_path, bool write), > - > - TP_ARGS(mm, memcg_path, write), > - > - TP_STRUCT__entry( > - __field(struct mm_struct *, mm) > - __string(memcg_path, memcg_path) > - __field(bool, write) > - ), > - > - TP_fast_assign( > - __entry->mm = mm; > - __assign_str(memcg_path, memcg_path); > - __entry->write = write; > - ), > - > - TP_printk( > - "mm=%p memcg_path=%s write=%s", > - __entry->mm, > - __get_str(memcg_path), > - __entry->write ? "true" : "false" > - ), > - > - trace_mmap_lock_reg, trace_mmap_lock_unreg > -); > - > #endif /* _TRACE_MMAP_LOCK_H */ > > /* This part must be outside protection */ >