2021-10-25 12:16:57

by Naresh Kamboju

[permalink] [raw]
Subject: gpu: drm_fb_cma_helper.c:46: undefined reference to `drm_gem_fb_get_obj'

Regression found on arm gcc-11 built with multi_v5_defconfig
Following build warnings / errors reported on linux next 20211025.

metadata:
git_describe: next-20211025
git_repo: https://gitlab.com/Linaro/lkft/mirrors/next/linux-next
git_short_log: 9ae1fbdeabd3 (\"Add linux-next specific files for 20211025\")
target_arch: arm
toolchain: gcc-11
config: multi_v5_defconfig

build error :
--------------
arm-linux-gnueabihf-ld: drivers/gpu/drm/drm_fb_cma_helper.o: in
function `drm_fb_cma_get_gem_obj':
drivers/gpu/drm/drm_fb_cma_helper.c:46: undefined reference to
`drm_gem_fb_get_obj'
arm-linux-gnueabihf-ld: drivers/gpu/drm/drm_fb_cma_helper.c:46:
undefined reference to `drm_gem_fb_get_obj'
arm-linux-gnueabihf-ld: drivers/gpu/drm/drm_fb_cma_helper.c:46:
undefined reference to `drm_gem_fb_get_obj'
arm-linux-gnueabihf-ld: drivers/gpu/drm/drm_fb_cma_helper.o: in
function `drm_fb_cma_sync_non_coherent':
drivers/gpu/drm/drm_fb_cma_helper.c:133: undefined reference to
`drm_atomic_helper_damage_iter_init'
arm-linux-gnueabihf-ld: drivers/gpu/drm/drm_fb_cma_helper.c:135:
undefined reference to `drm_atomic_helper_damage_iter_next'
make[1]: *** [Makefile:1252: vmlinux] Error 1
make[1]: Target '__all' not remade because of errors.
make: *** [Makefile:226: __sub-make] Error 2

Reported-by: Linux Kernel Functional Testing <[email protected]>


build link:
-----------
https://builds.tuxbuild.com/1zzgFZBGjpQ5R0lawQFW9iJ39Hp/build.log

build config:
-------------
https://builds.tuxbuild.com/1zzgFZBGjpQ5R0lawQFW9iJ39Hp/config

# To install tuxmake on your system globally
# sudo pip3 install -U tuxmake
tuxmake --runtime podman --target-arch arm --toolchain gcc-11
--kconfig multi_v5_defconfig

--
Linaro LKFT
https://lkft.linaro.org


2021-10-25 21:50:04

by Naresh Kamboju

[permalink] [raw]
Subject: Re: gpu: drm_fb_cma_helper.c:46: undefined reference to `drm_gem_fb_get_obj'

On Mon, 25 Oct 2021 at 17:43, Naresh Kamboju <[email protected]> wrote:
>
> Regression found on arm gcc-11 built with multi_v5_defconfig
> Following build warnings / errors reported on linux next 20211025.
>
> metadata:
> git_describe: next-20211025
> git_repo: https://gitlab.com/Linaro/lkft/mirrors/next/linux-next
> git_short_log: 9ae1fbdeabd3 (\"Add linux-next specific files for 20211025\")
> target_arch: arm
> toolchain: gcc-11
> config: multi_v5_defconfig
>
> build error :
> --------------
> arm-linux-gnueabihf-ld: drivers/gpu/drm/drm_fb_cma_helper.o: in
> function `drm_fb_cma_get_gem_obj':
> drivers/gpu/drm/drm_fb_cma_helper.c:46: undefined reference to
> `drm_gem_fb_get_obj'
> arm-linux-gnueabihf-ld: drivers/gpu/drm/drm_fb_cma_helper.c:46:
> undefined reference to `drm_gem_fb_get_obj'
> arm-linux-gnueabihf-ld: drivers/gpu/drm/drm_fb_cma_helper.c:46:
> undefined reference to `drm_gem_fb_get_obj'
> arm-linux-gnueabihf-ld: drivers/gpu/drm/drm_fb_cma_helper.o: in
> function `drm_fb_cma_sync_non_coherent':
> drivers/gpu/drm/drm_fb_cma_helper.c:133: undefined reference to
> `drm_atomic_helper_damage_iter_init'
> arm-linux-gnueabihf-ld: drivers/gpu/drm/drm_fb_cma_helper.c:135:
> undefined reference to `drm_atomic_helper_damage_iter_next'
> make[1]: *** [Makefile:1252: vmlinux] Error 1
> make[1]: Target '__all' not remade because of errors.
> make: *** [Makefile:226: __sub-make] Error 2
>
> Reported-by: Linux Kernel Functional Testing <[email protected]>

The bisection script pointed to the first bad commit,

commit 4b2b5e142ff499a2bef2b8db0272bbda1088a3fe
drm: Move GEM memory managers into modules

> build link:
> -----------
> https://builds.tuxbuild.com/1zzgFZBGjpQ5R0lawQFW9iJ39Hp/build.log
>
> build config:
> -------------
> https://builds.tuxbuild.com/1zzgFZBGjpQ5R0lawQFW9iJ39Hp/config
>
> # To install tuxmake on your system globally
> # sudo pip3 install -U tuxmake
> tuxmake --runtime podman --target-arch arm --toolchain gcc-11
> --kconfig multi_v5_defconfig
>
> --
> Linaro LKFT
> https://lkft.linaro.org

- Naresh

2021-10-25 21:52:32

by Thomas Zimmermann

[permalink] [raw]
Subject: Re: gpu: drm_fb_cma_helper.c:46: undefined reference to `drm_gem_fb_get_obj'

Hi

Am 25.10.21 um 14:13 schrieb Naresh Kamboju:
> Regression found on arm gcc-11 built with multi_v5_defconfig
> Following build warnings / errors reported on linux next 20211025.
>
> metadata:
> git_describe: next-20211025
> git_repo: https://gitlab.com/Linaro/lkft/mirrors/next/linux-next
> git_short_log: 9ae1fbdeabd3 (\"Add linux-next specific files for 20211025\")
> target_arch: arm
> toolchain: gcc-11
> config: multi_v5_defconfig
>
> build error :
> --------------
> arm-linux-gnueabihf-ld: drivers/gpu/drm/drm_fb_cma_helper.o: in
> function `drm_fb_cma_get_gem_obj':
> drivers/gpu/drm/drm_fb_cma_helper.c:46: undefined reference to
> `drm_gem_fb_get_obj'
> arm-linux-gnueabihf-ld: drivers/gpu/drm/drm_fb_cma_helper.c:46:
> undefined reference to `drm_gem_fb_get_obj'
> arm-linux-gnueabihf-ld: drivers/gpu/drm/drm_fb_cma_helper.c:46:
> undefined reference to `drm_gem_fb_get_obj'
> arm-linux-gnueabihf-ld: drivers/gpu/drm/drm_fb_cma_helper.o: in
> function `drm_fb_cma_sync_non_coherent':
> drivers/gpu/drm/drm_fb_cma_helper.c:133: undefined reference to
> `drm_atomic_helper_damage_iter_init'
> arm-linux-gnueabihf-ld: drivers/gpu/drm/drm_fb_cma_helper.c:135:
> undefined reference to `drm_atomic_helper_damage_iter_next'
> make[1]: *** [Makefile:1252: vmlinux] Error 1
> make[1]: Target '__all' not remade because of errors.
> make: *** [Makefile:226: __sub-make] Error 2
>
> Reported-by: Linux Kernel Functional Testing <[email protected]>

That's probably from moving some of the functions into separate modules.
Will be fixed soon.

Best regards
Thomas

>
>
> build link:
> -----------
> https://builds.tuxbuild.com/1zzgFZBGjpQ5R0lawQFW9iJ39Hp/build.log
>
> build config:
> -------------
> https://builds.tuxbuild.com/1zzgFZBGjpQ5R0lawQFW9iJ39Hp/config
>
> # To install tuxmake on your system globally
> # sudo pip3 install -U tuxmake
> tuxmake --runtime podman --target-arch arm --toolchain gcc-11
> --kconfig multi_v5_defconfig
>
> --
> Linaro LKFT
> https://lkft.linaro.org
>

