Merge tag 'mac80211-next-for-davem-2015-01-15' of git://git.kernel.org/pub/scm/linux...
authorDavid S. Miller <davem@davemloft.net>
Fri, 16 Jan 2015 00:16:56 +0000 (19:16 -0500)
committerDavid S. Miller <davem@davemloft.net>
Fri, 16 Jan 2015 00:16:56 +0000 (19:16 -0500)
Here's a big pile of changes for this round.

We have
 * a lot of regulatory code changes to deal with the
   way newer Intel devices handle this
 * a change to drop packets while disconnecting from
   an AP instead of trying to wait for them
 * a new attempt at improving the tailroom accounting
   to not kick in too much for performance reasons
 * improvements in wireless link statistics
 * many other small improvements and small fixes that
   didn't seem necessary for 3.19 (e.g. in hwsim which
   is testing only code)

Conflicts:
drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c

Minor overlapping changes.

Signed-off-by: David S. Miller <davem@davemloft.net>
1  2 
Documentation/kernel-parameters.txt
drivers/net/wireless/ath/ath9k/xmit.c
drivers/net/wireless/iwlwifi/mvm/mac80211.c
drivers/net/wireless/mac80211_hwsim.c
drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c

@@@ -829,15 -829,6 +829,15 @@@ bytes respectively. Such letter suffixe
                        CONFIG_DEBUG_PAGEALLOC, hence this option will not help
                        tracking down these problems.
  
 +      debug_pagealloc=
 +                      [KNL] When CONFIG_DEBUG_PAGEALLOC is set, this
 +                      parameter enables the feature at boot time. In
 +                      default, it is disabled. We can avoid allocating huge
 +                      chunk of memory for debug pagealloc if we don't enable
 +                      it at boot time and the system will work mostly same
 +                      with the kernel built without CONFIG_DEBUG_PAGEALLOC.
 +                      on: enable the feature
 +
        debugpat        [X86] Enable PAT debugging
  
        decnet.addr=    [HW,NET]
                        multiple times interleaved with hugepages= to reserve
                        huge pages of different sizes. Valid pages sizes on
                        x86-64 are 2M (when the CPU supports "pse") and 1G
 -                      (when the CPU supports the "pdpe1gb" cpuinfo flag)
 -                      Note that 1GB pages can only be allocated at boot time
 -                      using hugepages= and not freed afterwards.
 +                      (when the CPU supports the "pdpe1gb" cpuinfo flag).
  
        hvc_iucv=       [S390] Number of z/VM IUCV hypervisor console (HVC)
                               terminal devices. Valid values: 0..8
                        Formats: { "ima" | "ima-ng" }
                        Default: "ima-ng"
  
 +      ima_template_fmt=
 +                      [IMA] Define a custom template format.
 +                      Format: { "field1|...|fieldN" }
 +
        ima.ahash_minsize= [IMA] Minimum file size for asynchronous hash usage
                        Format: <min_file_size>
                        Set the minimal file size for using asynchronous hash.
                       disable
                         Do not enable intel_pstate as the default
                         scaling driver for the supported processors
 +                     force
 +                       Enable intel_pstate on systems that prohibit it by default
 +                       in favor of acpi-cpufreq. Forcing the intel_pstate driver
 +                       instead of acpi-cpufreq may disable platform features, such
 +                       as thermal controls and power capping, that rely on ACPI
 +                       P-States information being indicated to OSPM and therefore
 +                       should be used with caution. This option does not work with
 +                       processors that aren't supported by the intel_pstate driver
 +                       or on platforms that use pcc-cpufreq instead of acpi-cpufreq.
                       no_hwp
                         Do not enable hardware P state control (HWP)
                         if available.
        OSS             [HW,OSS]
                        See Documentation/sound/oss/oss-parameters.txt
  
 +      page_owner=     [KNL] Boot-time page_owner enabling option.
 +                      Storage of the information about who allocated
 +                      each page is disabled in default. With this switch,
 +                      we can turn it on.
 +                      on: enable the feature
 +
        panic=          [KNL] Kernel behaviour on panic: delay <timeout>
                        timeout > 0: seconds before rebooting
                        timeout = 0: wait forever
  
        retain_initrd   [RAM] Keep initrd memory after extraction
  
