Author: hselasky
Date: Thu Mar 23 16:23:55 2017
New Revision: 315864
URL: https://svnweb.freebsd.org/changeset/base/315864

Log:
  Use ppsratecheck() for ratelimiting in the LinuxKPI.
  
  Suggested by:         cem @
  MFC after:            1 week
  Sponsored by:         Mellanox Technologies

Modified:
  head/sys/compat/linuxkpi/common/include/linux/device.h
  head/sys/compat/linuxkpi/common/include/linux/kernel.h
  head/sys/compat/linuxkpi/common/src/linux_compat.c

Modified: head/sys/compat/linuxkpi/common/include/linux/device.h
==============================================================================
--- head/sys/compat/linuxkpi/common/include/linux/device.h      Thu Mar 23 
16:01:51 2017        (r315863)
+++ head/sys/compat/linuxkpi/common/include/linux/device.h      Thu Mar 23 
16:23:55 2017        (r315864)
@@ -145,13 +145,13 @@ show_class_attr_string(struct class *cla
            device_printf((dev)->bsddev, fmt, ##__VA_ARGS__)
 
 #define        dev_err_ratelimited(dev, ...) do {      \
-       static time_t __ratelimited;            \
+       static linux_ratelimit_t __ratelimited; \
        if (linux_ratelimited(&__ratelimited))  \
                dev_err(dev, __VA_ARGS__);      \
 } while (0)
 
 #define        dev_warn_ratelimited(dev, ...) do {     \
-       static time_t __ratelimited;            \
+       static linux_ratelimit_t __ratelimited; \
        if (linux_ratelimited(&__ratelimited))  \
                dev_warn(dev, __VA_ARGS__);     \
 } while (0)

Modified: head/sys/compat/linuxkpi/common/include/linux/kernel.h
==============================================================================
--- head/sys/compat/linuxkpi/common/include/linux/kernel.h      Thu Mar 23 
16:01:51 2017        (r315863)
+++ head/sys/compat/linuxkpi/common/include/linux/kernel.h      Thu Mar 23 
16:23:55 2017        (r315864)
@@ -41,6 +41,7 @@
 #include <sys/smp.h>
 #include <sys/stddef.h>
 #include <sys/syslog.h>
+#include <sys/time.h>
 
 #include <linux/bitops.h>
 #include <linux/compiler.h>
@@ -225,7 +226,7 @@ scnprintf(char *buf, size_t size, const 
 #define pr_cont(fmt, ...) \
        printk(KERN_CONT fmt, ##__VA_ARGS__)
 #define        pr_warn_ratelimited(...) do {           \
-       static time_t __ratelimited;            \
+       static linux_ratelimit_t __ratelimited; \
        if (linux_ratelimited(&__ratelimited))  \
                pr_warning(__VA_ARGS__);        \
 } while (0)
@@ -423,6 +424,15 @@ abs64(int64_t x)
        return (x < 0 ? -x : x);
 }
 
-extern bool linux_ratelimited(time_t *);
+typedef struct linux_ratelimit {
+       struct timeval lasttime;
+       int counter;
+} linux_ratelimit_t;
+
+static inline bool
+linux_ratelimited(linux_ratelimit_t *rl)
+{
+       return (ppsratecheck(&rl->lasttime, &rl->counter, 1));
+}
 
 #endif /* _LINUX_KERNEL_H_ */

Modified: head/sys/compat/linuxkpi/common/src/linux_compat.c
==============================================================================
--- head/sys/compat/linuxkpi/common/src/linux_compat.c  Thu Mar 23 16:01:51 
2017        (r315863)
+++ head/sys/compat/linuxkpi/common/src/linux_compat.c  Thu Mar 23 16:23:55 
2017        (r315864)
@@ -1484,20 +1484,6 @@ __unregister_chrdev(unsigned int major, 
 bool linux_cpu_has_clflush;
 #endif
 
-bool
-linux_ratelimited(time_t *ptime)
-{
-       /* make sure uptime is not zero by OR'ing bit 31 */
-       time_t curr = time_uptime | (1U << 31);
-
-       /* check if one or more seconds have passed */
-       if (*ptime != curr) {
-               *ptime = curr;
-               return (1);
-       }
-       return (0);
-}
-
 static void
 linux_compat_init(void *arg)
 {
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to