lkml.org 
[lkml]   [2012]   [May]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Date
    SubjectRe: [RFC 1/1] driver core: Add dev_*_ratelimited() family
    Joe Perches <joe@perches.com> wrote @ Mon, 14 May 2012 08:05:39 +0200:

    > On Mon, 2012-05-14 at 07:40 +0200, Hiroshi Doyu wrote:
    > > Joe Perches <joe@perches.com> wrote @ Mon, 14 May 2012 07:25:55 +0200:
    > > > On Mon, 2012-05-14 at 07:00 +0200, Hiroshi Doyu wrote:
    > > > > Joe Perches <joe@perches.com> wrote @ Sat, 12 May 2012 17:31:35 +0200:
    > > > > > On Sat, 2012-05-12 at 12:52 +0200, Hiroshi Doyu wrote:
    > > > > > > An unclosed "if" statement in the MACRO seems a bit risky, but I don't
    > > > > > > have any better/simple solution for this, ATM. Is there any alternative?
    > > > > >
    > > > > > maybe something like:
    > > > > >
    > > > > > #define dev_ratelimited_level(dev, level, fmt, ...)
    > > > > > do {
    > > > > > static DEFINE_RATELIMIT_STATE(_rs, \
    > > > > > DEFAULT_RATELIMIT_INTERVAL, \
    > > > > > DEFAULT_RATELIMIT_BURST); \
    > > > > > if (__ratelimit(&_rs)) \
    > > > > > dev_##level(fmt, ##__VA_ARGS__); \
    > > > > > } while (0)
    > > > > >
    > > > > > #define dev_emerg_ratelimited(dev, fmt, ...) \
    > > > > > dev_ratelimited_level(dev, emerg, fmt, ##__VA_ARGS__)
    > [...]
    > > > > > #define dev_dbg_ratelimited(dev, fmt, ...) \
    > > > > > dev_ratelimited_level(dev, dbg, fmt, ##__VA_ARGS__)
    > > > >
    > > > > "dev" isn't handled separately with __VA_ARGS__, and failed to build
    > > > > as below:
    > > > >
    > > > > Example:
    > > > > dev_err_ratelimited(&pdev->dev, "%d\n", __LINE__);
    > > > >
    > > > > After preprocessded:
    > > > > do { ... if (___ratelimit(&_rs, __func__)) dev_err("%d\n", 18); } while (0);
    > > > >
    > > >
    > > > Sorry, I was just typing in the email client and
    > > > I missed the "dev" argument.
    > > >
    > > > Add "dev" to the dev_##level statement like:
    > > >
    > > > #define dev_ratelimited_level(dev, level, fmt, ...) \
    > > > do { \
    > > > static DEFINE_RATELIMIT_STATE(_rs, \
    > > > DEFAULT_RATELIMIT_INTERVAL, \
    > > > DEFAULT_RATELIMIT_BURST); \
    > > > if (__ratelimit(&_rs)) \
    > > > dev_##level(dev, fmt, ##__VA_ARGS__); \
    > > > } while (0)
    > >
    > > Verified that the above works. Would you mind sending the complete version of this patch?
    >
    > Hello Hiroshi.
    >
    > It's your patch and your idea.
    > I think you should submit it.
    > You were just asking for alternatives or a bit
    > of guidance.

    Thanks.

    > Maybe a better name for dev_ratelimited_level is
    > dev_level_ratelimited and the macro should be
    >
    > #define dev_level_ratelimited(dev_level, dev, fmt, ...) \
    > do { \
    > static DEFINE_RATELIMIT_STATE(_rs, \
    > DEFAULT_RATELIMIT_INTERVAL, \
    > DEFAULT_RATELIMIT_BURST); \
    > if (__ratelimit(&_rs)) \
    > dev_level(dev, fmt, ##__VA_ARGS__); \
    > } while (0)
    >
    > with uses like
    >
    > #define dev_notice_ratelimited(dev, fmt, ...) \
    > dev_level_ratelimited(dev_notice, fmt, ##__VA_ARGS__)
    >
    >
    > Your choice though I think the last option above
    > may be better because it more closely follows the
    > style a dev_printk_ratelimited would use.

    Agree. The complete version of the above patch follows this email.


    \
     
     \ /
      Last update: 2012-05-14 10:22    [W:0.036 / U:29.840 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site