+       rfkill.default_state=
+               0       "airplane mode".  All wifi, bluetooth, wimax, gps, fm,
+                       etc. communication is blocked by default.
+               1       Unblocked.
+       rfkill.master_switch_mode=
+               0       The "airplane mode" button does nothing.
+               1       The "airplane mode" button toggles between everything
+                       blocked and the previous configuration.
+               2       The "airplane mode" button toggles between everything
+                       blocked and everything unblocked.
        rhash_entries=  [KNL,NET]
                        Set number of hash buckets for route cache
  
                        neutralize any effect of /proc/sys/kernel/sysrq.
                        Useful for debugging.
  
 +      tcpmhash_entries= [KNL,NET]
 +                      Set the number of tcp_metrics_hash slots.
 +                      Default value is 8192 or 16384 depending on total
 +                      ram pages. This is used to specify the TCP metrics
 +                      cache size. See Documentation/networking/ip-sysctl.txt
 +                      "tcp_no_metrics_save" section for more details.
 +
        tdfx=           [HW,DRM]
  
        test_suspend=   [SUSPEND][,N]
                        See also Documentation/trace/ftrace.txt "trace options"
                        section.
  
 +      tp_printk[FTRACE]
 +                      Have the tracepoints sent to printk as well as the
 +                      tracing ring buffer. This is useful for early boot up
 +                      where the system hangs or reboots and does not give the
 +                      option for reading the tracing buffer or performing a
 +                      ftrace_dump_on_oops.
 +
 +                      To turn off having tracepoints sent to printk,
 +                       echo 0 > /proc/sys/kernel/tracepoint_printk
 +                      Note, echoing 1 into this file without the
 +                      tracepoint_printk kernel cmdline option has no effect.
 +
 +                      ** CAUTION **
 +
 +                      Having tracepoints sent to printk() and activating high
 +                      frequency tracepoints such as irq or sched, can cause
 +                      the system to live lock.
 +
        traceoff_on_warning
                        [FTRACE] enable this option to disable tracing when a
                        warning is hit. This turns off "tracing_on". Tracing can
