[hns3-0114]net: hns3: fix a wrong reset interrupt status mask
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
kunpeng920 |
Fix Released
|
Undecided
|
Unassigned | ||
Ubuntu-18.04 |
Won't Fix
|
Undecided
|
Unassigned | ||
Ubuntu-18.04-hwe |
Fix Released
|
Undecided
|
Unassigned | ||
Upstream-kernel |
Fix Released
|
Undecided
|
Unassigned |
Bug Description
[Bug Description]
There is timing window between ring_space checking and
netif_stop_subqueue when transmiting a SKB, and the TX BD
cleaning may be executed during the time window, which may
caused TX queue not restarted problem.
[Steps to Reproduce]
1.run IO with high throughput
[Actual Results]
cause tx timeout
[Expected Results]
IO ok
[Reproducibility]
Inevitably
[Additional information]
Hardware: D06
Firmware: NA
Kernel: NA
[Resolution]
This patch fixes it by rechecking the ring_space after
netif_stop_subqueue to make sure TX queue is restarted.
Also, the ring->next_to_clean is updated even when pkts is
zero, because all the TX BD cleaned may be non-SKB, so it
needs to check if TX queue need to be restarted.
Changed in kunpeng920: | |
status: | Fix Committed → Fix Released |
Is this patch the fix? It can not match the bug description.
commit 74e78d6bae1904e 87469da5ed87e9f 6bd1131f46
Author: Huazhong Tan <email address hidden>
Date: Wed Nov 20 10:07:15 2019 +0800
net: hns3: fix a wrong reset interrupt status mask
According to hardware user manual, bits5~7 in register MISC_VECTOR_ INT_STS means reset interrupts status, err_handle( ) read the wrong reset
HCLGE_
but HCLGE_RESET_INT_M is defined as bits0~2 now. So it
will make hclge_reset_
interrupt status.
This patch fixes this wrong bit mask.
Fixes: 2336f19d7892 ("net: hns3: check reset interrupt status when reset fails")
Signed-off-by: Huazhong Tan <email address hidden>
Signed-off-by: David S. Miller <email address hidden>