From: Johannes Berg <johannes@sipsolutions.net>
To: Michal Kazior <michal.kazior@tieto.com>
Cc: linux-wireless@vger.kernel.org, luca@coelho.fi
Subject: Re: [PATCH v6 1/6] mac80211: introduce switch_vif_chanctx op
Date: Thu, 22 May 2014 16:45:38 +0200 [thread overview]
Message-ID: <1400769938.4174.29.camel@jlt4.sipsolutions.net> (raw)
In-Reply-To: <1400767676-15994-2-git-send-email-michal.kazior@tieto.com> (sfid-20140522_161507_063110_E183A166)
On Thu, 2014-05-22 at 16:07 +0200, Michal Kazior wrote:
> This new device driver operation will be used for
> channel context reservation and switching.
Heh. Luca just had some very similar code. But that's not necessarily a
bad thing - we can compare :)
> + int (*switch_vif_chanctx)(struct ieee80211_hw *hw,
> + struct ieee80211_vif **vifs,
> + struct ieee80211_chanctx_conf **old_ctx,
> + struct ieee80211_chanctx_conf **new_ctx,
> + int n_vifs,
> + enum ieee80211_chanctx_swmode swmode);
Luca had a struct here with (vif, old, new), I think that makes sense.
> +#define IEEE80211_MAX_NUM_SWITCH_VIFS 8
:-)
That seems artificial though - why not dynamically allocate?
> +static inline int drv_switch_vif_chanctx(struct ieee80211_local *local,
> + struct ieee80211_sub_if_data **sdata,
> + struct ieee80211_chanctx **old_ctx,
> + struct ieee80211_chanctx **new_ctx,
> + int n_vifs,
> + enum ieee80211_chanctx_swmode swmode)
> +{
> + struct ieee80211_vif *vifs[IEEE80211_MAX_NUM_SWITCH_VIFS] = {};
> + struct ieee80211_chanctx_conf *old_conf[IEEE80211_MAX_NUM_SWITCH_VIFS] = {};
> + struct ieee80211_chanctx_conf *new_conf[IEEE80211_MAX_NUM_SWITCH_VIFS] = {};
> + int i, ret = 0;
That's a little big for an inline?
> + if (local->ops->switch_vif_chanctx)
> + return -EOPNOTSUPP;
> +
> + for (i = 0; i < n_vifs; i++)
> + if (!check_sdata_in_driver(sdata[i]))
> + return -EIO;
> +
> + for (i = 0; i < n_vifs; i++) {
> + trace_drv_switch_vif_chanctx(local, sdata[i], old_ctx[i],
> + new_ctx[i], n_vifs, swmode, i);
Hmm. This is somewhat ugly since the loop always runs. In theory it's
possible to do this all with dynamic_array() and code in the assign path
of the tracepoint, I think that'd be better. Or even for now just leave
the tracing to have just a subset or something (e.g. at most 2
interfaces)
> +++ b/net/mac80211/main.c
> @@ -502,6 +502,8 @@ struct ieee80211_hw *ieee80211_alloc_hw(size_t priv_data_len,
> if (WARN_ON(i != 0 && i != 5))
> return NULL;
> use_chanctx = i == 5;
> + if (WARN_ON(!use_chanctx && ops->switch_vif_chanctx))
> + return NULL;
I don't think this makes sense - we perfectly handle the case right now
by disconnecting (and not advertising switch to userspace, I guess? if
not we should)
Requiring drivers to implement this just makes things more difficult,
and the channel switch isn't really mandatory spec-wise.
> + __field(u32, old_control_freq)
I believe there's a macro for a chandef?
johannes
next prev parent reply other threads:[~2014-05-22 14:45 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-05-22 14:07 [PATCH v6 0/6] cfg/mac80211: implement multi-vif csa Michal Kazior
2014-05-22 14:07 ` [PATCH v6 1/6] mac80211: introduce switch_vif_chanctx op Michal Kazior
2014-05-22 14:45 ` Johannes Berg [this message]
2014-05-23 2:38 ` [PATCH] mac80211: add a single-transaction driver op to switch contexts Luca Coelho
2014-05-23 2:49 ` Luca Coelho
2014-05-23 7:51 ` Michal Kazior
2014-05-23 8:01 ` Michal Kazior
2014-05-23 8:58 ` Johannes Berg
2014-05-23 9:14 ` Luca Coelho
2014-05-23 9:30 ` Johannes Berg
2014-05-23 9:52 ` Johannes Berg
2014-05-23 11:33 ` [PATCH 1/2] " Luca Coelho
2014-05-23 11:33 ` [PATCH 2/2] mac80211: use switch_vif_chanctx to change a running chanctx Luca Coelho
2014-05-23 11:35 ` Luca Coelho
2014-05-23 13:28 ` Johannes Berg
2014-05-23 13:31 ` Luca Coelho
2014-05-23 13:24 ` [PATCH 1/2] mac80211: add a single-transaction driver op to switch contexts Johannes Berg
2014-05-23 13:30 ` Luca Coelho
2014-05-23 9:16 ` [PATCH] " Michal Kazior
2014-05-23 9:26 ` Johannes Berg
2014-05-23 6:09 ` [PATCH v6 1/6] mac80211: introduce switch_vif_chanctx op Michal Kazior
2014-05-23 8:51 ` Johannes Berg
2014-05-23 9:10 ` Michal Kazior
2014-05-23 9:31 ` Johannes Berg
2014-05-22 14:07 ` [PATCH v6 2/6] mac80211: implement multi-vif in-place reservations Michal Kazior
2014-05-22 14:51 ` Johannes Berg
2014-05-23 6:16 ` Michal Kazior
2014-05-23 12:23 ` Michal Kazior
2014-05-23 13:14 ` Johannes Berg
2014-05-22 14:07 ` [PATCH v6 3/6] mac80211: make check_combinations() aware of chanctx reservation Michal Kazior
2014-05-22 14:07 ` [PATCH v6 4/6] mac80211: use chanctx reservation for AP CSA Michal Kazior
2014-05-22 14:54 ` Johannes Berg
2014-05-23 6:49 ` Michal Kazior
2014-05-23 8:44 ` Johannes Berg
2014-05-23 8:58 ` Michal Kazior
2014-05-23 9:07 ` Johannes Berg
2014-05-23 9:35 ` Michal Kazior
2014-05-23 9:53 ` Johannes Berg
2014-05-22 14:07 ` [PATCH v6 5/6] mac80211: use chanctx reservation for STA CSA Michal Kazior
2014-05-22 14:07 ` [PATCH v6 6/6] cfg80211: remove channel_switch combination check Michal Kazior
2014-05-22 14:57 ` Johannes Berg
2014-05-23 7:04 ` Michal Kazior
2014-05-23 8:53 ` Johannes Berg
2014-05-23 9:11 ` Michal Kazior
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1400769938.4174.29.camel@jlt4.sipsolutions.net \
--to=johannes@sipsolutions.net \
--cc=linux-wireless@vger.kernel.org \
--cc=luca@coelho.fi \
--cc=michal.kazior@tieto.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.