On Wed, Jan 18, 2017 at 07:31:30AM +0200, Leon Romanovsky wrote: > > +#define PRINT_ERR(fmt, ...) \ > > +do { \ > > + fprintf(stderr, "[%s:%d]" fmt, __func__, __LINE__, ##__VA_ARGS__); \ > > +} while (0) > > + > > +#define PRINT_DBG(dbg_mask, dbg_level, fmt, ...) \ > > +do { \ > > + if ((rdma_dbg_mask & dbg_mask) && (rdma_dbg_level >= dbg_level)) \ > > + fprintf(stderr, "[%s:%d]" fmt, __func__, __LINE__, ##__VA_ARGS__); \ > > +} while (0) > > + > > +#define LOG_DBG(dbg_fp, dbg_mask, dbg_level, fmt, ...) \ > > +do { \ > > + if ((rdma_dbg_mask & dbg_mask) && (rdma_dbg_level >= dbg_level)) \ > > + fprintf(dbg_fp, "[%s:%d]" fmt, __func__, __LINE__, ##__VA_ARGS__); \ > > +} while (0) > > + > > +#define LOG_DBG_FLUSH(dbg_fp, dbg_mask, dbg_level, fmt, ...) \ > > +do { \ > > + LOG_DBG(dbg_fp, dbg_mask, dbg_level, fmt, ##__VA_ARGS__); \ > > + if (dbg_fp != stderr) \ > > + fflush(dbg_fp); \ > > +} while (0) > > IMHO, these macros should be inline functions, and better to avoid global variables. It is more expensive at the call site to inline something that calls via va_args than via ..., so these should remain as macros. When doing this people generally like the 'if' test to be outside, for performance. I'm still not sure about these.. Why do we need print & log? I think there should only be one. Providers should not print to stderr unless the user asks for debugging. Jason -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html