留言板
路过的蜗牛们,在这里留个脚印吧~
蜗窝欢迎各种言论,谈天说地、技术交流、问题求救、跳槽招聘、牢骚抱怨……哈哈。
评论:
madang
2016-02-01 12:18
2016-02-01 12:18
问一个问题:devm_ioremap_resource 接口和 devm_ioremap的区别。
看了一下代码,为一个区别就是一个接口devm_ioremap_resource()接口会调用
devm_request_mem_region()函数来检查 地址重复的问题。
但是看到内核里面 确实也有驱动调用devm_ioremap接口来做ioremap,
所以,想问一下,什么情况下可以调用 devm_ioremap ?
急 。在线等!
看了一下代码,为一个区别就是一个接口devm_ioremap_resource()接口会调用
devm_request_mem_region()函数来检查 地址重复的问题。
但是看到内核里面 确实也有驱动调用devm_ioremap接口来做ioremap,
所以,想问一下,什么情况下可以调用 devm_ioremap ?
急 。在线等!
云
2016-02-01 14:22
2016-02-01 14:22
@madang:举个例子:
小A写了一个内核模块,里面用需要使用一块物理内存空间, 于是他这么写:virt_A = devm_ioremap(phys A , size B);
另外一个部门的小B也写了一个内核模块,virt_B = devm_ioremap(phys B , size B)
但是很不幸,A和B是同一块内存区域,或者他们之间有空间重叠。导致了小A和小B的驱动都不能工作正常。而他们彼此互不知情。
怎么解决这个问题呢?所以得引入resource管理的机制了,小A和小B都使用devm_ioremap_resource()防止conflict.
----------------------------我是分割线----------------------------------
一般SoC的中,各个硬件模块各自的memory region都有严格的划分(比如说USB host的地址空间绝对不会和flash host冲突), 所以一般的driver使用devm_ioremap()也就没问题了。 当然了,你要使用devm_ioremap_resource()也是OK的
小A写了一个内核模块,里面用需要使用一块物理内存空间, 于是他这么写:virt_A = devm_ioremap(phys A , size B);
另外一个部门的小B也写了一个内核模块,virt_B = devm_ioremap(phys B , size B)
但是很不幸,A和B是同一块内存区域,或者他们之间有空间重叠。导致了小A和小B的驱动都不能工作正常。而他们彼此互不知情。
怎么解决这个问题呢?所以得引入resource管理的机制了,小A和小B都使用devm_ioremap_resource()防止conflict.
----------------------------我是分割线----------------------------------
一般SoC的中,各个硬件模块各自的memory region都有严格的划分(比如说USB host的地址空间绝对不会和flash host冲突), 所以一般的driver使用devm_ioremap()也就没问题了。 当然了,你要使用devm_ioremap_resource()也是OK的
wowo
2016-02-01 15:51
2016-02-01 15:51
@云:是对,云说的非常对。总结来说,就是devm_ioremap可以重复map相同的地址空间,devm_ioremap_resource不可以。有时候几个driver可能真的需要map一些相同的寄存器空间(这是不规范的做法,但可能有一些无可奈何的原因),这时候devm_ioremap_resource就不能用了,只能用devm_ioremap。
passerby
2016-01-20 17:00
2016-01-20 17:00
@linuxer 最近在看进程调度,看到HMP的CPU 的check_for_migration进行task迁移的时候不太懂,rq->capacity 以及cpu能力这些在这里面是怎么体现的
linuxer
2016-01-14 11:26
2016-01-14 11:26
本周六,泰晓科技举办了一个活动,具体信息可以参考:
http://www.tinylab.org/the-4th-tiny-salon-forcenotice/
wowo和我都是非常懒惰的人,自己组织定然是不会的(怕麻烦,呵呵~~~),正好泰晓科技举办了这样一个活动,我们准备参加,顺便和广大的业内工程师进行技术交流活动,珠三角的同学可以考虑去看看哦。
http://www.tinylab.org/the-4th-tiny-salon-forcenotice/
wowo和我都是非常懒惰的人,自己组织定然是不会的(怕麻烦,呵呵~~~),正好泰晓科技举办了这样一个活动,我们准备参加,顺便和广大的业内工程师进行技术交流活动,珠三角的同学可以考虑去看看哦。
blessed
2016-01-13 08:35
2016-01-13 08:35
@linuxer:Unable to handle kernel paging request at virtual address fffffffe
[18358.892308] pgd = 80004000
[18358.895161] [fffffffe] *pgd=47ffe821, *pte=00000000, *ppte=00000000
[18358.903404] Internal error: Oops: 80000007 [#1] PREEMPT SMP
[18358.908984] Modules linked in: wl18xx wlcore_sdio wlcore mac80211 cdc_ncm usbnet cfg80211 compat otghub
[18358.918532] CPU: 1 Not tainted (3.0.35-2154-g94689e1 #40)
[18358.924288] PC is at 0xfffffffe
[18358.927442] LR is at get_parent_ip+0x10/0x2c
[18358.931722] pc : [<fffffffe>] lr : [<80065af4>] psr: 60000033
[18358.931728] sp : b38a3ea0 ip : 80031d80 fp : 805c6e0c
[18358.943220] r10: 8008b3f8 r9 : 00000002 r8 : 00000000
[18358.948450] r7 : 00000000 r6 : ffffffff r5 : 80033ed8 r4 : b60099e4
[18358.954985] r3 : 00000000 r2 : 00000002 r1 : 80597d18 r0 : 00000000
[18358.961519] Flags: nZCv IRQs on FIQs on Mode SVC_32 ISA Thumb Segment kernel
[18358.969007] Control: 10c53c7d Table: 4421804a DAC: 00000015
[18358.974760] Process kworker/u:2 (pid: 16897, stack limit = 0xb38a22f0)
[18358.981294] Stack: (0xb38a3ea0 to 0xb38a4000)
.............
[18359.067533] 3fe0: b38a3fe0 b38a3fe0 b3851f00 80085e10 80039b1c 80039b1c 00000000 00000000
[18359.075726] Code: bad PC value
好多次都是这样的log,没有打印相应的calltrace,现在怀疑是DDR的问题,但是没法证明
[18358.892308] pgd = 80004000
[18358.895161] [fffffffe] *pgd=47ffe821, *pte=00000000, *ppte=00000000
[18358.903404] Internal error: Oops: 80000007 [#1] PREEMPT SMP
[18358.908984] Modules linked in: wl18xx wlcore_sdio wlcore mac80211 cdc_ncm usbnet cfg80211 compat otghub
[18358.918532] CPU: 1 Not tainted (3.0.35-2154-g94689e1 #40)
[18358.924288] PC is at 0xfffffffe
[18358.927442] LR is at get_parent_ip+0x10/0x2c
[18358.931722] pc : [<fffffffe>] lr : [<80065af4>] psr: 60000033
[18358.931728] sp : b38a3ea0 ip : 80031d80 fp : 805c6e0c
[18358.943220] r10: 8008b3f8 r9 : 00000002 r8 : 00000000
[18358.948450] r7 : 00000000 r6 : ffffffff r5 : 80033ed8 r4 : b60099e4
[18358.954985] r3 : 00000000 r2 : 00000002 r1 : 80597d18 r0 : 00000000
[18358.961519] Flags: nZCv IRQs on FIQs on Mode SVC_32 ISA Thumb Segment kernel
[18358.969007] Control: 10c53c7d Table: 4421804a DAC: 00000015
[18358.974760] Process kworker/u:2 (pid: 16897, stack limit = 0xb38a22f0)
[18358.981294] Stack: (0xb38a3ea0 to 0xb38a4000)
.............
[18359.067533] 3fe0: b38a3fe0 b38a3fe0 b3851f00 80085e10 80039b1c 80039b1c 00000000 00000000
[18359.075726] Code: bad PC value
好多次都是这样的log,没有打印相应的calltrace,现在怀疑是DDR的问题,但是没法证明
blessed
2016-01-13 12:43
2016-01-13 12:43
@wowo:谢谢wowo的及时回复。现在出现的问题的情景是这样的:
1,发生oops/panic的时间并不固定
2,发生问题的时候内存还有很多剩余
3,发生问题时,有可能会打印多次oops的log,但是第一次oops的log基本上跟上面回复的log的内容差不多,而且没有打印出calltrace,在随后的oops log中有calltrace,而且大多是跟缺页中断处理或者系统调用相关:
[118968.341331] [<80437368>] (__schedule+0x3ac/0x6d4) from [<8006fac4>] (do_exit+0x448/0x6e0)
[118968.349612] [<8006fac4>] (do_exit+0x448/0x6e0) from [<8003c7a4>] (die+0x228/0x284)
[118968.357285] [<8003c7a4>] (die+0x228/0x284) from [<804338cc>] (__do_kernel_fault.part.4+0x54/0x74)
[118968.366268] [<804338cc>] (__do_kernel_fault.part.4+0x54/0x74) from [<8004348c>] (do_page_fault+0x2b4/0x31c)
[118968.376114] [<8004348c>] (do_page_fault+0x2b4/0x31c) from [<80033404>] (do_PrefetchAbort+0x34/0x9c)
有时系统只是在处理一些系统调用(例如semtimeop)也会产生异常
[ 1914.820235] [<8043745c>] (__schedule+0x258/0x6d4) from [<80437c54>] (preempt_schedule_irq+0x48/0x68)
[ 1914.829383] [<80437c54>] (preempt_schedule_irq+0x48/0x68) from [<80038b30>] (svc_preempt+0x8/0x18)
[ 1914.838355] [<80038b30>] (svc_preempt+0x8/0x18) from [<80439988>] (__raw_spin_lock+0x80/0x94)
[ 1914.846891] [<80439988>] (__raw_spin_lock+0x80/0x94) from [<801b2fd4>] (ipc_lock+0x3c/0x70)
[ 1914.855254] [<801b2fd4>] (ipc_lock+0x3c/0x70) from [<801b3014>] (ipc_lock_check+0xc/0x48)
[ 1914.863444] [<801b3014>] (ipc_lock_check+0xc/0x48) from [<801b5f10>] (sys_semtimedop+0x244/0x780)
[ 1914.872329] [<801b5f10>] (sys_semtimedop+0x244/0x780) from [<80039040>] (ret_fast_syscall+0x0/0x30)
[ 1927.955262] usb 1-1: device not accepting address 3, error -110
4,根据上面的log,我们目前的想法是,由于DDR的电压不稳导致数据异常,数据异常导致系统调用失败或者缺页中断处理函数处理失败,我们能看到的log都是第二现场的log
我们对于DDR出问题的经验很少,所以不敢肯定是否是这个原因。
1,发生oops/panic的时间并不固定
2,发生问题的时候内存还有很多剩余
3,发生问题时,有可能会打印多次oops的log,但是第一次oops的log基本上跟上面回复的log的内容差不多,而且没有打印出calltrace,在随后的oops log中有calltrace,而且大多是跟缺页中断处理或者系统调用相关:
[118968.341331] [<80437368>] (__schedule+0x3ac/0x6d4) from [<8006fac4>] (do_exit+0x448/0x6e0)
[118968.349612] [<8006fac4>] (do_exit+0x448/0x6e0) from [<8003c7a4>] (die+0x228/0x284)
[118968.357285] [<8003c7a4>] (die+0x228/0x284) from [<804338cc>] (__do_kernel_fault.part.4+0x54/0x74)
[118968.366268] [<804338cc>] (__do_kernel_fault.part.4+0x54/0x74) from [<8004348c>] (do_page_fault+0x2b4/0x31c)
[118968.376114] [<8004348c>] (do_page_fault+0x2b4/0x31c) from [<80033404>] (do_PrefetchAbort+0x34/0x9c)
有时系统只是在处理一些系统调用(例如semtimeop)也会产生异常
[ 1914.820235] [<8043745c>] (__schedule+0x258/0x6d4) from [<80437c54>] (preempt_schedule_irq+0x48/0x68)
[ 1914.829383] [<80437c54>] (preempt_schedule_irq+0x48/0x68) from [<80038b30>] (svc_preempt+0x8/0x18)
[ 1914.838355] [<80038b30>] (svc_preempt+0x8/0x18) from [<80439988>] (__raw_spin_lock+0x80/0x94)
[ 1914.846891] [<80439988>] (__raw_spin_lock+0x80/0x94) from [<801b2fd4>] (ipc_lock+0x3c/0x70)
[ 1914.855254] [<801b2fd4>] (ipc_lock+0x3c/0x70) from [<801b3014>] (ipc_lock_check+0xc/0x48)
[ 1914.863444] [<801b3014>] (ipc_lock_check+0xc/0x48) from [<801b5f10>] (sys_semtimedop+0x244/0x780)
[ 1914.872329] [<801b5f10>] (sys_semtimedop+0x244/0x780) from [<80039040>] (ret_fast_syscall+0x0/0x30)
[ 1927.955262] usb 1-1: device not accepting address 3, error -110
4,根据上面的log,我们目前的想法是,由于DDR的电压不稳导致数据异常,数据异常导致系统调用失败或者缺页中断处理函数处理失败,我们能看到的log都是第二现场的log
我们对于DDR出问题的经验很少,所以不敢肯定是否是这个原因。
功能
最新评论
- wangjing
写得太好了 - wangjing
写得太好了! - DRAM
圖面都沒辦法顯示出來好像掛點了。 - Simbr
bus至少是不是还有个subsystem? - troy
@testtest:只要ldrex-modify-strex... - gh
Linux 内核在 sparse 内存模型基础上实现了vme...
文章分类
随机文章
文章存档
- 2025年4月(5)
- 2024年2月(1)
- 2023年5月(1)
- 2022年10月(1)
- 2022年8月(1)
- 2022年6月(1)
- 2022年5月(1)
- 2022年4月(2)
- 2022年2月(2)
- 2021年12月(1)
- 2021年11月(5)
- 2021年7月(1)
- 2021年6月(1)
- 2021年5月(3)
- 2020年3月(3)
- 2020年2月(2)
- 2020年1月(3)
- 2019年12月(3)
- 2019年5月(4)
- 2019年3月(1)
- 2019年1月(3)
- 2018年12月(2)
- 2018年11月(1)
- 2018年10月(2)
- 2018年8月(1)
- 2018年6月(1)
- 2018年5月(1)
- 2018年4月(7)
- 2018年2月(4)
- 2018年1月(5)
- 2017年12月(2)
- 2017年11月(2)
- 2017年10月(1)
- 2017年9月(5)
- 2017年8月(4)
- 2017年7月(4)
- 2017年6月(3)
- 2017年5月(3)
- 2017年4月(1)
- 2017年3月(8)
- 2017年2月(6)
- 2017年1月(5)
- 2016年12月(6)
- 2016年11月(11)
- 2016年10月(9)
- 2016年9月(6)
- 2016年8月(9)
- 2016年7月(5)
- 2016年6月(8)
- 2016年5月(8)
- 2016年4月(7)
- 2016年3月(5)
- 2016年2月(5)
- 2016年1月(6)
- 2015年12月(6)
- 2015年11月(9)
- 2015年10月(9)
- 2015年9月(4)
- 2015年8月(3)
- 2015年7月(7)
- 2015年6月(3)
- 2015年5月(6)
- 2015年4月(9)
- 2015年3月(9)
- 2015年2月(6)
- 2015年1月(6)
- 2014年12月(17)
- 2014年11月(8)
- 2014年10月(9)
- 2014年9月(7)
- 2014年8月(12)
- 2014年7月(6)
- 2014年6月(6)
- 2014年5月(9)
- 2014年4月(9)
- 2014年3月(7)
- 2014年2月(3)
- 2014年1月(4)
2016-03-02 11:43
spin_lock_irqsave( )
request_irq();
spin_unlock_restore();