User Tools

Site Tools


mywiki:linux:linux_kernel_notes

This is an old revision of the document!


Spin Lock

Table of Minimum Spin Lock Requirements

The following table lists the minimum locking requirements between various contexts. In some cases, the same context can only be running on one CPU at a time, so no locking is required for that context (eg. a particular thread can only run on one CPU at a time, but if it needs shares data with another thread, locking is required).

Remember the advice above: you can always use spin_lock_irqsave(), which is a superset of all other spinlock primitives.

IRQ Handler A IRQ Handler B Softirq A Softirq B Tasklet A Tasklet B Timer A Timer B User Context A User Context B
IRQ Handler A None
IRQ Handler B spin_lock_irqsave None
Softirq A spin_lock_irq spin_lock_irq spin_lock
Softirq B spin_lock_irq spin_lock_irq spin_lock spin_lock
Tasklet A spin_lock_irq spin_lock_irq spin_lock spin_lock None
Tasklet B spin_lock_irq spin_lock_irq spin_lock spin_lock spin_lock None
Timer A spin_lock_irq spin_lock_irq spin_lock spin_lock spin_lock spin_lock None
Timer B spin_lock_irq spin_lock_irq spin_lock spin_lock spin_lock spin_lock spin_lock None
User Context A spin_lock_irq spin_lock_irq spin_lock_bh spin_lock_bh spin_lock_bh spin_lock_bh spin_lock_bh spin_lock_bh None
User Context B spin_lock_irq spin_lock_irq spin_lock_bh spin_lock_bh spin_lock_bh spin_lock_bh spin_lock_bh spin_lock_bh down_interruptible None

Kernel Context knowledge

process context includes user context, kernel thread, work queue
User Context The kernel executing on behalf of a particular process (ie. a system call or trap, ioctl, module_init, module_exit or kernel thread, workqueue. You can tell which process with the current macro.) Not to be confused with userspace. Can be interrupted by software or hardware interrupts.
Userspace (not kernel) A process executing its own code outside the kernel
Interrupt context includes hard irq, kernel timer, softirq, tasklet if in_interrupt() true
Hardware IRQ Hardware interrupt request if in_irq() true
Softirq Software interrupt handler. in_irq() returns false; in_softirq() returns true. Tasklets and softirqs both fall into the category of 'software interrupts'. Strictly speaking a softirq is one of up to 32 enumerated software interrupts which can run on multiple CPUs at once. Sometimes used to refer to tasklets as well (ie. all software interrupts). if in_irq() false and in_softirq() true
Tasklet A dynamically-registered software interrupt, which is guaranteed to only run on one CPU at a time
Timer which is running at (or close to) a given time. When running, it is just like a tasklet (in fact, they are called from the TIMER_SOFTIRQ).
mywiki/linux/linux_kernel_notes.1433757517.txt.gz · Last modified: (external edit)