#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/interrupt.h>
#include <linux/semaphore.h>
MODULE_LICENSE("GPL");
int init_module(void)
{
printk("preempt_count: %d\n", preempt_count());
preempt_disable();
printk("preempt_count: %d\n", preempt_count());
preempt_enable();
return 0;
}
void cleanup_module(void)
{
printk("cleanup_module\n");
}
以上代码将以下消息打印到/ var / log / syslog:
Sep 13 16:31:29 userver kernel: [ 600.835013] preempt_count: 0
Sep 13 16:31:29 userver kernel: [ 600.835017] preempt_count: 0
为什么preempt_disable之后的preempt_count仍然返回0?
答案 0 :(得分:1)
当内核未使用CONFIG_PREEMPT
编译时,没有抢占计数器。