On 22.06.23 09:53, Simon Horman wrote: > On Thu, Jun 22, 2023 at 09:15:24AM +0200, Alexandra Winter wrote: >> >> >> On 21.06.23 23:37, Randy Dunlap wrote: >>> Require FDDI to be built-in if it is used. LCS needs FDDI to be >>> built-in to build without errors. >>> >>> Prevents these build errors: >>> s390-linux-ld: drivers/s390/net/lcs.o: in function `lcs_new_device': >>> drivers/s390/net/lcs.c:2150: undefined reference to `fddi_type_trans' >>> s390-linux-ld: drivers/s390/net/lcs.c:2151: undefined reference to `alloc_fddidev' >>> >>> This FDDI requirement effectively restores the previous condition >>> before the blamed patch, when #ifdef CONFIG_FDDI was used, without >>> testing for CONFIG_FDDI_MODULE. >>> >>> Fixes: 128272336120 ("s390/net: lcs: use IS_ENABLED() for kconfig detection") [...] > >> 2) I wonder whether >> >> depends on CCW && NETDEVICES && (ETHERNET || FDDI) >> + depends on FDDI || FDDI=n >> >> would do what we want here: >> When FDDI is a loadable module, LCS mustn't be built-in. >> >> I will do some experiments and let you know. > > It does seem to on my side. > But checking would be much appreciated. Here are my experiments: Current net-next: ----------------- if !IS_ENABLED(CONFIG_ETHERNET) && !IS_ENABLED(CONFIG_FDDI) drivers/s390/net/KConfig: config LCS def_tristate m depends on CCW && NETDEVICES && (ETHERNET || FDDI) .config: ETHERNET | FDDI | LCS choices | LCS | compile -------------------------------------------------------- n m m,n m success (failed before Randy's fix) y m y,m,n m success (failed before Randy's fix) y m y fails: undefined reference to `fddi_type_trans' Simon's proposal: ----------------- depends on CCW && NETDEVICES && (ETHERNET || FDDI) + depends on FDDI=y || FDDI=n ETHERNET | FDDI | LCS choices | LCS | compile -------------------------------------------------------- n m - y m - y m - y n y,m,n y success y n y,m,n m success y y y,m,n m success Alexandra's proposal: --------------------- depends on CCW && NETDEVICES && (ETHERNET || FDDI) + depends on FDDI || FDDI=n ETHERNET | FDDI | LCS choices | LCS | compile -------------------------------------------------------- n m m,n m success y m m,n m success y n y,m,n y success y n y,m,n m success y y y,m,n m success ----------------------------------------------------------- Seems that A[tristate] depends on B[tristate] means that A cannot be 'higher' than B. Meaning, if B=n -> A= must be n if B=m -> A can be m or n if B=y -> A can be y or m or n Although I did not find documentation confirming that. @Randy, do you want give a v2 a try with that? I guess then it is safe to delete from drivers/s390/net/lcs.c -#if !IS_ENABLED(CONFIG_ETHERNET) && !IS_ENABLED(CONFIG_FDDI) -#error Cannot compile lcs.c without some net devices switched on. -#endif