--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Maxfeldstr. 5, 90409 Nürnberg, Germany
(HRB 36809, AG Nürnberg)
Geschäftsführer: Felix Imendörffer


Attachments:
OpenPGP_signature (855.00 B)
OpenPGP digital signature

2021-10-27 04:38:38

by Thomas Zimmermann

[permalink] [raw]
Subject: Re: gpu: drm_fb_cma_helper.c:46: undefined reference to `drm_gem_fb_get_obj'

Hi

Am 25.10.21 um 16:01 schrieb Naresh Kamboju:
> On Mon, 25 Oct 2021 at 17:43, Naresh Kamboju <[email protected]> wrote:
>>
>> Regression found on arm gcc-11 built with multi_v5_defconfig
>> Following build warnings / errors reported on linux next 20211025.
>>
>> metadata:
>> git_describe: next-20211025
>> git_repo: https://gitlab.com/Linaro/lkft/mirrors/next/linux-next
>> git_short_log: 9ae1fbdeabd3 (\"Add linux-next specific files for 20211025\")
>> target_arch: arm
>> toolchain: gcc-11
>> config: multi_v5_defconfig
>>
>> build error :
>> --------------
>> arm-linux-gnueabihf-ld: drivers/gpu/drm/drm_fb_cma_helper.o: in
>> function `drm_fb_cma_get_gem_obj':
>> drivers/gpu/drm/drm_fb_cma_helper.c:46: undefined reference to
>> `drm_gem_fb_get_obj'
>> arm-linux-gnueabihf-ld: drivers/gpu/drm/drm_fb_cma_helper.c:46:
>> undefined reference to `drm_gem_fb_get_obj'
>> arm-linux-gnueabihf-ld: drivers/gpu/drm/drm_fb_cma_helper.c:46:
>> undefined reference to `drm_gem_fb_get_obj'
>> arm-linux-gnueabihf-ld: drivers/gpu/drm/drm_fb_cma_helper.o: in
>> function `drm_fb_cma_sync_non_coherent':
>> drivers/gpu/drm/drm_fb_cma_helper.c:133: undefined reference to
>> `drm_atomic_helper_damage_iter_init'
>> arm-linux-gnueabihf-ld: drivers/gpu/drm/drm_fb_cma_helper.c:135:
>> undefined reference to `drm_atomic_helper_damage_iter_next'
>> make[1]: *** [Makefile:1252: vmlinux] Error 1
>> make[1]: Target '__all' not remade because of errors.
>> make: *** [Makefile:226: __sub-make] Error 2
>>
>> Reported-by: Linux Kernel Functional Testing <[email protected]>
>
> The bisection script pointed to the first bad commit,
>
> commit 4b2b5e142ff499a2bef2b8db0272bbda1088a3fe
> drm: Move GEM memory managers into modules

Could you please try the patch at [1]? It fixes the problem for me.

Best regards
Thomas

[1] https://patchwork.freedesktop.org/patch/461426/

>
>> build link:
>> -----------
>> https://builds.tuxbuild.com/1zzgFZBGjpQ5R0lawQFW9iJ39Hp/build.log
>>
>> build config:
>> -------------
>> https://builds.tuxbuild.com/1zzgFZBGjpQ5R0lawQFW9iJ39Hp/config
>>
>> # To install tuxmake on your system globally
>> # sudo pip3 install -U tuxmake
>> tuxmake --runtime podman --target-arch arm --toolchain gcc-11
>> --kconfig multi_v5_defconfig
>>
>> --
>> Linaro LKFT
>> https://lkft.linaro.org
>
> - Naresh
>

--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Maxfeldstr. 5, 90409 Nürnberg, Germany
(HRB 36809, AG Nürnberg)
Geschäftsführer: Felix Imendörffer


Attachments:
OpenPGP_signature (855.00 B)
OpenPGP digital signature

2021-10-27 07:03:18

by Thomas Zimmermann

