WSL2-Linux-Kernel/drivers/net/wireless/intel/iwlwifi
Alexander Lobakin b167191e2a net: wireless: intel: iwlwifi: fix GRO_NORMAL packet stalling
Commit 6570bc79c0 ("net: core: use listified Rx for GRO_NORMAL in
napi_gro_receive()") has applied batched GRO_NORMAL packets processing
to all napi_gro_receive() users, including mac80211-based drivers.

However, this change has led to a regression in iwlwifi driver [1][2] as
it is required for NAPI users to call napi_complete_done() or
napi_complete() and the end of every polling iteration, whilst iwlwifi
doesn't use NAPI scheduling at all and just calls napi_gro_flush().
In that particular case, packets which have not been already flushed
from napi->rx_list stall in it until at least next Rx cycle.

Fix this by adding a manual flushing of the list to iwlwifi driver right
before napi_gro_flush() call to mimic napi_complete() logics.

I prefer to open-code gro_normal_list() rather than exporting it for 2
reasons:
* to prevent from using it and napi_gro_flush() in any new drivers,
  as it is the *really* bad way to use NAPI that should be avoided;
* to keep gro_normal_list() static and don't lose any CC optimizations.

I also don't add the "Fixes:" tag as the mentioned commit was only a
trigger that only exposed an improper usage of NAPI in this particular
driver.

[1] https://lore.kernel.org/netdev/PSXP216MB04388962C411CD0B17A86F47804A0@PSXP216MB0438.KORP216.PROD.OUTLOOK.COM
[2] https://bugzilla.kernel.org/show_bug.cgi?id=205647

Signed-off-by: Alexander Lobakin <alobakin@dlink.ru>
Acked-by: Luca Coelho <luciano.coelho@intel.com>
Reported-by: Nicholas Johnson <nicholas.johnson-opensource@outlook.com.au>
Tested-by: Nicholas Johnson <nicholas.johnson-opensource@outlook.com.au>
Reviewed-by: Edward Cree <ecree@solarflare.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2019-11-27 11:22:51 -08:00
..
cfg iwlwifi: bump FW API to 52 for 22000 series 2019-11-20 12:28:56 +02:00
dvm iwlwifi: check kasprintf() return value 2019-11-20 12:28:56 +02:00
fw iwlwifi: scan: support scan req FW API ver 13 2019-11-20 12:28:55 +02:00
mvm iwlwifi: check kasprintf() return value 2019-11-20 12:28:56 +02:00
pcie net: wireless: intel: iwlwifi: fix GRO_NORMAL packet stalling 2019-11-27 11:22:51 -08:00
Kconfig drivers: net: Fix Kconfig indentation 2019-09-26 08:56:17 +02:00
Makefile iwlwifi: dbg_ini: implement time point handling 2019-10-25 10:09:40 +03:00
iwl-agn-hw.h iwlwifi: remove all occurrences of the FSF address paragraph 2018-08-31 11:38:33 +03:00
iwl-config.h iwlwifi: config: remove max_rx_agg_size 2019-11-20 12:28:55 +02:00
iwl-context-info-gen3.h iwlwifi: update gen3 interrupts - sw error and image response 2018-07-26 13:16:16 +03:00
iwl-context-info.h iwlwifi: pcie: set RB size according to user settings 2018-09-28 08:57:27 +03:00
iwl-csr.h iwlwifi: remove IWL_DEVICE_22560/IWL_DEVICE_FAMILY_22560 2019-11-15 09:34:30 +02:00
iwl-dbg-tlv.c iwlwifi: dbg_ini: support FW notification dumping in case of missed beacon 2019-10-25 10:10:00 +03:00
iwl-dbg-tlv.h iwlwifi: dbg_ini: implement time point handling 2019-10-25 10:09:40 +03:00
iwl-debug.c iwlwifi: remove all occurrences of the FSF address paragraph 2018-08-31 11:38:33 +03:00
iwl-debug.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 322 2019-06-05 17:37:05 +02:00
iwl-devtrace-data.h iwlwifi: pcie: trace IOVA for iwlwifi_dev_tx_tb 2019-11-20 12:28:55 +02:00
iwl-devtrace-io.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 322 2019-06-05 17:37:05 +02:00
iwl-devtrace-iwlwifi.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 322 2019-06-05 17:37:05 +02:00
iwl-devtrace-msg.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 322 2019-06-05 17:37:05 +02:00
iwl-devtrace-ucode.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 322 2019-06-05 17:37:05 +02:00
iwl-devtrace.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 322 2019-06-05 17:37:05 +02:00
iwl-devtrace.h iwlwifi: fix warning iwl-trans.h is included more than once 2019-09-06 15:52:05 +03:00
iwl-drv.c iwlwifi: remove IWL_DEVICE_22560/IWL_DEVICE_FAMILY_22560 2019-11-15 09:34:30 +02:00
iwl-drv.h iwlwifi: remove all occurrences of the FSF address paragraph 2018-08-31 11:38:33 +03:00
iwl-eeprom-parse.c iwlwifi: always access the trans configuration via trans 2019-09-06 15:52:04 +03:00
iwl-eeprom-parse.h iwlwifi: always access the trans configuration via trans 2019-09-06 15:52:04 +03:00
iwl-eeprom-read.c iwlwifi: always access the trans configuration via trans 2019-09-06 15:52:04 +03:00
iwl-eeprom-read.h iwlwifi: remove all occurrences of the FSF address paragraph 2018-08-31 11:38:33 +03:00
iwl-fh.h iwlwifi: remove IWL_DEVICE_22560/IWL_DEVICE_FAMILY_22560 2019-11-15 09:34:30 +02:00
iwl-io.c iwlwifi: add a pointer to the trans_cfg directly in trans 2019-09-06 15:52:00 +03:00
iwl-io.h iwlwifi: don't access trans_cfg via cfg 2019-10-09 13:01:03 +03:00
iwl-modparams.h iwlwifi: remove the d0i3 related module parameters 2019-09-06 15:31:17 +03:00
iwl-nvm-parse.c iwlwifi: nvm: update iwl_uhb_nvm_channels 2019-11-15 09:31:56 +02:00
iwl-nvm-parse.h iwlwifi: remove all occurrences of the FSF address paragraph 2018-08-31 11:38:33 +03:00
iwl-op-mode.h iwlwifi: remove the opmode's d0i3 handlers 2019-09-06 15:31:16 +03:00
iwl-phy-db.c iwlwifi: remove all occurrences of the FSF address paragraph 2018-08-31 11:38:33 +03:00
iwl-phy-db.h iwlwifi: remove all occurrences of the FSF address paragraph 2018-08-31 11:38:33 +03:00
iwl-prph.h wireless-drivers-next patches for 5.5 2019-11-05 18:36:35 -08:00
iwl-scd.h iwlwifi: remove all occurrences of the FSF address paragraph 2018-08-31 11:38:33 +03:00
iwl-trans.c iwlwifi: pcie: set iwl_trans->cfg later in the probe function 2019-09-06 15:51:01 +03:00
iwl-trans.h iwlwifi: dbg_ini: support domain changing via debugfs 2019-10-25 10:09:48 +03:00