Header dependencies
I took a look at converting to the asm-offsets.c method for generating offsets.h that the other architectures are using. Basically, I ran into the same problem Keith Owens alluded to earlier with the circular dependencies:
asm/thread-info.h declares:
#define current_thread_info() ((struct thread_info *) ((char *) current + IA64_TASK_SIZE)) To get IA64_TASK_SIZE, it includes asm/offsets.h
To build asm/offsets.h, we need include linux/sched.h which includes linux/thread_info.h which includes asm/thread_info.h.
I think the basic problem is that thread_info and task_struct are the wrong way round on the stack. If we put thread_info first then we don't need IA64_TASK_SIZE in current_thread_info's definition. What would people think to this rearrangement? I guess some asm code might need to be changed, and I'm still scared of ia64 assembler ;-)
Signature · 1 line
Revolutions do not require corporate support.
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line · Matthew Wilcox
Matthew> I think the basic problem is that thread_info and Matthew> task_struct are the wrong way round on the stack. If we Matthew> put thread_info first then we don't need IA64_TASK_SIZE in Matthew> current_thread_info's definition. What would people think Matthew> to this rearrangement? I guess some asm code might need to Matthew> be changed, and I'm still scared of ia64 assembler ;-)
I think I tried that back when the thread_info ugliness was introduced. Making it work would require more changes to the platform independent portions of the kernel (which may well be the right thing to do). But my memory may be wrong---if you can make it work, I'd be OK with the change.
--david