Точка входа OracleSolaris 11.2 getinfo и многопоточный доступ

Я начинаю работу над первым драйвером для Solaris. При реализации процедуры точки входа getinfo должны ли мы заботиться о том, чтобы ее можно было вызывать из разных потоков ядра? Обычно эта функция обновляет структуру данных мягкого состояния для каждого экземпляра, а в случае многопоточного доступа структура должна быть защищена мьютексом.

Итак, мой вопрос: может ли обратный вызов getinfo вызываться несколькими потоками системы, или ОС гарантирует, что его вызывает только один поток? man getinfo не очень ясно об этом.

Спасибо.


person Mark    schedule 06.07.2015    source источник


Ответы (2)


Я тоже не могу найти внятного ответа. Я бы рекомендовал перестраховаться и настроить мьютекс. Вы потратите на это меньше времени, чем продолжая искать окончательный ответ, который доказывает, что одновременные вызовы не могут происходить (или всегда безопасны).

В худшем случае вы будете платить миллисекунду или меньше за каждый звонок. В лучшем случае вы защитили себя, возможно, от паники ядра или повреждения данных. В любом случае вы немного больше узнаете о написании драйверов устройств для Solaris.

Это может быть типичной проблемой с документацией Solaris - что-то подобное, вероятно, зарыто где-то на какой-нибудь справочной странице, но если вы не знаете, на какую из них смотреть, вы не сможете ее найти. (И теперь, когда я ответил, просто смотрите: тот, кто действительно знает, где искать, опубликует окончательный ответ...)

person Andrew Henle    schedule 06.07.2015

Основываясь на беглом обзоре доступных мне источников: нет, вам не нужно защищать *getinfo() с помощью мьютекса.

person James McPherson    schedule 28.11.2015