免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1273 | 回复: 0
打印 上一主题 下一主题

内核中断? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-03-26 15:29 |只看该作者 |倒序浏览
在写一个模块时,尝试调用了内核的kmp算法 出现这样的错误:
BUG: scheduling while atomic: kworker/0:0/0/0x10000100
[ 8717.728124] Modules linked in: netMonitor ts_kmp rfcomm bnep parport_pc ppdev binfmt_misc radeon arc4 iwlagn i915 mac80211 snd_hda_codec_conexant snd_hda_intel snd_hda_codec ttm snd_hwdep snd_pcm drm_kms_helper thinkpad_acpi drm snd_seq_midi snd_rawmidi uvcvideo snd_seq_midi_event snd_seq cfg80211 btusb r852 sm_common videodev bluetooth nand joydev pcmcia snd_timer nand_ids nand_bch snd_seq_device v4l2_compat_ioctl32 bch yenta_socket snd psmouse nand_ecc pcmcia_rsrc mtd mei(C) pcmcia_core snd_page_alloc serio_raw i2c_algo_bit soundcore tpm_tis wmi nvram video lp parport usbhid hid firewire_ohci firewire_core crc_itu_t ahci libahci sdhci_pci sdhci e1000e [last unloaded: netMonitor]
[ 8717.728253] CPU 1
[ 8717.728256] Modules linked in: netMonitor ts_kmp rfcomm bnep parport_pc ppdev binfmt_misc radeon arc4 iwlagn i915 mac80211 snd_hda_codec_conexant snd_hda_intel snd_hda_codec ttm snd_hwdep snd_pcm drm_kms_helper thinkpad_acpi drm snd_seq_midi snd_rawmidi uvcvideo snd_seq_midi_event snd_seq cfg80211 btusb r852 sm_common videodev bluetooth nand joydev pcmcia snd_timer nand_ids nand_bch snd_seq_device v4l2_compat_ioctl32 bch yenta_socket snd psmouse nand_ecc pcmcia_rsrc mtd mei(C) pcmcia_core snd_page_alloc serio_raw i2c_algo_bit soundcore tpm_tis wmi nvram video lp parport usbhid hid firewire_ohci firewire_core crc_itu_t ahci libahci sdhci_pci sdhci e1000e [last unloaded: netMonitor]
[ 8717.728365]
[ 8717.728370] Pid: 0, comm: kworker/0:0 Tainted: G         C  3.1.10 #2 LENOVO 2784A33/2784A33
[ 8717.728381] RIP: 0010:[<ffffffff8137a19f>]  [<ffffffff8137a19f>] arch_local_irq_enable+0x8/0xd
[ 8717.728399] RSP: 0018:ffff880116335e58  EFLAGS: 00000292
[ 8717.728404] RAX: 000007edc114ffda RBX: ffffffff815f38ad RCX: 000007edc10be642
[ 8717.728409] RDX: 000007edc114ffda RSI: 000000000000005a RDI: 000007edc114ff80
[ 8717.728415] RBP: ffff880116335e58 R08: ffff880116335fd8 R09: 0000000000001163
[ 8717.728420] R10: 000000000441746d R11: 0000000000000000 R12: ffff880116335dc8
[ 8717.728426] R13: ffffffff815effee R14: ffff880116335e58 R15: 127eddd0083f0d8e
[ 8717.728433] FS:  0000000000000000(0000) GS:ffff88011bc80000(0000) knlGS:0000000000000000
[ 8717.728439] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
[ 8717.728444] CR2: 00007fa685498000 CR3: 0000000001c05000 CR4: 00000000000406e0
[ 8717.728450] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[ 8717.728455] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
[ 8717.728461] Process kworker/0:0 (pid: 0, threadinfo ffff880116334000, task ffff880116338000)
[ 8717.728466] Stack:
[ 8717.728470]  ffff880116335e98 ffffffff8137aeaa 0000000000000000 000000000043eb8f
[ 8717.728479]  ffff880115cc9020 ffff880115cc9150 0000000000000000 0000000000000000
[ 8717.728488]  ffff880116335ee8 ffffffff814b22d0 ffffffff81cbd3c0 0000000000000001
[ 8717.728498] Call Trace:
[ 8717.728508]  [<ffffffff8137aeaa>] acpi_idle_enter_bm+0x219/0x251
[ 8717.728518]  [<ffffffff814b22d0>] cpuidle_idle_call+0xc0/0x1d0
[ 8717.728528]  [<ffffffff81012225>] cpu_idle+0xc5/0x120
[ 8717.728537]  [<ffffffff815de949>] start_secondary+0x1f7/0x1fe
[ 8717.728542] Code: 5e 5d c3 90 55 48 89 e5 66 66 66 66 90 0f 09 66 66 90 66 90 5d c3 55 48 89 e5 fa 66 66 90 66 66 90 5d c3 55 48 89 e5 fb 66 66 90
[ 8717.728600]  66 90 5d c3 55 48 89 e5 66 66 66 66 90 48 8b 15 7c e3 a4 00
[ 8717.728628] Call Trace:
[ 8717.728636]  [<ffffffff8137aeaa>] acpi_idle_enter_bm+0x219/0x251
[ 8717.728643]  [<ffffffff814b22d0>] cpuidle_idle_call+0xc0/0x1d0
[ 8717.728650]  [<ffffffff81012225>] cpu_idle+0xc5/0x120
[ 8717.728657]  [<ffffffff815de949>] start_secondary+0x1f7/0x1fe

有前辈知道 问题出在什么地方吗? 难道是 程序耗时太长导致了中断的问题?
代码如下:
while( (token = strsep(&keys,",")) != NULL)
        {
                conf = textsearch_prepare("kmp", token, strlen(token),GFP_KERNEL, TS_AUTOLOAD);
                if (IS_ERR(conf))
                {
                        printk("initial %s finder stage failed.\n",token);
                        printk("try next\n");
                        continue;
                 }
                pos = textsearch_find_continuous(conf, &state, data, strlen(data));
                 //找到了关键字
                 textsearch_destroy(conf);
                 if (pos != UINT_MAX)
                 {
                         printk("Keywords found:%s\n",token);       
                         result = 1;
                         break;
                 }
        }
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP