| From 6e10454f61f41cb5d751c0875ccf0245c02dd8e9 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 16 Jun 2021 17:19:06 +0200 |
| Subject: media: Fix Media Controller API config checks |
| |
| From: Shuah Khan <skhan@linuxfoundation.org> |
| |
| [ Upstream commit 50e7a31d30e8221632675abed3be306382324ca2 ] |
| |
| Smatch static checker warns that "mdev" can be null: |
| |
| sound/usb/media.c:287 snd_media_device_create() |
| warn: 'mdev' can also be NULL |
| |
| If CONFIG_MEDIA_CONTROLLER is disabled, this file should not be included |
| in the build. |
| |
| The below conditions in the sound/usb/Makefile are in place to ensure that |
| media.c isn't included in the build. |
| |
| sound/usb/Makefile: |
| snd-usb-audio-$(CONFIG_SND_USB_AUDIO_USE_MEDIA_CONTROLLER) += media.o |
| |
| select SND_USB_AUDIO_USE_MEDIA_CONTROLLER if MEDIA_CONTROLLER && |
| (MEDIA_SUPPORT=y || MEDIA_SUPPORT=SND_USB_AUDIO) |
| |
| The following config check in include/media/media-dev-allocator.h is |
| in place to enable the API only when CONFIG_MEDIA_CONTROLLER and |
| CONFIG_USB are enabled. |
| |
| #if defined(CONFIG_MEDIA_CONTROLLER) && defined(CONFIG_USB) |
| |
| This check doesn't work as intended when CONFIG_USB=m. When CONFIG_USB=m, |
| CONFIG_USB_MODULE is defined and CONFIG_USB is not. The above config check |
| doesn't catch that CONFIG_USB is defined as a module and disables the API. |
| This results in sound/usb enabling Media Controller specific ALSA driver |
| code, while Media disables the Media Controller API. |
| |
| Fix the problem requires two changes: |
| |
| 1. Change the check to use IS_ENABLED to detect when CONFIG_USB is enabled |
| as a module or static. Since CONFIG_MEDIA_CONTROLLER is a bool, leave |
| the check unchanged to be consistent with drivers/media/Makefile. |
| |
| 2. Change the drivers/media/mc/Makefile to include mc-dev-allocator.o |
| in mc-objs when CONFIG_USB is enabled. |
| |
| Link: https://lore.kernel.org/alsa-devel/YLeAvT+R22FQ%2FEyw@mwanda/ |
| |
| Reported-by: Dan Carpenter <dan.carpenter@oracle.com> |
| Signed-off-by: Shuah Khan <skhan@linuxfoundation.org> |
| Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> |
| Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/media/mc/Makefile | 2 +- |
| include/media/media-dev-allocator.h | 2 +- |
| 2 files changed, 2 insertions(+), 2 deletions(-) |
| |
| diff --git a/drivers/media/mc/Makefile b/drivers/media/mc/Makefile |
| index 119037f0e686..2b7af42ba59c 100644 |
| --- a/drivers/media/mc/Makefile |
| +++ b/drivers/media/mc/Makefile |
| @@ -3,7 +3,7 @@ |
| mc-objs := mc-device.o mc-devnode.o mc-entity.o \ |
| mc-request.o |
| |
| -ifeq ($(CONFIG_USB),y) |
| +ifneq ($(CONFIG_USB),) |
| mc-objs += mc-dev-allocator.o |
| endif |
| |
| diff --git a/include/media/media-dev-allocator.h b/include/media/media-dev-allocator.h |
| index b35ea6062596..2ab54d426c64 100644 |
| --- a/include/media/media-dev-allocator.h |
| +++ b/include/media/media-dev-allocator.h |
| @@ -19,7 +19,7 @@ |
| |
| struct usb_device; |
| |
| -#if defined(CONFIG_MEDIA_CONTROLLER) && defined(CONFIG_USB) |
| +#if defined(CONFIG_MEDIA_CONTROLLER) && IS_ENABLED(CONFIG_USB) |
| /** |
| * media_device_usb_allocate() - Allocate and return struct &media device |
| * |
| -- |
| 2.30.2 |
| |