3.19-rc1 net: less interrupt masking in NAPI
Subsystems (3)
Hi,
Commit d75b1ade567ffab085e8adbbdacf0092d10cd09c breaks my "Qualcomm Atheros AR8161 Gigabit Ethernet (rev 10)" Ethernet controller, which is handled by the alx network driver.
ogabbay@odedg-ubuntu:~$ lspci -s 01:00.0 -k 01:00.0 Ethernet controller: Qualcomm Atheros AR8161 Gigabit Ethernet (rev 10) Subsystem: Qualcomm Atheros Device 1071 Kernel driver in use: alx
I have this controller on a mobile platform of AMD APU Kaveri, which I use to test amdkfd, and from 3.19-rc1 the network stopped working when trying to transfer files through scp or nfs.
I bisected the kernel (from 3.18.0 to 3.19-rc1) and reached this commit.
Here is the log of the bisect:
git bisect start
# bad: [97bf6af1f928216fd6c5a66e8a57bfa95a659672] Linux 3.19-rc1 git bisect bad 97bf6af1f928216fd6c5a66e8a57bfa95a659672
# good: [b2776bf7149bddd1f4161f14f79520f17fc1d71d] Linux 3.18 git bisect good b2776bf7149bddd1f4161f14f79520f17fc1d71d
# bad: [70e71ca0af244f48a5dcf56dc435243792e3a495] Mergegit://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
git bisect bad 70e71ca0af244f48a5dcf56dc435243792e3a495
# good: [e28870f9b3e92cd3570925089c6bb789c2603bc4] Merge tag 'backlight-for-linus-3.19' ofgit://git.kernel.org/pub/scm/linux/kernel/git/lee/backlight
git bisect good e28870f9b3e92cd3570925089c6bb789c2603bc4
# bad: [450fa21942fe2c37f0c9f52d1a33bbc081eee288] sh_eth: Remove redundant alignment adjustment
git bisect bad 450fa21942fe2c37f0c9f52d1a33bbc081eee288
# bad: [5c8d19da950861d0482abc0ac3481acca34b008f] e100e: use netdev_rss_key_fill() helper
git bisect bad 5c8d19da950861d0482abc0ac3481acca34b008f
# good: [bf515fb11ab539c76d04f0e3c5216ed41f41d81f] Merge tag 'mac80211-next-for-john-2014-11-04' ofgit://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next
git bisect good bf515fb11ab539c76d04f0e3c5216ed41f41d81f
# bad: [2c99cd914d4fed9160d98849c9dd38034616768e] Merge branch 'amd-xgbe-next' git bisect bad 2c99cd914d4fed9160d98849c9dd38034616768e
# good: [3d762a0f0ab9cb4a6b5993db3ce56c92f9f90ab2] net: dsa: Add support for reading switch registers with ethtool
git bisect good 3d762a0f0ab9cb4a6b5993db3ce56c92f9f90ab2
# bad: [8ce0c8254f15229aa99fc6c04141f28c446e5f8c] Merge branch 'master' ofgit://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next
git bisect bad 8ce0c8254f15229aa99fc6c04141f28c446e5f8c
# good: [f0c65567b3c1b23f79e8a49139580a3872a68d1f] Merge branch 'sunvnet-multi-tx-queue'
git bisect good f0c65567b3c1b23f79e8a49139580a3872a68d1f
# bad: [547f2735c20023d7b50a791b1b17cacb652e9237] Merge branch 'mlx4-next' git bisect bad 547f2735c20023d7b50a791b1b17cacb652e9237
# good: [4cdb1e2e3d3495423db558d3bb7ed11d66aabce7] net: shrink struct softnet_data
git bisect good 4cdb1e2e3d3495423db558d3bb7ed11d66aabce7
# bad: [0a98455666ec87378148a1dde97f1ce5baf75a64] net/mlx4_core: Protect port type setting by mutex
git bisect bad 0a98455666ec87378148a1dde97f1ce5baf75a64
# bad: [6e8066999800d90d52af5c84ac49ebf683d14cdc] net/mlx4_core: Prevent VF from changing port configuration
git bisect bad 6e8066999800d90d52af5c84ac49ebf683d14cdc
# bad: [d75b1ade567ffab085e8adbbdacf0092d10cd09c] net: less interrupt masking in NAPI
git bisect bad d75b1ade567ffab085e8adbbdacf0092d10cd09c
# first bad commit: [d75b1ade567ffab085e8adbbdacf0092d10cd09c] net: less interrupt masking in NAPI
Could you please solve this issue as it renders my board quite useless.
If you need more info, please ask.
Thanks,
Oded
Quoted 79 lines · Oded Gabbay
Hi,
Commit
d75b1ade567ffab085e8adbbdacf0092d10cd09cbreaks my "Qualcomm Atheros AR8161 Gigabit Ethernet (rev 10)" Ethernet controller, which is handled by the alx network driver.ogabbay@odedg-ubuntu:~$ lspci -s 01:00.0 -k 01:00.0 Ethernet controller: Qualcomm Atheros AR8161 Gigabit Ethernet (rev 10) Subsystem: Qualcomm Atheros Device 1071 Kernel driver in use: alxI have this controller on a mobile platform of AMD APU Kaveri, which I use to test amdkfd, and from 3.19-rc1 the network stopped working when trying to transfer files through scp or nfs.
I bisected the kernel (from 3.18.0 to 3.19-rc1) and reached this commit.
Here is the log of the bisect:
git bisect start
# bad: [97bf6af1f928216fd6c5a66e8a57bfa95a659672] Linux 3.19-rc1 git bisect bad97bf6af1f928216fd6c5a66e8a57bfa95a659672# good: [
b2776bf7149bddd1f4161f14f79520f17fc1d71d] Linux 3.18 git bisect goodb2776bf7149bddd1f4161f14f79520f17fc1d71d# bad: [
70e71ca0af244f48a5dcf56dc435243792e3a495] Mergegit://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
git bisect bad70e71ca0af244f48a5dcf56dc435243792e3a495# good: [
e28870f9b3e92cd3570925089c6bb789c2603bc4] Merge tag 'backlight-for-linus-3.19' ofgit://git.kernel.org/pub/scm/linux/kernel/git/lee/backlight
git bisect goode28870f9b3e92cd3570925089c6bb789c2603bc4# bad: [
450fa21942fe2c37f0c9f52d1a33bbc081eee288]sh_eth: Remove redundant alignment adjustment
git bisect bad450fa21942fe2c37f0c9f52d1a33bbc081eee288# bad: [
5c8d19da950861d0482abc0ac3481acca34b008f] e100e: usenetdev_rss_key_fill()helper
git bisect bad5c8d19da950861d0482abc0ac3481acca34b008f# good: [
bf515fb11ab539c76d04f0e3c5216ed41f41d81f] Merge tag 'mac80211-next-for-john-2014-11-04' ofgit://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next
git bisect goodbf515fb11ab539c76d04f0e3c5216ed41f41d81f# bad: [
2c99cd914d4fed9160d98849c9dd38034616768e] Merge branch 'amd-xgbe-next' git bisect bad2c99cd914d4fed9160d98849c9dd38034616768e# good: [
3d762a0f0ab9cb4a6b5993db3ce56c92f9f90ab2] net: dsa: Add support for reading switch registers with ethtool
git bisect good3d762a0f0ab9cb4a6b5993db3ce56c92f9f90ab2# bad: [
8ce0c8254f15229aa99fc6c04141f28c446e5f8c] Merge branch 'master' ofgit://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next
git bisect bad8ce0c8254f15229aa99fc6c04141f28c446e5f8c# good: [
f0c65567b3c1b23f79e8a49139580a3872a68d1f] Merge branch 'sunvnet-multi-tx-queue'
git bisect goodf0c65567b3c1b23f79e8a49139580a3872a68d1f# bad: [
547f2735c20023d7b50a791b1b17cacb652e9237] Merge branch 'mlx4-next' git bisect bad547f2735c20023d7b50a791b1b17cacb652e9237# good: [
4cdb1e2e3d3495423db558d3bb7ed11d66aabce7] net: shrink structsoftnet_data
git bisect good4cdb1e2e3d3495423db558d3bb7ed11d66aabce7# bad: [
0a98455666ec87378148a1dde97f1ce5baf75a64]net/mlx4_core: Protect port type setting by mutex
git bisect bad0a98455666ec87378148a1dde97f1ce5baf75a64# bad: [
6e8066999800d90d52af5c84ac49ebf683d14cdc]net/mlx4_core: Prevent VF from changing port configuration
git bisect bad6e8066999800d90d52af5c84ac49ebf683d14cdc
Quoted 9 lines
# bad: [
d75b1ade567ffab085e8adbbdacf0092d10cd09c] net: less interrupt masking in NAPI
git bisect badd75b1ade567ffab085e8adbbdacf0092d10cd09c# first bad commit: [d75b1ade567ffab085e8adbbdacf0092d10cd09c] net: less interrupt masking in NAPICould you please solve this issue as it renders my board quite useless.
Thanks for the report and bisection !
Could you try following fix ?
drivers/net/ethernet/atheros/alx/main.c +1 -1
@@ -272,7 +272,7 @@ static int alx_poll(struct napi_struct *napi, int budget)alx_clean_rx_irq (alx, budget);if (!complete) -return 1 ; +return budget;napi_complete (&alx->napi);
Quoted 102 lines · Eric Dumazet
Quoted 79 lines · Oded Gabbay
Hi,
Commit
d75b1ade567ffab085e8adbbdacf0092d10cd09cbreaks my "Qualcomm Atheros AR8161 Gigabit Ethernet (rev 10)" Ethernet controller, which is handled by the alx network driver.ogabbay@odedg-ubuntu:~$ lspci -s 01:00.0 -k 01:00.0 Ethernet controller: Qualcomm Atheros AR8161 Gigabit Ethernet (rev 10) Subsystem: Qualcomm Atheros Device 1071 Kernel driver in use: alxI have this controller on a mobile platform of AMD APU Kaveri, which I use to test amdkfd, and from 3.19-rc1 the network stopped working when trying to transfer files through scp or nfs.
I bisected the kernel (from 3.18.0 to 3.19-rc1) and reached this commit.
Here is the log of the bisect:
git bisect start
# bad: [97bf6af1f928216fd6c5a66e8a57bfa95a659672] Linux 3.19-rc1 git bisect bad97bf6af1f928216fd6c5a66e8a57bfa95a659672# good: [
b2776bf7149bddd1f4161f14f79520f17fc1d71d] Linux 3.18 git bisect goodb2776bf7149bddd1f4161f14f79520f17fc1d71d# bad: [
70e71ca0af244f48a5dcf56dc435243792e3a495] Mergegit://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
git bisect bad70e71ca0af244f48a5dcf56dc435243792e3a495# good: [
e28870f9b3e92cd3570925089c6bb789c2603bc4] Merge tag 'backlight-for-linus-3.19' ofgit://git.kernel.org/pub/scm/linux/kernel/git/lee/backlight
git bisect goode28870f9b3e92cd3570925089c6bb789c2603bc4# bad: [
450fa21942fe2c37f0c9f52d1a33bbc081eee288]sh_eth: Remove redundant alignment adjustment
git bisect bad450fa21942fe2c37f0c9f52d1a33bbc081eee288# bad: [
5c8d19da950861d0482abc0ac3481acca34b008f] e100e: usenetdev_rss_key_fill()helper
git bisect bad5c8d19da950861d0482abc0ac3481acca34b008f# good: [
bf515fb11ab539c76d04f0e3c5216ed41f41d81f] Merge tag 'mac80211-next-for-john-2014-11-04' ofgit://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next
git bisect goodbf515fb11ab539c76d04f0e3c5216ed41f41d81f# bad: [
2c99cd914d4fed9160d98849c9dd38034616768e] Merge branch 'amd-xgbe-next' git bisect bad2c99cd914d4fed9160d98849c9dd38034616768e# good: [
3d762a0f0ab9cb4a6b5993db3ce56c92f9f90ab2] net: dsa: Add support for reading switch registers with ethtool
git bisect good3d762a0f0ab9cb4a6b5993db3ce56c92f9f90ab2# bad: [
8ce0c8254f15229aa99fc6c04141f28c446e5f8c] Merge branch 'master' ofgit://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next
git bisect bad8ce0c8254f15229aa99fc6c04141f28c446e5f8c# good: [
f0c65567b3c1b23f79e8a49139580a3872a68d1f] Merge branch 'sunvnet-multi-tx-queue'
git bisect goodf0c65567b3c1b23f79e8a49139580a3872a68d1f# bad: [
547f2735c20023d7b50a791b1b17cacb652e9237] Merge branch 'mlx4-next' git bisect bad547f2735c20023d7b50a791b1b17cacb652e9237# good: [
4cdb1e2e3d3495423db558d3bb7ed11d66aabce7] net: shrink structsoftnet_data
git bisect good4cdb1e2e3d3495423db558d3bb7ed11d66aabce7# bad: [
0a98455666ec87378148a1dde97f1ce5baf75a64]net/mlx4_core: Protect port type setting by mutex
git bisect bad0a98455666ec87378148a1dde97f1ce5baf75a64# bad: [
6e8066999800d90d52af5c84ac49ebf683d14cdc]net/mlx4_core: Prevent VF from changing port configuration
git bisect bad6e8066999800d90d52af5c84ac49ebf683d14cdcQuoted 9 lines
# bad: [
d75b1ade567ffab085e8adbbdacf0092d10cd09c] net: less interrupt masking in NAPI
git bisect badd75b1ade567ffab085e8adbbdacf0092d10cd09c# first bad commit: [d75b1ade567ffab085e8adbbdacf0092d10cd09c] net: less interrupt masking in NAPICould you please solve this issue as it renders my board quite useless.
Thanks for the report and bisection !
Could you try following fix ?
drivers/net/ethernet/atheros/alx/main.c +0
-0
drivers/net/ethernet/atheros/alx/main.c static int alx_poll(struct napi_struct *napi, int budget) · line 278
Quoted 8 lines
drivers/net/ethernet/atheros/alx/main.c +1
-1@@ -272,7 +272,7 @@ static int alx_poll(struct napi_struct *napi, int budget)alx_clean_rx_irq (alx, budget);if (!complete) -return 1 ; +return budget;napi_complete (&alx->napi);
BTW this driver has other issues :
complete = alx_clean_tx_irq(alx) &&
alx_clean_rx_irq(alx, budget);
Means that under TX completion pressure (alx_clean_tx_irq(alx) return false), we never dequeue packets from RX rings.
Quoted 103 lines · Eric Dumazet
Quoted 79 lines · Oded Gabbay
Hi,
Commit
d75b1ade567ffab085e8adbbdacf0092d10cd09cbreaks my "Qualcomm Atheros AR8161 Gigabit Ethernet (rev 10)" Ethernet controller, which is handled by the alx network driver.ogabbay@odedg-ubuntu:~$ lspci -s 01:00.0 -k 01:00.0 Ethernet controller: Qualcomm Atheros AR8161 Gigabit Ethernet (rev 10) Subsystem: Qualcomm Atheros Device 1071 Kernel driver in use: alxI have this controller on a mobile platform of AMD APU Kaveri, which I use to test amdkfd, and from 3.19-rc1 the network stopped working when trying to transfer files through scp or nfs.
I bisected the kernel (from 3.18.0 to 3.19-rc1) and reached this commit.
Here is the log of the bisect:
git bisect start
# bad: [97bf6af1f928216fd6c5a66e8a57bfa95a659672] Linux 3.19-rc1 git bisect bad97bf6af1f928216fd6c5a66e8a57bfa95a659672# good: [
b2776bf7149bddd1f4161f14f79520f17fc1d71d] Linux 3.18 git bisect goodb2776bf7149bddd1f4161f14f79520f17fc1d71d# bad: [
70e71ca0af244f48a5dcf56dc435243792e3a495] Mergegit://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
git bisect bad70e71ca0af244f48a5dcf56dc435243792e3a495# good: [
e28870f9b3e92cd3570925089c6bb789c2603bc4] Merge tag 'backlight-for-linus-3.19' ofgit://git.kernel.org/pub/scm/linux/kernel/git/lee/backlight
git bisect goode28870f9b3e92cd3570925089c6bb789c2603bc4# bad: [
450fa21942fe2c37f0c9f52d1a33bbc081eee288]sh_eth: Remove redundant alignment adjustment
git bisect bad450fa21942fe2c37f0c9f52d1a33bbc081eee288# bad: [
5c8d19da950861d0482abc0ac3481acca34b008f] e100e: usenetdev_rss_key_fill()helper
git bisect bad5c8d19da950861d0482abc0ac3481acca34b008f# good: [
bf515fb11ab539c76d04f0e3c5216ed41f41d81f] Merge tag 'mac80211-next-for-john-2014-11-04' ofgit://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next
git bisect goodbf515fb11ab539c76d04f0e3c5216ed41f41d81f# bad: [
2c99cd914d4fed9160d98849c9dd38034616768e] Merge branch 'amd-xgbe-next' git bisect bad2c99cd914d4fed9160d98849c9dd38034616768e# good: [
3d762a0f0ab9cb4a6b5993db3ce56c92f9f90ab2] net: dsa: Add support for reading switch registers with ethtool
git bisect good3d762a0f0ab9cb4a6b5993db3ce56c92f9f90ab2# bad: [
8ce0c8254f15229aa99fc6c04141f28c446e5f8c] Merge branch 'master' ofgit://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next
git bisect bad8ce0c8254f15229aa99fc6c04141f28c446e5f8c# good: [
f0c65567b3c1b23f79e8a49139580a3872a68d1f] Merge branch 'sunvnet-multi-tx-queue'
git bisect goodf0c65567b3c1b23f79e8a49139580a3872a68d1f# bad: [
547f2735c20023d7b50a791b1b17cacb652e9237] Merge branch 'mlx4-next' git bisect bad547f2735c20023d7b50a791b1b17cacb652e9237# good: [
4cdb1e2e3d3495423db558d3bb7ed11d66aabce7] net: shrink structsoftnet_data
git bisect good4cdb1e2e3d3495423db558d3bb7ed11d66aabce7# bad: [
0a98455666ec87378148a1dde97f1ce5baf75a64]net/mlx4_core: Protect port type setting by mutex
git bisect bad0a98455666ec87378148a1dde97f1ce5baf75a64# bad: [
6e8066999800d90d52af5c84ac49ebf683d14cdc]net/mlx4_core: Prevent VF from changing port configuration
git bisect bad6e8066999800d90d52af5c84ac49ebf683d14cdcQuoted 9 lines
# bad: [
d75b1ade567ffab085e8adbbdacf0092d10cd09c] net: less interrupt masking in NAPI
git bisect badd75b1ade567ffab085e8adbbdacf0092d10cd09c# first bad commit: [d75b1ade567ffab085e8adbbdacf0092d10cd09c] net: less interrupt masking in NAPICould you please solve this issue as it renders my board quite useless.
Thanks for the report and bisection !
Could you try following fix ?
drivers/net/ethernet/atheros/alx/main.c +0
-0
drivers/net/ethernet/atheros/alx/main.c static int alx_poll(struct napi_struct *napi, int budget) · line 278
Quoted 8 lines
drivers/net/ethernet/atheros/alx/main.c +1
-1@@ -272,7 +272,7 @@ static int alx_poll(struct napi_struct *napi, int budget)alx_clean_rx_irq (alx, budget);if (!complete) -return 1 ; +return budget;napi_complete (&alx->napi);
Yes, no problem.
I will update on the result.
Oded
Quoted 117 lines · Oded Gabbay
Quoted 103 lines · Eric Dumazet
Quoted 79 lines · Oded Gabbay
Hi,
Commit
d75b1ade567ffab085e8adbbdacf0092d10cd09cbreaks my "Qualcomm Atheros AR8161 Gigabit Ethernet (rev 10)" Ethernet controller, which is handled by the alx network driver.ogabbay@odedg-ubuntu:~$ lspci -s 01:00.0 -k 01:00.0 Ethernet controller: Qualcomm Atheros AR8161 Gigabit Ethernet (rev 10) Subsystem: Qualcomm Atheros Device 1071 Kernel driver in use: alxI have this controller on a mobile platform of AMD APU Kaveri, which I use to test amdkfd, and from 3.19-rc1 the network stopped working when trying to transfer files through scp or nfs.
I bisected the kernel (from 3.18.0 to 3.19-rc1) and reached this commit.
Here is the log of the bisect:
git bisect start
# bad: [97bf6af1f928216fd6c5a66e8a57bfa95a659672] Linux 3.19-rc1 git bisect bad97bf6af1f928216fd6c5a66e8a57bfa95a659672# good: [
b2776bf7149bddd1f4161f14f79520f17fc1d71d] Linux 3.18 git bisect goodb2776bf7149bddd1f4161f14f79520f17fc1d71d# bad: [
70e71ca0af244f48a5dcf56dc435243792e3a495] Mergegit://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
git bisect bad70e71ca0af244f48a5dcf56dc435243792e3a495# good: [
e28870f9b3e92cd3570925089c6bb789c2603bc4] Merge tag 'backlight-for-linus-3.19' ofgit://git.kernel.org/pub/scm/linux/kernel/git/lee/backlight
git bisect goode28870f9b3e92cd3570925089c6bb789c2603bc4# bad: [
450fa21942fe2c37f0c9f52d1a33bbc081eee288]sh_eth: Remove redundant alignment adjustment
git bisect bad450fa21942fe2c37f0c9f52d1a33bbc081eee288# bad: [
5c8d19da950861d0482abc0ac3481acca34b008f] e100e: usenetdev_rss_key_fill()helper
git bisect bad5c8d19da950861d0482abc0ac3481acca34b008f# good: [
bf515fb11ab539c76d04f0e3c5216ed41f41d81f] Merge tag 'mac80211-next-for-john-2014-11-04' ofgit://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next
git bisect goodbf515fb11ab539c76d04f0e3c5216ed41f41d81f# bad: [
2c99cd914d4fed9160d98849c9dd38034616768e] Merge branch 'amd-xgbe-next' git bisect bad2c99cd914d4fed9160d98849c9dd38034616768e# good: [
3d762a0f0ab9cb4a6b5993db3ce56c92f9f90ab2] net: dsa: Add support for reading switch registers with ethtool
git bisect good3d762a0f0ab9cb4a6b5993db3ce56c92f9f90ab2# bad: [
8ce0c8254f15229aa99fc6c04141f28c446e5f8c] Merge branch 'master' ofgit://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next
git bisect bad8ce0c8254f15229aa99fc6c04141f28c446e5f8c# good: [
f0c65567b3c1b23f79e8a49139580a3872a68d1f] Merge branch 'sunvnet-multi-tx-queue'
git bisect goodf0c65567b3c1b23f79e8a49139580a3872a68d1f# bad: [
547f2735c20023d7b50a791b1b17cacb652e9237] Merge branch 'mlx4-next' git bisect bad547f2735c20023d7b50a791b1b17cacb652e9237# good: [
4cdb1e2e3d3495423db558d3bb7ed11d66aabce7] net: shrink structsoftnet_data
git bisect good4cdb1e2e3d3495423db558d3bb7ed11d66aabce7# bad: [
0a98455666ec87378148a1dde97f1ce5baf75a64]net/mlx4_core: Protect port type setting by mutex
git bisect bad0a98455666ec87378148a1dde97f1ce5baf75a64# bad: [
6e8066999800d90d52af5c84ac49ebf683d14cdc]net/mlx4_core: Prevent VF from changing port configuration
git bisect bad6e8066999800d90d52af5c84ac49ebf683d14cdcQuoted 9 lines
# bad: [
d75b1ade567ffab085e8adbbdacf0092d10cd09c] net: less interrupt masking in NAPI
git bisect badd75b1ade567ffab085e8adbbdacf0092d10cd09c# first bad commit: [d75b1ade567ffab085e8adbbdacf0092d10cd09c] net: less interrupt masking in NAPICould you please solve this issue as it renders my board quite useless.
Thanks for the report and bisection !
Could you try following fix ?
drivers/net/ethernet/atheros/alx/main.c +0
-0drivers/net/ethernet/atheros/alx/main.c static int alx_poll(struct napi_struct *napi, int budget) · line 278
Quoted 8 lines
drivers/net/ethernet/atheros/alx/main.c +1
-1@@ -272,7 +272,7 @@ static int alx_poll(struct napi_struct *napi, int budget)alx_clean_rx_irq (alx, budget);if (!complete) -return 1 ; +return budget;napi_complete (&alx->napi);Yes, no problem.
I will update on the result.
Quoted 7 lines
Oded
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Hi Eric,
Your patch fixed the problem.
Thanks for the quick help!
Oded
Quoted 2 lines · Oded Gabbay
Yes, no problem.
I will update on the result.
Please try this more complete patch, solving the TX pressure problem as well, and not lying about NAPI budget. thanks !
drivers/net/ethernet/atheros/alx/main.c +12 -10
@@ -184,15 +184,16 @@ static void alx_schedule_reset(struct alx_priv *alx)schedule_work (&alx->reset_wk); } -static bool alx_clean_rx_irq (struct alx_priv *alx,int budget) +static int alx_clean_rx_irq (struct alx_priv *alx,int budget) {struct alx_rx_queue *rxq = &alx->rxq;struct alx_rrd *rrd;struct alx_buffer *rxb;struct sk_buff *skb;u16 length, rfd_cleaned =0 ; +int work =0 ; -while (budget >0 ) { +while (work < budget) { rrd = &rxq->rrd[rxq->rrd_read_idx];if (!(rrd->word3 &cpu_to_le32 (1 <<RRD_UPDATED_SHIFT )))break ;
@@ -243,7 +244,7 @@ static bool alx_clean_rx_irq(struct alx_priv *alx, int budget) }napi_gro_receive (&alx->napi, skb); - budget--; + work++; next_pkt:if (++rxq->read_idx == alx->rx_ringsz)
@@ -258,21 +259,22 @@ next_pkt:if (rfd_cleaned)alx_refill_rx_ring (alx,GFP_ATOMIC ); -return budget >0 ; +return work; }static int alx_poll (struct napi_struct *napi,int budget) { struct alx_priv *alx = container_of(napi, struct alx_priv, napi);struct alx_hw *hw = &alx->hw; -bool complete = true;unsigned long flags; +bool tx_complete; +int work; - complete =alx_clean_tx_irq (alx) && -alx_clean_rx_irq (alx, budget); + tx_complete =alx_clean_tx_irq (alx); + work =alx_clean_rx_irq (alx, budget); -if (!complete) -return 1 ; +if (!tx_complete || work == budget) +return budget;napi_complete (&alx->napi);
@@ -284,7 +286,7 @@ static int alx_poll(struct napi_struct *napi, int budget)alx_post_write (hw); -return 0 ; +return work; }static irqreturn_t alx_intr_handle (struct alx_priv *alx,u32 intr)
Quoted 73 lines · Eric Dumazet
Quoted 2 lines · Oded Gabbay
Yes, no problem.
I will update on the result.Please try this more complete patch, solving the TX pressure problem as well, and not lying about NAPI budget. thanks !
drivers/net/ethernet/atheros/alx/main.c +11
-9@@ -184,15 +184,16 @@ static void alx_schedule_reset(struct alx_priv *alx)schedule_work (&alx->reset_wk); } -static bool alx_clean_rx_irq (struct alx_priv *alx,int budget) +static int alx_clean_rx_irq (struct alx_priv *alx,int budget) {struct alx_rx_queue *rxq = &alx->rxq;struct alx_rrd *rrd;struct alx_buffer *rxb;struct sk_buff *skb;u16 length, rfd_cleaned =0 ; +int work =0 ; -while (budget >0 ) { +while (work < budget) { rrd = &rxq->rrd[rxq->rrd_read_idx];if (!(rrd->word3 &cpu_to_le32 (1 <<RRD_UPDATED_SHIFT )))break ;@@ -243,7 +244,7 @@ static bool alx_clean_rx_irq(struct alx_priv *alx, int budget) }napi_gro_receive (&alx->napi, skb); - budget--; + work++; next_pkt:if (++rxq->read_idx == alx->rx_ringsz)@@ -258,21 +259,22 @@ next_pkt:if (rfd_cleaned)alx_refill_rx_ring (alx,GFP_ATOMIC ); -return budget >0 ; +return work; }static int alx_poll (struct napi_struct *napi,int budget) { struct alx_priv *alx = container_of(napi, struct alx_priv, napi);struct alx_hw *hw = &alx->hw; -bool complete = true;unsigned long flags; +bool tx_complete; +int work; - complete =alx_clean_tx_irq (alx) && -alx_clean_rx_irq (alx, budget); + tx_complete =alx_clean_tx_irq (alx); + work =alx_clean_rx_irq (alx, budget); -if (!complete) -return 1 ; +if (!tx_complete || work == budget) +return budget;napi_complete (&alx->napi);
drivers/net/ethernet/atheros/alx/main.c static int alx_poll(struct napi_struct *napi, int budget) · line 292
Quoted 8 lines
drivers/net/ethernet/atheros/alx/main.c +1
-1@@ -284,7 +286,7 @@ static int alx_poll(struct napi_struct *napi, int budget)alx_post_write (hw); -return 0 ; +return work; }static irqreturn_t alx_intr_handle (struct alx_priv *alx,u32 intr)
Hi,
Checked it and its working.
Thanks again.
Please note that I only use this Ethernet controller for NFS and SCP, it is not used for development of networking software of any kind, so maybe a more extensive testing is needed.
Oded
Oded Gabbay
Tested-byQuoted 91 lines · Oded Gabbay
Quoted 73 lines · Eric Dumazet
Quoted 2 lines · Oded Gabbay
Yes, no problem.
I will update on the result.Please try this more complete patch, solving the TX pressure problem as well, and not lying about NAPI budget. thanks !
drivers/net/ethernet/atheros/alx/main.c +11
-9@@ -184,15 +184,16 @@ static void alx_schedule_reset(struct alx_priv *alx)schedule_work (&alx->reset_wk); } -static bool alx_clean_rx_irq (struct alx_priv *alx,int budget) +static int alx_clean_rx_irq (struct alx_priv *alx,int budget) {struct alx_rx_queue *rxq = &alx->rxq;struct alx_rrd *rrd;struct alx_buffer *rxb;struct sk_buff *skb;u16 length, rfd_cleaned =0 ; +int work =0 ; -while (budget >0 ) { +while (work < budget) { rrd = &rxq->rrd[rxq->rrd_read_idx];if (!(rrd->word3 &cpu_to_le32 (1 <<RRD_UPDATED_SHIFT )))break ;@@ -243,7 +244,7 @@ static bool alx_clean_rx_irq(struct alx_priv *alx, int budget) }napi_gro_receive (&alx->napi, skb); - budget--; + work++; next_pkt:if (++rxq->read_idx == alx->rx_ringsz)@@ -258,21 +259,22 @@ next_pkt:if (rfd_cleaned)alx_refill_rx_ring (alx,GFP_ATOMIC ); -return budget >0 ; +return work; }static int alx_poll (struct napi_struct *napi,int budget) { struct alx_priv *alx = container_of(napi, struct alx_priv, napi);struct alx_hw *hw = &alx->hw; -bool complete = true;unsigned long flags; +bool tx_complete; +int work; - complete =alx_clean_tx_irq (alx) && -alx_clean_rx_irq (alx, budget); + tx_complete =alx_clean_tx_irq (alx); + work =alx_clean_rx_irq (alx, budget); -if (!complete) -return 1 ; +if (!tx_complete || work == budget) +return budget;napi_complete (&alx->napi);drivers/net/ethernet/atheros/alx/main.c static int alx_poll(struct napi_struct *napi, int budget) · line 292
Quoted 8 lines
drivers/net/ethernet/atheros/alx/main.c +1
-1@@ -284,7 +286,7 @@ static int alx_poll(struct napi_struct *napi, int budget)alx_post_write (hw); -return 0 ; +return work; }static irqreturn_t alx_intr_handle (struct alx_priv *alx,u32 intr)Hi,
Checked it and its working.
Thanks again.
Please note that I only use this Ethernet controller for NFS and SCP, it is not used for development of networking software of any kind, so maybe a more extensive testing is needed.
Quoted 7 lines
Oded
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
But in any case, you can add:
Oded
PATCH 1/1 alx: fix alx_poll()
In reply to Eric DumazetFrom: Eric Dumazet <[email protected]>
Commit d75b1ade567f ("net: less interrupt masking in NAPI") uncovered wrong alx_poll() behavior.
A NAPI poll() handler is supposed to return exactly the budget when/if napi_complete() has not been called.
It is also supposed to return number of frames that were received, so that netdev_budget can have a meaning.
Also, in case of TX pressure, we still have to dequeue received packets : alx_clean_rx_irq() has to be called even if alx_clean_tx_irq(alx) returns false, otherwise device is half duplex.
--- drivers/net/ethernet/atheros/alx/main.c | 24 +++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-)
drivers/net/ethernet/atheros/alx/main.c +13 -11
@@ -184,15 +184,16 @@ static void alx_schedule_reset(struct alx_priv *alx)schedule_work (&alx->reset_wk); } -static bool alx_clean_rx_irq (struct alx_priv *alx,int budget) +static int alx_clean_rx_irq (struct alx_priv *alx,int budget) {struct alx_rx_queue *rxq = &alx->rxq;struct alx_rrd *rrd;struct alx_buffer *rxb;struct sk_buff *skb;u16 length, rfd_cleaned =0 ; +int work =0 ; -while (budget >0 ) { +while (work < budget) { rrd = &rxq->rrd[rxq->rrd_read_idx];if (!(rrd->word3 &cpu_to_le32 (1 <<RRD_UPDATED_SHIFT )))break ;
@@ -203,7 +204,7 @@ static bool alx_clean_rx_irq(struct alx_priv *alx, int budget) ALX_GET_FIELD(le32_to_cpu(rrd->word0), RRD_NOR) != 1) {alx_schedule_reset (alx); -return 0 ; +return work; } rxb = &rxq->bufs[rxq->read_idx];
@@ -243,7 +244,7 @@ static bool alx_clean_rx_irq(struct alx_priv *alx, int budget) }napi_gro_receive (&alx->napi, skb); - budget--; + work++; next_pkt:if (++rxq->read_idx == alx->rx_ringsz)
@@ -258,21 +259,22 @@ next_pkt:if (rfd_cleaned)alx_refill_rx_ring (alx,GFP_ATOMIC ); -return budget >0 ; +return work; }static int alx_poll (struct napi_struct *napi,int budget) { struct alx_priv *alx = container_of(napi, struct alx_priv, napi);struct alx_hw *hw = &alx->hw; -bool complete = true;unsigned long flags; +bool tx_complete; +int work; - complete =alx_clean_tx_irq (alx) && -alx_clean_rx_irq (alx, budget); + tx_complete =alx_clean_tx_irq (alx); + work =alx_clean_rx_irq (alx, budget); -if (!complete) -return 1 ; +if (!tx_complete || work == budget) +return budget;napi_complete (&alx->napi);
@@ -284,7 +286,7 @@ static int alx_poll(struct napi_struct *napi, int budget)alx_post_write (hw); -return 0 ; +return work; }static irqreturn_t alx_intr_handle (struct alx_priv *alx,u32 intr)
David Miller
maintainerRe: [PATCH net] alx: fix alx_poll()
From: Eric Dumazet <[email protected]>
Date: Sun, 11 Jan 2015 10:32:18 -0800
Quoted 15 lines
From: Eric Dumazet <[email protected]>
Commit
d75b1ade567f("net: less interrupt masking in NAPI") uncovered wrongalx_poll()behavior.A NAPI
poll()handler is supposed to return exactly the budget when/ifnapi_complete()has not been called.It is also supposed to return number of frames that were received, so that
netdev_budgetcan have a meaning.Also, in case of TX pressure, we still have to dequeue received packets :
alx_clean_rx_irq()has to be called even ifalx_clean_tx_irq(alx)returns false, otherwise device is half duplex.
Quoted 5 lines
Signed-off-by Eric Dumazet <[email protected]>Fixes d75b1ade567f ("net: less interrupt masking in NAPI")Reported-by Oded Gabbay <[email protected]>Bisected-by Oded Gabbay <[email protected]>Tested-by Oded Gabbay <[email protected]>
Applied and queued up for -stable, thanks Eric.
Re: [PATCH net] alx: fix alx_poll()
In reply to Eric DumazetQuoted 2 lines · Eric Dumazet
Commit
d75b1ade567f("net: less interrupt masking in NAPI") uncovered wrongalx_poll()behavior.
[...]
Thanks Eric and Oded! :)
johannes