Le code original dans le noyau de Linux est :
static inline void __raw_spin_lock_irq(raw_spinlock_t *lock)
{
local_irq_disable();
preempt_disable();
spin_acquire(&lock->dep_map, 0, 0, _RET_IP_);
LOCK_CONTENDED(lock, do_raw_spin_trylock, do_raw_spin_lock);
}
Je pense qu'il n'y a pas de chemin d'exécution qui peut préempter le chemin actuel après que l'IRQ local soit désactivé.
Comme toutes les IRQs matérielles courantes sont désactivées, il ne devrait pas y avoir de softirq et pas non plus de tic pour donner un coup de pied à la roue du planning. Je pense que le chemin actuel est sûr. Alors pourquoi il y a un preempt_disable()
?