Использование timer_list в модуле ядра Linux приводит к сбою системы - PullRequest
0 голосов
/ 16 июля 2009

Я пишу модуль ядра (2.6.28), который использует динамический таймер. Я использую структуру timer_list следующим образом:

struct timer_list our_timer;
init_timer(&our_timer);
our_timer.function = handleFlowTimer;
our_timer.expires = jiffies + 2000;
our_timer.data = 0;
add_timer(&our_timer);

void handleFlowTimer(unsigned long data)
{
    //do nothing
}

Это работает нормально в течение примерно 2 секунд, пока не истечет таймер. Затем система падает. Я также пробовал что-то подобное с тем же результатом:

struct timer_list our_timer = TIMER_INITIALIZER(handleFlowTimer, 0, 0);
mod_timer(&our_timer, jiffies + 2000);

Любая помощь будет принята с благодарностью!

1 Ответ

5 голосов
/ 16 июля 2009

our_timer размещается в стеке, и вы передаете указатель на него. Наиболее вероятно, что our_timer выходит из области видимости, перезаписывается и через 2 секунды значение our_timer.function становится недействительным.

Сделать our_timer static переменной или использовать kmalloc.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...