diff options
author | Arnd Bergmann <arnd@arndb.de> | 2016-01-26 23:05:31 +0100 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2016-04-20 15:45:22 +0900 |
commit | ea7cd6ee57fb6a176d666da6ec9e4a50a56dc6d5 (patch) | |
tree | 42894a5d85d4d7f7026f7a8076364945df949a0e /net/ax25/TODO | |
parent | 14361b4d6f74175e645c0872dea96ef1118716ea (diff) | |
download | lwn-ea7cd6ee57fb6a176d666da6ec9e4a50a56dc6d5.tar.gz lwn-ea7cd6ee57fb6a176d666da6ec9e4a50a56dc6d5.zip |
mac80211: avoid excessive stack usage in sta_info
commit 0ef049dc1167fe834d0ad5d63f89eddc5c70f6e4 upstream.
When CONFIG_OPTIMIZE_INLINING is set, the sta_info_insert_finish
function consumes more stack than normally, exceeding the
1024 byte limit on ARM:
net/mac80211/sta_info.c: In function 'sta_info_insert_finish':
net/mac80211/sta_info.c:561:1: error: the frame size of 1080 bytes is larger than 1024 bytes [-Werror=frame-larger-than=]
It turns out that there are two functions that put a 'struct station_info'
on the stack: __sta_info_destroy_part2 and sta_info_insert_finish, and
this structure alone requires up to 792 bytes.
Hoping that both are called rarely enough, this replaces the
on-stack structure with a dynamic allocation, which unfortunately
requires some suboptimal error handling for out-of-memory.
The __sta_info_destroy_part2 function is actually affected by the
stack usage twice because it calls cfg80211_del_sta_sinfo(), which
has another instance of struct station_info on its stack.
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Fixes: 98b6218388e3 ("mac80211/cfg80211: add station events")
Fixes: 6f7a8d26e266 ("mac80211: send statistics with delete station event")
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'net/ax25/TODO')
0 files changed, 0 insertions, 0 deletions