[permalink] [raw]
Subject: Re: gpu: drm_fb_cma_helper.c:46: undefined reference to `drm_gem_fb_get_obj'

Hi

Am 25.10.21 um 14:13 schrieb Naresh Kamboju:
> Regression found on arm gcc-11 built with multi_v5_defconfig
> Following build warnings / errors reported on linux next 20211025.
>
> metadata:
> git_describe: next-20211025
> git_repo: https://gitlab.com/Linaro/lkft/mirrors/next/linux-next
> git_short_log: 9ae1fbdeabd3 (\"Add linux-next specific files for 20211025\")
> target_arch: arm
> toolchain: gcc-11
> config: multi_v5_defconfig
>
> build error :
> --------------
> arm-linux-gnueabihf-ld: drivers/gpu/drm/drm_fb_cma_helper.o: in
> function `drm_fb_cma_get_gem_obj':
> drivers/gpu/drm/drm_fb_cma_helper.c:46: undefined reference to
> `drm_gem_fb_get_obj'
> arm-linux-gnueabihf-ld: drivers/gpu/drm/drm_fb_cma_helper.c:46:
> undefined reference to `drm_gem_fb_get_obj'
> arm-linux-gnueabihf-ld: drivers/gpu/drm/drm_fb_cma_helper.c:46:
> undefined reference to `drm_gem_fb_get_obj'
> arm-linux-gnueabihf-ld: drivers/gpu/drm/drm_fb_cma_helper.o: in
> function `drm_fb_cma_sync_non_coherent':
> drivers/gpu/drm/drm_fb_cma_helper.c:133: undefined reference to
> `drm_atomic_helper_damage_iter_init'
> arm-linux-gnueabihf-ld: drivers/gpu/drm/drm_fb_cma_helper.c:135:
> undefined reference to `drm_atomic_helper_damage_iter_next'
> make[1]: *** [Makefile:1252: vmlinux] Error 1
> make[1]: Target '__all' not remade because of errors.
> make: *** [Makefile:226: __sub-make] Error 2
>
> Reported-by: Linux Kernel Functional Testing <[email protected]>
>
>
> build link:
> -----------
> https://builds.tuxbuild.com/1zzgFZBGjpQ5R0lawQFW9iJ39Hp/build.log
>
> build config:
> -------------
> https://builds.tuxbuild.com/1zzgFZBGjpQ5R0lawQFW9iJ39Hp/config

Looking at this config, there is:

CONFIG_DRM=y
# CONFIG_DRM_DP_AUX_CHARDEV is not set
# CONFIG_DRM_DEBUG_MM is not set
# CONFIG_DRM_DEBUG_SELFTEST is not set
CONFIG_DRM_KMS_HELPER=m
# CONFIG_DRM_LOAD_EDID_FIRMWARE is not set
# CONFIG_DRM_DP_CEC is not set
CONFIG_DRM_GEM_CMA_HELPER=y
CONFIG_DRM_KMS_CMA_HELPER=y

GEM_CMA_HELPER depends on KMS_HELPER, but the latter is a module. That's
probably the cause of the problem. Is it intentionally set this way?

Best regards
Thomas

>
> # To install tuxmake on your system globally
> # sudo pip3 install -U tuxmake
> tuxmake --runtime podman --target-arch arm --toolchain gcc-11
> --kconfig multi_v5_defconfig
>
> --
> Linaro LKFT
> https://lkft.linaro.org
>

--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Maxfeldstr. 5, 90409 Nürnberg, Germany
(HRB 36809, AG Nürnberg)
Geschäftsführer: Felix Imendörffer


Attachments:
OpenPGP_signature (855.00 B)
OpenPGP digital signature

2021-10-27 13:55:32

by Randy Dunlap

