Thread (39 messages) 39 messages, 4 authors, 2020-07-01

RE: [PATCH V3 02/10] init.h: Fix the __setup_param() macro for module build

From: Anson Huang <hidden>
Date: 2020-07-01 05:14:59
Also in: linux-clk, lkml

Hi, Arnd

Subject: Re: [PATCH V3 02/10] init.h: Fix the __setup_param() macro for
module build

On Mon, Jun 29, 2020 at 1:40 PM Anson Huang [off-list ref]
wrote:
quoted
quoted
Subject: Re: [PATCH V3 02/10] init.h: Fix the __setup_param() macro
for module build

On Mon, Jun 29, 2020 at 8:06 AM Anson Huang [off-list ref]
wrote:
quoted
Keep __setup_param() to use same parameters for both built in and
built as module, it can make the drivers which call it easier when
the drivers can be built in or built as module.

Signed-off-by: Anson Huang <redacted>
I wonder if we should instead drop the __setup() and __setup_param()
definitions from the #else block here. This was clearly not used
anywhere, and it sounds like any possible user is broken and should
be changed to not use
__setup() anyway.

It makes sense to drop the __setup() and __serup_param() in the #else
block, just use one definition for all cases, if no one objects, I will remove
them in next patch series.

Ok, sounds good. Note that there may be users of the plain __setup() that just
get turned into nops right now. Usually those are already enclosed in "#ifndef
MODULE", but if they are not, then removing the definition would cause a
build error.

Have a look if you can find such instances, and either change the patch to add
the missing "#ifndef MODULE" checks, or just drop the __setup_param() and
leave the __setup() if it gets too complicated.
Looks like the __setup_param() defined in "#ifndef MODULE" can NOT be used for 
MODULE build at all, so sharing same implementation is NOT available, so if it is NOT
that critical, I plan to keep the #else block in this patch, let me know if you have further
concern or any other suggestion, below is the build error reported for module build using
__setup_param() implementation for built in.

thanks,
Anson


In file included from ./arch/arm64/include/asm/alternative.h:12,
                 from ./arch/arm64/include/asm/lse.h:15,
                 from ./arch/arm64/include/asm/cmpxchg.h:14,
                 from ./arch/arm64/include/asm/atomic.h:16,
                 from ./include/linux/atomic.h:7,
                 from ./include/asm-generic/bitops/atomic.h:5,
                 from ./arch/arm64/include/asm/bitops.h:26,
                 from ./include/linux/bitops.h:29,
                 from ./include/linux/kernel.h:12,
                 from ./include/linux/clk.h:13,
                 from drivers/clk/imx/clk.c:2:
./include/linux/init.h:177:16: error: variable ‘__setup_imx_keep_uart_earlycon’ has initializer but incomplete type
  177 |  static struct obs_kernel_param __setup_##unique_id  \
      |                ^~~~~~~~~~~~~~~~
