All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Ondřej Jirman" <megi@xff.cz>
To: Ping-Ke Shih <pkshih@realtek.com>
Cc: tony0620emma@gmail.com, kvalo@kernel.org,
	linux-wireless@vger.kernel.org, phhuang@realtek.com
Subject: Re: [PATCH 3/6] rtw88: Add update beacon flow for AP mode
Date: Thu, 26 May 2022 01:01:21 +0200	[thread overview]
Message-ID: <20220525230121.zk6xdjycxdhe62nw@core> (raw)
In-Reply-To: <20220407095858.46807-4-pkshih@realtek.com>

Hello Ping-Ke,

please see bugreport below:

On Thu, Apr 07, 2022 at 05:58:55PM +0800, Ping-Ke Shih wrote:
> From: Po-Hao Huang <phhuang@realtek.com>
> 
> To support stations in power saving mode, AP should notify stations
> that there are frames buffered at the AP via TIM during beacons.
> Driver used to transmit identical beacons that were downloaded to
> hardware during the initiation phase. This beacon will become
> obsolete over time.
> 
> If the beacon does not contain sufficient information, station would
> not be able to percept that there is data to receive. Hence it won't
> wake up and start the PS-poll procedure, this could lead to timeout
> and/or lost data segments. In order to resolve this issue, driver will
> now download beacon to hardware whenever the content is updated.
> 
> Enable hardware to update dtim_count for more efficiency, this reduces
> the overhead of downloading beacon at every beacon interval since most
> of the time only the dtim_count needs to be updated.
> 
> Change queue mapping for broadcast/multicast frames to high queue, so
> these frames can be prioritized and sent when dtim_count is zero.
> 
> Signed-off-by: Po-Hao Huang <phhuang@realtek.com>
> Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
> ---
> 
> [...]
>
> diff --git a/drivers/net/wireless/realtek/rtw88/mac80211.c b/drivers/net/wireless/realtek/rtw88/mac80211.c
> index c9341af493645..1ee41dfda5e1b 100644
> --- a/drivers/net/wireless/realtek/rtw88/mac80211.c
> +++ b/drivers/net/wireless/realtek/rtw88/mac80211.c
> @@ -402,8 +402,10 @@ static void rtw_ops_bss_info_changed(struct ieee80211_hw *hw,
>  			coex_stat->wl_beacon_interval = conf->beacon_int;
>  	}
>  
> -	if (changed & BSS_CHANGED_BEACON)
> +	if (changed & BSS_CHANGED_BEACON) {
> +		rtw_set_dtim_period(rtwdev, conf->dtim_period);
>  		rtw_fw_download_rsvd_page(rtwdev);
> +	}
>  
>  	if (changed & BSS_CHANGED_BEACON_ENABLED) {
>  		if (conf->enable_beacon)
> @@ -474,6 +476,18 @@ static int rtw_ops_sta_remove(struct ieee80211_hw *hw,
>  	return 0;
>  }
>  
> +static int rtw_ops_set_tim(struct ieee80211_hw *hw, struct ieee80211_sta *sta,
> +			   bool set)
> +{
> +	struct rtw_dev *rtwdev = hw->priv;
> +
> +	mutex_lock(&rtwdev->mutex);
> +	rtw_fw_download_rsvd_page(rtwdev);
> +	mutex_unlock(&rtwdev->mutex);

set_tim is supposed to be atomic. See: https://elixir.bootlin.com/linux/latest/source/include/net/mac80211.h#L3500

This is causing some scheduling in atomic warnings in my kernel:

BUG: scheduling while atomic: swapper/1/0/0x00000700
Modules linked in:
CPU: 1 PID: 0 Comm: swapper/1 Tainted: G        W         5.18.0-rc7-00703-g33b5ee09a0c1 #4
Hardware name: Pine64 RK3566 Quartz64-A Board (DT)
Call trace:
 dump_backtrace.part.0+0xc4/0xd0
 show_stack+0x14/0x60
 dump_stack_lvl+0x60/0x78
 dump_stack+0x14/0x2c
 __schedule_bug+0x5c/0x70
 __schedule+0x5c4/0x630
 schedule+0x44/0xb0
 schedule_preempt_disabled+0xc/0x14
 __mutex_lock.constprop.0+0x538/0x56c
 __mutex_lock_slowpath+0x10/0x20
 mutex_lock+0x54/0x60
 rtw_ops_set_tim+0x20/0x40
 __sta_info_recalc_tim+0x150/0x250
 sta_info_recalc_tim+0x10/0x20
 invoke_tx_handlers_early+0x4e4/0x5c0
 ieee80211_tx+0x78/0x110
 ieee80211_xmit+0x94/0xc0
 __ieee80211_subif_start_xmit+0x818/0xd20
 ieee80211_subif_start_xmit+0x44/0x2d0
 dev_hard_start_xmit+0xd0/0x150
 __dev_queue_xmit+0x250/0xb30
 dev_queue_xmit+0x10/0x20
 br_dev_queue_push_xmit+0x94/0x174
 br_forward_finish+0x90/0xa0
 __br_forward+0xc0/0x13c
 br_forward+0x108/0x134
 br_dev_xmit+0x1cc/0x3a4
 dev_hard_start_xmit+0xd0/0x150
 __dev_queue_xmit+0x250/0xb30
 dev_queue_xmit+0x10/0x20
 arp_xmit+0x6c/0x7c
 arp_send_dst+0x8c/0xc0
 arp_solicit+0xd4/0x1e0
 neigh_probe+0x58/0xa0
 neigh_timer_handler+0x27c/0x380
 call_timer_fn.constprop.0+0x20/0x80
 __run_timers.part.0+0x230/0x280
 run_timer_softirq+0x38/0x70
 _stext+0x104/0x278
 __irq_exit_rcu+0xa4/0xdc
 irq_exit_rcu+0xc/0x14
 el1_interrupt+0x34/0x50
 el1h_64_irq_handler+0x14/0x20
 el1h_64_irq+0x64/0x68
 arch_cpu_idle+0x14/0x20
 do_idle+0x208/0x290
 cpu_startup_entry+0x20/0x30
 secondary_start_kernel+0x130/0x144
 __secondary_switched+0x54/0x58

kind regards,
	o.

> +	return 0;
> +}
> +
>  static int rtw_ops_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
>  			   struct ieee80211_vif *vif, struct ieee80211_sta *sta,
>  			   struct ieee80211_key_conf *key)
> @@ -875,6 +889,7 @@ const struct ieee80211_ops rtw_ops = {
>  	.conf_tx		= rtw_ops_conf_tx,
>  	.sta_add		= rtw_ops_sta_add,
>  	.sta_remove		= rtw_ops_sta_remove,
> +	.set_tim		= rtw_ops_set_tim,
>  	.set_key		= rtw_ops_set_key,
>  	.ampdu_action		= rtw_ops_ampdu_action,
>  	.can_aggregate_in_amsdu	= rtw_ops_can_aggregate_in_amsdu,

  reply	other threads:[~2022-05-25 23:10 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-07  9:58 [PATCH 0/6] rtw88: 8821c: support AP mode Ping-Ke Shih
2022-04-07  9:58 ` [PATCH 1/6] rtw88: add ieee80211:sta_rc_update ops Ping-Ke Shih
2022-04-12 13:52   ` Kalle Valo
2022-04-07  9:58 ` [PATCH 2/6] rtw88: fix incorrect frequency reported Ping-Ke Shih
2022-04-07  9:58 ` [PATCH 3/6] rtw88: Add update beacon flow for AP mode Ping-Ke Shih
2022-05-25 23:01   ` Ondřej Jirman [this message]
2022-05-26  0:03     ` Ping-Ke Shih
2022-04-07  9:58 ` [PATCH 4/6] rtw88: 8821c: Enable TX report for management frames Ping-Ke Shih
2022-04-07  9:58 ` [PATCH 5/6] rtw88: do PHY calibration while starting AP Ping-Ke Shih
2022-04-07  9:58 ` [PATCH 6/6] rtw88: 8821c: fix debugfs rssi value Ping-Ke Shih

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=20220525230121.zk6xdjycxdhe62nw@core \
    --to=megi@xff.cz \
    --cc=kvalo@kernel.org \
    --cc=linux-wireless@vger.kernel.org \
    --cc=phhuang@realtek.com \
    --cc=pkshih@realtek.com \
    --cc=tony0620emma@gmail.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.