[permalink] [raw]
Subject: Re: gpu: drm_fb_cma_helper.c:46: undefined reference to `drm_gem_fb_get_obj'

On 10/26/21 11:21 AM, Thomas Zimmermann wrote:
> Hi
>
> Am 25.10.21 um 14:13 schrieb Naresh Kamboju:
>> Regression found on arm gcc-11 built with multi_v5_defconfig
>> Following build warnings / errors reported on linux next 20211025.
>>
>> metadata:
>>      git_describe: next-20211025
>>      git_repo: https://gitlab.com/Linaro/lkft/mirrors/next/linux-next
>>      git_short_log: 9ae1fbdeabd3 (\"Add linux-next specific files for 20211025\")
>>      target_arch: arm
>>      toolchain: gcc-11
>>      config: multi_v5_defconfig
>>
>> build error :
>> --------------
>> arm-linux-gnueabihf-ld: drivers/gpu/drm/drm_fb_cma_helper.o: in
>> function `drm_fb_cma_get_gem_obj':
>> drivers/gpu/drm/drm_fb_cma_helper.c:46: undefined reference to
>> `drm_gem_fb_get_obj'
>> arm-linux-gnueabihf-ld: drivers/gpu/drm/drm_fb_cma_helper.c:46:
>> undefined reference to `drm_gem_fb_get_obj'
>> arm-linux-gnueabihf-ld: drivers/gpu/drm/drm_fb_cma_helper.c:46:
>> undefined reference to `drm_gem_fb_get_obj'
>> arm-linux-gnueabihf-ld: drivers/gpu/drm/drm_fb_cma_helper.o: in
>> function `drm_fb_cma_sync_non_coherent':
>> drivers/gpu/drm/drm_fb_cma_helper.c:133: undefined reference to
>> `drm_atomic_helper_damage_iter_init'
>> arm-linux-gnueabihf-ld: drivers/gpu/drm/drm_fb_cma_helper.c:135:
>> undefined reference to `drm_atomic_helper_damage_iter_next'
>> make[1]: *** [Makefile:1252: vmlinux] Error 1
>> make[1]: Target '__all' not remade because of errors.
>> make: *** [Makefile:226: __sub-make] Error 2
>>
>> Reported-by: Linux Kernel Functional Testing <[email protected]>
>>
>>
>> build link:
>> -----------
>> https://builds.tuxbuild.com/1zzgFZBGjpQ5R0lawQFW9iJ39Hp/build.log
>>
>> build config:
>> -------------
>> https://builds.tuxbuild.com/1zzgFZBGjpQ5R0lawQFW9iJ39Hp/config
>
> Looking at this config, there is:
>
> CONFIG_DRM=y
> # CONFIG_DRM_DP_AUX_CHARDEV is not set
> # CONFIG_DRM_DEBUG_MM is not set
> # CONFIG_DRM_DEBUG_SELFTEST is not set
> CONFIG_DRM_KMS_HELPER=m
> # CONFIG_DRM_LOAD_EDID_FIRMWARE is not set
> # CONFIG_DRM_DP_CEC is not set
> CONFIG_DRM_GEM_CMA_HELPER=y
> CONFIG_DRM_KMS_CMA_HELPER=y
>
> GEM_CMA_HELPER depends on KMS_HELPER, but the latter is a module. That's probably the cause of the problem. Is it intentionally set this way?
>

The only drivers that select DRM_KMS_HELPER are both =m, so that's how
DRM_KMS_HELPER is set also.

Symbol: DRM_KMS_HELPER [=m]
Type : tristate
Defined at drivers/gpu/drm/Kconfig:82
Depends on: HAS_IOMEM [=y] && DRM [=y]
Selected by [m]:
- DRM_ATMEL_HLCDC [=m] && HAS_IOMEM [=y] && DRM [=y] && OF [=y] && COMMON_CLK [=y] && MFD_ATMEL_HLCDC [=y] && ARM [=y]
- DRM_ASPEED_GFX [=m] && HAS_IOMEM [=y] && DRM [=y] && OF [=y] && (COMPILE_TEST [=n] || ARCH_ASPEED [=y]) && MMU [=y]


I did the ARM cross-build and also see the linker error.
I didn't understand why -- and still don't, but here is a little
speculation:

In the past (e.g. 10 years ago), we have to move some .o files
in lib/ from lib-y to obj-y so that they would always be included
in the final object file and not cause their user/caller object
files to suffer from undefined references.
These happened because unused functions(?) in lib-y files are
stripped out of the final object files.
The same thing could be happening here (still just guessing).

