softirq_init

硬件中断需要做尽可能少的事情,多时间要求不严的事情,交给中断下半部分去做。有三种不同形式的下半部实现机制:软中断、tasklet、工作队列。
软中断
内核定义了下面的软中断类型,用户尽量不要自己去创建软中断类型
enum
{
HI_SOFTIRQ=0,
TIMER_SOFTIRQ,
NET_TX_SOFTIRQ,
NET_RX_SOFTIRQ,
BLOCK_SOFTIRQ,
BLOCK_IOPOLL_SOFTIRQ,
TASKLET_SOFTIRQ,
SCHED_SOFTIRQ,
HRTIMER_SOFTIRQ,
RCU_SOFTIRQ, /* Preferable RCU should always be the last softirq */

NR_SOFTIRQS

};
软中断中的tasklet 用于执行延迟任务,相同类型的tasklet 按照顺序执行,不同的tasklet 可以在多核中并行执行。保证一个cpu 执行一个tasklet 。
softirq_init()函数
static DEFINE_PER_CPU(struct tasklet_head, tasklet_vec);
static DEFINE_PER_CPU(struct tasklet_head, tasklet_hi_vec);
DEFINE_PER_CPU(struct list_head [NR_SOFTIRQS], softirq_work_list);
1.在软中断初始化函数中,先要为每个cpu初始化2个链表以处理tasklet和一个工作列表
2.注册执行热插拔时执行的回调函数remote_softirq_cpu_notifier
3.为TASKLET_SOFTIRQ,HI_SOFTIRQ 类型的软中断注册回调函数
tasklet_action,tasklet_hi_action

主要函数
1.remote_softirq_cpu_notify
2.tasklet_action
3.tasklet_hi_action

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值