On Wed, Aug 25, 2004 at 10:18:04AM +0800, Macleod wrote:
> After trace system, found this problem is from scall_o32.S
> line 161 in 2.4.26 kernel.
>
> bltz t0, bad_stack # -> sp is bad
>
> If stack address larger than 0x7fffffff, branch will take,
> and that's why I got "-4142" errno on select system call
> even parameters in stack are correct. I tried to remove this
> line and seems "select" works fine.
Oh yes, I forgot on this one :-) It's intentional; making all syscalls
work from kernel mode would add some overhead. Possible solutions:
- move to 64-bit kernels; the 64-bit syscall interface happens to support
upto 8 arguments for syscalls from kernel mode.
- move your module or parts of it to userspace. Something that's using
select suspiciously looks like something that shouldn't be in the kernel.
- use the proper kernel APIs. Kernel programming isn't user space
programming.
Ralf
|