Como usar
- Copie o comando e verifique o pacote antes de instalar no seu ambiente de agente.
- Consulte no original as ferramentas, credenciais e ambientes necessários.
- Descreva os dados de entrada e a entrega esperada; confira a saída com as fontes.
npx skills add https://github.com/mohitmishra786/low-level-dev-skills --skill kernel-concurrencyAntes de começar
- A instalação não inclui assinatura de modelo, franquia API ou acesso aos seus arquivos.
- Estrelas e instalações indicam atividade, não um teste independente de qualidade ou segurança.
Renderizado do repositório de origem, preservando títulos, exemplos, código, tabelas, links e imagens.
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 → completionNever 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() syscallCommon 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




