Скажите, что я зарегистрировал общий сетевой интерфейс с использованием genl_register_family_with_ops
с несколькими обратными вызовами.Linux Kernel Generic Netlink - Параллельно ли это?
Я не вижу никаких предупреждений об этом, и я предполагаю, что обратные вызовы вызываются последовательно, но нет информации о том, как вызываемые вызовы не вызываются.
Возможно ли, что несколько обратных вызовов вызываются одновременно на одном и том же общем сетевом интерфейсе, который я зарегистрировал? Нужна ли какая-либо синхронизация между обратными вызовами?
Для того, чтобы вопрос проще:
Может ли один NetLink обратного вызова будет вытеснен или одновременно работать в двух ядрах?
Обратные вызовы вызываются при возникновении события. Если произойдет еще одно событие до завершения обратного вызова, он получит перекрывающий вызов. – stark
@stark Я более конкретно спрашиваю, могу ли я получить два события в одной и той же семейной регистрации сети, которая может перекрывать обратные вызовы. Существует только одна регистрация с несколькими обратными вызовами. Обратные вызовы Netlink будут изменять одни и те же структуры, и структуры будут только модифицироваться/получаться путем обратных вызовов netlink. – Etherealone
@Etherealone Я подозреваю, что ответ заключается в том, что он настраивается, но отключен по умолчанию. В моей копии источников ядра 3.11, 'struct genl_family' содержит' bool parallel_ops'. В 'linux-3.11.10-21/net/netlink/genetlink.c: 674' или nearabouts в' genl_rcv_msg() ', если этот флаг не установлен, то глобальный мьютекс заблокирован, запрос обрабатывается и глобальный мьютекс разблокирован. Если он установлен, эта блокировка не выполняется. –