Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dcae9e02 authored by Chaitanya T K's avatar Chaitanya T K Committed by Johannes Berg
Browse files

mac80211: document sleep requirements for channel context ops



Channel context driver operations can sleep, so add might_sleep()
and document this.

Signed-off-by: default avatarChaitanya T K <chaitanya.mgit@gmail.com>
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent ef95d8ba
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -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
+2 −0
Original line number Diff line number Diff line
@@ -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;

+10 −0
Original line number Diff line number Diff line
@@ -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;