> > > On Oct 3, 2018, at 5:10 PM, Kalle Valo <kvalo@xxxxxxxxxxxxxx> wrote: > > > > Kai-Heng Feng <kai.heng.feng@xxxxxxxxxxxxx> writes: > > > >> To avoid the firmware loading race between Bluetooth and WiFi on > >> Intel 8260, load firmware exclusively when BT_INTEL is enabled. > >> > >> Signed-off-by: Kai-Heng Feng <kai.heng.feng@xxxxxxxxxxxxx> > > > > Still the commit log tells nothing about the actual problem which > > makes review impossible. > > Sorry for that. The first two patches [1] only sends to linux-bluetooth and > LMKL. > > I don’t know what really happened at hardware/firmware level, but making > btusb and iwlwifi load firmware sequentially can workaround the issue. > > Matt Chen may be able to explain this issue with more detail. > > [1] https://lkml.org/lkml/2018/10/3/322 > I just read the code of this patch and I don't quite understand. You have a function that is declared as a non-inline function in two different header files? btintel_firmware_lock is declared here: --- /dev/null +++ b/include/linux/intel-wifi-bt.h @@ -0,0 +1,8 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __INTEL_WIFI_BT_H__ +#define __INTEL_WIFI_BT_H__ + +void btintel_firmware_lock(void); And ... diff --git a/drivers/bluetooth/btintel.h b/drivers/bluetooth/btintel.h index 41c642cc523f..1373ffc2b575 100644 --- a/drivers/bluetooth/btintel.h +++ b/drivers/bluetooth/btintel.h @@ -102,6 +102,8 @@ int btintel_read_boot_params(struct hci_dev *hdev, struct intel_boot_params *params); int btintel_download_firmware(struct hci_dev *dev, const struct firmware *fw, u32 *boot_param); +void btintel_firmware_lock(void); This can't be right.