Módulos do Kernel Linux: Quando usar o try_module_get / module_put

Eu estava lendo o LKMPG (Veja a Seção 4.1.4. Cancelando o registro de um dispositivo ) e não ficou claro quando usar otry_module_get / module_put funções. Alguns dos exemplos do LKMPG os usam, outros não.

Para aumentar a confusão,try_module_get aparece 282 vezes em 193 arquivos na fonte 2.6.24, ainda emDrivers de Dispositivos Linux (LDD3) eDrivers Essenciais do Dispositivo Linux, eles não aparecem em um único exemplo de código.

Eu pensei que talvez eles estivessem amarrados ao velhoregister_chrdev interface (substituído em 2.6 pela interface cdev), mas eles aparecem juntos apenas nos mesmos arquivos 8 vezes:

find -type f -name *.c | xargs grep -l try_module_get | sort -u | xargs grep -l register_chrdev | sort -u | grep -c .

Então, quando é apropriado usar essas funções e elas estão ligadas ao uso de uma interface particular ou conjunto de circunstâncias?

Editar

Eu carreguei osched.c exemplo do LKMPG e tentei a seguinte experiência:

anon@anon:~/kernel-source/lkmpg/2.6.24$ tail /proc/sched -f &
Timer called 5041 times so far
[1] 14594

anon@anon:~$ lsmod | grep sched
sched                   2868  1 

anon@anon:~$ sudo rmmod sched
ERROR: Module sched is in use

Isso me leva a acreditar que o kernel agora faz sua própria contabilidade e os gets / puts podem estar obsoletos. Alguém pode verificar isso?

questionAnswers(1)

yourAnswerToTheQuestion