пишу драйвер, который регистрирует в системе несколько устройств.
в функции, реализующей метод open() мне необходимо учитывать количество процессов, использующих данный драйвер, чтобы вернуть ядру всю "занятую память". рытье в исходниках (в частности linux/module.h ) дал определенный результат - структура типа struct module содержит поле ref->count, которое и является счетчиком ссылок на данный модуль. проблема заключается в следующем; значение этого поля нелязя увеличить или уменьшить стандартными арифмитическими операциями (сложение/вычитание/декремент/инкремент).
как можно самому управлять этим значением?
Решено: подсчет ссылок на модуль
Модератор: Модераторы разделов
-
- Сообщения: 1341
- ОС: Arch Linux amd64
-
- Сообщения: 78
- ОС: Debian
Re: Решено: подсчет ссылок на модуль
MOD_INC_USE_COUNT при открытии, MOD_DEC_USE_COUNT при закрытии... Разве не работают?
-
- Сообщения: 694
-
- Сообщения: 1341
- ОС: Arch Linux amd64
Re: Решено: подсчет ссылок на модуль
да в версиях ядра 2,6,* эти макросы убраны
-
- Сообщения: 1338
- Статус: We are all Kosh
- ОС: Fedora 10
Re: Решено: подсчет ссылок на модуль
• try_module_get(THIS_MODULE): Increment the use count.
• try_module_put(THIS_MODULE): Decrement the use count.
LightLang Team
-
- Сообщения: 694
Re: Решено: подсчет ссылок на модуль
А, точно! try_module_*
Непонятно, правда, почему бы не завернуть эти конструкции (раз уж понадобились), в эти же макросы.
Непонятно, правда, почему бы не завернуть эти конструкции (раз уж понадобились), в эти же макросы.
-
- Сообщения: 1341
- ОС: Arch Linux amd64
Re: Решено: подсчет ссылок на модуль
у меня с этими макросами происходит очень интересная ситуация - если вызвать макрос внутри блока;
происходит зависание ОС, пару раз даже был Ooops... при замене down_interruptible(&device->semaphore) на просто down(&device->semaphore) все работает!!! не пойму в чем дело. может баг?
Код: Выделить всё
{
try_module_get(THIS_MODULE);
if(down_interruptible(&device->semaphore)){
try_module_put(THIS_MODULE);
goto out;
}
...
/*Здесь происходят операции ввода-вывода*/
...
out:
up(&device->semaphore);
}
происходит зависание ОС, пару раз даже был Ooops... при замене down_interruptible(&device->semaphore) на просто down(&device->semaphore) все работает!!! не пойму в чем дело. может баг?
-
- Сообщения: 694
Re: Решено: подсчет ссылок на модуль
Давно не видел в коде ключевого слова goto...
-
- Сообщения: 1073
- Статус: столлманист
- ОС: Debian GNU/Linux
Re: Решено: подсчет ссылок на модуль
В исходниках ядра его хватает

"И может собственных Платонов и быстрых разумом Невтонов российская земля рождать."
М. В. Ломоносов
М. В. Ломоносов
-
- Сообщения: 167
- ОС: Linux
-
- Сообщения: 1341
- ОС: Arch Linux amd64
Re: Решено: подсчет ссылок на модуль
Давно не видел в коде ключевого слова goto...
кто-нибудь предложит лучший способ пропустить 64 строки кода? сомневаюсь... а вообще, при программировании модулей надо обходится без "выпендрежа" - малейшее упущение может закончится крахом системы. все должно быть простым, понятным и логичным,
собственно по сабжу, переписал try_module_get(), реализовал try_module_put()(как оказалось, такой функции у меня в исходниках вообще не объявлено).
сейчас все работает. тема закрыта.