diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2015-01-01 02:05:16 -0800 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2015-01-02 22:22:04 +0100 |
commit | ec6cef9cd98d9d2dac8ec8f1d11b8a3a9524e390 (patch) | |
tree | a39ccb2ca5525e2f200663acf19f5d8a56d594b6 | |
parent | 203de21bf6b19f81267c373ca5323e6386fe5809 (diff) | |
download | linux-stable-ec6cef9cd98d9d2dac8ec8f1d11b8a3a9524e390.tar.gz linux-stable-ec6cef9cd98d9d2dac8ec8f1d11b8a3a9524e390.tar.bz2 linux-stable-ec6cef9cd98d9d2dac8ec8f1d11b8a3a9524e390.zip |
Bluetooth: Fix SMP channel registration for unconfigured controllers
When the Bluetooth controllers requires an unconfigured state (for
example when the BD_ADDR is missing), then it is important to try
to register the SMP channels when the controller transitions to the
configured state.
This also fixes an issue with the debugfs entires that are not present
for controllers that start out as unconfigured.
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
-rw-r--r-- | net/bluetooth/hci_core.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c index 5ef5221c1813..6c12110b75a7 100644 --- a/net/bluetooth/hci_core.c +++ b/net/bluetooth/hci_core.c @@ -931,10 +931,20 @@ static int __hci_init(struct hci_dev *hdev) if (err < 0) return err; - /* Only create debugfs entries during the initial setup - * phase and not every time the controller gets powered on. + /* This function is only called when the controller is actually in + * configured state. When the controller is marked as unconfigured, + * this initialization procedure is not run. + * + * It means that it is possible that a controller runs through its + * setup phase and then discovers missing settings. If that is the + * case, then this function will not be called. It then will only + * be called during the config phase. + * + * So only when in setup phase or config phase, create the debugfs + * entries and register the SMP channels. */ - if (!test_bit(HCI_SETUP, &hdev->dev_flags)) + if (!test_bit(HCI_SETUP, &hdev->dev_flags) && + !test_bit(HCI_CONFIG, &hdev->dev_flags)) return 0; hci_debugfs_create_common(hdev); |