[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CA+BoTQmukTiNFrsLA5rdiQe=Ga45JNuFzSmqQ4h-VJMW97f=_w@mail.gmail.com>
Date: Fri, 22 May 2015 12:16:17 +0200
From: Michal Kazior <michal.kazior@...to.com>
To: Kalle Valo <kvalo@...eaurora.org>
Cc: David Miller <davem@...emloft.net>,
linux-wireless <linux-wireless@...r.kernel.org>,
Network Development <netdev@...r.kernel.org>
Subject: Re: pull-request: wireless-drivers-next 2015-05-21
On 21 May 2015 at 15:39, Kalle Valo <kvalo@...eaurora.org> wrote:
> Hi Dave,
>
> here's a wireless-drivers pull request for 4.2. This time please pay
> extra attention to this pull as there are two problems:
>
> First of all as you can see the diffstat from git-pull-request in the
> end is just weird. I was long and hard trying to check everything and to
> my understanding all the merges look ok and I cannot explain the reason
> for the diffstat, but of course I might be missing something. Maybe
> git-request-pull is just buggy? At least with gitk everything looks to
> be ok and the patch list below also looks valid.
>
> Secondly there's a non-trivial conflict in
> drivers/net/wireless/ath/ath10k/mac.c which is due to removal of
> FIF_PROMISC_IN_BSS in commit df1404650c. You need to remove more code
> than just the obvious conflicts shown by git. In the end of this mail I
> added a git diff output after I fixed the conflict, hopefully that helps
> you to fix it. The main points are that you remove
> ath10k_mac_should_disable_promisc() and the last ath10k_monitor_recalc()
> call from ath10k_vdev_start_restart() along with the obvious conflict
> fixes git points out.
>
> There's also a patch from Michal which will also help to fix the
> resolution. Michal, please double check the resolution proposal below so
> that I didn't miss anything.
>
> https://patchwork.kernel.org/patch/6387631/
[...]
> diff --cc drivers/net/wireless/ath/ath10k/mac.c
> index fcd08b2f8d26,eaa0182e001d..000000000000
> --- a/drivers/net/wireless/ath/ath10k/mac.c
> +++ b/drivers/net/wireless/ath/ath10k/mac.c
> @@@ -766,9 -1031,68 +1031,48 @@@ static int ath10k_monitor_stop(struct a
> return 0;
> }
>
> -static bool ath10k_mac_should_disable_promisc(struct ath10k *ar)
> -{
> - struct ath10k_vif *arvif;
> -
> - if (!(ar->filter_flags & FIF_PROMISC_IN_BSS))
> - return true;
> -
> - if (!ar->num_started_vdevs)
> - return false;
> -
> - list_for_each_entry(arvif, &ar->arvifs, list)
> - if (arvif->vdev_type != WMI_VDEV_TYPE_AP)
> - return false;
> -
> - ath10k_dbg(ar, ATH10K_DBG_MAC,
> - "mac disabling promiscuous mode because vdev is started\n");
> - return true;
> -}
> -
> + static bool ath10k_mac_monitor_vdev_is_needed(struct ath10k *ar)
> + {
> + int num_ctx;
> +
> + /* At least one chanctx is required to derive a channel to start
> + * monitor vdev on.
> + */
> + num_ctx = ath10k_mac_num_chanctxs(ar);
> + if (num_ctx == 0)
> + return false;
> +
> + /* If there's already an existing special monitor interface then don't
> + * bother creating another monitor vdev.
> + */
> + if (ar->monitor_arvif)
> + return false;
> +
> + return ar->monitor ||
> - !ath10k_mac_should_disable_promisc(ar) ||
> + test_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
> + }
> +
> + static bool ath10k_mac_monitor_vdev_is_allowed(struct ath10k *ar)
> + {
> + int num_ctx;
> +
> + num_ctx = ath10k_mac_num_chanctxs(ar);
> +
> + /* FIXME: Current interface combinations and cfg80211/mac80211 code
> + * shouldn't allow this but make sure to prevent handling the following
> + * case anyway since multi-channel DFS hasn't been tested at all.
> + */
> + if (test_bit(ATH10K_CAC_RUNNING, &ar->dev_flags) && num_ctx > 1)
> + return false;
> +
> + return true;
> + }
> +
> static int ath10k_monitor_recalc(struct ath10k *ar)
> {
> - bool should_start;
> + bool needed;
> + bool allowed;
> + int ret;
>
> lockdep_assert_held(&ar->conf_mutex);
>
Looks good to me.
There's still some code left which is unnecessary (see 2 last hunks on
patchwork) because due to FIF_PROMISC_IN_BSS removal entire commit
548462133d98 becomes obsolete. Since these 2 hunk leftovers don't
break anything functionally I guess this can be cleaned up in a follow
up patch after the merge. Just my 2cc.
> @@@ -871,12 -1231,46 +1211,46 @@@ static void ath10k_recalc_radar_detecti
> }
> }
>
> - static int ath10k_vdev_start_restart(struct ath10k_vif *arvif, bool restart)
> + static int ath10k_vdev_stop(struct ath10k_vif *arvif)
> + {
> + struct ath10k *ar = arvif->ar;
> + int ret;
> +
> + lockdep_assert_held(&ar->conf_mutex);
> +
> + reinit_completion(&ar->vdev_setup_done);
> +
> + ret = ath10k_wmi_vdev_stop(ar, arvif->vdev_id);
> + if (ret) {
> + ath10k_warn(ar, "failed to stop WMI vdev %i: %d\n",
> + arvif->vdev_id, ret);
> + return ret;
> + }
> +
> + ret = ath10k_vdev_setup_sync(ar);
> + if (ret) {
> + ath10k_warn(ar, "failed to syncronise setup for vdev %i: %d\n",
> + arvif->vdev_id, ret);
> + return ret;
> + }
> +
> + WARN_ON(ar->num_started_vdevs == 0);
> +
> + if (ar->num_started_vdevs != 0) {
> + ar->num_started_vdevs--;
> + ath10k_recalc_radar_detection(ar);
> + }
> +
> + return ret;
> + }
> +
> + static int ath10k_vdev_start_restart(struct ath10k_vif *arvif,
> + const struct cfg80211_chan_def *chandef,
> + bool restart)
> {
> struct ath10k *ar = arvif->ar;
> - struct cfg80211_chan_def *chandef = &ar->chandef;
> struct wmi_vdev_start_request_arg arg = {};
> - int ret = 0, ret2;
> + int ret = 0;
>
> lockdep_assert_held(&ar->conf_mutex);
>
Kalle, I'm not seeing this when I merge your pull tag on top of
net-next/master. Am I missing something?
Anyway FYI ath10k_vdev_stop() was moved up in the code to avoid
forward declaration in 822b7e0b633b.
MichaĆ
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists