定时器 timer_list (二)

原创 2011年01月18日 12:40:00

kernel timer_list usage

include/linux/timer.h
struct timer_list {
struct list_head entry;
unsigned long expires;

spinlock_t lock;
unsigned long magic;

void (*function)(unsigned long);
unsigned long data;

struct tvec_t_base_s *base;
};


kernel/timer.c
struct tvec_t_base_s {
spinlock_t lock;
unsigned long timer_jiffies;
struct timer_list *running_timer;
tvec_root_t tv1;
tvec_t tv2;
tvec_t tv3;
tvec_t tv4;
tvec_t tv5;
} ____cacheline_aligned_in_smp;

typedef struct tvec_t_base_s tvec_base_t;




The processing of timer_list

1. Init

init_timer(apptimeout)

/***
* init_timer - initialize a timer.
* @timer: the timer to be initialized
*
* init_timer() must be done to a timer prior calling *any* of the
* other timer functions.
*/
static inline void init_timer(struct timer_list * timer)
{
timer->base = NULL;
timer->magic = TIMER_MAGIC;
spin_lock_init(&timer->lock);
}

2. setup the independent field of timer_list (include data, function, expires..)
apptimeout.data = (unsigned long)master_conntrack;
apptimeout.function = free_appdata_by_timeout;
apptimeout.expires = jiffies + layer7_appdata_timeout;

3. add the timer_list
add_timer(apptimeout);

static inline void add_timer(struct timer_list * timer)
{
__mod_timer(timer, timer->expires);
}

int __mod_timer(struct timer_list *timer, unsigned long expires)

4. delete the timer_list
del_timer

/***
* del_timer - deactive a timer.
* @timer: the timer to be deactivated
*
* del_timer() deactivates a timer - this works on both active and inactive
* timers.
*
* The function returns whether it has deactivated a pending timer or not.
* (ie. del_timer() of an inactive timer returns 0, del_timer() of an
* active timer returns 1.)
*/
int del_timer(struct timer_list *timer)
{
unsigned long flags;
tvec_base_t *base;

check_timer(timer);

repeat:
base = timer->base;
if (!base)
return 0;
spin_lock_irqsave(&base->lock, flags);
if (base != timer->base) {
spin_unlock_irqrestore(&base->lock, flags);
goto repeat;
}
list_del(&timer->entry);
/* Need to make sure that anybody who sees a NULL base also sees the list ops */
smp_wmb();
timer->base = NULL;
spin_unlock_irqrestore(&base->lock, flags);

return 1;
}

 

 原文地址 http://anoty.blogspot.com/2007/03/kernel-timerlist-usage.html

内核定时器timer_list使用

Linux内核中提供了timer使用的API,做一个简单的记要。 包含的头文件:#include #include #include #include struct timer_list tim...
  • Yao_GUET
  • Yao_GUET
  • 2015年10月28日 16:11
  • 4377

Linux内核定时器timer_list

Linux内核版本:linux-3.0.35 开发板:i.MX6S MY-IMX6-EK200 拟定任务:LED闪烁
  • c406495762
  • c406495762
  • 2016年03月17日 17:18
  • 1353

内核定时器 timer_list 分析

struct timer_list|-----------------------------------||struct list_head     entry         ||unsigned...
  • ljxkey
  • ljxkey
  • 2013年03月28日 00:54
  • 357

linux 内核定时器 timer_list详解

转自http://www.cnblogs.com/leaven/archive/2010/08/19/1803382.html Linux内核2.4版中去掉了老版本内核中的静态定时器机制,而只留下动...
  • qingkongyeyue
  • qingkongyeyue
  • 2017年07月10日 17:59
  • 442

linux 内核定时器 timer_list详解

转:http://linux.ccidnet.com/art/741/20061116/952655_1.html http://www.cnblogs.com/leaven/archive/2010...
  • jiangxi756
  • jiangxi756
  • 2013年08月07日 18:47
  • 509

linux 内核定时器 timer_list详解

http://www.linux-cn.com/html/linux/kernel/20070412/1886.shtml   http://linux.ccidnet.com/art/741/20...
  • jsw_4
  • jsw_4
  • 2014年12月22日 17:37
  • 176

笔记之内核定时器(timer_list)

转自:https://www.cnblogs.com/leaven/archive/2010/08/19/1803382.html 1.Linux在include/linux/timer.h头文...
  • hxHardway
  • hxHardway
  • 2018年01月11日 18:55
  • 20

linux 内核定时器 timer_list详解

http://www.cnblogs.com/leaven/archive/2010/08/19/1803382.html http://www.linux-cn.com/html/linu...
  • zhanzheng520
  • zhanzheng520
  • 2014年01月04日 17:31
  • 347

linux 内核定时器 timer_list详解

7.6.1 Linux内核对定时器的描述 Linux在include/linux/timer.h头文件中定义了数据结构timer_list来描述一个内核定时器: s...
  • ling459903347
  • ling459903347
  • 2014年05月14日 16:40
  • 331

36 linux内核里的HZ定时器与timer_list定时器

在linux内核里的设备驱动常常用到定时器定时器功能,而硬件上的定时器通常只有几个,如果每个设备驱动使用一个硬件定时器,那肯定是不够用,所以在linux内核里会把一个硬件定时器的功能扩展成多个软件定时...
  • jklinux
  • jklinux
  • 2017年06月21日 11:45
  • 796
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:定时器 timer_list (二)
举报原因:
原因补充:

(最多只允许输入30个字)