| .. | .. |
|---|
| 489 | 489 | |
|---|
| 490 | 490 | add_wait_queue(sk_sleep(sk), &wait); |
|---|
| 491 | 491 | while (1) { |
|---|
| 492 | | - /* Ensure session->terminate is updated */ |
|---|
| 493 | | - smp_mb__before_atomic(); |
|---|
| 494 | | - |
|---|
| 495 | 492 | if (atomic_read(&s->terminate)) |
|---|
| 496 | 493 | break; |
|---|
| 497 | 494 | /* RX */ |
|---|
| .. | .. |
|---|
| 512 | 509 | break; |
|---|
| 513 | 510 | netif_wake_queue(dev); |
|---|
| 514 | 511 | |
|---|
| 512 | + /* |
|---|
| 513 | + * wait_woken() performs the necessary memory barriers |
|---|
| 514 | + * for us; see the header comment for this primitive. |
|---|
| 515 | + */ |
|---|
| 515 | 516 | wait_woken(&wait, TASK_INTERRUPTIBLE, MAX_SCHEDULE_TIMEOUT); |
|---|
| 516 | 517 | } |
|---|
| 517 | 518 | remove_wait_queue(sk_sleep(sk), &wait); |
|---|