Как стать автором
Обновить

Комментарии 9

Отличная статья, спасибо!
Всегда хотел понять различия между способами)
Все обсуждавшиеся коды (для проверки, или использования, или дальнейшего улучшения) могут быть взяты здесь или здесь.
yadi.sk
drive.google.com
Может, лучше GitHub, не?
может и лучше ;-)
но я специально не размещал такие мизерные архивы на GitHub.
Есть такой вариант: gist.github.com
Добавьте, если не сложно.
#if LINUX_VERSION_CODE < KERNEL_VERSION(3,14,0) 
    preempt_enable_no_resched(); 
#else 
    preempt_count_dec(); 
#endif 


preempt_enable_no_resched() был доступен до ядра 3.13

А зачем здесь вообще preempt_enable_no_resched? Чем плох preempt_enable?

static inline unsigned long native_pai_open_kernel( void ) { 
   ...
   local_irq_disable(); 
   ...
} 

static inline unsigned long native_pai_close_kernel( void ) { 
   ...
   local_irq_enable();
   ...
}

Правильнее было бы local_irq_save… local_irq_restore.
А зачем здесь вообще preempt_enable_no_resched? Чем плох preempt_enable?

1. я написал, может, значит, недостаточно внятно, что я постарался максимально неприкосновенно сохранить код, так как он написан был в первоисточнике… у автора там preempt_enable_no_resched()
2.… но preempt_enable() столь же плох — в ядре >3.14 он порождает warning показанный в тексте
честный способ — только наложение. остальные чреваты races condition.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий