Thread (199 messages) 199 messages, 5 authors, 2014-05-14

Re: [PATCH v2 03/13] mac80211: prevent chanctx overcommit

From: Michal Kazior <hidden>
Date: 2014-03-25 08:37:30

On 25 March 2014 08:59, Luca Coelho [off-list ref] wrote:
On Fri, 2014-03-21 at 14:47 +0100, Michal Kazior wrote:
quoted
Do not allocate more channel contexts than a
driver is capable for currently matching interface
combination.

This allows the ieee80211_vif_reserve_chanctx() to
act as a guard against breaking interface
combinations.

Signed-off-by: Michal Kazior <redacted>
---
[...]
quoted
@@ -745,13 +764,16 @@ int ieee80211_vif_reserve_chanctx(struct ieee80211_sub_if_data *sdata,
                       * context, reserve our current context
                       */
                      new_ctx = curr_ctx;
-             } else {
+             } else if (ieee80211_can_create_new_chanctx(local)) {
                      /* create a new context and reserve it */
                      new_ctx = ieee80211_new_chanctx(local, chandef, mode);
                      if (IS_ERR(new_ctx)) {
                              ret = PTR_ERR(new_ctx);
                              goto out;
                      }
+             } else {
+                     ret = -EBUSY;
+                     goto out;
I'm not sure about this whole allowed channels counting thing.  Does it
really matter what is the total number of allowed channels? I think the
actual combinations is what should be checked here.

Let's say the driver supports these combinations:

1. num_different_channels = 2; limits max 2 APs;
2. num_different_channels = 1; limits 1 AP, 1 STA;

Then you're running on a single-channel with 1 AP and 1 STA.  The STA
gets a CSA to move to a new channel.  If you only consider the
max_num_channels you calculated, you will think that it is okay to
switch, but it is not, because you cannot have 1 AP and 1 STA on
different channels.

Or am I missing something?
Yes. You're missing the fact, that ieee80211_max_num_channels() uses
current iftype set to narrow down matching combinations.

In the above example you provided ieee80211_max_num_channels() returns 1.


Michał
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help