[LEDE-DEV] Bug - spinlock loop in cns3xxx_eth.c
Koen Vandeputte
koen.vandeputte at ncentric.com
Tue Jun 14 07:34:13 PDT 2016
Hi Tim,
I fully understand the reason for the check.
However,
I think the bug has nothing to do with the rotting packet issue.
The bug is actually:
- eth_schedule_poll() gets called as it's detected that the ring is full
after IRQ_enable. (cown flag is set in the previous slot of the ring)
--> During this extra loop, _0_ packets are received/processed! The
ring still seems to be full, and another reschedule takes place .. and
so on ..
Iv'e added 3 debug counters in the code: (see below after the patch)
- Loop --> Top of eth_poll()
- IRQ --> Top of eth_rx_irq()
- Resched --> Inside the reschedule check
Patch:
--- a/drivers/net/ethernet/cavium/cns3xxx_eth.c
+++ b/drivers/net/ethernet/cavium/cns3xxx_eth.c
@@ -308,6 +308,8 @@ static int ports_open;
static struct port *switch_port_tab[4];
struct net_device *napi_dev;
+static int CntIRQ;
+
static int cns3xxx_mdio_cmd(struct mii_bus *bus, int phy_id, int location,
int write, u16 cmd)
{
@@ -437,7 +439,10 @@ static void cns3xxx_adjust_link(struct n
static void eth_schedule_poll(struct sw *sw)
{
if (unlikely(!napi_schedule_prep(&sw->napi)))
+ {
+ //printk(KERN_ERR "sched err\n");
return;
+ }
disable_irq_nosync(sw->rx_irq);
__napi_schedule(&sw->napi);
@@ -447,6 +452,7 @@ irqreturn_t eth_rx_irq(int irq, void *pd
{
struct net_device *dev = pdev;
struct sw *sw = netdev_priv(dev);
+ CntIRQ++;
eth_schedule_poll(sw);
return (IRQ_HANDLED);
}
@@ -617,6 +623,7 @@ static void eth_complete_tx(struct sw *s
static int eth_poll(struct napi_struct *napi, int budget)
{
+ static int Loop = 0;
struct sw *sw = container_of(napi, struct sw, napi);
struct _rx_ring *rx_ring = &sw->rx_ring;
int received = 0;
@@ -712,6 +719,9 @@ static int eth_poll(struct napi_struct *
}
rx_ring->cur_index = i;
+
+ Loop++;
+
if (!received) {
napi_complete(napi);
enable_irq(sw->rx_irq);
@@ -719,7 +729,12 @@ static int eth_poll(struct napi_struct *
/* if rx descriptors are full schedule another poll */
if (rx_ring->desc[(i-1) & (RX_DESCS-1)].cown)
+ {
+ static int Sched = 0;
+
+ printk(KERN_ERR "Loop: %d irq: %d ReSched: %d\n", Loop,
CntIRQ, ++Sched);
eth_schedule_poll(sw);
+ }
}
spin_lock_bh(&tx_lock);
When the bug triggers, you can see below that consecutive loops in
eth_poll(), triggered by a reschedule, doesn't process any RX packets at
all ..
(As the ReSched counter increases linear with the loop counter and
ReSched can only be incremented when "!received")
Also
Checking /proc/interrupts shows that gig_switch IRQ counter goes berserk
(+10k IRQ/s)
[ 477.440000] Loop: 835307 irq: 300583 ReSched: 1
[ 477.440000] Loop: 835308 irq: 300583 ReSched: 2
[ 477.440000] Loop: 835310 irq: 300583 ReSched: 3
[ 477.440000] Loop: 835311 irq: 300583 ReSched: 4
[ 477.440000] Loop: 835312 irq: 300583 ReSched: 5
[ 477.440000] Loop: 835313 irq: 300583 ReSched: 6
[ 477.440000] Loop: 835314 irq: 300583 ReSched: 7
[ 477.440000] Loop: 835315 irq: 300583 ReSched: 8
[ 477.440000] Loop: 835316 irq: 300583 ReSched: 9
[ 477.440000] Loop: 835317 irq: 300583 ReSched: 10
[ 477.440000] Loop: 835318 irq: 300583 ReSched: 11
[ 477.440000] Loop: 835319 irq: 300583 ReSched: 12
[ 477.440000] Loop: 835320 irq: 300583 ReSched: 13
[ 477.440000] Loop: 835321 irq: 300583 ReSched: 14
[ 477.440000] Loop: 835322 irq: 300583 ReSched: 15
[ 477.440000] Loop: 835323 irq: 300583 ReSched: 16
[ 477.440000] Loop: 835324 irq: 300583 ReSched: 17
[ 477.440000] Loop: 835325 irq: 300583 ReSched: 18
[ 477.440000] Loop: 835326 irq: 300583 ReSched: 19
[ 477.440000] Loop: 835327 irq: 300583 ReSched: 20
[ 477.440000] Loop: 835328 irq: 300583 ReSched: 21
[ 477.440000] Loop: 835329 irq: 300583 ReSched: 22
[ 477.440000] Loop: 835330 irq: 300583 ReSched: 23
[ 477.440000] Loop: 835331 irq: 300583 ReSched: 24
[ 477.440000] Loop: 835332 irq: 300583 ReSched: 25
[ 477.440000] Loop: 835333 irq: 300583 ReSched: 26
[ 477.440000] Loop: 835334 irq: 300583 ReSched: 27
[ 477.440000] Loop: 835335 irq: 300583 ReSched: 28
[ 477.440000] Loop: 835336 irq: 300583 ReSched: 29
[ 477.440000] Loop: 835337 irq: 300583 ReSched: 30
[ 477.440000] Loop: 835338 irq: 300583 ReSched: 31
[ 477.440000] Loop: 835339 irq: 300583 ReSched: 32
[ 477.440000] Loop: 835340 irq: 300583 ReSched: 33
[ 477.440000] Loop: 835341 irq: 300583 ReSched: 34
[ 477.440000] Loop: 835342 irq: 300583 ReSched: 35
[ 477.440000] Loop: 835343 irq: 300583 ReSched: 36
[ 477.440000] Loop: 835344 irq: 300583 ReSched: 37
[ 477.440000] Loop: 835345 irq: 300583 ReSched: 38
[ 477.440000] Loop: 835346 irq: 300583 ReSched: 39
[ 477.440000] Loop: 835347 irq: 300583 ReSched: 40
[ 477.440000] Loop: 835348 irq: 300583 ReSched: 41
[ 477.440000] Loop: 835349 irq: 300583 ReSched: 42
[ 477.440000] Loop: 835350 irq: 300583 ReSched: 43
[ 477.440000] Loop: 835351 irq: 300583 ReSched: 44
[ 477.440000] Loop: 835352 irq: 300583 ReSched: 45
[ 477.440000] Loop: 835353 irq: 300583 ReSched: 46
[ 477.440000] Loop: 835354 irq: 300583 ReSched: 47
[ 477.440000] Loop: 835355 irq: 300583 ReSched: 48
[ 477.440000] Loop: 835356 irq: 300583 ReSched: 49
[ 477.440000] Loop: 835357 irq: 300583 ReSched: 50
[ 477.440000] Loop: 835358 irq: 300583 ReSched: 51
[ 477.440000] Loop: 835359 irq: 300583 ReSched: 52
[ 477.440000] Loop: 835360 irq: 300583 ReSched: 53
[ 477.440000] Loop: 835361 irq: 300583 ReSched: 54
[ 477.440000] Loop: 835362 irq: 300583 ReSched: 55
[ 477.440000] Loop: 835363 irq: 300583 ReSched: 56
[ 477.440000] Loop: 835364 irq: 300583 ReSched: 57
[ 477.440000] Loop: 835365 irq: 300583 ReSched: 58
[ 477.440000] Loop: 835366 irq: 300583 ReSched: 59
[ 477.440000] Loop: 835367 irq: 300583 ReSched: 60
[ 477.440000] Loop: 835368 irq: 300583 ReSched: 61
[ 477.440000] Loop: 835369 irq: 300583 ReSched: 62
[ 477.440000] Loop: 835370 irq: 300583 ReSched: 63
[ 477.440000] Loop: 835371 irq: 300583 ReSched: 64
[ 477.440000] Loop: 835372 irq: 300583 ReSched: 65
[ 477.440000] Loop: 835373 irq: 300583 ReSched: 66
[ 477.440000] Loop: 835374 irq: 300583 ReSched: 67
[ 477.440000] Loop: 835375 irq: 300583 ReSched: 68
[ 477.440000] Loop: 835376 irq: 300583 ReSched: 69
[ 477.440000] Loop: 835377 irq: 300583 ReSched: 70
[ 477.440000] Loop: 835378 irq: 300583 ReSched: 71
[ 477.440000] Loop: 835379 irq: 300583 ReSched: 72
[ 477.440000] Loop: 835380 irq: 300583 ReSched: 73
[ 477.440000] Loop: 835381 irq: 300583 ReSched: 74
[ 477.440000] Loop: 835382 irq: 300583 ReSched: 75
[ 477.440000] Loop: 835383 irq: 300583 ReSched: 76
[ 477.440000] Loop: 835384 irq: 300583 ReSched: 77
[ 477.440000] Loop: 835385 irq: 300583 ReSched: 78
[ 477.440000] Loop: 835386 irq: 300583 ReSched: 79
[ 477.440000] Loop: 835387 irq: 300583 ReSched: 80
[ 477.440000] Loop: 835388 irq: 300583 ReSched: 81
[ 477.440000] Loop: 835389 irq: 300583 ReSched: 82
[ 477.440000] Loop: 835390 irq: 300583 ReSched: 83
[ 477.440000] Loop: 835391 irq: 300583 ReSched: 84
[ 477.440000] Loop: 835392 irq: 300583 ReSched: 85
[ 477.440000] Loop: 835393 irq: 300583 ReSched: 86
[ 477.440000] Loop: 835394 irq: 300583 ReSched: 87
[ 477.440000] Loop: 835396 irq: 300583 ReSched: 88
[ 477.440000] Loop: 835397 irq: 300583 ReSched: 89
[ 477.440000] Loop: 835398 irq: 300583 ReSched: 90
[ 477.440000] Loop: 835399 irq: 300583 ReSched: 91
[ 477.440000] Loop: 835400 irq: 300583 ReSched: 92
[ 477.440000] Loop: 835403 irq: 300583 ReSched: 93
[ 477.440000] Loop: 835406 irq: 300583 ReSched: 94
[ 477.440000] Loop: 835407 irq: 300583 ReSched: 95
[ 477.440000] Loop: 835408 irq: 300583 ReSched: 96
[ 477.440000] Loop: 835409 irq: 300583 ReSched: 97
[ 477.440000] Loop: 835410 irq: 300583 ReSched: 98
[ 477.440000] Loop: 835411 irq: 300583 ReSched: 99
[ 477.440000] Loop: 835412 irq: 300583 ReSched: 100
[ 477.440000] Loop: 835413 irq: 300583 ReSched: 101
[ 477.440000] Loop: 835414 irq: 300583 ReSched: 102
[ 477.440000] Loop: 835415 irq: 300583 ReSched: 103
[ 477.440000] Loop: 835416 irq: 300583 ReSched: 104
[ 477.440000] Loop: 835417 irq: 300583 ReSched: 105
[ 477.440000] Loop: 835418 irq: 300583 ReSched: 106
[ 477.440000] Loop: 835419 irq: 300583 ReSched: 107
[ 477.440000] Loop: 835420 irq: 300583 ReSched: 108
[ 477.440000] Loop: 835421 irq: 300583 ReSched: 109
[ 477.440000] Loop: 835422 irq: 300583 ReSched: 110
[ 477.440000] Loop: 835423 irq: 300583 ReSched: 111
[ 477.440000] Loop: 835424 irq: 300583 ReSched: 112
[ 477.440000] Loop: 835425 irq: 300583 ReSched: 113
[ 477.440000] Loop: 835426 irq: 300583 ReSched: 114
[ 477.440000] Loop: 835427 irq: 300583 ReSched: 115
[ 477.440000] Loop: 835428 irq: 300583 ReSched: 116
[ 477.440000] Loop: 835429 irq: 300583 ReSched: 117
[ 477.440000] Loop: 835430 irq: 300583 ReSched: 118
[ 477.440000] Loop: 835431 irq: 300583 ReSched: 119
[ 477.440000] Loop: 835432 irq: 300583 ReSched: 120
[ 477.440000] Loop: 835433 irq: 300583 ReSched: 121
[ 477.440000] Loop: 835434 irq: 300583 ReSched: 122
[ 477.440000] Loop: 835435 irq: 300583 ReSched: 123
[ 477.440000] Loop: 835436 irq: 300583 ReSched: 124
[ 477.440000] Loop: 835437 irq: 300583 ReSched: 125
[ 477.440000] Loop: 835438 irq: 300583 ReSched: 126
[ 477.440000] Loop: 835439 irq: 300583 ReSched: 127
[ 477.440000] Loop: 835440 irq: 300583 ReSched: 128
[ 477.440000] Loop: 835441 irq: 300583 ReSched: 129
[ 477.440000] Loop: 835442 irq: 300583 ReSched: 130
[ 477.440000] Loop: 835443 irq: 300583 ReSched: 131
[ 477.440000] Loop: 835444 irq: 300583 ReSched: 132
[ 477.440000] Loop: 835445 irq: 300583 ReSched: 133
[ 477.440000] Loop: 835446 irq: 300583 ReSched: 134
[ 477.440000] Loop: 835447 irq: 300583 ReSched: 135
[ 477.440000] Loop: 835448 irq: 300583 ReSched: 136
[ 477.440000] Loop: 835449 irq: 300583 ReSched: 137
[ 477.440000] Loop: 835450 irq: 300583 ReSched: 138
[ 477.450000] Loop: 835451 irq: 300583 ReSched: 139
[ 477.450000] Loop: 835452 irq: 300583 ReSched: 140
[ 477.450000] Loop: 835453 irq: 300583 ReSched: 141
[ 477.450000] Loop: 835454 irq: 300583 ReSched: 142
[ 477.450000] Loop: 835455 irq: 300583 ReSched: 143
[ 477.450000] Loop: 835456 irq: 300583 ReSched: 144
[ 477.450000] Loop: 835457 irq: 300583 ReSched: 145
[ 477.450000] Loop: 835458 irq: 300583 ReSched: 146
[ 477.450000] Loop: 835459 irq: 300583 ReSched: 147
[ 477.450000] Loop: 835460 irq: 300583 ReSched: 148
[ 477.450000] Loop: 835461 irq: 300583 ReSched: 149
[ 477.450000] Loop: 835462 irq: 300583 ReSched: 150
[ 477.450000] Loop: 835463 irq: 300583 ReSched: 151
[ 477.450000] Loop: 835464 irq: 300583 ReSched: 152
[ 477.450000] Loop: 835465 irq: 300583 ReSched: 153
[ 477.450000] Loop: 835466 irq: 300583 ReSched: 154
[ 477.450000] Loop: 835467 irq: 300583 ReSched: 155
[ 477.450000] Loop: 835468 irq: 300583 ReSched: 156
[ 477.450000] Loop: 835469 irq: 300583 ReSched: 157
[ 477.450000] Loop: 835470 irq: 300583 ReSched: 158
[ 477.450000] Loop: 835472 irq: 300583 ReSched: 159
[ 477.450000] Loop: 835473 irq: 300583 ReSched: 160
[ 477.450000] Loop: 835474 irq: 300583 ReSched: 161
[ 477.450000] Loop: 835475 irq: 300583 ReSched: 162
[ 477.450000] Loop: 835476 irq: 300583 ReSched: 163
[ 477.450000] Loop: 835477 irq: 300583 ReSched: 164
[ 477.450000] Loop: 835478 irq: 300583 ReSched: 165
[ 477.450000] Loop: 835479 irq: 300583 ReSched: 166
[ 477.450000] Loop: 835480 irq: 300583 ReSched: 167
[ 477.450000] Loop: 835481 irq: 300583 ReSched: 168
[ 477.450000] Loop: 835482 irq: 300583 ReSched: 169
[ 477.450000] Loop: 835483 irq: 300583 ReSched: 170
[ 477.450000] Loop: 835484 irq: 300583 ReSched: 171
[ 477.450000] Loop: 835485 irq: 300583 ReSched: 172
[ 477.450000] Loop: 835486 irq: 300583 ReSched: 173
[ 477.450000] Loop: 835487 irq: 300583 ReSched: 174
[ 477.450000] Loop: 835488 irq: 300583 ReSched: 175
[ 477.450000] Loop: 835489 irq: 300583 ReSched: 176
[ 477.450000] Loop: 835490 irq: 300583 ReSched: 177
[ 477.450000] Loop: 835491 irq: 300583 ReSched: 178
[ 477.450000] Loop: 835492 irq: 300583 ReSched: 179
[ 477.450000] Loop: 835493 irq: 300583 ReSched: 180
[ 477.450000] Loop: 835494 irq: 300583 ReSched: 181
[ 477.450000] Loop: 835495 irq: 300583 ReSched: 182
[ 477.450000] Loop: 835496 irq: 300583 ReSched: 183
[ 477.450000] Loop: 835497 irq: 300583 ReSched: 184
[ 477.450000] Loop: 835498 irq: 300583 ReSched: 185
[ 477.450000] Loop: 835499 irq: 300583 ReSched: 186
[ 477.450000] Loop: 835500 irq: 300583 ReSched: 187
[ 477.450000] Loop: 835501 irq: 300583 ReSched: 188
[ 477.450000] Loop: 835502 irq: 300583 ReSched: 189
[ 477.450000] Loop: 835503 irq: 300583 ReSched: 190
[ 477.450000] Loop: 835504 irq: 300583 ReSched: 191
[ 477.450000] Loop: 835505 irq: 300583 ReSched: 192
[ 477.450000] Loop: 835506 irq: 300583 ReSched: 193
[ 477.450000] Loop: 835507 irq: 300583 ReSched: 194
[ 477.450000] Loop: 835508 irq: 300583 ReSched: 195
[ 477.450000] Loop: 835509 irq: 300583 ReSched: 196
[ 477.450000] Loop: 835510 irq: 300583 ReSched: 197
[ 477.450000] Loop: 835511 irq: 300583 ReSched: 198
[ 477.450000] Loop: 835512 irq: 300583 ReSched: 199
[ 477.450000] Loop: 835513 irq: 300583 ReSched: 200
[ 477.450000] Loop: 835514 irq: 300583 ReSched: 201
[ 477.450000] Loop: 835515 irq: 300583 ReSched: 202
[ 477.450000] Loop: 835516 irq: 300583 ReSched: 203
[ 477.450000] Loop: 835517 irq: 300583 ReSched: 204
[ 477.450000] Loop: 835518 irq: 300583 ReSched: 205
[ 477.450000] Loop: 835519 irq: 300583 ReSched: 206
[ 477.450000] Loop: 835520 irq: 300583 ReSched: 207
[ 477.450000] Loop: 835521 irq: 300583 ReSched: 208
[ 477.450000] Loop: 835522 irq: 300583 ReSched: 209
[ 477.450000] Loop: 835523 irq: 300583 ReSched: 210
[ 477.450000] Loop: 835524 irq: 300583 ReSched: 211
[ 477.450000] Loop: 835525 irq: 300583 ReSched: 212
[ 477.450000] Loop: 835526 irq: 300583 ReSched: 213
[ 477.450000] Loop: 835527 irq: 300583 ReSched: 214
[ 477.450000] Loop: 835528 irq: 300583 ReSched: 215
[ 477.450000] Loop: 835529 irq: 300583 ReSched: 216
[ 477.450000] Loop: 835530 irq: 300583 ReSched: 217
[ 478.450000] Loop: 835534 irq: 300584 ReSched: 218
[ 478.460000] Loop: 835536 irq: 300585 ReSched: 219
[ 478.470000] Loop: 835538 irq: 300586 ReSched: 220
[ 478.470000] Loop: 835539 irq: 300586 ReSched: 221
[ 478.500000] Loop: 835983 irq: 300586 ReSched: 622
...
[ 478.510000] Loop: 836072 irq: 300586 ReSched: 697
[ 478.510000] Loop: 836073 irq: 300586 ReSched: 698
[ 478.510000] Loop: 836074 irq: 300586 ReSched: 699
[ 478.510000] Loop: 836075 irq: 300586 ReSched: 700
[ 478.510000] Loop: 836076 irq: 300586 ReSched: 701
[ 478.510000] Loop: 836077 irq: 300586 ReSched: 702
[ 478.510000] Loop: 836078 irq: 300586 ReSched: 703
[ 478.510000] Loop: 836079 irq: 300586 ReSched: 704
[ 478.510000] Loop: 836080 irq: 300586 ReSched: 705
[ 478.510000] Loop: 836081 irq: 300586 ReSched: 706
[ 478.510000] Loop: 836082 irq: 300586 ReSched: 707
[ 478.510000] Loop: 836083 irq: 300586 ReSched: 708
[ 478.510000] Loop: 836084 irq: 300586 ReSched: 709
[ 478.510000] Loop: 836085 irq: 300586 ReSched: 710
[ 478.510000] Loop: 836086 irq: 300586 ReSched: 711
[ 478.510000] Loop: 836087 irq: 300586 ReSched: 712
[ 478.510000] Loop: 836088 irq: 300586 ReSched: 713
[ 478.510000] Loop: 836089 irq: 300586 ReSched: 714
[ 478.510000] Loop: 836090 irq: 300586 ReSched: 715
[ 478.510000] Loop: 836091 irq: 300586 ReSched: 716
[ 478.510000] Loop: 836092 irq: 300586 ReSched: 717
[ 478.510000] Loop: 836093 irq: 300586 ReSched: 718
[ 478.510000] Loop: 836094 irq: 300586 ReSched: 719
[ 478.510000] Loop: 836095 irq: 300586 ReSched: 720
[ 478.510000] Loop: 836096 irq: 300586 ReSched: 721
[ 478.510000] Loop: 836097 irq: 300586 ReSched: 722
[ 478.510000] Loop: 836098 irq: 300586 ReSched: 723
[ 478.510000] Loop: 836099 irq: 300586 ReSched: 724
[ 478.510000] Loop: 836100 irq: 300586 ReSched: 725
[ 478.510000] Loop: 836101 irq: 300586 ReSched: 726
[ 478.510000] Loop: 836102 irq: 300586 ReSched: 727
[ 478.510000] Loop: 836103 irq: 300586 ReSched: 728
[ 478.510000] Loop: 836104 irq: 300586 ReSched: 729
[ 478.510000] Loop: 836105 irq: 300586 ReSched: 730
[ 478.510000] Loop: 836106 irq: 300586 ReSched: 731
[ 478.510000] Loop: 836107 irq: 300586 ReSched: 732
[ 478.510000] Loop: 836108 irq: 300586 ReSched: 733
[ 478.510000] Loop: 836109 irq: 300586 ReSched: 734
[ 478.510000] Loop: 836110 irq: 300586 ReSched: 735
[ 478.510000] Loop: 836111 irq: 300586 ReSched: 736
[ 478.510000] Loop: 836112 irq: 300586 ReSched: 737
[ 478.510000] Loop: 836113 irq: 300586 ReSched: 738
[ 478.510000] Loop: 836114 irq: 300586 ReSched: 739
[ 478.510000] Loop: 836115 irq: 300586 ReSched: 740
[ 478.510000] Loop: 836116 irq: 300586 ReSched: 741
[ 478.510000] Loop: 836117 irq: 300586 ReSched: 742
[ 478.510000] Loop: 836118 irq: 300586 ReSched: 743
[ 478.510000] Loop: 836119 irq: 300586 ReSched: 744
[ 478.510000] Loop: 836120 irq: 300586 ReSched: 745
[ 478.510000] Loop: 836121 irq: 300586 ReSched: 746
[ 478.510000] Loop: 836122 irq: 300586 ReSched: 747
[ 478.510000] Loop: 836123 irq: 300586 ReSched: 748
[ 478.510000] Loop: 836124 irq: 300586 ReSched: 749
[ 478.510000] Loop: 836125 irq: 300586 ReSched: 750
[ 478.510000] Loop: 836126 irq: 300586 ReSched: 751
[ 478.510000] Loop: 836127 irq: 300586 ReSched: 752
[ 478.510000] Loop: 836128 irq: 300586 ReSched: 753
[ 478.510000] Loop: 836129 irq: 300586 ReSched: 754
[ 478.510000] Loop: 836130 irq: 300586 ReSched: 755
[ 478.510000] Loop: 836131 irq: 300586 ReSched: 756
[ 478.510000] Loop: 836132 irq: 300586 ReSched: 757
[ 478.510000] Loop: 836133 irq: 300586 ReSched: 758
[ 478.510000] Loop: 836134 irq: 300586 ReSched: 759
Koen
On 2016-06-13 20:17, Tim Harvey wrote:
> On Mon, Jun 13, 2016 at 9:12 AM, Koen Vandeputte
> <koen.vandeputte at ncentric.com> wrote:
>> Hi All,
>>
>> There seems to be a bug in the function eth_poll() in this driver
>>
>> When the RX ring gets full once, the re-schedule is called forever, even
>> when the ring is empty afterwards.
>>
>>
>> if (!received) {
>> napi_complete(napi);
>> enable_irq(sw->rx_irq);
>> budget = 0;
>>
>> /* if rx descriptors are full schedule another poll */
>> if (rx_ring->desc[(i-1) & (RX_DESCS-1)].cown)
>> {
>> eth_schedule_poll(sw); <---- Gets called on each function
>> entry
>> }
>> }
>>
>>
>> This causes SoftIRQ to fully load a core forever.
>>
>>
>> I didn't fix it yet, but should I be the first, i'll supply a patch ..
>>
> Koen,
>
> We have seen this before, but admittedly don't understand why we enter
> into the same condition on each subsequent call to eth_poll(). The
> check is to catch the condition described as irq rot [1] and is to
> catch the case where after processing the full budget, we are
> immediately full again (a situation which is easily re-producible with
> a flood-ping). If this occurs we will no longer get an rx interrupt
> (because the descriptors are full) and our napi function will never
> get called again (unless transmitting packets).
>
> What is your proposed patch?
>
> Tim
>
> 1 .http://www.linuxfoundation.org/collaborate/workgroups/networking/napi#IRQ_race_a.k.a_rotting_packet
More information about the Lede-dev
mailing list