这种类型的使用方式是最为安全以及便捷的; 3.4 spin_lock_bh 只关闭中断底半部,其实就是关闭了软中断、Taskset 以及 Timer 等的一个抢占能力 代码临界区只存在软中断/Taskset/Timer + 进程上下文这样的组合:spin_lock_bh 参考: https://zhuanlan.zhihu.com/p/363993550 https://www.byteisland.com/%E8%87%...
spin_lock_bh 使用场景 这种类型的变种是一种比 spin_lock_irq 更轻量的变种,只关闭中断底半部,其实就是关闭了软中断、Taskset 以及 Timer 等的一个抢占能力,如果开发者确定编写的代码临界区只存在软中断/Taskset/Timer + 进程上下文这样的组合,则最好考虑使用 spin_lock_bh 这样的锁来禁止软中断进行抢占。还...
在spin_unlock_irqrestore的时候,返回的flags会当作参数传下去,unlock的同时,会将lock前的irq状态还原。 spin_lock_bh staticinlinevoid__raw_spin_lock_bh(raw_spinlock_t *lock) { __local_bh_disable_ip(_RET_IP_, SOFTIRQ_LOCK_OFFSET); spin_acquire(&lock->dep_map,0,0, _RET_IP_); LOCK_CONTEND...
spin_lock_bh 使用场景 这种类型的变种是一种比 spin_lock_irq 更轻量的变种,只关闭中断底半部,其实就是关闭了软中断、Taskset 以及 Timer 等的一个抢占能力,如果开发者确定编写的代码临界区只存在软中断/Taskset/Timer + 进程上下文这样的组合,则最好考虑使用 spin_lock_bh 这样的锁来禁止软中断进行抢占。还...
local_bh_enable:开底半部 在任何情况下使用spin_lock_irq都是安全的。因为它既禁止本地中断,又禁止内核抢占 spin_lock比spin_lock_irq速度快,但是它并不是任何情况下都是安全的 spin_lock_irqsave 保存本地中断状态 关闭本地中断 获取自旋锁 spin_unlock_irqrestore ...
spin_lock_bh 使用场景 这种类型的变种是一种比 spin_lock_irq 更轻量的变种,只关闭中断底半部,其实就是关闭了软中断、Taskset 以及 Timer 等的一个抢占能力,如果开发者确定编写的代码临界区只存在软中断/Taskset/Timer + 进程上下文这样的组合,则最好考虑使用 spin_lock_bh 这样的锁来禁止软中断进行抢占。还...
status |= USB_PORT_STAT_C_BH_RESET <<16; }if(hcd->speed != HCD_USB3) {if((temp & PORT_PLS_MASK) == XDEV_U3 && (temp & PORT_POWER)) status |= USB_PORT_STAT_SUSPEND; }if((temp & PORT_PLS_MASK) == XDEV_RESUME && ...
BUG: warning at kernel/softirq.c:137/local_bh_enable() [<b0121808>] local_bh_enable+0x38/0x79 [<b021d445>] lock_sock+0x89/0x91 [<b016ebb0>] mntput_no_expire+0x11/0x6a [] inet_autobind+0x8/0x52 [<b025d5de>] inet_sendmsg+0x1c/0x3f [<b021b1d7>...
local_bh_enable+0x9a/0xb0 [<ffffffff8149123d>] ? __ip_route_output_key+0x17d/0x1b0 [<ffffffff814912a6>] ? ip_route_output_flow+0x36/0x2c0 [<ffffffff81498a00>] ? ip_generic_getfrag+0x0/0xb0 [<ffffffff814bd80a>] ? udp_sendmsg+0x78a/0x930 [<ffffffff814c5eba>] ? inet_...
[<ffffffff8107b5da>] ? local_bh_enable+0x9a/0xb0 [<ffffffff8149123d>] ? __ip_route_output_key+0x17d/0x1b0 [<ffffffff814912a6>] ? ip_route_output_flow+0x36/0x2c0 [<ffffffff81498a00>] ? ip_generic_getfrag+0x0/0xb0