对__might_sleep的一个疑问

  1. void __might_sleep(char *file, int line)
  2. {
  3. #if defined(in_atomic)
  4.         static unsigned long prev_jiffy;        /* ratelimiting */

  5.         if ((in_atomic() || irqs_disabled()) &&
  6.             system_state == SYSTEM_RUNNING) {
  7.                 if (time_before(jiffies, prev_jiffy + HZ) && prev_jiffy)
  8.                         return;
  9.                 prev_jiffy = jiffies;
  10.                 printk(KERN_ERR "Debug: sleeping function called from invalid"
  11.                                 " context at %s:%d\n", file, line);
  12.                 printk("in_atomic():%d, irqs_disabled():%d\n",
  13.                         in_atomic(), irqs_disabled());
  14.                 dump_stack();
  15.         }
  16. #endif
  17. }
复制代码
其中这个prev_jiffy不是一直都是为0吗?那这个判断if (time_before(jiffies, prev_jiffy + HZ) && prev_jiffy)有什么意义?

作者: amarant   发布时间: 2011-02-15

看一下这个变量的类型


QUOTE:
        static unsigned long prev_jiffy;        /* ratelimiting */

作者: Godbach   发布时间: 2011-02-15

回复 Godbach


    明白了,刚才只想到static初始化的值为0,忘记了static会一直存在不会释放的了

作者: amarant   发布时间: 2011-02-15

是的。

作者: Godbach   发布时间: 2011-02-15