On Tue, Jul 30, 2019 at 06:18:33PM +0300, Gal Pressman wrote: > Add ratelimited helpers to the ibdev_* printk functions. > Implementation inspired by counterpart dev_*_ratelimited functions. > > Signed-off-by: Gal Pressman <galpress@xxxxxxxxxx> > --- > include/rdma/ib_verbs.h | 51 +++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 51 insertions(+) > > diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h > index c5f8a9f17063..356e6a105366 100644 > --- a/include/rdma/ib_verbs.h > +++ b/include/rdma/ib_verbs.h > @@ -107,6 +107,57 @@ static inline > void ibdev_dbg(const struct ib_device *ibdev, const char *format, ...) {} > #endif > > +#define ibdev_level_ratelimited(ibdev_level, ibdev, fmt, ...) \ > +do { \ > + static DEFINE_RATELIMIT_STATE(_rs, \ > + DEFAULT_RATELIMIT_INTERVAL, \ > + DEFAULT_RATELIMIT_BURST); \ > + if (__ratelimit(&_rs)) \ > + ibdev_level(ibdev, fmt, ##__VA_ARGS__); \ > +} while (0) > + > +#define ibdev_emerg_ratelimited(ibdev, fmt, ...) \ > + ibdev_level_ratelimited(ibdev_emerg, ibdev, fmt, ##__VA_ARGS__) > +#define ibdev_alert_ratelimited(ibdev, fmt, ...) \ > + ibdev_level_ratelimited(ibdev_alert, ibdev, fmt, ##__VA_ARGS__) > +#define ibdev_crit_ratelimited(ibdev, fmt, ...) \ > + ibdev_level_ratelimited(ibdev_crit, ibdev, fmt, ##__VA_ARGS__) > +#define ibdev_err_ratelimited(ibdev, fmt, ...) \ > + ibdev_level_ratelimited(ibdev_err, ibdev, fmt, ##__VA_ARGS__) > +#define ibdev_warn_ratelimited(ibdev, fmt, ...) \ > + ibdev_level_ratelimited(ibdev_warn, ibdev, fmt, ##__VA_ARGS__) > +#define ibdev_notice_ratelimited(ibdev, fmt, ...) \ > + ibdev_level_ratelimited(ibdev_notice, ibdev, fmt, ##__VA_ARGS__) > +#define ibdev_info_ratelimited(ibdev, fmt, ...) \ > + ibdev_level_ratelimited(ibdev_info, ibdev, fmt, ##__VA_ARGS__) > + > +#if defined(CONFIG_DYNAMIC_DEBUG) > +/* descriptor check is first to prevent flooding with "callbacks suppressed" */ > +#define ibdev_dbg_ratelimited(ibdev, fmt, ...) \ > +do { \ > + static DEFINE_RATELIMIT_STATE(_rs, \ > + DEFAULT_RATELIMIT_INTERVAL, \ > + DEFAULT_RATELIMIT_BURST); \ > + DEFINE_DYNAMIC_DEBUG_METADATA(descriptor, fmt); \ > + if (DYNAMIC_DEBUG_BRANCH(descriptor) && __ratelimit(&_rs)) \ > + __dynamic_ibdev_dbg(&descriptor, ibdev, fmt, \ > + ##__VA_ARGS__); \ > +} while (0) > +#elif defined(DEBUG) When will you see this CONFIG_DEBUG set? I suspect only in private out-of-tree builds which we are not really care. Also I can't imagine system with this CONFIG_DEBUG and without CONFIG_DYNAMIC_DEBUG. Thanks > +#define ibdev_dbg_ratelimited(ibdev, fmt, ...) \ > +do { \ > + static DEFINE_RATELIMIT_STATE(_rs, \ > + DEFAULT_RATELIMIT_INTERVAL, \ > + DEFAULT_RATELIMIT_BURST); \ > + if (__ratelimit(&_rs)) \ > + ibdev_printk(KERN_DEBUG, ibdev, fmt, ##__VA_ARGS__); \ > +} while (0) > +#else > +__printf(2, 3) __cold > +static inline > +void ibdev_dbg_ratelimited(const struct ib_device *ibdev, const char *format, ...) {} > +#endif > + > union ib_gid { > u8 raw[16]; > struct { > -- > 2.22.0 >