Skip to content

Commit 02a42f8

Browse files
Kamalheibjgunthorpe
authored andcommitted
RDMA/rdmavt: Initialize ib_device_ops struct
Initialize ib_device_ops with the supported operations using ib_set_device_ops() and remove the use of check_driver_override(). Signed-off-by: Kamal Heib <kamalheib1@gmail.com> Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
1 parent 573efc4 commit 02a42f8

File tree

1 file changed

+54
-245
lines changed
  • drivers/infiniband/sw/rdmavt

1 file changed

+54
-245
lines changed

drivers/infiniband/sw/rdmavt/vt.c

Lines changed: 54 additions & 245 deletions
Original file line numberDiff line numberDiff line change
@@ -392,16 +392,51 @@ enum {
392392
_VERB_IDX_MAX /* Must always be last! */
393393
};
394394

395-
static inline int check_driver_override(struct rvt_dev_info *rdi,
396-
size_t offset, void *func)
397-
{
398-
if (!*(void **)((void *)&rdi->ibdev + offset)) {
399-
*(void **)((void *)&rdi->ibdev + offset) = func;
400-
return 0;
401-
}
402-
403-
return 1;
404-
}
395+
static const struct ib_device_ops rvt_dev_ops = {
396+
.alloc_fmr = rvt_alloc_fmr,
397+
.alloc_mr = rvt_alloc_mr,
398+
.alloc_pd = rvt_alloc_pd,
399+
.alloc_ucontext = rvt_alloc_ucontext,
400+
.attach_mcast = rvt_attach_mcast,
401+
.create_ah = rvt_create_ah,
402+
.create_cq = rvt_create_cq,
403+
.create_qp = rvt_create_qp,
404+
.create_srq = rvt_create_srq,
405+
.dealloc_fmr = rvt_dealloc_fmr,
406+
.dealloc_pd = rvt_dealloc_pd,
407+
.dealloc_ucontext = rvt_dealloc_ucontext,
408+
.dereg_mr = rvt_dereg_mr,
409+
.destroy_ah = rvt_destroy_ah,
410+
.destroy_cq = rvt_destroy_cq,
411+
.destroy_qp = rvt_destroy_qp,
412+
.destroy_srq = rvt_destroy_srq,
413+
.detach_mcast = rvt_detach_mcast,
414+
.get_dma_mr = rvt_get_dma_mr,
415+
.get_port_immutable = rvt_get_port_immutable,
416+
.map_mr_sg = rvt_map_mr_sg,
417+
.map_phys_fmr = rvt_map_phys_fmr,
418+
.mmap = rvt_mmap,
419+
.modify_ah = rvt_modify_ah,
420+
.modify_device = rvt_modify_device,
421+
.modify_port = rvt_modify_port,
422+
.modify_qp = rvt_modify_qp,
423+
.modify_srq = rvt_modify_srq,
424+
.poll_cq = rvt_poll_cq,
425+
.post_recv = rvt_post_recv,
426+
.post_send = rvt_post_send,
427+
.post_srq_recv = rvt_post_srq_recv,
428+
.query_ah = rvt_query_ah,
429+
.query_device = rvt_query_device,
430+
.query_gid = rvt_query_gid,
431+
.query_pkey = rvt_query_pkey,
432+
.query_port = rvt_query_port,
433+
.query_qp = rvt_query_qp,
434+
.query_srq = rvt_query_srq,
435+
.reg_user_mr = rvt_reg_user_mr,
436+
.req_notify_cq = rvt_req_notify_cq,
437+
.resize_cq = rvt_resize_cq,
438+
.unmap_fmr = rvt_unmap_fmr,
439+
};
405440

