驅動程式 - Linux Device Driver(LDD) - 解決module_put panic問題



參考資訊:
https://stackoverflow.com/questions/1741415/linux-kernel-modules-when-to-use-try-module-get-module-put

問題如下:

[   24.586438] ------------[ cut here ]------------
[   24.591363] WARNING: CPU: 0 PID: 84 at kernel/module.c:967 module_put+0xa0/0xb4()
[   24.599345] Modules linked in: main(PO)
[   24.603421] CPU: 0 PID: 84 Comm: app Tainted: P        W  O    4.1.18 #1
[   24.610508] Hardware name: Generic AM33XX (Flattened Device Tree)
[   24.616932] Backtrace: 
[   24.619557] [<c0012b18>] (dump_backtrace) from [<c0012d38>] (show_stack+0x18/0x1c)
[   24.627557]  r7:c0854fd8 r6:000003c7 r5:00000009 r4:00000000
[   24.633585] [<c0012d20>] (show_stack) from [<c06b9e28>] (dump_stack+0x20/0x28)
[   24.641237] [<c06b9e08>] (dump_stack) from [<c0035d40>] (warn_slowpath_common+0x7c/0xb4)
[   24.649785] [<c0035cc4>] (warn_slowpath_common) from [<c0035e1c>] (warn_slowpath_null+0x24/0x2c)
[   24.659039]  r8:ddc42d40 r7:00000000 r6:ddc33790 r5:dd082440 r4:ddc36900
[   24.666196] [<c0035df8>] (warn_slowpath_null) from [<c008add0>] (module_put+0xa0/0xb4)
[   24.674540] [<c008ad30>] (module_put) from [<c01050b0>] (__fput+0xb4/0x20c)
[   24.681900] [<c0104ffc>] (__fput) from [<c0105260>] (____fput+0x10/0x14)
[   24.688996]  r10:00000000 r9:ddc64000 r8:c000fa24 r7:ddc74828 r6:c099f30c r5:ddc74480
[   24.697338]  r4:00000000
[   24.700046] [<c0105250>] (____fput) from [<c004e004>] (task_work_run+0x94/0xc4)
[   24.707785] [<c004df70>] (task_work_run) from [<c00127bc>] (do_work_pending+0x8c/0xb4)
[   24.716125]  r7:00000006 r6:ddc65fb0 r5:c000fa24 r4:ddc64000
[   24.722148] [<c0012730>] (do_work_pending) from [<c000f8cc>] (work_pending+0xc/0x20)
[   24.730300]  r7:00000006 r6:00000000 r5:00000000 r4:bebd0d18
[   24.736341] ---[ end trace c4d06157b8bb6695 ]---

解法如下:

struct file_operations fops = {
    ...
    //.owner = THIS_MODULE,
    ...
};