On Tue, 14 Aug 2018 15:15:59 -0700 Guenter Roeck <li...@roeck-us.net> wrote:
> > Confused. Why does it think that the mm_struct is "otherwise empty"? > > > > The problem isn't really that the structure is otherwise empty. > Some digging reveals that the error message is wrong; gcc should > instead complain about having no _named_ structure element before > the flexible array member. > > > This shuts it up: > > > > --- a/include/linux/mm_types.h~a > > +++ a/include/linux/mm_types.h > > @@ -490,6 +490,7 @@ struct mm_struct { > > #endif > > } __randomize_layout; > > > > + int wibble; > > /* > > * The mm_cpumask needs to be at the end of mm_struct, because it > > * is dynamically sized based on nr_cpu_ids. > > > > Unfortunately, that only triggers secondary errors. > Seen with both gcc 4.4 and 4.5. > > mm/init-mm.c:29: error: unknown field ‘mm_rb’ specified in initializer > mm/init-mm.c:29: warning: missing braces around initializer > mm/init-mm.c:29: warning: (near initialization for ‘init_mm.<anonymous>’) > mm/init-mm.c:29: error: incompatible types when initializing type ‘struct > vm_area_struct *’ using type ‘struct rb_root’ > mm/init-mm.c:30: error: unknown field ‘pgd’ specified in initializer > > and many more similar errors. This works, I think. The m68k build still fails because 0cc3cd21657 ("cpu/hotplug: Boot HT siblings at least once") was evidently never tested on CONFIG_SMP=n. How could that come about - the patch is six weeks old?? kernel/cpu.c: In function 'boot_cpu_hotplug_init': kernel/cpu.c:2275:2: error: 'struct cpuhp_cpu_state' has no member named 'booted_once' --- a/include/linux/mm_types.h~a +++ a/include/linux/mm_types.h @@ -490,6 +490,8 @@ struct mm_struct { #endif } __randomize_layout; + int wibble; + /* * The mm_cpumask needs to be at the end of mm_struct, because it * is dynamically sized based on nr_cpu_ids. --- a/mm/init-mm.c~a +++ a/mm/init-mm.c @@ -26,15 +26,17 @@ * and size this cpu_bitmask to NR_CPUS. */ struct mm_struct init_mm = { - .mm_rb = RB_ROOT, - .pgd = swapper_pg_dir, - .mm_users = ATOMIC_INIT(2), - .mm_count = ATOMIC_INIT(1), - .mmap_sem = __RWSEM_INITIALIZER(init_mm.mmap_sem), - .page_table_lock = __SPIN_LOCK_UNLOCKED(init_mm.page_table_lock), - .arg_lock = __SPIN_LOCK_UNLOCKED(init_mm.arg_lock), - .mmlist = LIST_HEAD_INIT(init_mm.mmlist), - .user_ns = &init_user_ns, + { + .mm_rb = RB_ROOT, + .pgd = swapper_pg_dir, + .mm_users = ATOMIC_INIT(2), + .mm_count = ATOMIC_INIT(1), + .mmap_sem = __RWSEM_INITIALIZER(init_mm.mmap_sem), + .page_table_lock = __SPIN_LOCK_UNLOCKED(init_mm.page_table_lock), + .arg_lock = __SPIN_LOCK_UNLOCKED(init_mm.arg_lock), + .mmlist = LIST_HEAD_INIT(init_mm.mmlist), + .user_ns = &init_user_ns, + }, .cpu_bitmap = { [BITS_TO_LONGS(NR_CPUS)] = 0}, INIT_MM_CONTEXT(init_mm) }; _