406441
static noinline int check_support(struct rvt_dev_info *rdi, int verb)
407442
{
@@ -416,76 +451,36 @@ static noinline int check_support(struct rvt_dev_info *rdi, int verb)
416451
return -EINVAL;
417452
break;
418453

419-
case QUERY_DEVICE:
420-
check_driver_override(rdi, offsetof(struct ib_device,
421-
query_device),
422-
rvt_query_device);
423-
break;
424-
425454
case MODIFY_DEVICE:
426455
/*
427456
* rdmavt does not support modify device currently drivers must
428457
* provide.
429458
*/
430-
if (!check_driver_override(rdi, offsetof(struct ib_device,
431-
modify_device),
432-
rvt_modify_device))
459+
if (!rdi->ibdev.modify_device)
433460
return -EOPNOTSUPP;
434461
break;
435462

436463
case QUERY_PORT:
437-
if (!check_driver_override(rdi, offsetof(struct ib_device,
438-
query_port),
439-
rvt_query_port))
464+
if (!rdi->ibdev.query_port)
440465
if (!rdi->driver_f.query_port_state)
441466
return -EINVAL;
442467
break;
443468

444469
case MODIFY_PORT:
445-
if (!check_driver_override(rdi, offsetof(struct ib_device,
446-
modify_port),
447-
rvt_modify_port))
470+
if (!rdi->ibdev.modify_port)
448471
if (!rdi->driver_f.cap_mask_chg ||
449472
!rdi->driver_f.shut_down_port)
450473
return -EINVAL;
451474
break;
452475

453-
case QUERY_PKEY:
454-
check_driver_override(rdi, offsetof(struct ib_device,
455-
query_pkey),
456-
rvt_query_pkey);
457-
break;
458-
459476
case QUERY_GID:
460-
if (!check_driver_override(rdi, offsetof(struct ib_device,
461-
query_gid),
462-
rvt_query_gid))
477+
if (!rdi->ibdev.query_gid)
463478
if (!rdi->driver_f.get_guid_be)
464479
return -EINVAL;
465480
break;
466481

467-
case ALLOC_UCONTEXT:
468-
check_driver_override(rdi, offsetof(struct ib_device,
469-
alloc_ucontext),
470-
rvt_alloc_ucontext);
471-
break;
472-
473-
case DEALLOC_UCONTEXT:
474-
check_driver_override(rdi, offsetof(struct ib_device,
475-
dealloc_ucontext),
476-
rvt_dealloc_ucontext);
477-
break;
478-
479-
case GET_PORT_IMMUTABLE:
480-
check_driver_override(rdi, offsetof(struct ib_device,
481-
get_port_immutable),
482-
rvt_get_port_immutable);
483-
break;
484-
485482
case CREATE_QP:
486-
if (!check_driver_override(rdi, offsetof(struct ib_device,
487-
create_qp),
488-
rvt_create_qp))
483+
if (!rdi->ibdev.create_qp)
489484
if (!rdi->driver_f.qp_priv_alloc ||
490485
!rdi->driver_f.qp_priv_free ||
491486
!rdi->driver_f.notify_qp_reset ||
@@ -496,9 +491,7 @@ static noinline int check_support(struct rvt_dev_info *rdi, int verb)
496491
break;
497492

498493
case MODIFY_QP:
499-
if (!check_driver_override(rdi, offsetof(struct ib_device,
500-
modify_qp),
501-
rvt_modify_qp))
494+
if (!rdi->ibdev.modify_qp)
502495
if (!rdi->driver_f.notify_qp_reset ||
503496
!rdi->driver_f.schedule_send ||
504497
!rdi->driver_f.get_pmtu_from_attr ||
@@ -512,9 +505,7 @@ static noinline int check_support(struct rvt_dev_info *rdi, int verb)
512505
break;
513506

514507
case DESTROY_QP:
515-
if (!check_driver_override(rdi, offsetof(struct ib_device,
516-
destroy_qp),
517-
rvt_destroy_qp))
508+
if (!rdi->ibdev.destroy_qp)
518509
if (!rdi->driver_f.qp_priv_free ||
519510
!rdi->driver_f.notify_qp_reset ||
520511
!rdi->driver_f.flush_qp_waiters ||
@@ -523,197 +514,14 @@ static noinline int check_support(struct rvt_dev_info *rdi, int verb)
523514
return -EINVAL;
524515
break;
525516

526-
case QUERY_QP:
527-
check_driver_override(rdi, offsetof(struct ib_device,
528-
query_qp),
529-
rvt_query_qp);
530-
break;
531-
532517
case POST_SEND:
533-
if (!check_driver_override(rdi, offsetof(struct ib_device,
534-
post_send),
535-
rvt_post_send))
518+
if (!rdi->ibdev.post_send)
536519
if (!rdi->driver_f.schedule_send ||
537520
!rdi->driver_f.do_send ||
538521
!rdi->post_parms)
539522
return -EINVAL;
540523
break;
541524

542-
case POST_RECV:
543-
check_driver_override(rdi, offsetof(struct ib_device,
544-
post_recv),
545-
rvt_post_recv);
546-
break;
547-
case POST_SRQ_RECV:
548-
check_driver_override(rdi, offsetof(struct ib_device,
549-
post_srq_recv),
550-
rvt_post_srq_recv);
551-
break;
552-
553-
case CREATE_AH:
554-
check_driver_override(rdi, offsetof(struct ib_device,
555-
create_ah),
556-
rvt_create_ah);
557-
break;
558-
559-
case DESTROY_AH:
560-
check_driver_override(rdi, offsetof(struct ib_device,
561-
destroy_ah),
562-
rvt_destroy_ah);
563-
break;
564-
565-
case MODIFY_AH:
566-
check_driver_override(rdi, offsetof(struct ib_device,
567-
modify_ah),
568-
rvt_modify_ah);
569-
break;
570-
571-
case QUERY_AH:
572-
check_driver_override(rdi, offsetof(struct ib_device,
573-
query_ah),
574-
rvt_query_ah);
575-
break;
576-
577-
case CREATE_SRQ:
578-
check_driver_override(rdi, offsetof(struct ib_device,
579-
create_srq),
580-
rvt_create_srq);
581-
break;
582-
583-
case MODIFY_SRQ:
584-
check_driver_override(rdi, offsetof(struct ib_device,
585-
modify_srq),
586-
rvt_modify_srq);
587-
break;
588-
589-
case DESTROY_SRQ:
590-
check_driver_override(rdi, offsetof(struct ib_device,
591-
destroy_srq),
592-
rvt_destroy_srq);
593-
break;
594-
595-
case QUERY_SRQ:
596-
check_driver_override(rdi, offsetof(struct ib_device,
597-
query_srq),
598-
rvt_query_srq);
599-
break;
600-
601-
case ATTACH_MCAST:
602-
check_driver_override(rdi, offsetof(struct ib_device,
603-
attach_mcast),
604-
rvt_attach_mcast);
605-
break;
606-
607-
case DETACH_MCAST:
608-
check_driver_override(rdi, offsetof(struct ib_device,
609-
detach_mcast),
610-
rvt_detach_mcast);
611-
break;
612-
613-
case GET_DMA_MR:
614-
check_driver_override(rdi, offsetof(struct ib_device,
615-
get_dma_mr),
616-
rvt_get_dma_mr);
617-
break;
618-
619-
case REG_USER_MR:
620-
check_driver_override(rdi, offsetof(struct ib_device,
621-
reg_user_mr),
622-
rvt_reg_user_mr);
623-
break;
624-
625-
case DEREG_MR:
626-
check_driver_override(rdi, offsetof(struct ib_device,
627-
dereg_mr),
628-
rvt_dereg_mr);
629-
break;
630-
631-
case ALLOC_FMR:
632-
check_driver_override(rdi, offsetof(struct ib_device,
633-
alloc_fmr),
634-
rvt_alloc_fmr);
635-
break;
636-
637-
case ALLOC_MR:
638-
check_driver_override(rdi, offsetof(struct ib_device,
639-
alloc_mr),
640-
rvt_alloc_mr);
641-
break;
642-
643-
case MAP_MR_SG:
644-
check_driver_override(rdi, offsetof(struct ib_device,
645-
map_mr_sg),
646-
rvt_map_mr_sg);
647-
break;
648-
649-
case MAP_PHYS_FMR:
650-
check_driver_override(rdi, offsetof(struct ib_device,
651-
map_phys_fmr),
652-
rvt_map_phys_fmr);
653-
break;
654-
655-
case UNMAP_FMR:
656-
check_driver_override(rdi, offsetof(struct ib_device,
657-
unmap_fmr),
658-
rvt_unmap_fmr);
659-
break;
660-
661-
case DEALLOC_FMR:
662-
check_driver_override(rdi, offsetof(struct ib_device,
663-
dealloc_fmr),
664-
rvt_dealloc_fmr);
665-
break;
666-
667-
case MMAP:
668-
check_driver_override(rdi, offsetof(struct ib_device,
669-
mmap),
670-
rvt_mmap);
671-
break;
672-
673-
case CREATE_CQ:
674-
check_driver_override(rdi, offsetof(struct ib_device,
675-
create_cq),
676-
rvt_create_cq);
677-
break;
678-
679-
case DESTROY_CQ:
680-
check_driver_override(rdi, offsetof(struct ib_device,
681-
destroy_cq),
682-
rvt_destroy_cq);
683-
break;
684-
685-
case POLL_CQ:
686-
check_driver_override(rdi, offsetof(struct ib_device,
687-
poll_cq),
688-
rvt_poll_cq);
689-
break;
690-
691-
case REQ_NOTFIY_CQ:
692-
check_driver_override(rdi, offsetof(struct ib_device,
693-
req_notify_cq),
694-
rvt_req_notify_cq);
695-
break;
696-
697-
case RESIZE_CQ:
698-
check_driver_override(rdi, offsetof(struct ib_device,
699-
resize_cq),
700-
rvt_resize_cq);
701-
break;
702-
703-
case ALLOC_PD:
704-
check_driver_override(rdi, offsetof(struct ib_device,
705-
alloc_pd),
706-
rvt_alloc_pd);
707-
break;
708-
709-
case DEALLOC_PD:
710-
check_driver_override(rdi, offsetof(struct ib_device,
711-
dealloc_pd),
712-
rvt_dealloc_pd);
713-
break;
714-
715-
default:
716-
return -EINVAL;
717525
}
718526

719527
return 0;
@@ -745,6 +553,7 @@ int rvt_register_device(struct rvt_dev_info *rdi, u32 driver_id)
745553
return -EINVAL;
746554
}
747555

556+
ib_set_device_ops(&rdi->ibdev, &rvt_dev_ops);
748557

749558
/* Once we get past here we can use rvt_pr macros and tracepoints */
750559
trace_rvt_dbg(rdi, "Driver attempting registration");

0 commit comments

Comments
 (0)