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;
|
return err;
|
||||||
|
|
||||||
err_free_irq:
|
err_free_irq:
|
||||||
|
trans_pcie->irq_requested = false;
|
||||||
free_irq(trans_pcie->irq, trans);
|
free_irq(trans_pcie->irq, trans);
|
||||||
error:
|
error:
|
||||||
iwl_free_isr_ict(trans);
|
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_work_sync(&hdev->le_scan);
|
||||||
|
|
||||||
|
cancel_delayed_work(&hdev->power_off);
|
||||||
|
|
||||||
hci_req_cancel(hdev, ENODEV);
|
hci_req_cancel(hdev, ENODEV);
|
||||||
hci_req_lock(hdev);
|
hci_req_lock(hdev);
|
||||||
|
|
||||||
|
|
|
@ -1008,7 +1008,7 @@ static void l2cap_send_disconn_req(struct l2cap_conn *conn, struct l2cap_chan *c
|
||||||
if (!conn)
|
if (!conn)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (chan->mode == L2CAP_MODE_ERTM) {
|
if (chan->mode == L2CAP_MODE_ERTM && chan->state == BT_CONNECTED) {
|
||||||
__clear_retrans_timer(chan);
|
__clear_retrans_timer(chan);
|
||||||
__clear_monitor_timer(chan);
|
__clear_monitor_timer(chan);
|
||||||
__clear_ack_timer(chan);
|
__clear_ack_timer(chan);
|
||||||
|
|
|
@ -2875,6 +2875,22 @@ int mgmt_powered(struct hci_dev *hdev, u8 powered)
|
||||||
if (scan)
|
if (scan)
|
||||||
hci_send_cmd(hdev, HCI_OP_WRITE_SCAN_ENABLE, 1, &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_class(hdev);
|
||||||
update_name(hdev, hdev->dev_name);
|
update_name(hdev, hdev->dev_name);
|
||||||
update_eir(hdev);
|
update_eir(hdev);
|
||||||
|
|
|
@ -350,6 +350,9 @@ static void reg_regdb_search(struct work_struct *work)
|
||||||
struct reg_regdb_search_request *request;
|
struct reg_regdb_search_request *request;
|
||||||
const struct ieee80211_regdomain *curdom, *regdom;
|
const struct ieee80211_regdomain *curdom, *regdom;
|
||||||
int i, r;
|
int i, r;
|
||||||
|
bool set_reg = false;
|
||||||
|
|
||||||
|
mutex_lock(&cfg80211_mutex);
|
||||||
|
|
||||||
mutex_lock(®_regdb_search_mutex);
|
mutex_lock(®_regdb_search_mutex);
|
||||||
while (!list_empty(®_regdb_search_list)) {
|
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);
|
r = reg_copy_regd(®dom, curdom);
|
||||||
if (r)
|
if (r)
|
||||||
break;
|
break;
|
||||||
mutex_lock(&cfg80211_mutex);
|
set_reg = true;
|
||||||
set_regdom(regdom);
|
|
||||||
mutex_unlock(&cfg80211_mutex);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -375,6 +376,11 @@ static void reg_regdb_search(struct work_struct *work)
|
||||||
kfree(request);
|
kfree(request);
|
||||||
}
|
}
|
||||||
mutex_unlock(®_regdb_search_mutex);
|
mutex_unlock(®_regdb_search_mutex);
|
||||||
|
|
||||||
|
if (set_reg)
|
||||||
|
set_regdom(regdom);
|
||||||
|
|
||||||
|
mutex_unlock(&cfg80211_mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
static DECLARE_WORK(reg_regdb_work, reg_regdb_search);
|
static DECLARE_WORK(reg_regdb_work, reg_regdb_search);
|
||||||
|
|
Loading…
Reference in New Issue