Does that help any? I dunno.

Adding Arnd to Cc: to see if he has any ideas...

>>
>> # To install tuxmake on your system globally
>> # sudo pip3 install -U tuxmake
>> tuxmake --runtime podman --target-arch arm --toolchain gcc-11
>> --kconfig multi_v5_defconfig
>>
>> --
>> Linaro LKFT
>> https://lkft.linaro.org



--
~Randy

2021-10-27 16:42:44

by Naresh Kamboju

[permalink] [raw]
Subject: Re: gpu: drm_fb_cma_helper.c:46: undefined reference to `drm_gem_fb_get_obj'

Hi Thomas,

I have tested the fix patch [1] and it works fine for me.

> Could you please try the patch at [1]? It fixes the problem for me.

???? Pass: 6d61a7c3bc2a ("arm: multi_v5_defconfig build fix")
arm (multi_v5_defconfig) with gcc-11
@ https://builds.tuxbuild.com/204SnLe1DFWQ4iAHpwAMiyUcpsL/


> Best regards
> Thomas
>
> [1] https://patchwork.freedesktop.org/patch/461426/


Tested-by: Naresh Kamboju <[email protected]>

- Naresh

2021-10-27 18:16:41

by Arnd Bergmann

[permalink] [raw]
Subject: Re: gpu: drm_fb_cma_helper.c:46: undefined reference to `drm_gem_fb_get_obj'

On Wed, Oct 27, 2021 at 2:58 AM Randy Dunlap <[email protected]> wrote:

> >
> > Looking at this config, there is:
> >
> > CONFIG_DRM=y
> > # CONFIG_DRM_DP_AUX_CHARDEV is not set
> > # CONFIG_DRM_DEBUG_MM is not set
> > # CONFIG_DRM_DEBUG_SELFTEST is not set
> > CONFIG_DRM_KMS_HELPER=m
> > # CONFIG_DRM_LOAD_EDID_FIRMWARE is not set
> > # CONFIG_DRM_DP_CEC is not set
> > CONFIG_DRM_GEM_CMA_HELPER=y
> > CONFIG_DRM_KMS_CMA_HELPER=y
> >
> > GEM_CMA_HELPER depends on KMS_HELPER, but the latter is a module. That's probably the cause of the problem. Is it intentionally set this way?
> >
>
> The only drivers that select DRM_KMS_HELPER are both =m, so that's how
> DRM_KMS_HELPER is set also.
>
> Symbol: DRM_KMS_HELPER [=m]
> Type : tristate
> Defined at drivers/gpu/drm/Kconfig:82
> Depends on: HAS_IOMEM [=y] && DRM [=y]
> Selected by [m]:
> - DRM_ATMEL_HLCDC [=m] && HAS_IOMEM [=y] && DRM [=y] && OF [=y] && COMMON_CLK [=y] && MFD_ATMEL_HLCDC [=y] && ARM [=y]
> - DRM_ASPEED_GFX [=m] && HAS_IOMEM [=y] && DRM [=y] && OF [=y] && (COMPILE_TEST [=n] || ARCH_ASPEED [=y]) && MMU [=y]
>
>
> I did the ARM cross-build and also see the linker error.
> I didn't understand why -- and still don't, but here is a little
> speculation:
>
> In the past (e.g. 10 years ago), we have to move some .o files
> in lib/ from lib-y to obj-y so that they would always be included
> in the final object file and not cause their user/caller object
> files to suffer from undefined references.
> These happened because unused functions(?) in lib-y files are
> stripped out of the final object files.
> The same thing could be happening here (still just guessing).
>
> Does that help any? I dunno.
>
> Adding Arnd to Cc: to see if he has any ideas...

From all I can tell, the problem is that DRM_KMS_CMA_HELPER is a 'bool'
symbol, so if it gets selected by a '=m' driver, it turns into '=y', which
then selects DRM_GEM_CMA_HELPER=y, but that one cannot link
against DRM_KMS_HELPER=m code.

This trivial change makes it all build:

diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
index c08860db2520..699f434ce813 100644
--- a/drivers/gpu/drm/Kconfig
+++ b/drivers/gpu/drm/Kconfig
@@ -218,7 +218,7 @@ config DRM_GEM_CMA_HELPER
Choose this if you need the GEM CMA helper functions

config DRM_KMS_CMA_HELPER
- bool
+ tristate
depends on DRM
select DRM_GEM_CMA_HELPER
help

but this needs some more testing to make sure it doesn't add
any other regressions.

Interestingly, I never hit the problem in randconfig testing since
there is always some '=y' driver that selects DRM_KMS_HELPER.

Arnd

2021-10-27 18:30:58

by Randy Dunlap

[permalink] [raw]
Subject: Re: gpu: drm_fb_cma_helper.c:46: undefined reference to `drm_gem_fb_get_obj'

On 10/26/21 11:19 PM, Arnd Bergmann wrote:
> On Wed, Oct 27, 2021 at 2:58 AM Randy Dunlap <[email protected]> wrote:
>
>>>
>>> Looking at this config, there is:
>>>
>>> CONFIG_DRM=y
>>> # CONFIG_DRM_DP_AUX_CHARDEV is not set
>>> # CONFIG_DRM_DEBUG_MM is not set
>>> # CONFIG_DRM_DEBUG_SELFTEST is not set
>>> CONFIG_DRM_KMS_HELPER=m
>>> # CONFIG_DRM_LOAD_EDID_FIRMWARE is not set
>>> # CONFIG_DRM_DP_CEC is not set
>>> CONFIG_DRM_GEM_CMA_HELPER=y
>>> CONFIG_DRM_KMS_CMA_HELPER=y
>>>
>>> GEM_CMA_HELPER depends on KMS_HELPER, but the latter is a module. That's probably the cause of the problem. Is it intentionally set this way?
>>>
>>
>> The only drivers that select DRM_KMS_HELPER are both =m, so that's how
>> DRM_KMS_HELPER is set also.
>>
>> Symbol: DRM_KMS_HELPER [=m]
>> Type : tristate
>> Defined at drivers/gpu/drm/Kconfig:82
>> Depends on: HAS_IOMEM [=y] && DRM [=y]
>> Selected by [m]:
>> - DRM_ATMEL_HLCDC [=m] && HAS_IOMEM [=y] && DRM [=y] && OF [=y] && COMMON_CLK [=y] && MFD_ATMEL_HLCDC [=y] && ARM [=y]
>> - DRM_ASPEED_GFX [=m] && HAS_IOMEM [=y] && DRM [=y] && OF [=y] && (COMPILE_TEST [=n] || ARCH_ASPEED [=y]) && MMU [=y]
>>
>>
>> I did the ARM cross-build and also see the linker error.
>> I didn't understand why -- and still don't, but here is a little
>> speculation:
>>
>> In the past (e.g. 10 years ago), we have to move some .o files
>> in lib/ from lib-y to obj-y so that they would always be included
>> in the final object file and not cause their user/caller object
>> files to suffer from undefined references.
>> These happened because unused functions(?) in lib-y files are
>> stripped out of the final object files.
>> The same thing could be happening here (still just guessing).
>>
>> Does that help any? I dunno.
>>
>> Adding Arnd to Cc: to see if he has any ideas...
>
> From all I can tell, the problem is that DRM_KMS_CMA_HELPER is a 'bool'
> symbol, so if it gets selected by a '=m' driver, it turns into '=y', which
> then selects DRM_GEM_CMA_HELPER=y, but that one cannot link
> against DRM_KMS_HELPER=m code.
>
> This trivial change makes it all build:
>
> diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
> index c08860db2520..699f434ce813 100644
> --- a/drivers/gpu/drm/Kconfig
> +++ b/drivers/gpu/drm/Kconfig
> @@ -218,7 +218,7 @@ config DRM_GEM_CMA_HELPER
> Choose this if you need the GEM CMA helper functions
>
> config DRM_KMS_CMA_HELPER
> - bool
> + tristate
> depends on DRM
> select DRM_GEM_CMA_HELPER
> help
>
> but this needs some more testing to make sure it doesn't add
> any other regressions.
>
> Interestingly, I never hit the problem in randconfig testing since
> there is always some '=y' driver that selects DRM_KMS_HELPER.
>
> Arnd
>

Hi Arnd,
Thomas had posted a patch that also fixes the problem.
Somehow I missed seeing that the first time around.

Thanks.
--
~Randy

2021-10-27 18:31:27

by Arnd Bergmann

[permalink] [raw]
Subject: Re: gpu: drm_fb_cma_helper.c:46: undefined reference to `drm_gem_fb_get_obj'

