标签:因此 lin _id smp 操作 不同的 res 不同 disable
local_irq_disable()和 local_irq_enable()都只能禁止和使能本地 CPU 内的中断, 因此,并不能解决 SMP 多 CPU 引发的竞态。因此,单独使用中断屏蔽通常不是一种值得推荐的避免竞态的方法,它适宜与自旋锁联合使用。与 local_irq_disable()不同的是,local_irq_save(flags)除了进行禁止中断的操作以外, 还保存目前 CPU 的中断位信息, local_irq_restore (flags) 进行的是与 local_irq_save(f lags)相反的操作。如果只是想禁止中断的底半部,应使用 local_bh_disable(), 使能被 local_bh_disable()禁止的底半部应该调用 local_bh_enable().
1,申请和释放中断
int request_irq(unsigned int irq, void (*handler)(int irq, void *dev_id, struct pt_regs *regs), unsigned long irqflags, const char * devname, void *dev_id);void free_irq(unsigned int irq,void *dev_id);
2 ,使能和屏蔽中断
void disable_irq(int irq); //等待目前的中断处理完成
void disable_irq_nosync(int irq); //立即返回
void enable_irq(int irq);
void local_irq_save(unsigned long flags); //屏蔽本 CPU 内的所有中断
void local_irq_restore(unsigned long flags);//
void local_irq_disable(void);//屏蔽本 CPU 内的所有中断
void local_irq_enable(void);
3
标签:因此 lin _id smp 操作 不同的 res 不同 disable
原文地址:https://www.cnblogs.com/yangjunhe460/p/11956011.html