Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 41e26856 authored by David S. Miller's avatar David S. Miller
Browse files


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: default avatarDavid S. Miller <davem@davemloft.net>
parents 3e10986d 1199992d
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -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);
+2 −0
Original line number Original line Diff line number Diff line
@@ -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);


+1 −1
Original line number Original line Diff line number Diff line
@@ -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);
+16 −0
Original line number Original line Diff line number Diff line
@@ -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);
+9 −3
Original line number Original line Diff line number Diff line
@@ -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(&reg_regdb_search_mutex);
	mutex_lock(&reg_regdb_search_mutex);
	while (!list_empty(&reg_regdb_search_list)) {
	while (!list_empty(&reg_regdb_search_list)) {
@@ -365,9 +368,7 @@ static void reg_regdb_search(struct work_struct *work)
				r = reg_copy_regd(&regdom, curdom);
				r = reg_copy_regd(&regdom, 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(&reg_regdb_search_mutex);
	mutex_unlock(&reg_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);