作者nfsnfs (1976。)
看板LinuxDev
标题Re: [问题] 请问 kernel thread ..
时间Mon Mar 10 15:47:31 2008
过了很久,我来自问自答一下,
其实是个蛮蠢的问题, orz....
这篇的错误在於 rwlock_t 要作初始化,
所以把 rwlock_t myevent_lock; 这行改成:
DEFINE_RWLOCK(myevent_lock);
就可以了。
当然要记得 #include <linux/spinlock_types.h>
这样大概就没问题了吧。(?!)
※ 引述《nfsnfs (Busy)》之铭言:
: 我尝试写了一个很简单的 kernel thread,
: 可是总是会在 read_lock 的时候跳出错误讯息,
: 然後 kernel thread 有跑,但是跑一阵子就会整台电脑 freeze 了 @_@"
: 以下附上错误讯息和 source code,希望哪位可以指正我做错的地方,感恩 :)
: error message:
: BUG: rwlock bad magic on CPU#0, test_thread/2784, c078c59c
: [<c04d9eaf>] _raw_read_lock+0x16/0x25
: [<c05b7b90>] test_thread+0x0/0x7c
: [<c05b7bed>] test_thread+0x5d/0x7c
: [<c05b7b90>] test_thread+0x0/0x7c
: [<c0404927>] kernel_thread_helper+0x7/0x10
: =======================
: source code:
: rwlock_t myevent_lock;
: int test_thread (void *unused)
: {
: int num;
: current->test_thread.enable = 1;
: daemonize ("test_thread");
: allow_signal (SIGKILL);
: for (;;) {
: set_current_state (TASK_INTERRUPTIBLE);
: schedule_timeout(30);
: if (signal_pending (current)) break;
: num = current->test_thread.num;
: read_lock (&myevent_lock);
: if (num > 0) {
: read_unlock (&myevent_lock);
: printk("Debug: num = %d\n", num);
: }
: else {
: read_unlock (&myevent_lock);
: }
: }
: set_current_state (TASK_RUNNING);
: return 0;
: }
--
http://nfsnfs.pixnet.net 灰熊。红袜。阿森纳。
http://nfstry.blogspot.com 海边。天空
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.115.53.138
※ 编辑: nfsnfs 来自: 140.115.53.138 (03/10 15:49)