![]() |
|
Модераторы: xvr |
![]()
|
|
| null56 |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 4 Всего: 12 |
Всем привет
Есть обработчик прерывания от hrtimer, можно ли в нем вызывать метод dev_queue_xmit http://lxr.linux.no/#linux+v2.6.36/net/core/dev.c#L2171 просто один раз получил паник
где boff_hrtimer_fn - мой обработчик таймера boff_send_reliable - фукнция из которой вызывается dev_queue_xmit ищу ответ в исходниках, если кто знает, подскажите, буду благодарен ЗЫ: падение редкое и до сих пор не могу его повторить, но оно было в обработчике с выключенными прерываниями, может быть в этом была ошибка
сейчас сделал, чтобы прерывания выключались лишь в методе skb_dequeue(без подчеркивания - сама блокирует прерывания), то есть
может в этом была ошибка заранее благодарен за помощь |
||||||
|
|||||||
| null56 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 4 Всего: 12 |
судя по всему я был прав |
|||
|
||||
| null56 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 4 Всего: 12 |
надо выяснить в контексте чего выполняется обработчик таймера, попробую через
а дальше буду отталкиваться от этого Добавлено через 12 минут и 17 секунд скажем так, мы не в софтварном контексте, если верить этим макросам теперь надо понять, чем еще может нарушать условия в контексте прерывания функция dev_queue_xmit |
|||
|
||||
| null56 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 4 Всего: 12 |
вопрос: фукнция в своем теле делает это
это разрешено в хардварном прерывании? |
|||
|
||||
| null56 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 4 Всего: 12 |
возник вопрос, если судить коду по ссылке ниже, то похоже на то, что hrtimer вызывает колбак в контексте softrq, почему тогда макрос in_irq подтверждает обратное?
http://lxr.linux.no/#linux+v2.6.36/kernel/softirq.c#L502 |
|||
|
||||
| null56 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 4 Всего: 12 |
Проблема решена
Я поместил код функции с dev_queue_xmit в тасклет и активировал его в колбаке таймера, видимо действительно проблема была в запрещенных прерываниях |
|||
|
||||
![]()
|
| Правила форума "С/С++: Программирование под Unix/Linux" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |