On Tue, Mar 1, 2011 at 12:47 PM, Oleg Nesterov <oleg@xxxxxxxxxx> wrote: > where that 'do_execve_common()' takes it's arguments as > > union conditional_user_ptr_t __user *argv, > union conditional_user_ptr_t __user *envp > > I hope you didn't really mean this... I really did mean that (although not the double "union" + "_t" thing for the typedef). But I'm not going to claim that it has to be done exactly that way, the union can certainly be encapsulated differently too. So I'm ok with your alternative > typedef union { > const char __user *const __user *native; > compat_uptr_t __user *compat; > } conditional_user_ptr_t; model instead, which moves the pointer into the union. However, if you do this, then I have one more suggestion: just move the "compat" flag in there too! Every time you pass the union, you're going to pass the compat flag to distinguish the cases. So do it like this: struct conditional_ptr { int is_compat; union { const char __user *const __user *native; compat_uptr_t __user *compat; }; }; and it will all look much cleaner, I bet. Linus -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxxx For more info on Linux MM, see: http://www.linux-mm.org/ . Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/ Don't email: <a href