Messages in this thread | | | Subject | Re: drivers/clocksource/timer-of.h:35:28: error: field 'clkevt' has incomplete type | From | Randy Dunlap <> | Date | Mon, 4 Sep 2017 10:01:54 -0700 |
| |
On 09/02/17 23:28, kbuild test robot wrote: > Hi Daniel, > > FYI, the error/warning still remains. > > tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master > head: d0d6ab53c9abd7dd1070f43a0455328874127ba8 > commit: dc11bae78529526605c5c45c369c9512fd012093 clocksource/drivers: Add timer-of common init routine > date: 3 months ago > config: ia64-allyesconfig (attached as .config) > compiler: ia64-linux-gcc (GCC) 6.2.0 > reproduce: > wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross > chmod +x ~/bin/make.cross > git checkout dc11bae78529526605c5c45c369c9512fd012093 > # save the attached .config to linux build tree > make.cross ARCH=ia64 > > All errors (new ones prefixed by >>): > > In file included from drivers/clocksource/timer-of.c:25:0: >>> drivers/clocksource/timer-of.h:35:28: error: field 'clkevt' has incomplete type > struct clock_event_device clkevt; > ^~~~~~ > In file included from include/linux/clk.h:16:0, > from drivers/clocksource/timer-of.c:18: > drivers/clocksource/timer-of.h: In function 'to_timer_of': > include/linux/kernel.h:854:48: error: initialization from incompatible pointer type [-Werror=incompatible-pointer-types] > const typeof( ((type *)0)->member ) *__mptr = (ptr); \ > ^ > drivers/clocksource/timer-of.h:44:9: note: in expansion of macro 'container_of' > return container_of(clkevt, struct timer_of, clkevt); > ^~~~~~~~~~~~ > drivers/clocksource/timer-of.c: In function 'timer_irq_init': > drivers/clocksource/timer-of.c:63:8: error: dereferencing pointer to incomplete type 'struct clock_event_device' > clkevt->irq = of_irq->irq; > ^~ > cc1: some warnings being treated as errors > > vim +/clkevt +35 drivers/clocksource/timer-of.h > > 32 > 33 struct timer_of { > 34 unsigned int flags; > > 35 struct clock_event_device clkevt; > 36 struct of_timer_base of_base; > 37 struct of_timer_irq of_irq; > 38 struct of_timer_clk of_clk; > 39 void *private_data; > 40 }; > 41 > > ---
Summary:
GENERIC_CLOCKEVENTS is not enabled. (ia64) COMPILE_TEST=y
# # Clock Source drivers # CONFIG_TIMER_OF=y CONFIG_CLKSRC_MMIO=y # CONFIG_CLKSRC_PISTACHIO is not set CONFIG_ARMV7M_SYSTICK=y # CONFIG_ATMEL_PIT is not set CONFIG_CLKSRC_ST_LPC=y
Both ARMV7M_SYSTICK and CLKSRC_ST_LPC select TIMER_OF (if OF, which is enabled) and select CLKSRC_MMIO. TIMER_OF depends on GENERIC_CLOCKEVENTS (=n), but 'select' does not care about that "depends on".
This build error only happens because COMPILE_TEST=y.
Any driver that does 'select TIMER_OF' should also depend on GENERIC_CLOCKEVENTS. The problem is that some drivers do 'select TIMER_OF if OF', so if OF is not enabled, then we don't need to depend on GENERIC_CLOCKEVENTS.
"O, what a tangled web we weave when first we practise to deceive!" --Walter Scott
Not that we are trying to deceive in this case -- it's just another Kconfig tangled web.
Arnd: any ideas?
thanks, -- ~Randy
| |