iwlwifi: mvm: don't lock mutex in RCU critical section
We cannot lock a mutex while we're in an RCU critical section. At the same time, we're accessing data structures that are protected by the mvm->mutex anyway, so just move the entire locking here to use only that. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Luca Coelho <luciano.coelho@intel.com> Link: https://lore.kernel.org/r/iwlwifi.20210411124417.4d27bd36e10e.I1fd8e8fe442c41a5deaa560452b598ed7a60ada5@changeid Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
This commit is contained in:
parent
aa1540ca76
commit
6da29d3b42
@ -1,6 +1,6 @@
|
|||||||
// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
|
// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2012-2014, 2018-2020 Intel Corporation
|
* Copyright (C) 2012-2014, 2018-2021 Intel Corporation
|
||||||
* Copyright (C) 2013-2015 Intel Mobile Communications GmbH
|
* Copyright (C) 2013-2015 Intel Mobile Communications GmbH
|
||||||
* Copyright (C) 2016-2017 Intel Deutschland GmbH
|
* Copyright (C) 2016-2017 Intel Deutschland GmbH
|
||||||
*/
|
*/
|
||||||
@ -1210,10 +1210,10 @@ static int _iwl_dbgfs_inject_beacon_ie(struct iwl_mvm *mvm, char *bin, int len)
|
|||||||
IWL_UCODE_TLV_API_NEW_BEACON_TEMPLATE))
|
IWL_UCODE_TLV_API_NEW_BEACON_TEMPLATE))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
rcu_read_lock();
|
mutex_lock(&mvm->mutex);
|
||||||
|
|
||||||
for (i = 0; i < NUM_MAC_INDEX_DRIVER; i++) {
|
for (i = 0; i < NUM_MAC_INDEX_DRIVER; i++) {
|
||||||
vif = iwl_mvm_rcu_dereference_vif_id(mvm, i, true);
|
vif = iwl_mvm_rcu_dereference_vif_id(mvm, i, false);
|
||||||
if (!vif)
|
if (!vif)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -1253,18 +1253,16 @@ static int _iwl_dbgfs_inject_beacon_ie(struct iwl_mvm *mvm, char *bin, int len)
|
|||||||
&beacon_cmd.tim_size,
|
&beacon_cmd.tim_size,
|
||||||
beacon->data, beacon->len);
|
beacon->data, beacon->len);
|
||||||
|
|
||||||
mutex_lock(&mvm->mutex);
|
|
||||||
iwl_mvm_mac_ctxt_send_beacon_cmd(mvm, beacon, &beacon_cmd,
|
iwl_mvm_mac_ctxt_send_beacon_cmd(mvm, beacon, &beacon_cmd,
|
||||||
sizeof(beacon_cmd));
|
sizeof(beacon_cmd));
|
||||||
mutex_unlock(&mvm->mutex);
|
mutex_unlock(&mvm->mutex);
|
||||||
|
|
||||||
dev_kfree_skb(beacon);
|
dev_kfree_skb(beacon);
|
||||||
|
|
||||||
rcu_read_unlock();
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
out_err:
|
out_err:
|
||||||
rcu_read_unlock();
|
mutex_unlock(&mvm->mutex);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user