Merge branch 'for-davem' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless
John W. Linville says: ==================== Please pull this last(?) batch of fixes intended for 3.6... For the Bluetooth bits, Gustavo says this: "Here goes probably my last update to 3.6. It includes the two patches you were ok last week(from Andrzej Kaczmarek), those are critical ones, and two other fixes one for a system crash and the other for a missing lockdep annotation." The referenced fixes from Andrzej prevent attempts to configure devices that are powered-off. Along with the Bluetooth fixes, there are a couple of 802.11 fixes. Emmanuel Grumbach gives us an iwlwifi fix to prevent releasing an interrupt twice. Luis R. Rodriguez provides a fix for a possible circular lock dependency in the cfg80211 regulatory enforcement code. All of these have been in linux-next for a few days. I hope they are not too late to make the 3.6 release! ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
41e268565a
|
@ -1442,6 +1442,7 @@ static int iwl_trans_pcie_start_hw(struct iwl_trans *trans)
|
|||
return err;
|
||||
|
||||
err_free_irq:
|
||||
trans_pcie->irq_requested = false;
|
||||
free_irq(trans_pcie->irq, trans);
|
||||
error:
|
||||
iwl_free_isr_ict(trans);
|
||||
|
|
|
@ -734,6 +734,8 @@ static int hci_dev_do_close(struct hci_dev *hdev)
|
|||
|
||||
cancel_work_sync(&hdev->le_scan);
|
||||
|
||||
cancel_delayed_work(&hdev->power_off);
|
||||
|
||||
hci_req_cancel(hdev, ENODEV);
|
||||
hci_req_lock(hdev);
|
||||
|
||||
|
|
|
@ -1008,7 +1008,7 @@ static void l2cap_send_disconn_req(struct l2cap_conn *conn, struct l2cap_chan *c
|
|||
if (!conn)
|
||||
return;
|
||||
|
||||
if (chan->mode == L2CAP_MODE_ERTM) {
|
||||
if (chan->mode == L2CAP_MODE_ERTM && chan->state == BT_CONNECTED) {
|
||||
__clear_retrans_timer(chan);
|
||||
__clear_monitor_timer(chan);
|
||||
__clear_ack_timer(chan);
|
||||
|
|
|
@ -2875,6 +2875,22 @@ int mgmt_powered(struct hci_dev *hdev, u8 powered)
|
|||
if (scan)
|
||||
hci_send_cmd(hdev, HCI_OP_WRITE_SCAN_ENABLE, 1, &scan);
|
||||
|
||||
if (test_bit(HCI_SSP_ENABLED, &hdev->dev_flags)) {
|
||||
u8 ssp = 1;
|
||||
|
||||
hci_send_cmd(hdev, HCI_OP_WRITE_SSP_MODE, 1, &ssp);
|
||||
}
|
||||
|
||||
if (test_bit(HCI_LE_ENABLED, &hdev->dev_flags)) {
|
||||
struct hci_cp_write_le_host_supported cp;
|
||||
|
||||
cp.le = 1;
|
||||
cp.simul = !!(hdev->features[6] & LMP_SIMUL_LE_BR);
|
||||
|
||||
hci_send_cmd(hdev, HCI_OP_WRITE_LE_HOST_SUPPORTED,
|
||||
sizeof(cp), &cp);
|
||||
}
|
||||
|
||||
update_class(hdev);
|
||||
update_name(hdev, hdev->dev_name);
|
||||
update_eir(hdev);
|
||||
|
|
|
@ -350,6 +350,9 @@ static void reg_regdb_search(struct work_struct *work)
|
|||
struct reg_regdb_search_request *request;
|
||||
const struct ieee80211_regdomain *curdom, *regdom;
|
||||
int i, r;
|
||||
bool set_reg = false;
|
||||
|
||||
mutex_lock(&cfg80211_mutex);
|
||||
|
||||
mutex_lock(®_regdb_search_mutex);
|
||||
while (!list_empty(®_regdb_search_list)) {
|
||||
|
@ -365,9 +368,7 @@ static void reg_regdb_search(struct work_struct *work)
|
|||
r = reg_copy_regd(®dom, curdom);
|
||||
if (r)
|
||||
break;
|
||||
mutex_lock(&cfg80211_mutex);
|
||||
set_regdom(regdom);
|
||||
mutex_unlock(&cfg80211_mutex);
|
||||
set_reg = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -375,6 +376,11 @@ static void reg_regdb_search(struct work_struct *work)
|
|||
kfree(request);
|
||||
}
|
||||
mutex_unlock(®_regdb_search_mutex);
|
||||
|
||||
if (set_reg)
|
||||
set_regdom(regdom);
|
||||
|
||||
mutex_unlock(&cfg80211_mutex);
|
||||
}
|
||||
|
||||
static DECLARE_WORK(reg_regdb_work, reg_regdb_search);
|
||||
|
|
Loading…
Reference in New Issue