>>Как понял речь идет о двух разных замках. > >Да, один замок мой, я его захватываю как в mainline(), так и в timer->function. Вот о наличии второго я и спрашиваю. Дело в том что в структуре timer_list есть свой замок и он, естественно, используется ядром при операциях с таймером. >Насколько я понял из кода в kernel/timer.c, замок самого таймера не захватывается на время вызова timer->function. А в функции __mod_timer используется какая-то мутная последовательность блокировок, которая как раз и предназначена для избежания deadlock'а в ситуациях, похожих на мою (реализация несколько раз менялась уже в 2.6.*).Дополнительный вопрос по теме: в теле callback-функции таймера допустимо использовать spin_trylock механизм, вместо обычного spin_lock ? Если да, то в этом случае есть вариант обойти это гипотетически возможную проблему изменив режим блокировок.
|