| From 3b0fe16e19cb448e088d5bb7bd6cf7077b805dd4 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Tue, 7 Jan 2020 21:07:35 +0100 |
| Subject: wireless: wext: avoid gcc -O3 warning |
| |
| From: Arnd Bergmann <arnd@arndb.de> |
| |
| [ Upstream commit e16119655c9e6c4aa5767cd971baa9c491f41b13 ] |
| |
| After the introduction of CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3, |
| the wext code produces a bogus warning: |
| |
| In function 'iw_handler_get_iwstats', |
| inlined from 'ioctl_standard_call' at net/wireless/wext-core.c:1015:9, |
| inlined from 'wireless_process_ioctl' at net/wireless/wext-core.c:935:10, |
| inlined from 'wext_ioctl_dispatch.part.8' at net/wireless/wext-core.c:986:8, |
| inlined from 'wext_handle_ioctl': |
| net/wireless/wext-core.c:671:3: error: argument 1 null where non-null expected [-Werror=nonnull] |
| memcpy(extra, stats, sizeof(struct iw_statistics)); |
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| In file included from arch/x86/include/asm/string.h:5, |
| net/wireless/wext-core.c: In function 'wext_handle_ioctl': |
| arch/x86/include/asm/string_64.h:14:14: note: in a call to function 'memcpy' declared here |
| |
| The problem is that ioctl_standard_call() sometimes calls the handler |
| with a NULL argument that would cause a problem for iw_handler_get_iwstats. |
| However, iw_handler_get_iwstats never actually gets called that way. |
| |
| Marking that function as noinline avoids the warning and leads |
| to slightly smaller object code as well. |
| |
| Signed-off-by: Arnd Bergmann <arnd@arndb.de> |
| Link: https://lore.kernel.org/r/20200107200741.3588770-1-arnd@arndb.de |
| Signed-off-by: Johannes Berg <johannes.berg@intel.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| net/wireless/wext-core.c | 3 ++- |
| 1 file changed, 2 insertions(+), 1 deletion(-) |
| |
| diff --git a/net/wireless/wext-core.c b/net/wireless/wext-core.c |
| index 5e677dac2a0ce..69102fda9ebd4 100644 |
| --- a/net/wireless/wext-core.c |
| +++ b/net/wireless/wext-core.c |
| @@ -657,7 +657,8 @@ struct iw_statistics *get_wireless_stats(struct net_device *dev) |
| return NULL; |
| } |
| |
| -static int iw_handler_get_iwstats(struct net_device * dev, |
| +/* noinline to avoid a bogus warning with -O3 */ |
| +static noinline int iw_handler_get_iwstats(struct net_device * dev, |
| struct iw_request_info * info, |
| union iwreq_data * wrqu, |
| char * extra) |
| -- |
| 2.20.1 |
| |