<div dir="ltr">Hi Tomasz,<br><div class="gmail_extra"><br><br><div class="gmail_quote">2013/4/26 Tomasz Figa <span dir="ltr"><<a href="mailto:tomasz.figa@gmail.com" target="_blank">tomasz.figa@gmail.com</a>></span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Inki,<br>
<div class="im"><br>
On Friday 26 of April 2013 14:03:10 Inki Dae wrote:<br>
> This patch fixes multiple definition error like below when building it<br>
> as moudle with device tree support.<br>
><br>
> drivers/gpu/drm/exynos/exynos_drm_g2d.o: In function `.LANCHOR1':<br>
> exynos_drm_g2d.c:(.rodata+0x6c): multiple definition of<br>
> `__mod_of_device_table'<br>
> drivers/gpu/drm/exynos/exynos_drm_fimd.o:exynos_drm_fimd.c:(.rodata+0x1<br>
> 44): first defined here<br>
><br>
> Signed-off-by: Inki Dae <<a href="mailto:inki.dae@samsung.com">inki.dae@samsung.com</a>><br>
> Signed-off-by: Kyungmin Park <<a href="mailto:kyungmin.park@samsung.com">kyungmin.park@samsung.com</a>><br>
> ---<br>
>  drivers/gpu/drm/exynos/exynos_drm_fimd.c |    2 +-<br>
>  drivers/gpu/drm/exynos/exynos_drm_g2d.c  |    2 +-<br>
>  2 files changed, 2 insertions(+), 2 deletions(-)<br>
><br>
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c<br>
> b/drivers/gpu/drm/exynos/exynos_drm_fimd.c index 746b282..1e02d13<br>
> 100644<br>
> --- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c<br>
> +++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c<br>
> @@ -117,7 +117,7 @@ static const struct of_device_id<br>
> fimd_driver_dt_match[] = { .data = &exynos5_fimd_driver_data },<br>
>       {},<br>
>  };<br>
> -MODULE_DEVICE_TABLE(of, fimd_driver_dt_match);<br>
> +MODULE_DEVICE_TABLE(of_fimd, fimd_driver_dt_match);<br>
<br>
</div>I wonder if this change wouldn't break the purpose of having<br>
MODULE_DEVICE_TABLE at all.<br>
<br>
As far as I remember, this is used to create a symbol with well known name<br>
that userspace tools can use to identify what devices are handled in this<br>
module. For example<br>
<br>
MODULE_DEVICE_TABLE(of, fimd_driver_dt_match);<br>
<br>
results in creation of __mod_of_device_table symbol, of which tools, such<br>
as depmod are aware and can build a list of supported devices.<br>
<br>
Your change will result in creation of __mod_of_fimd_device_table, which<br>
is unknown and won't be of any use.<br>
<br>
By the way, looking at the definition of MODULE_DEVICE_TABLE, which is<br>
<br>
139 #define MODULE_DEVICE_TABLE(type,name)          \<br>
140   MODULE_GENERIC_TABLE(type##_device,name)<br>
<br>
and then MODULE_GENERIC_TABLE<br>
<br>
 85 #ifdef MODULE<br>
 86 #define MODULE_GENERIC_TABLE(gtype,name)                        \<br>
 87 extern const struct gtype##_id __mod_##gtype##_table            \<br>
 88   __attribute__ ((unused, alias(__stringify(name))))<br>
 89<br>
 90 #else  /* !MODULE */<br>
 91 #define MODULE_GENERIC_TABLE(gtype,name)<br>
 92 #endif<br>
<br>
it seems like the exact line that will be generated after your change,<br>
will be<br>
<br>
extern const struct of_fimd_device_id __mod_of_fimd_device_table<br>
        __attribute__ ((unused, alias(__stringify(name))));<br></blockquote><div><br></div><div>Exactly right. it's my mistake. But now it seems that __mode_of_device_table is multi defined at fimd and g2d side so there still is module build error. :(<br>
<br></div><div>Thanks,<br>Inki Dae<br></div><div><br> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
which seems wrong, because of_fimd_device_id is not a correct struct type.<br>
<br>
Best regards,<br>
Tomasz<br>
<div class="HOEnZb"><div class="h5"><br>
_______________________________________________<br>
dri-devel mailing list<br>
<a href="mailto:dri-devel@lists.freedesktop.org">dri-devel@lists.freedesktop.org</a><br>
<a href="http://lists.freedesktop.org/mailman/listinfo/dri-devel" target="_blank">http://lists.freedesktop.org/mailman/listinfo/dri-devel</a><br>
</div></div></blockquote></div><br></div></div>