Re: [rcu:dev.2017.04.28a 41/45] include/linux/notifier.h:77:21: error: field 'srcu' has incomplete type

From: Paul E. McKenney
Date: Sat Apr 29 2017 - 23:34:03 EST


On Sun, Apr 30, 2017 at 07:32:17AM +0800, kbuild test robot wrote:
> tree: https://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git dev.2017.04.28a
> head: 1205059ca5d4835e9213ff943ce3a51980718b5d
> commit: e01ef0529ed548c1b30206058c2b5eecbbc07998 [41/45] srcu: Make SRCU be once again optional
> config: sparc64-allnoconfig (attached as .config)
> compiler: sparc64-linux-gnu-gcc (Debian 6.1.1-9) 6.1.1 20160705
> reproduce:
> wget https://raw.githubusercontent.com/01org/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
> chmod +x ~/bin/make.cross
> git checkout e01ef0529ed548c1b30206058c2b5eecbbc07998
> # save the attached .config to linux build tree
> make.cross ARCH=sparc64
>
> All errors (new ones prefixed by >>):
>
> In file included from include/linux/memory_hotplug.h:6:0,
> from include/linux/mmzone.h:749,
> from include/linux/gfp.h:5,
> from include/linux/kmod.h:22,
> from include/linux/module.h:13,
> from init/main.c:16:
> >> include/linux/notifier.h:77:21: error: field 'srcu' has incomplete type
> struct srcu_struct srcu;
> ^~~~

Hmmm...

This sort of thing has been legal for quite some time, so I am taking
the crude step of providing an empty definition for srcu_struct when
building with CONFIG_SRCU=n.

Thanx, Paul

> vim +/srcu +77 include/linux/notifier.h
>
> e041c6834 Alan Stern 2006-03-27 61 struct atomic_notifier_head {
> e041c6834 Alan Stern 2006-03-27 62 spinlock_t lock;
> 374a8e0dc Arnd Bergmann 2010-02-24 63 struct notifier_block __rcu *head;
> e041c6834 Alan Stern 2006-03-27 64 };
> e041c6834 Alan Stern 2006-03-27 65
> e041c6834 Alan Stern 2006-03-27 66 struct blocking_notifier_head {
> e041c6834 Alan Stern 2006-03-27 67 struct rw_semaphore rwsem;
> 374a8e0dc Arnd Bergmann 2010-02-24 68 struct notifier_block __rcu *head;
> e041c6834 Alan Stern 2006-03-27 69 };
> e041c6834 Alan Stern 2006-03-27 70
> e041c6834 Alan Stern 2006-03-27 71 struct raw_notifier_head {
> 374a8e0dc Arnd Bergmann 2010-02-24 72 struct notifier_block __rcu *head;
> e041c6834 Alan Stern 2006-03-27 73 };
> e041c6834 Alan Stern 2006-03-27 74
> eabc06940 Alan Stern 2006-10-04 75 struct srcu_notifier_head {
> eabc06940 Alan Stern 2006-10-04 76 struct mutex mutex;
> eabc06940 Alan Stern 2006-10-04 @77 struct srcu_struct srcu;
> 374a8e0dc Arnd Bergmann 2010-02-24 78 struct notifier_block __rcu *head;
> eabc06940 Alan Stern 2006-10-04 79 };
> eabc06940 Alan Stern 2006-10-04 80
> e041c6834 Alan Stern 2006-03-27 81 #define ATOMIC_INIT_NOTIFIER_HEAD(name) do { \
> e041c6834 Alan Stern 2006-03-27 82 spin_lock_init(&(name)->lock); \
> e041c6834 Alan Stern 2006-03-27 83 (name)->head = NULL; \
> e041c6834 Alan Stern 2006-03-27 84 } while (0)
> e041c6834 Alan Stern 2006-03-27 85 #define BLOCKING_INIT_NOTIFIER_HEAD(name) do { \
>
> :::::: The code at line 77 was first introduced by commit
> :::::: eabc069401bcf45bcc3f19e643017bf761780aa8 [PATCH] Add SRCU-based notifier chains
>
> :::::: TO: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx>
> :::::: CC: Linus Torvalds <torvalds@xxxxxxxxxxx>
>
> ---
> 0-DAY kernel test infrastructure Open Source Technology Center
> https://lists.01.org/pipermail/kbuild-all Intel Corporation