[bug report] media: sound/usb: Use Media Controller API to share media resources

Dan Carpenter dan.carpenter at oracle.com
Tue Jun 8 21:03:09 CEST 2021


On Tue, Jun 08, 2021 at 11:53:53AM -0600, Shuah Khan wrote:
> On 6/2/21 6:59 AM, Dan Carpenter wrote:
> > Hello Shuah Khan,
> > 
> > The patch 66354f18fe5f: "media: sound/usb: Use Media Controller API
> > to share media resources" from Apr 1, 2019, leads to the following
> > static checker warning:
> > 
> > 	sound/usb/media.c:287 snd_media_device_create()
> > 	warn: 'mdev' can also be NULL
> > 
> > sound/usb/media.c
> >     270
> >     271          mdev = media_device_usb_allocate(usbdev, KBUILD_MODNAME, THIS_MODULE);
> >                  ^^^^
> > 
> > If CONFIG_MEDIA_CONTROLLER is disabled then "mdev" is NULL.
> 
> If CONFIG_MEDIA_CONTROLLER is disabled, this file won't be compiled.
> Please see below clause in the Makefile.
> 
> sound/usb/Makefile:
> snd-usb-audio-$(CONFIG_SND_USB_AUDIO_USE_MEDIA_CONTROLLER) += media.o
> 
> Also, this select in sound/usb/Kconfig selects appropriate
> configs.
> 
> select SND_USB_AUDIO_USE_MEDIA_CONTROLLER if MEDIA_CONTROLLER &&
> (MEDIA_SUPPORT=y || MEDIA_SUPPORT=SND_USB_AUDIO)
> 
> We are good here with the above in place to make sure media.c
> code isn't in play when CONFIG_MEDIA_CONTROLLER is disabled.

Smatch is working based on a real .config but I misunderstood the
problem.

include/media/media-dev-allocator.h
    21  
    22  #if defined(CONFIG_MEDIA_CONTROLLER) && defined(CONFIG_USB)
                                                ^^^^^^^^^^^^^^^^^^^
When I have CONFIG_USB=m then this is false, but when I use CONFIG_USB=y
then this is true.  I'm not an expert on the kernel build system so I
can't explain why defined() is not working as expected but I know that
if we used IS_ENABLED(CONFIG_USB) that would work.

#if IS_ENABLED(CONFIG_MEDIA_CONTROLLER) && IS_ENABLED)CONFIG_USB)

    23  /**
    24   * media_device_usb_allocate() - Allocate and return struct &media device
    25   *
    26   * @udev:               struct &usb_device pointer
    27   * @module_name:        should be filled with %KBUILD_MODNAME
    28   * @owner:              struct module pointer %THIS_MODULE for the driver.
    29   *                      %THIS_MODULE is null for a built-in driver.
    30   *                      It is safe even when %THIS_MODULE is null.
    31   *
    32   * This interface should be called to allocate a Media Device when multiple
    33   * drivers share usb_device and the media device. This interface allocates
    34   * &media_device structure and calls media_device_usb_init() to initialize
    35   * it.
    36   *
    37   */
    38  struct media_device *media_device_usb_allocate(struct usb_device *udev,
    39                                                 const char *module_name,
    40                                                 struct module *owner);

regards,
dan carpenter



More information about the Alsa-devel mailing list