【发布时间】:2015-12-14 21:32:21
【问题描述】:
受人尊敬的书 Linux Driver Development 这么说
传递给
spin_unlock_irqrestore的flags参数必须与传递给spin_lock_irqsave的变量相同。 您还必须在同一函数中调用spin_lock_irqsave和spin_unlock_irqrestore;否则您的代码可能会在某些架构上中断。
但我找不到the official documentation bundled with the kernel code itself 要求的任何此类限制。我找到了driver code that violates this guidance。
显然,从单独的函数调用spin_lock_irqsave 和spin_unlock_irqrestore 不是一个好主意,因为您应该在持有锁的情况下最大限度地减少完成的工作(禁用中断,不少!)。但是,如果谨慎完成,内核的更改是否可以实现,它实际上从未违反 API 合同,还是仍然禁止这样做?
如果限制在某个时候被删除,它是否适用于版本 3.10.17?
【问题讨论】:
标签: linux-kernel linux-device-driver interrupt-handling spinlock