@ kai: ваш qs reg, в каких контекстных нижних половинах выполняется?
Технически, do программы softirq работают в контексте прерывания - контекст "softirq"; просто это не «hard-irq» контекст (который является контекстом, когда происходит аппаратное прерывание).
Итак, в обработчике softirq в терминах макросов 'lookup' Linux предоставляет:
in_interrupt: да | in_irq: нет | in_softirq: да | in_serving_softirq: да
Но будьте осторожны (будьте осторожны !!! :):
«Все ограничения, которые применяются к обработчикам прерываний, также применяются к нижним половинам. Таким образом, нижние половины не могут спать, не могут получить доступ к пользовательскому пространству и не могут вызвать планировщик». - LDD3.
Джермейн отвечает на остальную часть вашего вопроса.
[Update]
Кроме того, я хотел бы отметить, что можно определить простые и элегантные макросы, которые помогают печатать отладочную информацию по мере необходимости. За эти годы я поместил эти макросы и вспомогательные процедуры в заголовочный файл; Вы можете проверить это и скачать здесь: «Заголовок удобства» .
Есть макросы / функции для:
- сделать отладочную распечатку вместе с funcname / line # info (через обычный
printk () или trace_printk ()) и только если включен режим отладки
- сбросить стек режима ядра
- печать текущего контекста (обрабатывать или прерывать вместе с флагами в форме, которую использует ftrace )
- простой макрос assert () (!)
- DELAY_LOOP с интенсивным использованием процессора (полезно для тестовых установок, которые должны вращаться на процессоре)
- эквивалентно режиму сна пользовательского режима
- функция для расчета дельты времени по двум временным меткам (временные структуры)
- преобразовать десятичную в двоичную и
- еще несколько.
Вот так: -)