@@@ -1106,7 -1106,7 +1106,7 @@@ static u8 ath_get_rate_txpower(struct a
                return MAX_RATE_POWER;
  
        if (!AR_SREV_9300_20_OR_LATER(ah)) {
 -              /* ar9002 is not sipported for the moment */
 +              /* ar9002 does not support TPC for the moment */
                return MAX_RATE_POWER;
        }
  
@@@ -2259,7 -2259,7 +2259,7 @@@ int ath_tx_start(struct ieee80211_hw *h
        struct ath_txq *txq = txctl->txq;
        struct ath_atx_tid *tid = NULL;
        struct ath_buf *bf;
-       bool queue, skip_uapsd = false;
+       bool queue, skip_uapsd = false, ps_resp;
        int q, ret;
  
        if (vif)
        if (info->flags & IEEE80211_TX_CTL_TX_OFFCHAN)
                txctl->force_channel = true;
  
+       ps_resp = !!(info->control.flags & IEEE80211_TX_CTRL_PS_RESPONSE);
        ret = ath_tx_prepare(hw, skb, txctl);
        if (ret)
            return ret;
        if (txctl->an && queue)
                tid = ath_get_skb_tid(sc, txctl->an, skb);
  
-       if (!skip_uapsd && (info->flags & IEEE80211_TX_CTL_PS_RESPONSE)) {
+       if (!skip_uapsd && ps_resp) {
                ath_txq_unlock(sc, txq);
                txq = sc->tx.uapsdq;
                ath_txq_lock(sc, txq);
@@@ -326,6 -326,8 +326,8 @@@ int iwl_mvm_mac_setup_register(struct i
        hw->radiotap_vht_details |= IEEE80211_RADIOTAP_VHT_KNOWN_STBC |
                IEEE80211_RADIOTAP_VHT_KNOWN_BEAMFORMED;
        hw->rate_control_algorithm = "iwl-mvm-rs";
+       hw->uapsd_queues = IWL_MVM_UAPSD_QUEUES;
+       hw->uapsd_max_sp_len = IWL_UAPSD_MAX_SP;
  
        /*
         * Enable 11w if advertised by firmware and software crypto
            !iwlwifi_mod_params.sw_crypto)
                hw->flags |= IEEE80211_HW_MFP_CAPABLE;
  
-       if (mvm->fw->ucode_capa.flags & IWL_UCODE_TLV_FLAGS_UAPSD_SUPPORT &&
-           !iwlwifi_mod_params.uapsd_disable) {
-               hw->flags |= IEEE80211_HW_SUPPORTS_UAPSD;
-               hw->uapsd_queues = IWL_MVM_UAPSD_QUEUES;
-               hw->uapsd_max_sp_len = IWL_UAPSD_MAX_SP;
-       }
        if (mvm->fw->ucode_capa.api[0] & IWL_UCODE_TLV_API_LMAC_SCAN ||
            mvm->fw->ucode_capa.capa[0] & IWL_UCODE_TLV_CAPA_UMAC_SCAN) {
                hw->flags |= IEEE80211_SINGLE_HW_SCAN_ON_ALL_BANDS;
@@@ -1004,13 -999,8 +999,13 @@@ void __iwl_mvm_mac_stop(struct iwl_mvm 
  {
        lockdep_assert_held(&mvm->mutex);
  
 -      /* disallow low power states when the FW is down */
 -      iwl_mvm_ref(mvm, IWL_MVM_REF_UCODE_DOWN);
 +      /*
 +       * Disallow low power states when the FW is down by taking
 +       * the UCODE_DOWN ref. in case of ongoing hw restart the
 +       * ref is already taken, so don't take it again.
 +       */
 +      if (!test_bit(IWL_MVM_STATUS_IN_HW_RESTART, &mvm->status))
 +              iwl_mvm_ref(mvm, IWL_MVM_REF_UCODE_DOWN);
  
        /* async_handlers_wk is now blocked */
  
        /* the fw is stopped, the aux sta is dead: clean up driver state */
        iwl_mvm_del_aux_sta(mvm);
  
 +      /*
 +       * Clear IN_HW_RESTART flag when stopping the hw (as restart_complete()
 +       * won't be called in this case).
 +       */
 +      clear_bit(IWL_MVM_STATUS_IN_HW_RESTART, &mvm->status);
 +
        mvm->ucode_loaded = false;
  }
  
@@@ -1158,6 -1142,10 +1153,10 @@@ static int iwl_mvm_mac_add_interface(st
                mvm->bf_allowed_vif = mvmvif;
                vif->driver_flags |= IEEE80211_VIF_BEACON_FILTER |
                                     IEEE80211_VIF_SUPPORTS_CQM_RSSI;
+               if (mvm->fw->ucode_capa.flags &
+                                       IWL_UCODE_TLV_FLAGS_UAPSD_SUPPORT &&
+                   !iwlwifi_mod_params.uapsd_disable)
+                       vif->driver_flags |= IEEE80211_VIF_SUPPORTS_UAPSD;
        }
  
        /*
@@@ -395,6 -395,7 +395,6 @@@ static int hwsim_radio_idx
  static struct platform_driver mac80211_hwsim_driver = {
        .driver = {
                .name = "mac80211_hwsim",
 -              .owner = THIS_MODULE,
        },
  };
  
@@@ -625,22 -626,22 +625,22 @@@ static int hwsim_fops_ps_write(void *da
        old_ps = data->ps;
        data->ps = val;
  
+       local_bh_disable();
        if (val == PS_MANUAL_POLL) {
-               ieee80211_iterate_active_interfaces(data->hw,
-                                                   IEEE80211_IFACE_ITER_NORMAL,
-                                                   hwsim_send_ps_poll, data);
+               ieee80211_iterate_active_interfaces_atomic(
+                       data->hw, IEEE80211_IFACE_ITER_NORMAL,
+                       hwsim_send_ps_poll, data);
                data->ps_poll_pending = true;
        } else if (old_ps == PS_DISABLED && val != PS_DISABLED) {
-               ieee80211_iterate_active_interfaces(data->hw,
-                                                   IEEE80211_IFACE_ITER_NORMAL,
-                                                   hwsim_send_nullfunc_ps,
-                                                   data);
+               ieee80211_iterate_active_interfaces_atomic(
+                       data->hw, IEEE80211_IFACE_ITER_NORMAL,
+                       hwsim_send_nullfunc_ps, data);
        } else if (old_ps != PS_DISABLED && val == PS_DISABLED) {
-               ieee80211_iterate_active_interfaces(data->hw,
-                                                   IEEE80211_IFACE_ITER_NORMAL,
-                                                   hwsim_send_nullfunc_no_ps,
-                                                   data);
+               ieee80211_iterate_active_interfaces_atomic(
+                       data->hw, IEEE80211_IFACE_ITER_NORMAL,
+                       hwsim_send_nullfunc_no_ps, data);
        }
+       local_bh_enable();
  
        return 0;
  }
@@@ -2149,14 -2150,14 +2149,14 @@@ static int append_radio_msg(struct sk_b
        if (param->regd) {
                int i;
  
-               for (i = 0; hwsim_world_regdom_custom[i] != param->regd &&
-                    i < ARRAY_SIZE(hwsim_world_regdom_custom); i++)
-                       ;
+               for (i = 0; i < ARRAY_SIZE(hwsim_world_regdom_custom); i++) {
+                       if (hwsim_world_regdom_custom[i] != param->regd)
+                               continue;
  
-               if (i < ARRAY_SIZE(hwsim_world_regdom_custom)) {
                        ret = nla_put_u32(skb, HWSIM_ATTR_REG_CUSTOM_REG, i);
                        if (ret < 0)
                                return ret;
+                       break;
                }
        }
  
@@@ -275,8 -275,7 +275,8 @@@ static int rtw_cfg80211_inform_bss(stru
                            &pnetwork->network)) {
                notify_signal = 100 * translate_percentage_to_dbm(padapter->recvpriv.signal_strength);  /* dbm */
        } else {
 -              notify_signal = 100 * translate_percentage_to_dbm(pnetwork->network.PhyInfo.SignalStrength);    /* dbm */
 +              notify_signal = 100 * translate_percentage_to_dbm(
 +                      pnetwork->network.SignalStrength);      /* dbm */
        }
  
        bss = cfg80211_inform_bss(wiphy, notify_channel,
@@@ -472,6 -471,7 +472,6 @@@ static int rtw_cfg80211_ap_set_encrypti
                                          int set_tx, const u8 *sta_addr,
                                          struct key_params *keyparms)
  {
 -      int ret = 0;
        int key_len;
        struct sta_info *psta = NULL, *pbcmc_sta = NULL;
        struct rtw_adapter *padapter = netdev_priv(dev);
  
  exit:
  
 -      return ret;
 +      return 0;
  }
  #endif
  
@@@ -850,6 -850,7 +850,6 @@@ static int rtw_cfg80211_set_encryption(
                                            dot11PrivacyAlgrthm;
                                }
                        }
 -              } else if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)) {        /* adhoc mode */
                }
        }
  
