All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] drm/exynos: fix multiple definition build error
@ 2013-04-26  5:03 Inki Dae
  2013-04-26  8:00 ` Tomasz Figa
  0 siblings, 1 reply; 8+ messages in thread
From: Inki Dae @ 2013-04-26  5:03 UTC (permalink / raw)
  To: airlied, dri-devel; +Cc: kyungmin.park, sw0312.kim

This patch fixes multiple definition error like below when building it
as moudle with device tree support.

drivers/gpu/drm/exynos/exynos_drm_g2d.o: In function `.LANCHOR1':
exynos_drm_g2d.c:(.rodata+0x6c): multiple definition of `__mod_of_device_table'
drivers/gpu/drm/exynos/exynos_drm_fimd.o:exynos_drm_fimd.c:(.rodata+0x144): first defined here

Signed-off-by: Inki Dae <inki.dae@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
---
 drivers/gpu/drm/exynos/exynos_drm_fimd.c |    2 +-
 drivers/gpu/drm/exynos/exynos_drm_g2d.c  |    2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
index 746b282..1e02d13 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
@@ -117,7 +117,7 @@ static const struct of_device_id fimd_driver_dt_match[] = {
 	  .data = &exynos5_fimd_driver_data },
 	{},
 };
-MODULE_DEVICE_TABLE(of, fimd_driver_dt_match);
+MODULE_DEVICE_TABLE(of_fimd, fimd_driver_dt_match);
 #endif
 
 static inline struct fimd_driver_data *drm_fimd_get_driver_data(
diff --git a/drivers/gpu/drm/exynos/exynos_drm_g2d.c b/drivers/gpu/drm/exynos/exynos_drm_g2d.c
index 47a493c..6a01ff1 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_g2d.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_g2d.c
@@ -1525,7 +1525,7 @@ static const struct of_device_id exynos_g2d_match[] = {
 	{ .compatible = "samsung,exynos5250-g2d" },
 	{},
 };
-MODULE_DEVICE_TABLE(of, exynos_g2d_match);
+MODULE_DEVICE_TABLE(of_g2d, exynos_g2d_match);
 #endif
 
 struct platform_driver g2d_driver = {
-- 
1.7.5.4

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH] drm/exynos: fix multiple definition build error
  2013-04-26  5:03 [PATCH] drm/exynos: fix multiple definition build error Inki Dae
@ 2013-04-26  8:00 ` Tomasz Figa
  2013-04-26  8:20   ` Inki Dae
  0 siblings, 1 reply; 8+ messages in thread
From: Tomasz Figa @ 2013-04-26  8:00 UTC (permalink / raw)
  To: dri-devel; +Cc: Inki Dae, airlied, kyungmin.park, sw0312.kim, linux-samsung-soc

Hi Inki,

On Friday 26 of April 2013 14:03:10 Inki Dae wrote:
> This patch fixes multiple definition error like below when building it
> as moudle with device tree support.
> 
> drivers/gpu/drm/exynos/exynos_drm_g2d.o: In function `.LANCHOR1':
> exynos_drm_g2d.c:(.rodata+0x6c): multiple definition of
> `__mod_of_device_table'
> drivers/gpu/drm/exynos/exynos_drm_fimd.o:exynos_drm_fimd.c:(.rodata+0x1
> 44): first defined here
> 
> Signed-off-by: Inki Dae <inki.dae@samsung.com>
> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
> ---
>  drivers/gpu/drm/exynos/exynos_drm_fimd.c |    2 +-
>  drivers/gpu/drm/exynos/exynos_drm_g2d.c  |    2 +-
>  2 files changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c
> b/drivers/gpu/drm/exynos/exynos_drm_fimd.c index 746b282..1e02d13
> 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
> @@ -117,7 +117,7 @@ static const struct of_device_id
> fimd_driver_dt_match[] = { .data = &exynos5_fimd_driver_data },
>  	{},
>  };
> -MODULE_DEVICE_TABLE(of, fimd_driver_dt_match);
> +MODULE_DEVICE_TABLE(of_fimd, fimd_driver_dt_match);

I wonder if this change wouldn't break the purpose of having 
MODULE_DEVICE_TABLE at all.

As far as I remember, this is used to create a symbol with well known name 
that userspace tools can use to identify what devices are handled in this 
module. For example

MODULE_DEVICE_TABLE(of, fimd_driver_dt_match);

results in creation of __mod_of_device_table symbol, of which tools, such 
as depmod are aware and can build a list of supported devices.

Your change will result in creation of __mod_of_fimd_device_table, which 
is unknown and won't be of any use.

By the way, looking at the definition of MODULE_DEVICE_TABLE, which is

139 #define MODULE_DEVICE_TABLE(type,name)          \
140   MODULE_GENERIC_TABLE(type##_device,name)

and then MODULE_GENERIC_TABLE

 85 #ifdef MODULE
 86 #define MODULE_GENERIC_TABLE(gtype,name)                        \
 87 extern const struct gtype##_id __mod_##gtype##_table            \
 88   __attribute__ ((unused, alias(__stringify(name))))
 89 
 90 #else  /* !MODULE */
 91 #define MODULE_GENERIC_TABLE(gtype,name)
 92 #endif

it seems like the exact line that will be generated after your change, 
will be

extern const struct of_fimd_device_id __mod_of_fimd_device_table
	__attribute__ ((unused, alias(__stringify(name))));

which seems wrong, because of_fimd_device_id is not a correct struct type.

Best regards,
Tomasz

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] drm/exynos: fix multiple definition build error
  2013-04-26  8:00 ` Tomasz Figa
