mac80211: document sleep requirements for channel context ops
authorChaitanya T K <chaitanya.mgit@gmail.com>
Fri, 30 Oct 2015 17:46:15 +0000 (23:16 +0530)
committerJohannes Berg <johannes.berg@intel.com>
Tue, 3 Nov 2015 10:15:48 +0000 (11:15 +0100)
Channel context driver operations can sleep, so add might_sleep()
and document this.

Signed-off-by: Chaitanya T K <chaitanya.mgit@gmail.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
include/net/mac80211.h
net/mac80211/driver-ops.c
net/mac80211/driver-ops.h

index dac575c55c62a286a87f3fbec7755874060c59d7..82045fca388b20a9cf28ad9112236668c31f46cb 100644 (file)
@@ -3172,18 +3172,24 @@ enum ieee80211_reconfig_type {
  *     The callback is optional and can sleep.
  *
  * @add_chanctx: Notifies device driver about new channel context creation.
+ *     This callback may sleep.
  * @remove_chanctx: Notifies device driver about channel context destruction.
+ *     This callback may sleep.
  * @change_chanctx: Notifies device driver about channel context changes that
  *     may happen when combining different virtual interfaces on the same
  *     channel context with different settings
+ *     This callback may sleep.
  * @assign_vif_chanctx: Notifies device driver about channel context being bound
  *     to vif. Possible use is for hw queue remapping.
+ *     This callback may sleep.
  * @unassign_vif_chanctx: Notifies device driver about channel context being
  *     unbound from vif.
+ *     This callback may sleep.
  * @switch_vif_chanctx: switch a number of vifs from one chanctx to
  *     another, as specified in the list of
  *     @ieee80211_vif_chanctx_switch passed to the driver, according
  *     to the mode defined in &ieee80211_chanctx_switch_mode.
+ *     This callback may sleep.
  *
  * @start_ap: Start operation on the AP interface, this is called after all the
  *     information in bss_conf is set and beacon can be retrieved. A channel
index 9f97343f13fd17353d929945297c1a860894aa9d..ca1fe5576103767c3a98b52e037c0034b949887f 100644 (file)
@@ -236,6 +236,8 @@ int drv_switch_vif_chanctx(struct ieee80211_local *local,
        int ret = 0;
        int i;
 
+       might_sleep();
+
        if (!local->ops->switch_vif_chanctx)
                return -EOPNOTSUPP;
 
index f82cfab615f2e64ec2f2f42d2505989946085d53..154ce4b13406d5a31bac8797f8069184ca9cd6f5 100644 (file)
@@ -843,6 +843,8 @@ static inline int drv_add_chanctx(struct ieee80211_local *local,
 {
        int ret = -EOPNOTSUPP;
 
+       might_sleep();
+
        trace_drv_add_chanctx(local, ctx);
        if (local->ops->add_chanctx)
                ret = local->ops->add_chanctx(&local->hw, &ctx->conf);
@@ -856,6 +858,8 @@ static inline int drv_add_chanctx(struct ieee80211_local *local,
 static inline void drv_remove_chanctx(struct ieee80211_local *local,
                                      struct ieee80211_chanctx *ctx)
 {
+       might_sleep();
+
        if (WARN_ON(!ctx->driver_present))
                return;
 
@@ -870,6 +874,8 @@ static inline void drv_change_chanctx(struct ieee80211_local *local,
                                      struct ieee80211_chanctx *ctx,
                                      u32 changed)
 {
+       might_sleep();
+
        trace_drv_change_chanctx(local, ctx, changed);
        if (local->ops->change_chanctx) {
                WARN_ON_ONCE(!ctx->driver_present);
@@ -903,6 +909,8 @@ static inline void drv_unassign_vif_chanctx(struct ieee80211_local *local,
                                            struct ieee80211_sub_if_data *sdata,
                                            struct ieee80211_chanctx *ctx)
 {
+       might_sleep();
+
        if (!check_sdata_in_driver(sdata))
                return;
 
@@ -925,6 +933,8 @@ static inline int drv_start_ap(struct ieee80211_local *local,
 {
        int ret = 0;
 
+       might_sleep();
+
        if (!check_sdata_in_driver(sdata))
                return -EIO;