Dalej...


5.7 Ochrona przez wyłączenie przerwań

preempt_enable() nie sprawdza stanu przerwań!


int zmienna[NR_CPUS];

local_irq_disable();
zmienna[smp_processor_id()] = 17;
jakas_funkcja();
if (zmienna[smp_processor_id()] != 17)
  BUG();
local_irq_enable();


void jakas_funkcja() {
  spin_lock(&muteks);
  ...
  spin_unlock(&muteks);	// <-- tutaj może nastąpić wywłaszczenie
}