Всем привет!Два вопроса про динамические таймеры ядра Linux.
1. Можно ли освобождать память, занятую структурой таймера, в функции таймера?
Т.е. можно ли вызывать kfree(timer) из самой timer->function?
2. Делается ли какая-то блокировка на время выполнения timer->function и (она же) в mod_timer?
Иначе говоря, если я напишу в какой-нибудь mainline() что-то типа:
spin_lock(lock);
<делаем что-то>
mod_timer(timer,...);
spin_unlock(lock);
И в то же время в timer->function у меня будет что-то типа:
spin_lock(lock);
<делаем что-то>
spin_unlock(lock);
... то не загоню ли я себя в deadlock, когда timer->function будет ждать на spin_lock(lock), а захватившая этот lock mainline() - на mod_timer()?
Исходник kernel/timer.c смотрел. Мало что понял, всё очень запутано :(
Подозреваю что и kfree(timer) можно безопасно вызывать из timer->function, и никакого deadlock не будет (spin_unlock(timer->lock) вроде как вызывается перед вызовом timer->function в __run_timers), но уверености нет...
Заранее спасибо за ответы.