@ 2013-04-26  8:20   ` Inki Dae
  2013-04-26  9:48     ` Sylwester Nawrocki
  0 siblings, 1 reply; 8+ messages in thread
From: Inki Dae @ 2013-04-26  8:20 UTC (permalink / raw)
  To: Tomasz Figa
  Cc: Kyungmin Park, linux-samsung-soc, Seung-Woo Kim, DRI mailing list


[-- Attachment #1.1: Type: text/plain, Size: 3087 bytes --]

Hi Tomasz,


2013/4/26 Tomasz Figa <tomasz.figa@gmail.com>

> Hi Inki,
>
> On Friday 26 of April 2013 14:03:10 Inki Dae wrote:
> > This patch fixes multiple definition error like below when building it
> > as moudle with device tree support.
> >
> > drivers/gpu/drm/exynos/exynos_drm_g2d.o: In function `.LANCHOR1':
> > exynos_drm_g2d.c:(.rodata+0x6c): multiple definition of
> > `__mod_of_device_table'
> > drivers/gpu/drm/exynos/exynos_drm_fimd.o:exynos_drm_fimd.c:(.rodata+0x1
> > 44): first defined here
> >
> > Signed-off-by: Inki Dae <inki.dae@samsung.com>
> > Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
> > ---
> >  drivers/gpu/drm/exynos/exynos_drm_fimd.c |    2 +-
> >  drivers/gpu/drm/exynos/exynos_drm_g2d.c  |    2 +-
> >  2 files changed, 2 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c
> > b/drivers/gpu/drm/exynos/exynos_drm_fimd.c index 746b282..1e02d13
> > 100644
> > --- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c
> > +++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
> > @@ -117,7 +117,7 @@ static const struct of_device_id
> > fimd_driver_dt_match[] = { .data = &exynos5_fimd_driver_data },
> >       {},
> >  };
> > -MODULE_DEVICE_TABLE(of, fimd_driver_dt_match);
> > +MODULE_DEVICE_TABLE(of_fimd, fimd_driver_dt_match);
>
> I wonder if this change wouldn't break the purpose of having
> MODULE_DEVICE_TABLE at all.
>
> As far as I remember, this is used to create a symbol with well known name
> that userspace tools can use to identify what devices are handled in this
> module. For example
>
> MODULE_DEVICE_TABLE(of, fimd_driver_dt_match);
>
> results in creation of __mod_of_device_table symbol, of which tools, such
> as depmod are aware and can build a list of supported devices.
>
> Your change will result in creation of __mod_of_fimd_device_table, which
> is unknown and won't be of any use.
>
> By the way, looking at the definition of MODULE_DEVICE_TABLE, which is
>
> 139 #define MODULE_DEVICE_TABLE(type,name)          \
> 140   MODULE_GENERIC_TABLE(type##_device,name)
>
> and then MODULE_GENERIC_TABLE
>
>  85 #ifdef MODULE
>  86 #define MODULE_GENERIC_TABLE(gtype,name)                        \
>  87 extern const struct gtype##_id __mod_##gtype##_table            \
>  88   __attribute__ ((unused, alias(__stringify(name))))
>  89
>  90 #else  /* !MODULE */
>  91 #define MODULE_GENERIC_TABLE(gtype,name)
>  92 #endif
>
> it seems like the exact line that will be generated after your change,
> will be
>
> extern const struct of_fimd_device_id __mod_of_fimd_device_table
>         __attribute__ ((unused, alias(__stringify(name))));
>

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. :(

Thanks,
Inki Dae



>
> which seems wrong, because of_fimd_device_id is not a correct struct type.
>
> Best regards,
> Tomasz
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
>

[-- Attachment #1.2: Type: text/html, Size: 4227 bytes --]

[-- Attachment #2: Type: text/plain, Size: 159 bytes --]

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] drm/exynos: fix multiple definition build error
  2013-04-26  8:20   ` Inki Dae
@ 2013-04-26  9:48     ` Sylwester Nawrocki
  2013-04-26 19:42       ` Tomasz Figa
  0 siblings, 1 reply; 8+ messages in thread
From: Sylwester Nawrocki @ 2013-04-26  9:48 UTC (permalink / raw)
  To: Inki Dae
  Cc: Tomasz Figa, Kyungmin Park, linux-samsung-soc, Seung-Woo Kim,
	DRI mailing list, devicetree-discuss

On 04/26/2013 10:20 AM, Inki Dae wrote:
> 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. :(

Since all drivers seem to be linked into single a single module, you 
likely need to create a separate table of struct of_device_id just for 
the purpose of MODULE_DEVICE_TABLE(of, ...). This table would contain 
'compatible' strings for all devices. Or choose of_device_id for just 
one device and define MODULE_DEVICE_TABLE() for it in some common place,
e.g. exynos_drm_drv.c. I believe all devices should be listed though.


Thanks,
Sylwester

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] drm/exynos: fix multiple definition build error
  2013-04-26  9:48     ` Sylwester Nawrocki
@ 2013-04-26 19:42       ` Tomasz Figa
  2013-04-26 20:00         ` Sylwester Nawrocki
  2013-04-28 12:52         ` Inki Dae
  0 siblings, 2 replies; 8+ messages in thread
From: Tomasz Figa @ 2013-04-26 19:42 UTC (permalink / raw)
  To: Sylwester Nawrocki
  Cc: Inki Dae, Kyungmin Park, linux-samsung-soc, Seung-Woo Kim,
	DRI mailing list, devicetree-discuss

On Friday 26 of April 2013 11:48:50 Sylwester Nawrocki wrote:
> On 04/26/2013 10:20 AM, Inki Dae wrote:
> > 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. :(
> Since all drivers seem to be linked into single a single module, you
> likely need to create a separate table of struct of_device_id just for
> the purpose of MODULE_DEVICE_TABLE(of, ...). This table would contain
> 'compatible' strings for all devices. Or choose of_device_id for just
> one device and define MODULE_DEVICE_TABLE() for it in some common place,
> e.g. exynos_drm_drv.c. I believe all devices should be listed though.

IMHO, the most proper solution would be to split the module into parent 
exynos_drm module and per-device submodules, which would depend on the 
parent module.

This way you would be able to load dynamically any submodule you want, 
without recompiling the modules.

Best regards,
Tomasz

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] drm/exynos: fix multiple definition build error
  2013-04-26 19:42       ` Tomasz Figa
@ 2013-04-26 20:00         ` Sylwester Nawrocki
       [not found]           ` <517ADCDB.3040101-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
  2013-04-28 12:52         ` Inki Dae
  1 sibling, 1 reply; 8+ messages in thread
From: Sylwester Nawrocki @ 2013-04-26 20:00 UTC (permalink / raw)
  To: Tomasz Figa
  Cc: Sylwester Nawrocki, Inki Dae, Kyungmin Park, linux-samsung-soc,
	Seung-Woo Kim, DRI mailing list, devicetree-discuss

On 04/26/2013 09:42 PM, Tomasz Figa wrote:
> On Friday 26 of April 2013 11:48:50 Sylwester Nawrocki wrote:
>> On 04/26/2013 10:20 AM, Inki Dae wrote:
>>> 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. :(
>> Since all drivers seem to be linked into single a single module, you
>> likely need to create a separate table of struct of_device_id just for
>> the purpose of MODULE_DEVICE_TABLE(of, ...). This table would contain
>> 'compatible' strings for all devices. Or choose of_device_id for just
>> one device and define MODULE_DEVICE_TABLE() for it in some common place,
>> e.g. exynos_drm_drv.c. I believe all devices should be listed though.
>
> IMHO, the most proper solution would be to split the module into parent
> exynos_drm module and per-device submodules, which would depend on the
> parent module.
>
> This way you would be able to load dynamically any submodule you want,
> without recompiling the modules.

Yes, this is how it would have been in a perfect world. Probably something
worth to consider for the future, it likely implies a lot of work.

OTOH if there is one device for which the driver will always be present
in the main module it should be enough to make a single entry
MODULE_DEVICE_TABLE including its compatible string to ensure the driver
is properly loaded, shouldn't it ?

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] drm/exynos: fix multiple definition build error
  2013-04-26 19:42       ` Tomasz Figa
  2013-04-26 20:00         ` Sylwester Nawrocki
@ 2013-04-28 12:52         ` Inki Dae
  1 sibling, 0 replies; 8+ messages in thread
From: Inki Dae @ 2013-04-28 12:52 UTC (permalink / raw)
  To: Tomasz Figa
  Cc: linux-samsung-soc-u79uwXL29TY76Z2rM5mHXA, devicetree-discuss,
	Seung-Woo Kim, DRI mailing list, Kyungmin Park,
	Sylwester Nawrocki


[-- Attachment #1.1: Type: text/plain, Size: 1444 bytes --]

2013/4/27 Tomasz Figa <tomasz.figa-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>

> On Friday 26 of April 2013 11:48:50 Sylwester Nawrocki wrote:
> > On 04/26/2013 10:20 AM, Inki Dae wrote:
> > > 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. :(
> > Since all drivers seem to be linked into single a single module, you
> > likely need to create a separate table of struct of_device_id just for
> > the purpose of MODULE_DEVICE_TABLE(of, ...). This table would contain
> > 'compatible' strings for all devices. Or choose of_device_id for just
> > one device and define MODULE_DEVICE_TABLE() for it in some common place,
> > e.g. exynos_drm_drv.c. I believe all devices should be listed though.
>
> IMHO, the most proper solution would be to split the module into parent
> exynos_drm module and per-device submodules, which would depend on the
> parent module.
>
>
This way had already been used a long time ago and there was some probing
issues so we made exynos drm framework to be one module.


>

This way you would be able to load dynamically any submodule you want,
> without recompiling the modules.
>
> Best regards,
> Tomasz
>
> _______________________________________________
> dri-devel mailing list
> dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
>

[-- Attachment #1.2: Type: text/html, Size: 2764 bytes --]

[-- Attachment #2: Type: text/plain, Size: 192 bytes --]

_______________________________________________
devicetree-discuss mailing list
devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org
https://lists.ozlabs.org/listinfo/devicetree-discuss

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] drm/exynos: fix multiple definition build error
       [not found]           ` <517ADCDB.3040101-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
@ 2013-04-28 13:24             ` Inki Dae
  0 siblings, 0 replies; 8+ messages in thread
From: Inki Dae @ 2013-04-28 13:24 UTC (permalink / raw)
  To: Sylwester Nawrocki
  Cc: linux-samsung-soc-u79uwXL29TY76Z2rM5mHXA, devicetree-discuss,
	Seung-Woo Kim, Tomasz Figa, DRI mailing list, Kyungmin Park,
	Sylwester Nawrocki


[-- Attachment #1.1: Type: text/plain, Size: 2323 bytes --]

2013/4/27 Sylwester Nawrocki <sylvester.nawrocki-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>

> On 04/26/2013 09:42 PM, Tomasz Figa wrote:
>
>> On Friday 26 of April 2013 11:48:50 Sylwester Nawrocki wrote:
>>
>>> On 04/26/2013 10:20 AM, Inki Dae wrote:
>>>
>>>> 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. :(
>>>>
>>> Since all drivers seem to be linked into single a single module, you
>>> likely need to create a separate table of struct of_device_id just for
>>> the purpose of MODULE_DEVICE_TABLE(of, ...). This table would contain
>>> 'compatible' strings for all devices. Or choose of_device_id for just
>>> one device and define MODULE_DEVICE_TABLE() for it in some common place,
>>> e.g. exynos_drm_drv.c. I believe all devices should be listed though.
>>>
>>
>> IMHO, the most proper solution would be to split the module into parent
>> exynos_drm module and per-device submodules, which would depend on the
>> parent module.
>>
>> This way you would be able to load dynamically any submodule you want,
>> without recompiling the modules.
>>
>
> Yes, this is how it would have been in a perfect world. Probably something
> worth to consider for the future, it likely implies a lot of work.
>
>
For now, exynos drm framework has a problem to module support with device
tree. And for this, going back to previous style might be a right way but
this also still has the probing issue. Frankly spreaking, I don't really
want back to previous style because that way not only still has a probing
issue but also makes exynos drm framework so complicated(there are many
things to consider every time framework updating). So I'd like to resolve
this issue as is first.


>

OTOH if there is one device for which the driver will always be present
> in the main module it should be enough to make a single entry
> MODULE_DEVICE_TABLE including its compatible string to ensure the driver
> is properly loaded, shouldn't it ?
>
>

--
> To unsubscribe from this list: send the line "unsubscribe
> linux-samsung-soc" in
> the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
> More majordomo info at  http://vger.kernel.org/**majordomo-info.html<http://vger.kernel.org/majordomo-info.html>
>

[-- Attachment #1.2: Type: text/html, Size: 4064 bytes --]

[-- Attachment #2: Type: text/plain, Size: 192 bytes --]

_______________________________________________
devicetree-discuss mailing list
devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org
https://lists.ozlabs.org/listinfo/devicetree-discuss

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2013-04-28 13:24 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-04-26  5:03 [PATCH] drm/exynos: fix multiple definition build error Inki Dae
2013-04-26  8:00 ` Tomasz Figa
2013-04-26  8:20   ` Inki Dae
2013-04-26  9:48     ` Sylwester Nawrocki
2013-04-26 19:42       ` Tomasz Figa
2013-04-26 20:00         ` Sylwester Nawrocki
     [not found]           ` <517ADCDB.3040101-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2013-04-28 13:24             ` Inki Dae
2013-04-28 12:52         ` Inki Dae

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.