Commit f605f26
RDMA/rxe: Protect QP state with qp->state_lock
Currently the rxe driver makes little effort to make the changes to qp
state (which includes qp->attr.qp_state, qp->attr.sq_draining and
qp->valid) atomic between different client threads and IO threads. In
particular a common template is for an RDMA application to call
ib_modify_qp() to move a qp to ERR state and then wait until all the
packet and work queues have drained before calling ib_destroy_qp(). None
of these state changes are protected by locks to assure that the changes
are executed atomically and that memory barriers are included. This has
been observed to lead to incorrect behavior around qp cleanup.
This patch continues the work of the previous patches in this series and
adds locking code around qp state changes and lookups.
Link: https://lore.kernel.org/r/20230405042611.6467-5-rpearsonhpe@gmail.com
Signed-off-by: Bob Pearson <rpearsonhpe@gmail.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>1 parent 7b560b8 commit f605f26
File tree
7 files changed
+317
-218
lines changed- drivers/infiniband/sw/rxe
7 files changed
+317
-218
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
118 | 118 | | |
119 | 119 | | |
120 | 120 | | |
| 121 | + | |
121 | 122 | | |
122 | 123 | | |
123 | 124 | | |
124 | 125 | | |
| 126 | + | |
125 | 127 | | |
126 | 128 | | |
127 | 129 | | |
| |||
479 | 481 | | |
480 | 482 | | |
481 | 483 | | |
| 484 | + | |
482 | 485 | | |
483 | | - | |
484 | | - | |
485 | 486 | | |
486 | 487 | | |
487 | 488 | | |
| |||
497 | 498 | | |
498 | 499 | | |
499 | 500 | | |
500 | | - | |
501 | 501 | | |
| 502 | + | |
502 | 503 | | |
503 | 504 | | |
504 | 505 | | |
| |||
614 | 615 | | |
615 | 616 | | |
616 | 617 | | |
| 618 | + | |
| 619 | + | |
| 620 | + | |
| 621 | + | |
| 622 | + | |
| 623 | + | |
| 624 | + | |
| 625 | + | |
| 626 | + | |
| 627 | + | |
| 628 | + | |
| 629 | + | |
| 630 | + | |
| 631 | + | |
| 632 | + | |
| 633 | + | |
| 634 | + | |
| 635 | + | |
| 636 | + | |
| 637 | + | |
617 | 638 | | |
618 | 639 | | |
619 | 640 | | |
| |||
623 | 644 | | |
624 | 645 | | |
625 | 646 | | |
| 647 | + | |
626 | 648 | | |
627 | | - | |
| 649 | + | |
628 | 650 | | |
629 | 651 | | |
630 | 652 | | |
631 | 653 | | |
| 654 | + | |
632 | 655 | | |
633 | 656 | | |
| 657 | + | |
634 | 658 | | |
635 | 659 | | |
636 | 660 | | |
| |||
718 | 742 | | |
719 | 743 | | |
720 | 744 | | |
721 | | - | |
722 | | - | |
723 | | - | |
724 | | - | |
725 | | - | |
726 | | - | |
727 | | - | |
728 | | - | |
729 | | - | |
730 | | - | |
731 | | - | |
732 | | - | |
733 | | - | |
734 | | - | |
| 745 | + | |
735 | 746 | | |
736 | 747 | | |
737 | 748 | | |
| |||
793 | 804 | | |
794 | 805 | | |
795 | 806 | | |
| 807 | + | |
796 | 808 | | |
797 | 809 | | |
798 | 810 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
413 | 413 | | |
414 | 414 | | |
415 | 415 | | |
| 416 | + | |
416 | 417 | | |
417 | 418 | | |
| 419 | + | |
418 | 420 | | |
419 | 421 | | |
420 | 422 | | |
| 423 | + | |
421 | 424 | | |
422 | 425 | | |
423 | 426 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
325 | 325 | | |
326 | 326 | | |
327 | 327 | | |
| 328 | + | |
328 | 329 | | |
329 | 330 | | |
| 331 | + | |
330 | 332 | | |
331 | 333 | | |
332 | 334 | | |
| |||
377 | 379 | | |
378 | 380 | | |
379 | 381 | | |
380 | | - | |
381 | | - | |
382 | | - | |
383 | 382 | | |
384 | 383 | | |
385 | 384 | | |
386 | | - | |
387 | | - | |
388 | | - | |
389 | | - | |
390 | | - | |
391 | | - | |
392 | | - | |
393 | | - | |
394 | | - | |
395 | | - | |
396 | | - | |
397 | | - | |
398 | | - | |
399 | | - | |
400 | | - | |
401 | 385 | | |
402 | 386 | | |
403 | 387 | | |
| |||
508 | 492 | | |
509 | 493 | | |
510 | 494 | | |
| 495 | + | |
511 | 496 | | |
512 | 497 | | |
513 | 498 | | |
514 | 499 | | |
515 | 500 | | |
516 | 501 | | |
| 502 | + | |
| 503 | + | |
| 504 | + | |
| 505 | + | |
| 506 | + | |
| 507 | + | |
| 508 | + | |
| 509 | + | |
| 510 | + | |
| 511 | + | |
| 512 | + | |
| 513 | + | |
| 514 | + | |
| 515 | + | |
| 516 | + | |
| 517 | + | |
| 518 | + | |
| 519 | + | |
| 520 | + | |
| 521 | + | |
| 522 | + | |
| 523 | + | |
| 524 | + | |
| 525 | + | |
| 526 | + | |
| 527 | + | |
| 528 | + | |
| 529 | + | |
| 530 | + | |
| 531 | + | |
| 532 | + | |
| 533 | + | |
| 534 | + | |
| 535 | + | |
517 | 536 | | |
518 | 537 | | |
| 538 | + | |
| 539 | + | |
| 540 | + | |
| 541 | + | |
| 542 | + | |
| 543 | + | |
| 544 | + | |
| 545 | + | |
| 546 | + | |
| 547 | + | |
519 | 548 | | |
520 | 549 | | |
521 | 550 | | |
522 | 551 | | |
523 | | - | |
524 | | - | |
525 | 552 | | |
526 | 553 | | |
| 554 | + | |
| 555 | + | |
| 556 | + | |
| 557 | + | |
| 558 | + | |
| 559 | + | |
| 560 | + | |
| 561 | + | |
| 562 | + | |
| 563 | + | |
| 564 | + | |
| 565 | + | |
| 566 | + | |
| 567 | + | |
| 568 | + | |
| 569 | + | |
| 570 | + | |
| 571 | + | |
| 572 | + | |
| 573 | + | |
| 574 | + | |
| 575 | + | |
| 576 | + | |
| 577 | + | |
| 578 | + | |
| 579 | + | |
| 580 | + | |
| 581 | + | |
| 582 | + | |
| 583 | + | |
| 584 | + | |
527 | 585 | | |
528 | 586 | | |
529 | 587 | | |
| |||
545 | 603 | | |
546 | 604 | | |
547 | 605 | | |
548 | | - | |
549 | | - | |
550 | | - | |
551 | 606 | | |
552 | 607 | | |
553 | 608 | | |
| |||
627 | 682 | | |
628 | 683 | | |
629 | 684 | | |
630 | | - | |
631 | | - | |
632 | | - | |
633 | | - | |
634 | | - | |
635 | | - | |
636 | | - | |
637 | | - | |
638 | | - | |
639 | | - | |
640 | | - | |
641 | | - | |
642 | | - | |
643 | | - | |
644 | | - | |
645 | | - | |
646 | | - | |
647 | | - | |
648 | | - | |
649 | | - | |
650 | | - | |
651 | | - | |
652 | | - | |
653 | | - | |
654 | | - | |
655 | | - | |
656 | | - | |
657 | | - | |
658 | | - | |
659 | | - | |
660 | | - | |
661 | | - | |
662 | | - | |
663 | | - | |
664 | | - | |
665 | | - | |
666 | | - | |
667 | | - | |
668 | | - | |
669 | | - | |
670 | | - | |
671 | | - | |
672 | 685 | | |
673 | 686 | | |
674 | 687 | | |
| |||
695 | 708 | | |
696 | 709 | | |
697 | 710 | | |
698 | | - | |
| 711 | + | |
| 712 | + | |
| 713 | + | |
699 | 714 | | |
700 | | - | |
701 | | - | |
| 715 | + | |
| 716 | + | |
702 | 717 | | |
703 | 718 | | |
704 | 719 | | |
| |||
722 | 737 | | |
723 | 738 | | |
724 | 739 | | |
| 740 | + | |
725 | 741 | | |
| 742 | + | |
726 | 743 | | |
727 | 744 | | |
728 | 745 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
38 | 38 | | |
39 | 39 | | |
40 | 40 | | |
| 41 | + | |
41 | 42 | | |
42 | | - | |
| 43 | + | |
| 44 | + | |
43 | 45 | | |
| 46 | + | |
44 | 47 | | |
45 | | - | |
| 48 | + | |
| 49 | + | |
46 | 50 | | |
| 51 | + | |
47 | 52 | | |
| 53 | + | |
48 | 54 | | |
49 | 55 | | |
50 | 56 | | |
| |||
0 commit comments