mac80211: reduce stack usage in sta_ht_capa_read()
PATCH 1/2 mac80211: reduce stack usage in sta_ht_capa_read()
The maximal size of the "ht_capa" file is 430 bytes. In most cases, it's much shorter. Use a 512 byte long buffer. 1024 bytes is too much and causes a warning with CONFIG_FRAME_WARN=1024.
Signed-off-by Pavel Roskin <[email protected]>
--- net/mac80211/debugfs_sta.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
net/mac80211/debugfs_sta.c +1 -1
@@ -165,7 +165,7 @@ static ssize_t sta_ht_capa_read(struct file *file, char __user *userbuf,if (_cond) \ p +=scnprintf (p,sizeof (buf)+buf-p,"\t" _str"\n" ); \ }while (0 ) - char buf[1024], *p = buf; + char buf[512], *p = buf;int i;struct sta_info *sta = file->private_data;struct ieee80211_sta_ht_cap *htc = &sta->sta.ht_cap;
PATCH 2/2 mac80211: reduce stack usage in sta_agg_status_read()
Use a more compact and readable format for "agg_status" to reduce the stack frame to less than 1024 bytes.
Signed-off-by Pavel Roskin <[email protected]>
--- net/mac80211/debugfs_sta.c | 24 +++++++++++++----------- 1 files changed, 13 insertions(+), 11 deletions(-)
net/mac80211/debugfs_sta.c +13 -11
@@ -120,36 +120,38 @@ STA_OPS(last_seq_ctrl);static ssize_t sta_agg_status_read (struct file *file,char __user *userbuf,size_t count,loff_t *ppos) { -char buf[30 +STA_TID_NUM *70 ], *p = buf; +char buf[64 +STA_TID_NUM *40 ], *p = buf;int i;struct sta_info *sta = file->private_data;spin_lock_bh (&sta->lock); - p +=scnprintf (p,sizeof (buf)+buf-p,"next dialog_token is %#02x\n" , + p +=scnprintf (p,sizeof (buf) + buf - p,"next dialog_token: %#02x\n" , sta->ampdu_mlme.dialog_token_allocator +1 ); + p +=scnprintf (p,sizeof (buf) + buf - p, +"TID\t\tRX\tDTKN\tSSN\t\tTX\tDTKN\tSSN\tpending\n" );for (i =0 ; i <STA_TID_NUM ; i++) { - p +=scnprintf (p,sizeof (buf)+buf-p,"TID %02d:" , i); - p +=scnprintf (p,sizeof (buf)+buf-p," RX=%x" , + p +=scnprintf (p,sizeof (buf) + buf - p,"%02d" , i); + p +=scnprintf (p,sizeof (buf) + buf - p,"\t\t%x" , sta->ampdu_mlme.tid_state_rx[i]); - p +=scnprintf (p,sizeof (buf)+buf-p,"/DTKN=%#.2x" , + p +=scnprintf (p,sizeof (buf) + buf - p,"\t%#.2x" , sta->ampdu_mlme.tid_state_rx[i] ? sta->ampdu_mlme.tid_rx[i]->dialog_token :0 ); - p +=scnprintf (p,sizeof (buf)+buf-p,"/SSN=%#.3x" , + p +=scnprintf (p,sizeof (buf) + buf - p,"\t%#.3x" , sta->ampdu_mlme.tid_state_rx[i] ? sta->ampdu_mlme.tid_rx[i]->ssn :0 ); - p +=scnprintf (p,sizeof (buf)+buf-p," TX=%x" , + p +=scnprintf (p,sizeof (buf) + buf - p,"\t\t%x" , sta->ampdu_mlme.tid_state_tx[i]); - p +=scnprintf (p,sizeof (buf)+buf-p,"/DTKN=%#.2x" , + p +=scnprintf (p,sizeof (buf) + buf - p,"\t%#.2x" , sta->ampdu_mlme.tid_state_tx[i] ? sta->ampdu_mlme.tid_tx[i]->dialog_token :0 ); - p +=scnprintf (p,sizeof (buf)+buf-p,"/SSN=%#.3x" , + p +=scnprintf (p,sizeof (buf) + buf - p,"\t%#.3x" , sta->ampdu_mlme.tid_state_tx[i] ? sta->ampdu_mlme.tid_tx[i]->ssn :0 ); - p +=scnprintf (p,sizeof (buf)+buf-p,"/pending=%03d" , + p +=scnprintf (p,sizeof (buf) + buf - p,"\t%03d" , sta->ampdu_mlme.tid_state_tx[i] ?skb_queue_len (&sta->ampdu_mlme.tid_tx[i]->pending) :0 ); - p +=scnprintf (p,sizeof (buf)+buf-p,"\n" ); + p +=scnprintf (p,sizeof (buf) + buf - p,"\n" ); }spin_unlock_bh (&sta->lock);