Делает ли выделенная память модуль, который будет рассматриваться ядром как "используемый"

Я новичок в программировании ядра и в настоящее время работаю с драйвером Madwifi для беспроводной сетевой платы tplink (чипсет Atheros). Моя версия ядра 2.6.32-37 (Ubuntu).

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

Мои вопросы:

  1. Если они фактически не освободили выделенную память, заставляет ли операционная система считать модуль "занятым", что делает его неспособным выгрузить модуль?

  2. И как или где я должен освободить выделенную память в модулях (учитывая тот факт, что модуль должен работать "навсегда")?

Спасибо!

Омер.

1 ответ

Решение

Нет. Распределив память с kmalloc (или любой из его коллег) не увеличивает use-count модуля. Владельцы выделенной памяти могут измениться в любое время, просто передав адрес (который хранится в переменной-указателе) другому модулю / блоку, хранилище которого находится где-то. Ядро не отслеживает это.

То, как память распределяется, предоставляется и берется, во многом зависит от выбора архитектуры кодирования и модели кодирования. Это написано на C; нет никаких правил для этого.

Один из способов обработать счетчик использования модуля - использовать kref. Для получения дополнительной информации см. Documentation/kref.txt в ядре-исходном дереве или здесь.

Другие вопросы по тегам