当前位置:  技术问答>linux和unix

求助,内核kmalloc问题

    来源: 互联网  发布时间:2016-12-02

    本文导语:  没怎么写过内核模块,今天写了个提示如下错误,自己比较菜,大家看看,谢谢 BUG: scheduling while atomic: mynetlink/0x10000100/19413  [] schedule+0x43/0xa55  [] do_IRQ+0xb5/0xc3  [] __cond_resched+0x16/0x34  [] cond_resched+0x26/0x31  [] kme...

没怎么写过内核模块,今天写了个提示如下错误,自己比较菜,大家看看,谢谢
BUG: scheduling while atomic: mynetlink/0x10000100/19413
 [] schedule+0x43/0xa55
 [] do_IRQ+0xb5/0xc3
 [] __cond_resched+0x16/0x34
 [] cond_resched+0x26/0x31
 [] kmem_cache_alloc+0x11/0x4b
 [] pro_thread+0x191/0x2e0 [redirect]
 [] syscall_exit_work+0x12/0x17
 [] pro_thread_thread+0x0/0x2e0 [redirect]
 [] autoremove_wake_function+0x0/0x2d
 [] pro_thread_thread+0x0/0x2e0 [redirect]
 [] kernel_thread_helper+0x7/0x10

|
中断环境下不能使用GFP_KERNEL请求内存,这种方式会休眠。必须用GFP_ATOMIC原子方式。

|
中断环境是指中断处理程序或softirq中,此时内核代表硬件或自身执行,而不是代表进程,所以不能睡眠。
睡眠是和进程相关的概念,此时如果睡眠那唤醒时又恢复到哪个进程呢?

|
参加第二版,下面是他的相关内容:

When executing an interrupt handler or bottom half, the kernel is in interrupt context. Recall that process context is the mode of operation the kernel is in while it is executing on behalf of a process. for example, executing a system call or running a kernel thread. In process context, the current macro points to the associated task. Furthermore, because a process is coupled to the kernel in process context, process context can sleep or otherwise invoke the scheduler.

Interrupt context, on the other hand, is not associated with a process. The current macro is not relevant (although it points to the interrupted process). Without a backing process, interrupt context cannot sleephow would it ever reschedule? Therefore, you cannot call certain functions from interrupt context. If a function sleeps, you cannot use it from your interrupt handler. this limits the functions that one can call from an interrupt handler.

其中bottom half在linux2.6中的实现就是softirq。
可知Interrupt context中不能进行与进程相关的睡眠和调度。

|
看内核源码,这个bug的触发是你 禁用了系统抢占又去调用schedule。

就是想你说的这样使用GFP_KERNEL 参数调用kmalloc时,它可能会调用schedule的。因为你当前是中断环境系统抢占已经被禁用,所以不能使用GFP_KERNEL参数了。
这时你应该使用GFP_ATOMIC参数来调用kmalloc 就可以了,或者在进入中断之前,事先用kmalloc( GFP_KERNEL  分配好接受内存。

    
 
 

您可能感兴趣的文章:

  • 【求助】基于2.6.29内核编译的驱动程序能否应用于2.6.32内核的系统?
  • 【求助】多进程中 内核信号量无效?
  • 求助:makefile,驱动与linux内核的关系?
  • 求助: 进程调度内核分析
  • 求助,关于编译驱动进内核的一个问题,实在找不到资料了!
  • rh8编译内核出错!求助!
  • [求助]如何设置uclinux内核中的内存
  • 求助如何顺利的阅读linux内核源代码
  • 内核源码求助?
  • 求助:内核编译出错,系统不能启动!!
  • 编译内核时出现的一个问题,求助!
  • 求助:如何移植DM9000网卡驱动到linux2.6内核?
  • 想在linux下面读ntfs分区,rpm内核时出现问题,求助!
  • iptables已打入string match补丁,编译内核无法找到该项,求助高手!
  • 内核与用户进程通信得问题,求助!
  • (求助)准备向linux内核方向发展应该有哪些基础???
  • 求助: linux内核编译的问题
  • 求助!编译内核出错
  • 求助:编译新内核,怎么会影响到旧内核的声卡驱动?
  • 紧急求助内核编译问题,急求!
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 【求助】iplanet问题,求助高手解答!
  • 菜鸟求助,solaris下计算问题求助
  • 【求助】SOS紧急求助..............极为简单的问题...跪求....
  • module的问题.版本问题 求助
  • 求助关于linux和windows引导lilo的问题
  • 求助~~求助 ~~linux文件读写问题
  • 求助! 又出现问题了!
  • 一个简单的问题,高分求助!!!
  • VJ的一个问题,高分求助,熟悉VJ得请进!
  • socket实现多文件并发传输,求助多线程实现问题?
  • 各位大侠,求助一个关于ubuntu系统的问题
  • 100分求助,Ubuntu安装问题
  • linux的 iptables问题求助
  • 100分求助:关于linux下配置sendmail的问题
  • 急求助!安装linux后重装windows的问题
  • QT中关于方向键控制焦点的问题(求助)
  • 求助关于__cdecl的使用问题
  • 求助: 在ubuntu11.04上的有线连接问题
  • 急!!!小弟刚刚接触linux 在线求助<很简单的问题>
  • 求助: RedHat as4 内网正常,无法访问外网的问题!
  • 高分求助高分求助高分求助高分求助高分求助高分求助
  • 怎样读取HZK24S前十区的内容啊???求助求助
  • 紧急求助!紧急求助!
  • 高分求助啊!求助SUSE 10.0 不能上网.
  • 急急急急急急急啊,紧急求助啊!!!!!满分求助啊!!!!!!
  • 求助:linux下 vim的配置(高分求助)
  • red hat怎么安装gcc啊!总是出错,求助求助啊!!!yum源怎么改啊!!
  • 求助:信号 --13 进程中断
  • 求助,安装了红帽子后进不了
  • 新装linux求助
  • (高分求助)请问,那里有软件开发的<设计文档>


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3