Я добавил таймер в модуль ядра, отвечающий за создание сокетов TCP, чтобы отслеживать его параметры.Все работает как надо, пока я не хочу вызывать параллельные соединения - мгновенный сбой.
Вот как я это делаю:
global var:
struct timer_list ss_timer;
в регистре модуляфункция:
init_timer(&ss_timer);
в модуле отмены регистрации функции:
del_timer_sync(&ss_timer);
в функции, инициирующей установление сеанса TCP (вызывается один раз для соединения TCP, выполняется параллельно для нескольких соединений):
ss_timer.function = ss_timer_callback;
ss_timer.data = (unsigned long)&meta_sk;
ss_timer.expires = jiffies + msecs_to_jiffies(500);
add_timer(&ss_timer);
, чтобы вывести функцию ss_timer_callback из исследования - я закомментировал ее тело - она выполняет только один printk
Я тестирую ее с помощью инструмента iperf, все отлично работает для одного потока, но когда я вызываюс «-P 2» для 2-х параллельных клиентских потоков вся система мгновенно падает.
Я считаю, что проблема заключается в нескольких параллельных вызовах «add_timer».Я понимаю, что моё мнение об этом может быть неверным, поэтому я очень ценю кого-то более опытного, чтобы вести меня.