定时器 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
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

内核定时器struct timer_list

原文: 追梦的小鸟 http://blog.sina.com.cn/u/1779972073   内核中最终的计时资源是定时器。定时器用于定时器超时处理程序在未来某个特定时间点执行,或者周期性的...

内核定时器 struct timer_list

本文来自:http://hi.baidu.com/zhlg_hzh/blog/item/d298b49b57a1cab2c8eaf42b.html   定时器,有时也称为动态定时器或内核定时器,是...

内核定时器 struct timer_list

本文来自:http://hi.baidu.com/zhlg_hzh/blog/item/d298b49b57a1cab2c8eaf42b.html   定时器,有时也称为动态定时器...

Linux内核定时器timer_list

Linux内核版本:linux-3.0.35 开发板:i.MX6S MY-IMX6-EK200 拟定任务:LED闪烁

Linux内核定时器--timer_list

定时器: linux操作系统提供了一个内核定时器 内核定时器可在未来的某个特定时间点调度执行某个函数,完成指定任务 linux内核定时器提供了一种异步处理的机制 用户通过设置将来某一时刻的滴答...

Linux 驱动程序笔记4——内核定时器struct timer_list

内核中最终的计时资源是定时器。定时器用于定时器超时处理程序在未来某个特定时间点执行,或者周期性的轮询硬件的状态。Linux提供了内核定时器完成这类工作。     定时器的只需要执行一些初始化的操作,如...

Linux内核定时器-- timer_list

一.概述             信号量是Linux进程间通信的常用方法之一,这里使用POSIX标准的信号量,而不是System V的。 二.头文件 linux/timer.h 二...

内核定时器 timer_list 分析

struct timer_list|-----------------------------------||struct list_head     entry      ...

内核定时器 struct timer_list

定时器,有时也称为动态定时器或内核定时器,是管理内核时间的基础。内核经常要推后执行某些代码,比如下半部机制就是为了将工作推后执行。我们需要一种工具,使工作能够在指定时间点上执行,正好在希望的时间点上,...

定时器 timer_list (一)

定时器 timer_list   (一)   struct timer_list|-----------------------------------||struct list_head     e...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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