留言板

路过的蜗牛们,在这里留个脚印吧~

蜗窝欢迎各种言论,谈天说地、技术交流、问题求救、跳槽招聘、牢骚抱怨……哈哈。

评论:

madang
2016-02-01 12:18
问一个问题:devm_ioremap_resource 接口和 devm_ioremap的区别。
看了一下代码,为一个区别就是一个接口devm_ioremap_resource()接口会调用
devm_request_mem_region()函数来检查 地址重复的问题。
但是看到内核里面 确实也有驱动调用devm_ioremap接口来做ioremap,
所以,想问一下,什么情况下可以调用 devm_ioremap ?

急 。在线等!

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的
wowo
2016-02-01 15:51
@云:是对,云说的非常对。总结来说,就是devm_ioremap可以重复map相同的地址空间,devm_ioremap_resource不可以。有时候几个driver可能真的需要map一些相同的寄存器空间(这是不规范的做法,但可能有一些无可奈何的原因),这时候devm_ioremap_resource就不能用了,只能用devm_ioremap。
madang
2016-02-01 16:34
@wowo:只要做好对同一块物理地址(主要是寄存器之类)的并发访问,应该就没有什么问题。我觉得。你觉得呢?
wowo
2016-02-02 09:35
@madang:是的。应该每个写driver的都干过这事儿:-)
不过尽量少做,因为这样做的原因是有些耦合没有拆开。
爱萝莉
2016-01-21 10:14
每次都默默看你们的评论.....
passerby
2016-01-20 17:00
@linuxer 最近在看进程调度,看到HMP的CPU 的check_for_migration进行task迁移的时候不太懂,rq->capacity 以及cpu能力这些在这里面是怎么体现的
郭健
2016-01-21 08:40
@passerby:我在读linux4.1.10的代码,没有看到check_for_migration这个函数,你是那个版本的?
passerby
2016-01-21 09:34
@郭健:是3.10的,在 /kernel/sched/fair.c 文件里
郭健
2016-01-21 10:21
@passerby:是标准kernel吗?我怎么看不到这个函数?
passerby
2016-01-22 19:50
@郭健:这个不敢确定,有可能是高通自己搞得东西。
passerby
2016-01-27 14:43
@passerby:对比理解了下代码,确实是高通的东西。高通为了增加对HMP的支持,对进程调度进行了很大的修改。所以代码变得不同了,增加了它的rq负载计算的机制。
linuxer
2016-01-14 11:26
本周六,泰晓科技举办了一个活动,具体信息可以参考:

http://www.tinylab.org/the-4th-tiny-salon-forcenotice/

wowo和我都是非常懒惰的人,自己组织定然是不会的(怕麻烦,呵呵~~~),正好泰晓科技举办了这样一个活动,我们准备参加,顺便和广大的业内工程师进行技术交流活动,珠三角的同学可以考虑去看看哦。
linux_emb
2016-01-14 15:42
@linuxer:你和wowo都去?
哎,可惜离的太远。。。。
Linux_emb
2016-01-14 15:49
@linux_emb:感觉我们这边好落后////
linuxer
2016-01-14 16:19
@linux_emb:是的,这次活动在珠海,估计只能是珠三角的同学才可以,^_^
Linux_emb
2016-01-15 09:16
@linuxer:活动有没有直播?发个链接
郭健
2016-01-21 10:23
@Linux_emb:没有直播,线下聚会不会有太多的内容,主要是相互认识一下。就类似吃着鸡蛋不错,去看看下蛋的鸡长的啥样,^_^
Linux_emb
2016-01-26 19:09
@郭健:其实我的目的就是,去不了现场,在远方看看下蛋的鸡长啥样,哈哈哈
blessed
2016-01-12 16:03
大佬们,啥时候出个专题讲讲怎么解kernel crash的问题啊
linuxer
2016-01-12 22:29
@blessed:如果能打印出来现场,其实解决kernel panic并不难,最怕无声无息就挂掉了
blessed
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的问题,但是没法证明
wowo
2016-01-13 09:15
@blessed:应该不是DDR的问题。感觉像内核模块起了一个线程,但是在线程运行结束前相关的资源被free了。你可以检查一下代码,看看是否有这样的场景。
blessed
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出问题的经验很少,所以不敢肯定是否是这个原因。
wowo
2016-01-13 13:05
@blessed:如果怀疑DDR,看看是不是可以做一个DDR稳定性的测试,按理说是可以检查出来的。
另外如果DDR里面的数据被意外修改,也有可能出现类似的现象。
有条件的话,把相关位置的DDR数据dump出来,看看是否有什么规律。
blessed
2016-01-13 15:25
@wowo:谢谢wowo,我这边先会做一个DDR的稳定性测试。
szlhappy
2015-12-30 09:41
input subsystem啥时候出啊?
wowo
2015-12-30 11:16
@szlhappy:感谢关注,暂时还没有计划,抱歉。

2015-12-10 10:35
wowo,我发现linuxer发表的 “时间子系统” 系列文章没有出现在分类里面,是不是漏了?^_^
wowo
2015-12-10 10:53
@云:有啊,我都看到了,您再仔细瞅瞅?

2015-12-10 11:10
@wowo:aha,在右侧的文章分类里看到了

我之前在顶部导航里没找到。

just ignore it~
ymj
2015-11-26 19:43
太好了,我已经整站下载了,持续关注。。。。。。
wowo
2015-11-27 13:16
@ymj:多谢关注~~
ymj
2015-11-27 16:00
@wowo:好东西大家都喜欢。。。
冒昧的问一下wowo在那个城市?
wowo
2015-11-27 16:48
@ymj:您可以看“关于蜗窝”,我们的大本营在GZ,当然,其它地方也有“分部”,呵呵~~
老三
2015-11-18 15:01
有空出一系列书吧,各个子系统都能出一本了,名字就叫蜗窝科技系列图书之一电源管理,之二Linux内核......
wowo
2015-11-19 09:03
@老三:出书的话需要很多时间整理,仅仅业余时间有些不够的。
passerby
2015-11-17 17:00
有人知道sys_chdir和sys_chroot两个函数的源码实现吗
linuxer
2015-11-17 18:23
@passerby:这个问题有点大哦,不好回答。
passerby
2015-11-18 09:01
@linuxer:想看看根目录和当前目录怎么切换的,但是没有找到。。。
passerby
2015-11-18 09:38
@passerby:如果我没猜错,应该最终是调用set_fs_root来实现的。
wowo
2015-11-18 09:41
@passerby:源码可以参考这里:fs/open.c
SYSCALL_DEFINE1(chroot, const char __user *, filename)
SYSCALL_DEFINE1(chdir, const char __user *, filename)
passerby
2015-11-18 10:03
@wowo:Thank you,刚才我搜索set_fs_root时也发现了这里。仔细看了一下,这里定义了系统调用,就是是i西安sys_chroot的地方。最终都是调用set_fs_root和set_fs_pwd来做的根目录和工作目录设定。

发表评论:

Copyright @ 2013-2015 蜗窝科技 All rights reserved. Powered by emlog