On Wed, Oct 27, 2021 at 8:26 AM Randy Dunlap <[email protected]> wrote:
> On 10/26/21 11:19 PM, Arnd Bergmann wrote:
> > On Wed, Oct 27, 2021 at 2:58 AM Randy Dunlap <[email protected]> wrote:

> > This trivial change makes it all build:
> >
> > diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
> > index c08860db2520..699f434ce813 100644
> > --- a/drivers/gpu/drm/Kconfig
> > +++ b/drivers/gpu/drm/Kconfig
> > @@ -218,7 +218,7 @@ config DRM_GEM_CMA_HELPER
> > Choose this if you need the GEM CMA helper functions
> >
> > config

> > - bool
> > + tristate
> > depends on DRM
> > select DRM_GEM_CMA_HELPER
> > help
> >
> > but this needs some more testing to make sure it doesn't add
> > any other regressions.
> >
> > Interestingly, I never hit the problem in randconfig testing since
> > there is always some '=y' driver that selects DRM_KMS_HELPER.
>
> Thomas had posted a patch that also fixes the problem.
> Somehow I missed seeing that the first time around.

Ah right, I missed that as well. That patch seems reasonable
to me, but I think we may want both of them in this case, as
it does not address DRM_GEM_CMA_HELPER being set to =y
when it is only used from modules.

Arnd

2021-10-27 21:42:31

by Thomas Zimmermann

[permalink] [raw]
Subject: Re: gpu: drm_fb_cma_helper.c:46: undefined reference to `drm_gem_fb_get_obj'

Hi!

Am 27.10.21 um 08:50 schrieb Arnd Bergmann:
> On Wed, Oct 27, 2021 at 8:26 AM Randy Dunlap <[email protected]> wrote:
>> On 10/26/21 11:19 PM, Arnd Bergmann wrote:
>>> On Wed, Oct 27, 2021 at 2:58 AM Randy Dunlap <[email protected]> wrote:
>
>>> This trivial change makes it all build:
>>>
>>> diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
>>> index c08860db2520..699f434ce813 100644
>>> --- a/drivers/gpu/drm/Kconfig
>>> +++ b/drivers/gpu/drm/Kconfig
>>> @@ -218,7 +218,7 @@ config DRM_GEM_CMA_HELPER
>>> Choose this if you need the GEM CMA helper functions
>>>
>>> config
>
>>> - bool
>>> + tristate
>>> depends on DRM
>>> select DRM_GEM_CMA_HELPER
>>> help
>>>
>>> but this needs some more testing to make sure it doesn't add
>>> any other regressions.
>>>
>>> Interestingly, I never hit the problem in randconfig testing since
>>> there is always some '=y' driver that selects DRM_KMS_HELPER.
>>
>> Thomas had posted a patch that also fixes the problem.
>> Somehow I missed seeing that the first time around.
>
> Ah right, I missed that as well. That patch seems reasonable
> to me, but I think we may want both of them in this case, as
> it does not address DRM_GEM_CMA_HELPER being set to =y
> when it is only used from modules.

Yes, the bool state was indeed the problem. The patch I posted resolves
the issue for now. For later, I have a patchset that improves CMA helper
usage a bit and resolves the Kconfig problem.

Best regards
Thomas

>
> Arnd
>

--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Maxfeldstr. 5, 90409 Nürnberg, Germany
(HRB 36809, AG Nürnberg)
Geschäftsführer: Felix Imendörffer


Attachments:
OpenPGP_signature (855.00 B)
OpenPGP digital signature