@@@ -1091,17 -1092,17 +1091,17 @@@ static int cfg80211_rtw_get_station(str
                        goto exit;
                }
  
-               sinfo->filled |= STATION_INFO_SIGNAL;
+               sinfo->filled |= BIT(NL80211_STA_INFO_SIGNAL);
                sinfo->signal = translate_percentage_to_dbm(padapter->recvpriv.
                                                            signal_strength);
  
-               sinfo->filled |= STATION_INFO_TX_BITRATE;
+               sinfo->filled |= BIT(NL80211_STA_INFO_TX_BITRATE);
                sinfo->txrate.legacy = rtw_get_cur_max_rate(padapter);
  
-               sinfo->filled |= STATION_INFO_RX_PACKETS;
+               sinfo->filled |= BIT(NL80211_STA_INFO_RX_PACKETS);
                sinfo->rx_packets = sta_rx_data_pkts(psta);
  
-               sinfo->filled |= STATION_INFO_TX_PACKETS;
+               sinfo->filled |= BIT(NL80211_STA_INFO_TX_PACKETS);
                sinfo->tx_packets = psta->sta_stats.tx_pkts;
        }
  
@@@ -2363,7 -2364,7 +2363,7 @@@ void rtw_cfg80211_indicate_sta_assoc(st
                        ie_offset = offsetof(struct ieee80211_mgmt,
                                             u.reassoc_req.variable);
  
-               sinfo.filled = STATION_INFO_ASSOC_REQ_IES;
+               sinfo.filled = 0;
                sinfo.assoc_req_ies = pmgmt_frame + ie_offset;
                sinfo.assoc_req_ies_len = frame_len - ie_offset;
                cfg80211_new_sta(ndev, hdr->addr2, &sinfo, GFP_ATOMIC);
@@@ -2430,16 -2431,20 +2430,16 @@@ void rtw_cfg80211_indicate_sta_disassoc
  
  static int rtw_cfg80211_monitor_if_open(struct net_device *ndev)
  {
 -      int ret = 0;
 -
        DBG_8723A("%s\n", __func__);
  
 -      return ret;
 +      return 0;
  }
  
  static int rtw_cfg80211_monitor_if_close(struct net_device *ndev)
  {
 -      int ret = 0;
 -
        DBG_8723A("%s\n", __func__);
  
 -      return ret;
 +      return 0;
  }
  
  static int rtw_cfg80211_monitor_if_xmit_entry(struct sk_buff *skb,
@@@ -2568,9 -2573,11 +2568,9 @@@ fail
  static int
  rtw_cfg80211_monitor_if_set_mac_address(struct net_device *ndev, void *addr)
  {
 -      int ret = 0;
 -
        DBG_8723A("%s\n", __func__);
  
 -      return ret;
 +      return 0;
  }
  
  static const struct net_device_ops rtw_cfg80211_monitor_if_ops = {