When an ia32 process triggers request_module the kernel cannot execute modprobe because the kernel thread still has the ia32 address limits in force. I think a kernel thread should always have the ia64 address limits, similar to what sys32_execve is doing. Andreas. --- linux-2.4.19/arch/ia64/kernel/process.c.~1~ 2002-08-03 02:39:42.000000000 +0200 +++ linux-2.4.19/arch/ia64/kernel/process.c 2003-03-27 11:29:02.000000000 +0100 @@ -476,6 +476,15 @@ kernel_thread (int (*fn)(void *), void * tid = clone(flags | CLONE_VM, 0); if (parent != current) { +#ifdef CONFIG_IA32_SUPPORT + if (IS_IA32_PROCESS(ia64_task_regs(current))) { + /* A kernel thread is always a 64-bit process. */ + current->thread.map_base = DEFAULT_MAP_BASE; + current->thread.task_size = DEFAULT_TASK_SIZE; + ia64_set_kr(IA64_KR_IO_BASE, current->thread.old_iob); + ia64_set_kr(IA64_KR_TSSD, current->thread.old_k1); + } +#endif result = (*fn)(arg); _exit(result); } -- Andreas Schwab, SuSE Labs, schwab@suse.de SuSE Linux AG, Deutschherrnstr. 15-19, D-90429 Nürnberg Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 "And now for something completely different."Received on Thu Mar 27 06:07:44 2003
This archive was generated by hypermail 2.1.8 : 2005-08-02 09:20:12 EST