kernel-concurrency
Kernel concurrency skill for Linux locking and synchronization. Use when choosing spinlocks vs mutexes, using RCU, seqlocks, completions, or applying memory barriers in kernel code. Activates on queries about kernel spinlock, mutex, RCU, seqlock, memory barrier, or PREEMPT_RT locking.
How do I install this agent skill?
npx skills add https://github.com/mohitmishra786/low-level-dev-skills --skill kernel-concurrencyIs this agent skill safe to install?
- Gen Agent Trust Hubpass
The skill is a purely informational technical guide for Linux kernel concurrency (locking and synchronization). It provides documentation and C code examples for kernel developers. No security risks, suspicious patterns, or executable code were found.
- Socketpass
No alerts
- Snykpass
Risk: LOW · No issues
What does this agent skill do?
Kernel Concurrency
Purpose
Guide agents through synchronization in the Linux kernel: spinlocks, mutexes, semaphores, RCU, seqlocks, completions, and memory ordering rules — critical for correct drivers and subsystem patches.
When to Use
- IRQ handler shares data with process context
- Read-mostly data structures needing RCU
- Choosing lock type for
probevsioctlpaths - Debugging deadlocks or
scheduling while atomic
Workflow
1. Lock selection tree
Context can sleep?
├── No (IRQ, spinlock held, preempt disabled)
│ └── spin_lock_irqsave() / atomic_t
└── Yes
├── Exclusive long-held → mutex
├── Reader/writer → rw_semaphore or RCU (read-mostly)
└── One-shot signal → completion
Never sleep while holding a spinlock (kmalloc(GFP_KERNEL), mutex_lock).
2. Spinlock + IRQ
spinlock_t lock;
unsigned long flags;
spin_lock_irqsave(&lock, flags);
/* critical section — no blocking */
spin_unlock_irqrestore(&lock, flags);
Use spin_lock_bh when softirq/tasklet sharing is the concern.
3. Mutex in process context
struct mutex m;
mutex_lock(&m);
/* may allocate, may sleep */
mutex_unlock(&m);
4. RCU (read-copy update)
/* Readers — no lock */
rcu_read_lock();
p = rcu_dereference(ptr);
/* use p */
rcu_read_unlock();
/* Writer */
new = kmalloc(...);
rcu_assign_pointer(ptr, new);
synchronize_rcu();
kfree(old);
RCU readers must not block indefinitely. Grace period completes after all CPUs quiescent.
5. Seqlock (jiffies, timestamps)
unsigned seq;
do {
seq = read_seqbegin(&seqlock);
/* read shared data */
} while (read_seqretry(&seqlock, seq));
Writer uses write_seqlock / write_sequnlock.
6. Completions
DECLARE_COMPLETION(done);
/* waiter */
wait_for_completion(&done);
/* signaller */
complete(&done);
7. Memory barriers
Kernel provides smp_mb(), smp_wmb(), smp_rmb(). Device MMIO uses readl/writel (ordered on most arches). See skills/low-level-programming/memory-model for userspace analogies.
8. Agent usage
/kernel-concurrency Protect shared ring buffer between IRQ and read() syscall
Common Problems
| Symptom | Cause | Fix |
|---|---|---|
scheduling while atomic | Sleep under spinlock | Use GFP_ATOMIC or defer work |
| Deadlock | AB-BA mutex order | Global lock ordering |
| RCU stall | Reader blocked too long | rcu_read_lock section minimal |
| Lost wake | complete before wait | Use INIT_COMPLETION each cycle |
| Corrupt counter | Non-atomic RMW in IRQ | atomic_t or lock |
Related Skills
skills/kernel/device-drivers— threaded IRQ patternskills/low-level-programming/memory-model— C11 atomics vs kernelskills/debuggers/concurrency-debugging— userspace TSanskills/kernel/kernel-internals— scheduler preemptionskills/profilers/linux-perf— lock contention profiling
How can the creator link this skill?
Add the canonical catalog link to the repository README so users can inspect current installs and available audits. The publishing guide covers the complete discovery path.
<a href="https://skillzs.dev/skills/mohitmishra786/low-level-dev-skills/kernel-concurrency">View kernel-concurrency on skillZs</a>