2023-01-17 17:54:50

by Arnd Bergmann

[permalink] [raw]
Subject: [PATCH] media: pvrusb2: fix DVB_CORE dependency

From: Arnd Bergmann <[email protected]>

Now that DVB_CORE can be a loadable module, pvrusb2 can run into
a link error:

ld.lld: error: undefined symbol: dvb_module_probe
>>> referenced by pvrusb2-devattr.c
>>> drivers/media/usb/pvrusb2/pvrusb2-devattr.o:(pvr2_lgdt3306a_attach) in archive vmlinux.a
ld.lld: error: undefined symbol: dvb_module_release
>>> referenced by pvrusb2-devattr.c
>>> drivers/media/usb/pvrusb2/pvrusb2-devattr.o:(pvr2_dual_fe_attach) in archive vmlinux.a

Refine the Kconfig dependencies to avoid this case.

Fixes: 7655c342dbc4 ("media: Kconfig: Make DVB_CORE=m possible when MEDIA_SUPPORT=y")
Signed-off-by: Arnd Bergmann <[email protected]>
---
drivers/media/usb/pvrusb2/Kconfig | 1 +
1 file changed, 1 insertion(+)

diff --git a/drivers/media/usb/pvrusb2/Kconfig b/drivers/media/usb/pvrusb2/Kconfig
index f2b64e49c5a2..e02a25d2d029 100644
--- a/drivers/media/usb/pvrusb2/Kconfig
+++ b/drivers/media/usb/pvrusb2/Kconfig
@@ -37,6 +37,7 @@ config VIDEO_PVRUSB2_DVB
bool "pvrusb2 ATSC/DVB support"
default y
depends on VIDEO_PVRUSB2 && DVB_CORE
+ depends on VIDEO_PVRUSB2=m || DVB_CORE=y
select DVB_LGDT330X if MEDIA_SUBDRV_AUTOSELECT
select DVB_S5H1409 if MEDIA_SUBDRV_AUTOSELECT
select DVB_S5H1411 if MEDIA_SUBDRV_AUTOSELECT
--
2.39.0


2023-01-18 16:11:15

by Arnd Bergmann

[permalink] [raw]
Subject: Re: [PATCH] media: pvrusb2: fix DVB_CORE dependency

On Wed, Jan 18, 2023, at 16:39, Mike Isely wrote:
> That doesn't seem right. The pvrusb2 module should reference that
> symbol like any other. There is no special treatment of it within
> pvrusb2 - so why is that requiring special treatment here?

The problem is that VIDEO_PVRUSB2_DVB is a 'bool' symbol, not
a 'tristate', so the existing 'depends on DVB_CORE' is not sufficient.

Another way to do this would be to prevent VIDEO_PVRUSB2 from
being built-in when DVB_CORE is a module:

config VIDEO_PVRUSB2
tristate "Hauppauge WinTV-PVR USB2 support"
depends on VIDEO_DEV && I2C
+ depends on DVB_CORE || !DVB_CORE
select VIDEO_TUNER
select VIDEO_TVEEPROM
select VIDEO_CX2341X

but that doesn't feel right for users that don't care about DVB
support.

> Is it possible that dvb_module_probe and dvb_module_release are not
> exported? (Or that there are two corresponding different exported
> symbol names that pvrusb2 should be using instead?)

No.

Arnd

2023-01-18 16:47:36

by Mike Isely

[permalink] [raw]
Subject: Re: [PATCH] media: pvrusb2: fix DVB_CORE dependency


That doesn't seem right. The pvrusb2 module should reference that
symbol like any other. There is no special treatment of it within
pvrusb2 - so why is that requiring special treatment here?

Is it possible that dvb_module_probe and dvb_module_release are not
exported? (Or that there are two corresponding different exported
symbol names that pvrusb2 should be using instead?)

-Mike

On Tue, 17 Jan 2023, Arnd Bergmann wrote:

> From: Arnd Bergmann <[email protected]>
>
> Now that DVB_CORE can be a loadable module, pvrusb2 can run into
> a link error:
>
> ld.lld: error: undefined symbol: dvb_module_probe
> >>> referenced by pvrusb2-devattr.c
> >>> drivers/media/usb/pvrusb2/pvrusb2-devattr.o:(pvr2_lgdt3306a_attach) in archive vmlinux.a
> ld.lld: error: undefined symbol: dvb_module_release
> >>> referenced by pvrusb2-devattr.c
> >>> drivers/media/usb/pvrusb2/pvrusb2-devattr.o:(pvr2_dual_fe_attach) in archive vmlinux.a
>
> Refine the Kconfig dependencies to avoid this case.
>
> Fixes: 7655c342dbc4 ("media: Kconfig: Make DVB_CORE=m possible when MEDIA_SUPPORT=y")
> Signed-off-by: Arnd Bergmann <[email protected]>
> ---
> drivers/media/usb/pvrusb2/Kconfig | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/drivers/media/usb/pvrusb2/Kconfig b/drivers/media/usb/pvrusb2/Kconfig
> index f2b64e49c5a2..e02a25d2d029 100644
> --- a/drivers/media/usb/pvrusb2/Kconfig
> +++ b/drivers/media/usb/pvrusb2/Kconfig
> @@ -37,6 +37,7 @@ config VIDEO_PVRUSB2_DVB
> bool "pvrusb2 ATSC/DVB support"
> default y
> depends on VIDEO_PVRUSB2 && DVB_CORE
> + depends on VIDEO_PVRUSB2=m || DVB_CORE=y
> select DVB_LGDT330X if MEDIA_SUBDRV_AUTOSELECT
> select DVB_S5H1409 if MEDIA_SUBDRV_AUTOSELECT
> select DVB_S5H1411 if MEDIA_SUBDRV_AUTOSELECT
>