RE: [REGRESSION] drm/amd/display: amdgpu_dm_plane_test.ko fails to build due to modpost "too long symbol"
From: Deucher, Alexander
Date: Fri Jul 10 2026 - 16:03:13 EST
Public
> -----Original Message-----
> From: Christophe Leroy (CS GROUP) <chleroy@xxxxxxxxxx>
> Sent: Friday, July 10, 2026 5:44 AM
> To: Venkat Rao Bagalkote <venkat88@xxxxxxxxxxxxx>; Randy Dunlap
> <rdunlap@xxxxxxxxxxxxx>; amd-gfx@xxxxxxxxxxxxxxxxxxxxx; Lakha,
> Bhawanpreet <Bhawanpreet.Lakha@xxxxxxx>
> Cc: dri-devel@xxxxxxxxxxxxxxxxxxxxx; Deucher, Alexander
> <Alexander.Deucher@xxxxxxx>; Zhang, George <George.Zhang@xxxxxxx>;
> LKML <linux-kernel@xxxxxxxxxxxxxxx>; Madhavan Srinivasan
> <maddy@xxxxxxxxxxxxx>; Koenig, Christian <Christian.Koenig@xxxxxxx>;
> Wentland, Harry <Harry.Wentland@xxxxxxx>; Li, Sun peng (Leo)
> <Sunpeng.Li@xxxxxxx>; broonie@xxxxxxxxxx; Linux Next Mailing List <linux-
> next@xxxxxxxxxxxxxxx>; Hung, Alex <Alex.Hung@xxxxxxx>
> Subject: Re: [REGRESSION] drm/amd/display: amdgpu_dm_plane_test.ko fails
> to build due to modpost "too long symbol"
>
>
>
> Le 10/07/2026 à 10:52, Venkat Rao Bagalkote a écrit :
> >
> > On 10/07/26 1:31 pm, Venkat Rao Bagalkote wrote:
> >>
> >> On 10/07/26 10:45 am, Venkat Rao Bagalkote wrote:
> >>>
> >>> On 09/07/26 11:53 pm, Randy Dunlap wrote:
> >>>>
> >>>> On 7/7/26 10:05 PM, Venkat Rao Bagalkote wrote:
> >>>>> Greetings!!!
> >>>>>
> >>>>> linux-next is failing to build for me with:
> >>>>>
> >>>>> ERROR: modpost: too long symbol
>
> Comes from here I guess:
>
> /**
> * Record CRCs for unresolved symbols
> **/
> static void add_versions(struct buffer *b, struct module *mod) {
> struct symbol *s;
>
> if (!basic_modversions)
> return;
>
> buf_printf(b, "\n");
> buf_printf(b, "static const struct modversion_info ____versions[]\n");
> buf_printf(b, "__used __section(\"__versions\") = {\n");
>
> list_for_each_entry(s, &mod->unresolved_symbols, list) {
> if (!s->module)
> continue;
> if (!s->crc_valid) {
> warn("\"%s\" [%s.ko] has no CRC!\n",
> s->name, mod->name);
> continue;
> }
> if (strlen(s->name) >= MODULE_NAME_LEN) {
> if (extended_modversions) {
> /* this symbol will only be in the extended info
> */
> continue;
> } else {
> error("too long symbol \"%s\" [%s.ko]\n",
> s->name, mod->name);
> break;
> }
> }
> buf_printf(b, "\t{ 0x%08x, \"%s\" },\n",
> s->crc, s->name);
> }
>
> buf_printf(b, "};\n");
> }
>
> Where:
>
> include/linux/module.h:#define MODULE_NAME_LEN
> __MODULE_NAME_LEN include/linux/moduleparam.h:#define
> __MODULE_NAME_LEN (64 - sizeof(unsigned long))
>
> >
> > I bisected this build failure and found that it is caused by the
> > exported KUnit symbols:
> >
> > amdgpu_dm_plane_fill_gfx9_plane_attributes_from_modifiers()
> > amdgpu_dm_plane_fill_gfx12_plane_attributes_from_modifiers()
> >
> > modpost rejects the resulting exported symbol name with:
> >
> > ERROR: modpost: too long symbol
> > "amdgpu_dm_plane_fill_gfx9_plane_attributes_from_modifiers"
> >
> > I tested the following approach locally, which simply shortens the
> > helper names to:
> >
> > amdgpu_dm_plane_fill_gfx9_attrs_from_modifiers()
> > amdgpu_dm_plane_fill_gfx12_attrs_from_modifiers()
> >
> > and updated all corresponding users and KUnit references. This
> > resolves the build issue for me and does not appear to introduce any
> functional changes.
> >
> > Does this look like an acceptable fix?
>
> Yes most likely. The alternat fix would be to increase MODULE_NAME_LEN but
> that would mean increasing the size of several tables for just 2 symbols which
> are too long ?
Either way is fine with me. If you send the patch, I'll apply it.
Thanks!
Alex
>
> Christophe
>
> >
> > If so, I'll prepare and send a formal patch with proper changelog.
> >
> >
> >
> > diff --git
> a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c
> > b/ drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c
> > index 1b564cfe2120..b58225338bc4 100644
> > --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c
> > +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c
> > @@ -328,7 +328,7 @@ STATIC_IFN_KUNIT int
> > amdgpu_dm_plane_validate_dcc(struct amdgpu_device *adev,
> > }
> > EXPORT_IF_KUNIT(amdgpu_dm_plane_validate_dcc);
> >
> > -STATIC_IFN_KUNIT int
> > amdgpu_dm_plane_fill_gfx9_plane_attributes_from_modifiers(struct
> > amdgpu_device *adev,
> > +STATIC_IFN_KUNIT int
> > amdgpu_dm_plane_fill_gfx9_attrs_from_modifiers(struct amdgpu_device
> > *adev,
> > const struct amdgpu_framebuffer *afb,
> > const enum surface_pixel_format format,
> > const enum dc_rotation_angle rotation, @@ -378,9 +378,9
> > @@ STATIC_IFN_KUNIT int
> > amdgpu_dm_plane_fill_gfx9_plane_attributes_from_modifiers(s
> >
> > return ret;
> > }
> > -
> >
> EXPORT_IF_KUNIT(amdgpu_dm_plane_fill_gfx9_plane_attributes_from_modi
> fi
> > ers);
> > +EXPORT_IF_KUNIT(amdgpu_dm_plane_fill_gfx9_attrs_from_modifiers);
> >
> > -STATIC_IFN_KUNIT int
> > amdgpu_dm_plane_fill_gfx12_plane_attributes_from_modifiers(struct
> > amdgpu_device *adev,
> > +STATIC_IFN_KUNIT int
> > amdgpu_dm_plane_fill_gfx12_attrs_from_modifiers(struct amdgpu_device
> > *adev,
> > const struct amdgpu_framebuffer *afb,
> > const enum surface_pixel_format format,
> > const enum dc_rotation_angle rotation, @@ -419,7 +419,7
> > @@ STATIC_IFN_KUNIT int
> > amdgpu_dm_plane_fill_gfx12_plane_attributes_from_modifiers(
> >
> > return ret;
> > }
> > -
> >
> EXPORT_IF_KUNIT(amdgpu_dm_plane_fill_gfx12_plane_attributes_from_mo
> dif
> > iers);
> > +EXPORT_IF_KUNIT(amdgpu_dm_plane_fill_gfx12_attrs_from_modifiers);
> >
> > static void amdgpu_dm_plane_add_gfx10_1_modifiers(const struct
> > amdgpu_device *adev,
> > uint64_t **mods, @@
> > -927,14 +927,14 @@ int
> > amdgpu_dm_plane_fill_plane_buffer_attributes(struct amdgpu_device
> > *adev,
> > }
> >
> > if (adev->family == AMDGPU_FAMILY_GC_12_0_0) {
> > - ret =
> > amdgpu_dm_plane_fill_gfx12_plane_attributes_from_modifiers(adev, afb,
> > format,
> > + ret =
> > amdgpu_dm_plane_fill_gfx12_attrs_from_modifiers(adev, afb, format,
> > rotation, plane_size,
> > tiling_info, dcc,
> > address);
> > if (ret)
> > return ret;
> > } else if (adev->family >= AMDGPU_FAMILY_AI) {
> > - ret =
> > amdgpu_dm_plane_fill_gfx9_plane_attributes_from_modifiers(adev, afb,
> > format,
> > + ret =
> > amdgpu_dm_plane_fill_gfx9_attrs_from_modifiers(adev, afb, format,
> > rotation, plane_size,
> > tiling_info, dcc,
> > address);
> > diff --git
> a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.h
> > b/ drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.h
> > index 911fb2d73e22..55c33e051aee 100644
> > --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.h
> > +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.h
> > @@ -92,7 +92,7 @@ int amdgpu_dm_plane_get_plane_modifiers(struct
> > amdgpu_device *adev,
> > int amdgpu_dm_plane_get_plane_formats(const struct drm_plane *plane,
> > const struct dc_plane_cap
> > *plane_cap,
> > uint32_t *formats, int
> > max_formats); -int
> > amdgpu_dm_plane_fill_gfx9_plane_attributes_from_modifiers(struct
> > amdgpu_device *adev,
> > +int amdgpu_dm_plane_fill_gfx9_attrs_from_modifiers(struct
> > +amdgpu_device
> > *adev,
> > const struct amdgpu_framebuffer *afb,
> > const enum surface_pixel_format format, const enum dc_rotation_angle
> > rotation, @@ -100,7 +100,7 @@ int
> > amdgpu_dm_plane_fill_gfx9_plane_attributes_from_modifiers(struct
> > amdgpu_devi
> > struct dc_tiling_info *tiling_info,
> > struct dc_plane_dcc_param *dcc,
> > struct dc_plane_address *address);
> > -int amdgpu_dm_plane_fill_gfx12_plane_attributes_from_modifiers(struct
> > amdgpu_device *adev,
> > +int amdgpu_dm_plane_fill_gfx12_attrs_from_modifiers(struct
> > amdgpu_device *adev,
> > const struct amdgpu_framebuffer *afb,
> > const enum surface_pixel_format format,
> > const enum dc_rotation_angle rotation, diff --git
> > a/drivers/gpu/drm/amd/display/amdgpu_dm/tests/
> > amdgpu_dm_plane_test.c
> b/drivers/gpu/drm/amd/display/amdgpu_dm/tests/
> > amdgpu_dm_plane_test.c
> > index 46c9af432e37..fc84f5a08596 100644
> > ---
> >
> a/drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_plane_test.
> c
> > +++
> b/drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_plane_test
> > +++ .c
> > @@ -579,7 +579,7 @@ static void
> > dm_test_fill_gfx12_plane_attributes_from_modifiers(struct kunit *tes
> > plane_size.surface_size.height = 1080;
> >
> > KUNIT_EXPECT_EQ(test,
> > - amdgpu_dm_plane_fill_gfx12_plane_attributes_from_modifiers(
> > + amdgpu_dm_plane_fill_gfx12_attrs_from_modifiers(
> > adev, afb,
> > SURFACE_PIXEL_FORMAT_GRPH_ARGB8888,
> > ROTATION_ANGLE_0, &plane_size, &tiling_info,
> > &dcc, &address),
> > 0);
> > @@ -623,7 +623,7 @@ static void
> > dm_test_fill_gfx9_plane_attributes_from_modifiers(struct kunit *test
> > afb->base.modifier = DRM_FORMAT_MOD_LINEAR;
> >
> > KUNIT_EXPECT_EQ(test,
> > - amdgpu_dm_plane_fill_gfx9_plane_attributes_from_modifiers(
> > + amdgpu_dm_plane_fill_gfx9_attrs_from_modifiers(
> > adev, afb,
> > SURFACE_PIXEL_FORMAT_GRPH_ARGB8888,
> > ROTATION_ANGLE_0, &plane_size, &tiling_info,
> > &dcc, &address),
> > 0);
> > @@ -1187,9 +1187,9 @@ static struct kunit_case
> > amdgpu_dm_plane_test_cases[] = {
> > KUNIT_CASE(dm_test_get_cursor_position),
> > /* amdgpu_dm_plane_format_mod_supported() */
> > KUNIT_CASE(dm_test_format_mod_supported),
> > - /*
> > amdgpu_dm_plane_fill_gfx12_plane_attributes_from_modifiers() */
> > + /* amdgpu_dm_plane_fill_gfx12_attrs_from_modifiers() */
> > KUNIT_CASE(dm_test_fill_gfx12_plane_attributes_from_modifiers),
> > - /* amdgpu_dm_plane_fill_gfx9_plane_attributes_from_modifiers()
> > */
> > + /* amdgpu_dm_plane_fill_gfx9_attrs_from_modifiers() */
> > KUNIT_CASE(dm_test_fill_gfx9_plane_attributes_from_modifiers),
> > /* amdgpu_dm_plane_helper_check_state() */
> > KUNIT_CASE(dm_test_helper_check_state_viewport_reject),
> > (END)
> >
> >
> > Regards,
> >
> > Venkat.
> >
> >>
> >> # git bisect log
> >> git bisect start
> >> # status: waiting for both good and bad commits # bad:
> >> [5c73cd9f0819c1c44e373e3dabb68318b1de1a12] Add linux-next specific
> >> files for 20260707 git bisect bad
> >> 5c73cd9f0819c1c44e373e3dabb68318b1de1a12
> >> # good: [8cdeaa50eae8dad34885515f62559ee83e7e8dda] Linux 7.2-rc2
> git
> >> bisect good 8cdeaa50eae8dad34885515f62559ee83e7e8dda
> >> # good: [aac7863446a8e0cf380f4a5087bc3cdc9b8c14c0] Merge branch
> >> 'master' of https://eur01.safelinks.protection.outlook.com/?
> >>
> url=https%3A%2F%2Fgit.kernel.org%2Fpub%2Fscm%2Flinux%2Fkernel%2Fgi
> t%2
> >> Fherbert%2Fcryptodev-
> 2.6.git&data=05%7C02%7Cchristophe.leroy%40csgrou
> >>
> p.eu%7Cc5e7652b93e744143d1c08dede60b05d%7C8b87af7d86474dc78d
> f45f69a20
> >>
> 11bb5%7C0%7C0%7C639192704027107259%7CUnknown%7CTWFpbGZsb
> 3d8eyJFbXB0eU
> >>
> 1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIs
> Ild
> >>
> UIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=4ydIlQe8Bb3klMVrBmwYKnhK7
> 7MZUni2JbIT
> >> olWJGzM%3D&reserved=0 git bisect good
> >> aac7863446a8e0cf380f4a5087bc3cdc9b8c14c0
> >> # bad: [fe28d02cde5372d7f71cc6132ccdef37a98ac750] Merge branch
> 'for-
> >> linux-next' of https://eur01.safelinks.protection.outlook.com/?
> >>
> url=https%3A%2F%2Fgitlab.freedesktop.org%2Fdrm%2Fi915%2Fkernel.git&
> da
> >>
> ta=05%7C02%7Cchristophe.leroy%40csgroup.eu%7Cc5e7652b93e744143d
> 1c08de
> >>
> de60b05d%7C8b87af7d86474dc78df45f69a2011bb5%7C0%7C0%7C63919
> 2704027140
> >>
> 053%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIw
> LjAuMDAwM
> >>
> CIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C
> &sdat
> >>
> a=BMbR68vSHUPlm7pZCpn7niZgDfYLQWogR6OX7yiaGEw%3D&reserved=0
> >> git bisect bad fe28d02cde5372d7f71cc6132ccdef37a98ac750
> >> # good: [0639cb26862afe4e35a689a8b5df8b9117c19f52] Merge tag
> 'drm-xe-
> >> next-2026-07-03' of https://eur01.safelinks.protection.outlook.com/?
> >>
> url=https%3A%2F%2Fgitlab.freedesktop.org%2Fdrm%2Fxe%2Fkernel&data=
> 05%
> >>
> 7C02%7Cchristophe.leroy%40csgroup.eu%7Cc5e7652b93e744143d1c08de
> de60b0
> >>
> 5d%7C8b87af7d86474dc78df45f69a2011bb5%7C0%7C0%7C6391927040
> 27161672%7C
> >>
> Unknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMD
> AwMCIsIlA
> >>
> iOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdat
> a=LumG
> >>
> %2BM7C9w7R38jDyGYGHjbhjb6LZ3y%2F2J%2F82%2FZciZo%3D&reserved=
> 0 into
> >> drm-next git bisect good 0639cb26862afe4e35a689a8b5df8b9117c19f52
> >> # good: [4e9c8a9c322427055c4892183d266ba391af1bc8] drm/amdkfd:
> drop
> >> struct kfd_signal_page wrapper git bisect good
> >> 4e9c8a9c322427055c4892183d266ba391af1bc8
> >> # bad: [ea33aa1545535fdb4c1a208b7bfd63314c3a4aa2] drm/amdgpu:
> Drop
> >> legacy ACA log RAS error data code git bisect bad
> >> ea33aa1545535fdb4c1a208b7bfd63314c3a4aa2
> >> # good: [a17e79d01f22182a9fcbe79fcbe2ad1477d43e0f] drm/amd/pm:
> >> Validate pp_table header before reading size git bisect good
> >> a17e79d01f22182a9fcbe79fcbe2ad1477d43e0f
> >> # bad: [7a561c2b1b63abcffb55f625c0d0adb68ab2961a]
> drm/amd/display:
> >> Simplify boolean checks
> >> git bisect bad 7a561c2b1b63abcffb55f625c0d0adb68ab2961a
> >> # good: [53ef33c084c5778cc2dcd1efff25e31b6e231141] drm/amd/pm:
> >> Validate Tonga PPTable subtable bounds git bisect good
> >> 53ef33c084c5778cc2dcd1efff25e31b6e231141
> >> # good: [fe5966d4fdcbed91e6b3478ea6c89d9915d6ed4a] drm/amdkfd:
> move
> >> TBA/TMA from system to device memory git bisect good
> >> fe5966d4fdcbed91e6b3478ea6c89d9915d6ed4a
> >> # good: [7a39b1c3b2e6b27f4230a20ccf9ac5a2737fa8b0]
> drm/amd/display:
> >> Replace repeated no-native-i2c checks with force_i2c_over_aux field
> >> git bisect good 7a39b1c3b2e6b27f4230a20ccf9ac5a2737fa8b0
> >> # good: [88ae862060f05cd8279e764832f04eafafa505d8]
> drm/amd/display:
> >> Add more KUnit tests for amdgpu_dm_colorop git bisect good
> >> 88ae862060f05cd8279e764832f04eafafa505d8
> >> # bad: [2b147895be109e0860269a7a72c697cdf049a885]
> drm/amd/display:
> >> Add kunit tests for amdgpu_dm_plane git bisect bad
> >> 2b147895be109e0860269a7a72c697cdf049a885
> >> # first bad commit: [2b147895be109e0860269a7a72c697cdf049a885]
> drm/
> >> amd/display: Add kunit tests for amdgpu_dm_plane
> >>
> >>>
> >>>
> >>> Regards,
> >>>
> >>> Venkat.
> >>