drivers/clk/imx/clk.c:157:1: note: in expansion of macro ‘__setup_param’
  157 | __setup_param("earlycon", imx_keep_uart_earlycon,
      | ^~~~~~~~~~~~~
./include/linux/init.h:180:7: warning: excess elements in struct initializer
  180 |   = { __setup_str_##unique_id, fn, early }
      |       ^~~~~~~~~~~~
drivers/clk/imx/clk.c:157:1: note: in expansion of macro ‘__setup_param’
  157 | __setup_param("earlycon", imx_keep_uart_earlycon,
      | ^~~~~~~~~~~~~
./include/linux/init.h:180:7: note: (near initialization for ‘__setup_imx_keep_uart_earlycon’)
  180 |   = { __setup_str_##unique_id, fn, early }
      |       ^~~~~~~~~~~~
drivers/clk/imx/clk.c:157:1: note: in expansion of macro ‘__setup_param’
  157 | __setup_param("earlycon", imx_keep_uart_earlycon,
      | ^~~~~~~~~~~~~
drivers/clk/imx/clk.c:158:8: warning: excess elements in struct initializer
  158 |        imx_keep_uart_clocks_param, 0);
      |        ^~~~~~~~~~~~~~~~~~~~~~~~~~
./include/linux/init.h:180:32: note: in definition of macro ‘__setup_param’
  180 |   = { __setup_str_##unique_id, fn, early }
      |                                ^~
drivers/clk/imx/clk.c:158:8: note: (near initialization for ‘__setup_imx_keep_uart_earlycon’)
  158 |        imx_keep_uart_clocks_param, 0);
      |        ^~~~~~~~~~~~~~~~~~~~~~~~~~
./include/linux/init.h:180:32: note: in definition of macro ‘__setup_param’
  180 |   = { __setup_str_##unique_id, fn, early }
      |                                ^~
drivers/clk/imx/clk.c:158:36: warning: excess elements in struct initializer
  158 |        imx_keep_uart_clocks_param, 0);
      |                                    ^
./include/linux/init.h:180:36: note: in definition of macro ‘__setup_param’
  180 |   = { __setup_str_##unique_id, fn, early }
      |                                    ^~~~~
drivers/clk/imx/clk.c:158:36: note: (near initialization for ‘__setup_imx_keep_uart_earlycon’)
  158 |        imx_keep_uart_clocks_param, 0);
      |                                    ^
./include/linux/init.h:180:36: note: in definition of macro ‘__setup_param’
  180 |   = { __setup_str_##unique_id, fn, early }
      |                                    ^~~~~
./include/linux/init.h:177:16: error: variable ‘__setup_imx_keep_uart_earlyprintk’ has initializer but incomplete type
  177 |  static struct obs_kernel_param __setup_##unique_id  \
      |                ^~~~~~~~~~~~~~~~
drivers/clk/imx/clk.c:159:1: note: in expansion of macro ‘__setup_param’
  159 | __setup_param("earlyprintk", imx_keep_uart_earlyprintk,
      | ^~~~~~~~~~~~~
./include/linux/init.h:180:7: warning: excess elements in struct initializer
  180 |   = { __setup_str_##unique_id, fn, early }
      |       ^~~~~~~~~~~~
drivers/clk/imx/clk.c:159:1: note: in expansion of macro ‘__setup_param’
  159 | __setup_param("earlyprintk", imx_keep_uart_earlyprintk,
      | ^~~~~~~~~~~~~
./include/linux/init.h:180:7: note: (near initialization for ‘__setup_imx_keep_uart_earlyprintk’)
  180 |   = { __setup_str_##unique_id, fn, early }
      |       ^~~~~~~~~~~~
drivers/clk/imx/clk.c:159:1: note: in expansion of macro ‘__setup_param’
  159 | __setup_param("earlyprintk", imx_keep_uart_earlyprintk,
      | ^~~~~~~~~~~~~
drivers/clk/imx/clk.c:160:8: warning: excess elements in struct initializer
  160 |        imx_keep_uart_clocks_param, 0);
      |        ^~~~~~~~~~~~~~~~~~~~~~~~~~
./include/linux/init.h:180:32: note: in definition of macro ‘__setup_param’
  180 |   = { __setup_str_##unique_id, fn, early }
      |                                ^~
drivers/clk/imx/clk.c:160:8: note: (near initialization for ‘__setup_imx_keep_uart_earlyprintk’)
  160 |        imx_keep_uart_clocks_param, 0);
      |        ^~~~~~~~~~~~~~~~~~~~~~~~~~
./include/linux/init.h:180:32: note: in definition of macro ‘__setup_param’
  180 |   = { __setup_str_##unique_id, fn, early }
      |                                ^~
drivers/clk/imx/clk.c:160:36: warning: excess elements in struct initializer
  160 |        imx_keep_uart_clocks_param, 0);
      |                                    ^
./include/linux/init.h:180:36: note: in definition of macro ‘__setup_param’
  180 |   = { __setup_str_##unique_id, fn, early }
      |                                    ^~~~~
drivers/clk/imx/clk.c:160:36: note: (near initialization for ‘__setup_imx_keep_uart_earlyprintk’)
  160 |        imx_keep_uart_clocks_param, 0);
      |                                    ^
./include/linux/init.h:180:36: note: in definition of macro ‘__setup_param’
  180 |   = { __setup_str_##unique_id, fn, early }
      |                                    ^~~~~
./include/linux/init.h:177:33: error: storage size of ‘__setup_imx_keep_uart_earlycon’ isn’t known
  177 |  static struct obs_kernel_param __setup_##unique_id  \
      |                                 ^~~~~~~~
drivers/clk/imx/clk.c:157:1: note: in expansion of macro ‘__setup_param’
  157 | __setup_param("earlycon", imx_keep_uart_earlycon,
      | ^~~~~~~~~~~~~
./include/linux/init.h:177:33: error: storage size of ‘__setup_imx_keep_uart_earlyprintk’ isn’t known
  177 |  static struct obs_kernel_param __setup_##unique_id  \
      |                                 ^~~~~~~~
drivers/clk/imx/clk.c:159:1: note: in expansion of macro ‘__setup_param’
  159 | __setup_param("earlyprintk", imx_keep_uart_earlyprintk,
      | ^~~~~~~~~~~~~
scripts/Makefile.build:280: recipe for target 'drivers/clk/imx/clk.o' failed

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help