Hi Chris, On Wed, Jul 10, 2024 at 3:38 AM Chris Lu <chris.lu@xxxxxxxxxxxx> wrote: > > MediaTek move some usb interface related function to btmtk.c which > may cause build failed if BT USB Kconfig wasn't enabled. > Fix undefined reference by adding config check. > > Fixes: 39a9e1c69e74 Bluetooth: btmtk: move btusb_mtk_hci_wmt_sync to btmtk.c > Reported-by: kernel test robot <lkp@xxxxxxxxx> > Closes: https://lore.kernel.org/oe-kbuild-all/202407091928.AH0aGZnx-lkp@xxxxxxxxx/ > Signed-off-by: Chris Lu <chris.lu@xxxxxxxxxxxx> > --- > drivers/bluetooth/btmtk.c | 2 ++ > drivers/bluetooth/btmtk.h | 4 ++++ > 2 files changed, 6 insertions(+) > > diff --git a/drivers/bluetooth/btmtk.c b/drivers/bluetooth/btmtk.c > index b7c348687a77..9789296ad4f6 100644 > --- a/drivers/bluetooth/btmtk.c > +++ b/drivers/bluetooth/btmtk.c > @@ -437,6 +437,7 @@ int btmtk_process_coredump(struct hci_dev *hdev, struct sk_buff *skb) > } > EXPORT_SYMBOL_GPL(btmtk_process_coredump); > > +#if IS_ENABLED(CONFIG_BT_HCIBTUSB_MTK) > static void btmtk_usb_wmt_recv(struct urb *urb) > { > struct hci_dev *hdev = urb->context; > @@ -1487,6 +1488,7 @@ int btmtk_usb_shutdown(struct hci_dev *hdev) > return 0; > } > EXPORT_SYMBOL_GPL(btmtk_usb_shutdown); > +#endif > > MODULE_AUTHOR("Sean Wang <sean.wang@xxxxxxxxxxxx>"); > MODULE_AUTHOR("Mark Chen <mark-yw.chen@xxxxxxxxxxxx>"); > diff --git a/drivers/bluetooth/btmtk.h b/drivers/bluetooth/btmtk.h > index 453ed5131a37..890dbe9beff8 100644 > --- a/drivers/bluetooth/btmtk.h > +++ b/drivers/bluetooth/btmtk.h > @@ -165,6 +165,7 @@ struct btmtk_data { > btmtk_reset_sync_func_t reset_sync; > struct btmtk_coredump_info cd_info; > > +#if IS_ENABLED(CONFIG_BT_HCIBTUSB_MTK) > struct usb_device *udev; > struct usb_interface *intf; > struct usb_anchor *ctrl_anchor; > @@ -177,6 +178,7 @@ struct btmtk_data { > > /* spinlock for ISO data transmission */ > spinlock_t isorxlock; > +#endif If I recall this correctly it is not a good practice to use #if inside structs as it would change its overall size, memory layout, etc, and it also makes it difficult to use if (IS_DEFINED) and let the compiler eliminate dead code instead of using the preprocessor like you doing. > }; > > typedef int (*wmt_cmd_sync_func_t)(struct hci_dev *, > @@ -202,6 +204,7 @@ int btmtk_process_coredump(struct hci_dev *hdev, struct sk_buff *skb); > void btmtk_fw_get_filename(char *buf, size_t size, u32 dev_id, u32 fw_ver, > u32 fw_flavor); > > +#if IS_ENABLED(CONFIG_BT_HCIBTUSB_MTK) > int btmtk_usb_subsys_reset(struct hci_dev *hdev, u32 dev_id); > > int btmtk_usb_recv_acl(struct hci_dev *hdev, struct sk_buff *skb); > @@ -216,6 +219,7 @@ int btmtk_usb_suspend(struct hci_dev *hdev); > int btmtk_usb_setup(struct hci_dev *hdev); > > int btmtk_usb_shutdown(struct hci_dev *hdev); > +#endif > #else > > static inline int btmtk_set_bdaddr(struct hci_dev *hdev, > -- > 2.18.0 > -- Luiz Augusto von Dentz