media: pvrusb2: fix DVB_CORE dependency

Message ID 20230117171055.2714621-1-arnd@kernel.org
State New
Headers
Series media: pvrusb2: fix DVB_CORE dependency |

Commit Message

Arnd Bergmann Jan. 17, 2023, 5:10 p.m. UTC
  From: Arnd Bergmann <arnd@arndb.de>

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 <arnd@arndb.de>
---
 drivers/media/usb/pvrusb2/Kconfig | 1 +
 1 file changed, 1 insertion(+)
  

Comments

Mike Isely Jan. 18, 2023, 3:39 p.m. UTC | #1
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 <arnd@arndb.de>
> 
> 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 <arnd@arndb.de>
> ---
>  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
>
  
Arnd Bergmann Jan. 18, 2023, 3:57 p.m. UTC | #2
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
  

Patch

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