免费注册 查看新帖 |

Chinaunix

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

[操作系统] 求助, setuid(0) hang in Freescale P1020 SDK. [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-11-12 04:14 |只看该作者 |倒序浏览
Hi 各位老大,

目前我正在一块使用Freescale P1020 CPU的板子上调试application,但是我的application是hang在了setuid(0) libc function中。


使用的toolchain和kernel,都是来自Freescale P1020 SDK:
                 gcc-4.3.74-eglibc-2.8.74-dp-2
                 linux-2.6.31.

我的application中的threads如下:

main() thread -  SCHED_NORMAL
     |
     |-------        thread #a,  implement a timer using SIGALRM   -  SCHED_RR
     |
     |--------       thread #b  – SCHED_NORMAL            -  this is who hangs at setuid(0).
                            |
                            |--------   thread #c -  SCHED_RR,      waitting on a netlink FD for  incomming event


在kernel中加了一点debug用的代码,发现,thread #b的确是从sys_setuid()成功返回了,并且返回时其state为TASK_RUNNING,但是并没有返回到user-level code中来,而是继续停留在setuid() libc function中,到了另一个system call sys_futex()中,并且kernel mode stack calltrace是:

[cdc25c80] [c007e5ac] __rcu_process_callbacks+0x2c4/0x3a0 (unreliable)
[cdc25d40] [c0007ef8] __switch_to+0x5c/0xcc
[cdc25d50] [c0488ab8] schedule+0x2dc/0x4c4
[cdc25db0] [c00699e0] futex_wait_queue_me+0xfc/0x134
[cdc25de0] [c0069b54] futex_wait+0x13c/0x2cc
[cdc25ec0] [c006c560] do_futex+0x58/0x1e8
[cdc25ee0] [c006c784] sys_futex+0x94/0x1e4
[cdc25f40] [c0010254] ret_from_syscall+0x0/0x3c


在网上也找到一个discussion,关于RT thread setuid() hang的:

          http://linux.derkeiler.com/Maili ... 09-02/msg09870.html
但是这个fix是已经在kernel 2.6.31中有了,并且说的是RT thread,而我的thread #b是SCHED_NORMAL,所以我觉得情况还不是一样。


我的一些kernel confi options如下:

CONFIG_TREE_RCU=y
# CONFIG_TREE_PREEMPT_RCU is not set
# CONFIG_RCU_TRACE is not set
CONFIG_RCU_FANOUT=32
# CONFIG_RCU_FANOUT_EXACT is not set
# CONFIG_TREE_RCU_TRACE is not set
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
CONFIG_LOG_BUF_SHIFT=14
CONFIG_GROUP_SCHED=y
# CONFIG_FAIR_GROUP_SCHED is not set
# CONFIG_RT_GROUP_SCHED is not set
CONFIG_USER_SCHED=y
# CONFIG_CGROUP_SCHED is not set
# CONFIG_CGROUPS is not set


CONFIG_PREEMPT_NONE=y
# CONFIG_PREEMPT_VOLUNTARY is not set
# CONFIG_PREEMPT is not set

       尽管 CONFIG_PREEMPT 没有设置, 我也试验过设置的情况, setuid() 仍然是hang。



不管怎样,我是没什么idea可用了。


各位老大,觉得这和所使用的Freescale P1020 SDK,  gcc-4.3.74-eglibc-2.8.74-dp-2有关系吗? 可不可以向小弟我提供下思路和方向?

如果还需要提供什么信息,请告知。 非常感谢。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP