mirror of https://gitee.com/openkylin/linux.git
Just three changes:
* fix a wrong GFP_KERNEL in hwsim * fix the debugfs mess after the mac80211 registration race fix * suppress false-positive RCU list lockdep warnings -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEH1e1rEeCd0AIMq6MB8qZga/fl8QFAl6itGEACgkQB8qZga/f l8RZAw/9HA9jyy/ZigEhnDG4dfYV5k92zLCzSY6Mo2EmGB+gy6KCTNyDTIVsKunM FA0a3gSOuir/VNGL+rCzYw8epCfJaJUbIbnXz0y5bYWcZKzc9gx+nb4vDKK/sMLN d4qKJwH4upkfAOBHo9P3ZdQ2X9YNLLZ9gq17IwUJnLZh4rBUKBQsFbs+TkyCg8bZ PmWCm6ZAK28nKUQGfJgxFX3SMz/CuMn86SBX4SjG6iKOnWl0XBI2u61ODRKJZ+A5 cFoZFAYWn3Dx8z04PFuxgDR93wFtekNfvm5+mlu0CDT3NuohkJ+SO4RhfERkvDU8 6SCnxmqXjP3SaRalbnwgUZPOGB0L1bSXuJTVvz1kOq2gQMXWbqtKMuhQJTijiTHi VPGRId28eH5JyWlb5THj0zP7uIxf05VxaEYszGDgrpvzK/jycxMt3oyq2KYUadCy idCRBoYuegMumqN4mwgYuecgTJ6hbRGPuXFUlGUVVcZ0APB4xkP/rWu9WmHsdNhB Q1+AfsjebgSv5upR78AqTWNrYyvkayoHYeck2e+4cFW5g1Mm4sE8sPWZdoU8SR73 LZaEtH6/Tl3sqxgNYcsET+VF0HXReB11T0fjxZDKHnENaSSt1MtJgfXhoQRe/Zyw FM3GRRxGFtt2Ic9QOchQF+sVNBKSnYuVvYJhVrIOGZLwif1wSRk= =SKNj -----END PGP SIGNATURE----- Merge tag 'mac80211-for-net-2020-04-24' of git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211 Johannes Berg says: ==================== Just three changes: * fix a wrong GFP_KERNEL in hwsim * fix the debugfs mess after the mac80211 registration race fix * suppress false-positive RCU list lockdep warnings ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
c651b461b5
|
@ -374,7 +374,7 @@ il3945_rs_rate_init(struct il_priv *il, struct ieee80211_sta *sta, u8 sta_id)
|
|||
}
|
||||
|
||||
static void *
|
||||
il3945_rs_alloc(struct ieee80211_hw *hw, struct dentry *debugfsdir)
|
||||
il3945_rs_alloc(struct ieee80211_hw *hw)
|
||||
{
|
||||
return hw->priv;
|
||||
}
|
||||
|
|
|
@ -2474,7 +2474,7 @@ il4965_rs_fill_link_cmd(struct il_priv *il, struct il_lq_sta *lq_sta,
|
|||
}
|
||||
|
||||
static void *
|
||||
il4965_rs_alloc(struct ieee80211_hw *hw, struct dentry *debugfsdir)
|
||||
il4965_rs_alloc(struct ieee80211_hw *hw)
|
||||
{
|
||||
return hw->priv;
|
||||
}
|
||||
|
|
|
@ -3019,7 +3019,7 @@ static void rs_fill_link_cmd(struct iwl_priv *priv,
|
|||
cpu_to_le16(priv->lib->bt_params->agg_time_limit);
|
||||
}
|
||||
|
||||
static void *rs_alloc(struct ieee80211_hw *hw, struct dentry *debugfsdir)
|
||||
static void *rs_alloc(struct ieee80211_hw *hw)
|
||||
{
|
||||
return hw->priv;
|
||||
}
|
||||
|
|
|
@ -3665,7 +3665,7 @@ static void rs_fill_lq_cmd(struct iwl_mvm *mvm,
|
|||
cpu_to_le16(iwl_mvm_coex_agg_time_limit(mvm, sta));
|
||||
}
|
||||
|
||||
static void *rs_alloc(struct ieee80211_hw *hw, struct dentry *debugfsdir)
|
||||
static void *rs_alloc(struct ieee80211_hw *hw)
|
||||
{
|
||||
return hw->priv;
|
||||
}
|
||||
|
|
|
@ -4068,7 +4068,7 @@ static void hwsim_virtio_rx_work(struct work_struct *work)
|
|||
}
|
||||
vq = hwsim_vqs[HWSIM_VQ_RX];
|
||||
sg_init_one(sg, skb->head, skb_end_offset(skb));
|
||||
err = virtqueue_add_inbuf(vq, sg, 1, skb, GFP_KERNEL);
|
||||
err = virtqueue_add_inbuf(vq, sg, 1, skb, GFP_ATOMIC);
|
||||
if (WARN(err, "virtqueue_add_inbuf returned %d\n", err))
|
||||
nlmsg_free(skb);
|
||||
else
|
||||
|
|
|
@ -261,7 +261,7 @@ static void rtl_rate_update(void *ppriv,
|
|||
{
|
||||
}
|
||||
|
||||
static void *rtl_rate_alloc(struct ieee80211_hw *hw, struct dentry *debugfsdir)
|
||||
static void *rtl_rate_alloc(struct ieee80211_hw *hw)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
return rtlpriv;
|
||||
|
|
|
@ -6007,7 +6007,9 @@ enum rate_control_capabilities {
|
|||
struct rate_control_ops {
|
||||
unsigned long capa;
|
||||
const char *name;
|
||||
void *(*alloc)(struct ieee80211_hw *hw, struct dentry *debugfsdir);
|
||||
void *(*alloc)(struct ieee80211_hw *hw);
|
||||
void (*add_debugfs)(struct ieee80211_hw *hw, void *priv,
|
||||
struct dentry *debugfsdir);
|
||||
void (*free)(void *priv);
|
||||
|
||||
void *(*alloc_sta)(void *priv, struct ieee80211_sta *sta, gfp_t gfp);
|
||||
|
|
|
@ -1183,8 +1183,6 @@ int ieee80211_register_hw(struct ieee80211_hw *hw)
|
|||
local->tx_headroom = max_t(unsigned int , local->hw.extra_tx_headroom,
|
||||
IEEE80211_TX_STATUS_HEADROOM);
|
||||
|
||||
debugfs_hw_add(local);
|
||||
|
||||
/*
|
||||
* if the driver doesn't specify a max listen interval we
|
||||
* use 5 which should be a safe default
|
||||
|
@ -1273,6 +1271,9 @@ int ieee80211_register_hw(struct ieee80211_hw *hw)
|
|||
if (result < 0)
|
||||
goto fail_wiphy_register;
|
||||
|
||||
debugfs_hw_add(local);
|
||||
rate_control_add_debugfs(local);
|
||||
|
||||
rtnl_lock();
|
||||
|
||||
/* add one default STA interface if supported */
|
||||
|
|
|
@ -214,17 +214,16 @@ static ssize_t rcname_read(struct file *file, char __user *userbuf,
|
|||
ref->ops->name, len);
|
||||
}
|
||||
|
||||
static const struct file_operations rcname_ops = {
|
||||
const struct file_operations rcname_ops = {
|
||||
.read = rcname_read,
|
||||
.open = simple_open,
|
||||
.llseek = default_llseek,
|
||||
};
|
||||
#endif
|
||||
|
||||
static struct rate_control_ref *rate_control_alloc(const char *name,
|
||||
struct ieee80211_local *local)
|
||||
static struct rate_control_ref *
|
||||
rate_control_alloc(const char *name, struct ieee80211_local *local)
|
||||
{
|
||||
struct dentry *debugfsdir = NULL;
|
||||
struct rate_control_ref *ref;
|
||||
|
||||
ref = kmalloc(sizeof(struct rate_control_ref), GFP_KERNEL);
|
||||
|
@ -234,13 +233,7 @@ static struct rate_control_ref *rate_control_alloc(const char *name,
|
|||
if (!ref->ops)
|
||||
goto free;
|
||||
|
||||
#ifdef CONFIG_MAC80211_DEBUGFS
|
||||
debugfsdir = debugfs_create_dir("rc", local->hw.wiphy->debugfsdir);
|
||||
local->debugfs.rcdir = debugfsdir;
|
||||
debugfs_create_file("name", 0400, debugfsdir, ref, &rcname_ops);
|
||||
#endif
|
||||
|
||||
ref->priv = ref->ops->alloc(&local->hw, debugfsdir);
|
||||
ref->priv = ref->ops->alloc(&local->hw);
|
||||
if (!ref->priv)
|
||||
goto free;
|
||||
return ref;
|
||||
|
|
|
@ -60,6 +60,29 @@ static inline void rate_control_add_sta_debugfs(struct sta_info *sta)
|
|||
#endif
|
||||
}
|
||||
|
||||
extern const struct file_operations rcname_ops;
|
||||
|
||||
static inline void rate_control_add_debugfs(struct ieee80211_local *local)
|
||||
{
|
||||
#ifdef CONFIG_MAC80211_DEBUGFS
|
||||
struct dentry *debugfsdir;
|
||||
|
||||
if (!local->rate_ctrl)
|
||||
return;
|
||||
|
||||
if (!local->rate_ctrl->ops->add_debugfs)
|
||||
return;
|
||||
|
||||
debugfsdir = debugfs_create_dir("rc", local->hw.wiphy->debugfsdir);
|
||||
local->debugfs.rcdir = debugfsdir;
|
||||
debugfs_create_file("name", 0400, debugfsdir,
|
||||
local->rate_ctrl, &rcname_ops);
|
||||
|
||||
local->rate_ctrl->ops->add_debugfs(&local->hw, local->rate_ctrl->priv,
|
||||
debugfsdir);
|
||||
#endif
|
||||
}
|
||||
|
||||
void ieee80211_check_rate_mask(struct ieee80211_sub_if_data *sdata);
|
||||
|
||||
/* Get a reference to the rate control algorithm. If `name' is NULL, get the
|
||||
|
|
|
@ -1635,7 +1635,7 @@ minstrel_ht_init_cck_rates(struct minstrel_priv *mp)
|
|||
}
|
||||
|
||||
static void *
|
||||
minstrel_ht_alloc(struct ieee80211_hw *hw, struct dentry *debugfsdir)
|
||||
minstrel_ht_alloc(struct ieee80211_hw *hw)
|
||||
{
|
||||
struct minstrel_priv *mp;
|
||||
|
||||
|
@ -1673,7 +1673,17 @@ minstrel_ht_alloc(struct ieee80211_hw *hw, struct dentry *debugfsdir)
|
|||
mp->update_interval = HZ / 10;
|
||||
mp->new_avg = true;
|
||||
|
||||
minstrel_ht_init_cck_rates(mp);
|
||||
|
||||
return mp;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_MAC80211_DEBUGFS
|
||||
static void minstrel_ht_add_debugfs(struct ieee80211_hw *hw, void *priv,
|
||||
struct dentry *debugfsdir)
|
||||
{
|
||||
struct minstrel_priv *mp = priv;
|
||||
|
||||
mp->fixed_rate_idx = (u32) -1;
|
||||
debugfs_create_u32("fixed_rate_idx", S_IRUGO | S_IWUGO, debugfsdir,
|
||||
&mp->fixed_rate_idx);
|
||||
|
@ -1681,12 +1691,8 @@ minstrel_ht_alloc(struct ieee80211_hw *hw, struct dentry *debugfsdir)
|
|||
&mp->sample_switch);
|
||||
debugfs_create_bool("new_avg", S_IRUGO | S_IWUSR, debugfsdir,
|
||||
&mp->new_avg);
|
||||
#endif
|
||||
|
||||
minstrel_ht_init_cck_rates(mp);
|
||||
|
||||
return mp;
|
||||
}
|
||||
#endif
|
||||
|
||||
static void
|
||||
minstrel_ht_free(void *priv)
|
||||
|
@ -1725,6 +1731,7 @@ static const struct rate_control_ops mac80211_minstrel_ht = {
|
|||
.alloc = minstrel_ht_alloc,
|
||||
.free = minstrel_ht_free,
|
||||
#ifdef CONFIG_MAC80211_DEBUGFS
|
||||
.add_debugfs = minstrel_ht_add_debugfs,
|
||||
.add_sta_debugfs = minstrel_ht_add_sta_debugfs,
|
||||
#endif
|
||||
.get_expected_throughput = minstrel_ht_get_expected_throughput,
|
||||
|
|
|
@ -231,7 +231,8 @@ struct sta_info *sta_info_get_by_idx(struct ieee80211_sub_if_data *sdata,
|
|||
struct sta_info *sta;
|
||||
int i = 0;
|
||||
|
||||
list_for_each_entry_rcu(sta, &local->sta_list, list) {
|
||||
list_for_each_entry_rcu(sta, &local->sta_list, list,
|
||||
lockdep_is_held(&local->sta_mtx)) {
|
||||
if (sdata != sta->sdata)
|
||||
continue;
|
||||
if (i < idx) {
|
||||
|
|
Loading…
Reference in New Issue