Print this page
7127  remove -Wno-missing-braces from Makefile.uts


 105         nulldev,                /* probe */
 106         sol_ucma_attach,        /* attach */
 107         sol_ucma_detach,        /* detach */
 108         nodev,                  /* reset */
 109         &sol_ucma_cb_ops,   /* cb_ops */
 110         NULL,                   /* bus_ops */
 111         nodev,                  /* power */
 112         ddi_quiesce_not_needed  /* quiesce */
 113 };
 114 
 115 /* Module Driver Info */
 116 static struct modldrv sol_ucma_modldrv = {
 117         &mod_driverops,
 118         "Solaris User RDMACM driver",
 119         &sol_ucma_dev_ops
 120 };
 121 
 122 /* Module Linkage */
 123 static struct modlinkage sol_ucma_modlinkage = {
 124         MODREV_1,
 125         &sol_ucma_modldrv,
 126         NULL,
 127 };
 128 
 129 static char     *sol_ucma_dbg_str = "sol_ucma";
 130 sol_ofs_uobj_table_t    ucma_file_uo_tbl;
 131 sol_ofs_uobj_table_t    ucma_ctx_uo_tbl;
 132 sol_ofs_uobj_table_t    ucma_mcast_uo_tbl;
 133 
 134 /* Function pointers for uverbs functions */
 135 static uverbs_get_clnt_hdl_t            uverbs_get_hdl_fp = NULL;
 136 static uverbs_qpnum2qphdl_t             uverbs_qpnum2qphdl_fp = NULL;
 137 static uverbs_disable_uqpn_mod_t        uverbs_disable_uqpn_modify_fp = NULL;
 138 static uverbs_uqpn_cq_ctrl_t            uverbs_uqpn_cq_ctrl_fp = NULL;
 139 static uverbs_set_qp_free_state_t       uverbs_set_qp_free_state_fp = NULL;
 140 static uverbs_flush_qp_t                uverbs_flush_qp_fp = NULL;
 141 
 142 /* Global Variables */
 143 sol_ucma_t      sol_ucma;
 144 
 145 /* RDMACM Functions  */
 146 static int      sol_ucma_create_id(dev_t, void *, struct uio *);


 621 
 622         kmem_free(filep->file_pollhead, sizeof (struct pollhead));
 623         sol_ofs_uobj_put(&filep->file_uobj);
 624         mutex_destroy(&filep->file_mutex);
 625         cv_destroy(&filep->file_evt_cv);
 626         cv_destroy(&filep->file_evt_close_cv);
 627         rw_enter(&(filep->file_uobj.uo_lock), RW_WRITER);
 628         (void) sol_ofs_uobj_remove(&ucma_file_uo_tbl, &(filep->file_uobj));
 629         rw_exit(&(filep->file_uobj.uo_lock));
 630         sol_ofs_uobj_free(&(filep->file_uobj));
 631         return (0);
 632 }
 633 
 634 typedef struct sol_ucma_cmd_table_s {
 635         int     (*sol_ucma_cmd_fnc)     (dev_t, void *, struct uio *);
 636         uint16_t        sol_ucma_in_len;
 637         uint16_t        sol_ucma_out_len;
 638 } sol_ucma_cmd_table_t;
 639 
 640 static  sol_ucma_cmd_table_t    sol_ucma_cmd_table[] = {
 641         [RDMA_USER_CM_CMD_CREATE_ID]    = sol_ucma_create_id,
 642             sizeof (sol_ucma_create_id_t),
 643             sizeof (sol_ucma_create_id_resp_t),
 644         [RDMA_USER_CM_CMD_DESTROY_ID]   = sol_ucma_destroy_id,
 645             sizeof (sol_ucma_destroy_id_t),
 646             sizeof (sol_ucma_destroy_id_resp_t),
 647         [RDMA_USER_CM_CMD_BIND_ADDR]    = sol_ucma_bind_addr,
 648             sizeof (sol_ucma_bind_addr_t),
 649             0,
 650         [RDMA_USER_CM_CMD_RESOLVE_ADDR] = sol_ucma_resolve_addr,
 651             sizeof (sol_ucma_resolve_addr_t),
 652             0,
 653         [RDMA_USER_CM_CMD_RESOLVE_ROUTE] = sol_ucma_resolve_route,
 654             sizeof (sol_ucma_resolve_route_t),
 655             0,
 656         [RDMA_USER_CM_CMD_QUERY_ROUTE]  = sol_ucma_query_route,
 657             sizeof (sol_ucma_query_route_t),
 658             sizeof (sol_ucma_query_route_resp_t),
 659         [RDMA_USER_CM_CMD_CONNECT]      = sol_ucma_connect,
 660             sizeof (sol_ucma_connect_t),
 661             0,
 662         [RDMA_USER_CM_CMD_LISTEN]       = sol_ucma_listen,
 663             sizeof (sol_ucma_listen_t),
 664             0,
 665         [RDMA_USER_CM_CMD_ACCEPT]       = sol_ucma_accept,
 666             sizeof (sol_ucma_accept_t),
 667             0,
 668         [RDMA_USER_CM_CMD_REJECT]       = sol_ucma_reject,
 669             sizeof (sol_ucma_reject_t),
 670             0,
 671         [RDMA_USER_CM_CMD_DISCONNECT]   = sol_ucma_disconnect,
 672             sizeof (sol_ucma_disconnect_t),
 673             0,
 674         [RDMA_USER_CM_CMD_INIT_QP_ATTR] = sol_ucma_init_qp_attr,
 675             sizeof (sol_ucma_init_qp_attr_t),
 676             sizeof (struct ib_uverbs_qp_attr),
 677         [RDMA_USER_CM_CMD_GET_EVENT]    = sol_ucma_get_event,
 678             sizeof (sol_ucma_get_event_t),
 679             sizeof (sol_ucma_event_resp_t),
 680         [RDMA_USER_CM_CMD_GET_OPTION]   = NULL,
 681             0,
 682             0,
 683         [RDMA_USER_CM_CMD_SET_OPTION]   = sol_ucma_set_option,
 684             sizeof (sol_ucma_set_option_t),
 685             0,
 686         [RDMA_USER_CM_CMD_NOTIFY]       = sol_ucma_notify,
 687             sizeof (sol_ucma_notify_t),
 688             0,
 689         [RDMA_USER_CM_CMD_JOIN_MCAST]   = sol_ucma_join_mcast,
 690             sizeof (sol_ucma_join_mcast_t),
 691             sizeof (sol_ucma_create_id_resp_t),
 692         [RDMA_USER_CM_CMD_LEAVE_MCAST]  = sol_ucma_leave_mcast,
 693             sizeof (sol_ucma_destroy_id_t),
 694             sizeof (sol_ucma_destroy_id_resp_t)
 695 };
 696 
 697 #define SOL_UCMA_MAX_CMD_DATA    512
 698 static int
 699 sol_ucma_write(dev_t dev, struct uio *uio,  cred_t *credp)
 700 {
 701         sol_ucma_cmd_hdr_t      *user_hdrp;
 702         int                     ret;
 703         void                    *data_buf = NULL;
 704         char                    uio_data[SOL_UCMA_MAX_CMD_DATA];
 705         size_t                  uio_data_len = uio->uio_resid;
 706 
 707         SOL_OFS_DPRINTF_L5(sol_ucma_dbg_str, "write(%x, %p, %p)",
 708             dev, uio, credp);
 709 
 710         ret = uiomove((caddr_t)&uio_data, uio_data_len, UIO_WRITE, uio);
 711         user_hdrp = (sol_ucma_cmd_hdr_t *)uio_data;
 712 
 713         if (ret != 0) {
 714                 SOL_OFS_DPRINTF_L2(sol_ucma_dbg_str, "write: uiomove failed");




 105         nulldev,                /* probe */
 106         sol_ucma_attach,        /* attach */
 107         sol_ucma_detach,        /* detach */
 108         nodev,                  /* reset */
 109         &sol_ucma_cb_ops,   /* cb_ops */
 110         NULL,                   /* bus_ops */
 111         nodev,                  /* power */
 112         ddi_quiesce_not_needed  /* quiesce */
 113 };
 114 
 115 /* Module Driver Info */
 116 static struct modldrv sol_ucma_modldrv = {
 117         &mod_driverops,
 118         "Solaris User RDMACM driver",
 119         &sol_ucma_dev_ops
 120 };
 121 
 122 /* Module Linkage */
 123 static struct modlinkage sol_ucma_modlinkage = {
 124         MODREV_1,
 125         { &sol_ucma_modldrv, NULL }

 126 };
 127 
 128 static char     *sol_ucma_dbg_str = "sol_ucma";
 129 sol_ofs_uobj_table_t    ucma_file_uo_tbl;
 130 sol_ofs_uobj_table_t    ucma_ctx_uo_tbl;
 131 sol_ofs_uobj_table_t    ucma_mcast_uo_tbl;
 132 
 133 /* Function pointers for uverbs functions */
 134 static uverbs_get_clnt_hdl_t            uverbs_get_hdl_fp = NULL;
 135 static uverbs_qpnum2qphdl_t             uverbs_qpnum2qphdl_fp = NULL;
 136 static uverbs_disable_uqpn_mod_t        uverbs_disable_uqpn_modify_fp = NULL;
 137 static uverbs_uqpn_cq_ctrl_t            uverbs_uqpn_cq_ctrl_fp = NULL;
 138 static uverbs_set_qp_free_state_t       uverbs_set_qp_free_state_fp = NULL;
 139 static uverbs_flush_qp_t                uverbs_flush_qp_fp = NULL;
 140 
 141 /* Global Variables */
 142 sol_ucma_t      sol_ucma;
 143 
 144 /* RDMACM Functions  */
 145 static int      sol_ucma_create_id(dev_t, void *, struct uio *);


 620 
 621         kmem_free(filep->file_pollhead, sizeof (struct pollhead));
 622         sol_ofs_uobj_put(&filep->file_uobj);
 623         mutex_destroy(&filep->file_mutex);
 624         cv_destroy(&filep->file_evt_cv);
 625         cv_destroy(&filep->file_evt_close_cv);
 626         rw_enter(&(filep->file_uobj.uo_lock), RW_WRITER);
 627         (void) sol_ofs_uobj_remove(&ucma_file_uo_tbl, &(filep->file_uobj));
 628         rw_exit(&(filep->file_uobj.uo_lock));
 629         sol_ofs_uobj_free(&(filep->file_uobj));
 630         return (0);
 631 }
 632 
 633 typedef struct sol_ucma_cmd_table_s {
 634         int     (*sol_ucma_cmd_fnc)     (dev_t, void *, struct uio *);
 635         uint16_t        sol_ucma_in_len;
 636         uint16_t        sol_ucma_out_len;
 637 } sol_ucma_cmd_table_t;
 638 
 639 static  sol_ucma_cmd_table_t    sol_ucma_cmd_table[] = {
 640         [RDMA_USER_CM_CMD_CREATE_ID]    = { sol_ucma_create_id,
 641             sizeof (sol_ucma_create_id_t),
 642             sizeof (sol_ucma_create_id_resp_t) },
 643         [RDMA_USER_CM_CMD_DESTROY_ID]   = { sol_ucma_destroy_id,
 644             sizeof (sol_ucma_destroy_id_t),
 645             sizeof (sol_ucma_destroy_id_resp_t) },
 646         [RDMA_USER_CM_CMD_BIND_ADDR]    = { sol_ucma_bind_addr,
 647             sizeof (sol_ucma_bind_addr_t),
 648             0 },
 649         [RDMA_USER_CM_CMD_RESOLVE_ADDR] = { sol_ucma_resolve_addr,
 650             sizeof (sol_ucma_resolve_addr_t),
 651             0 },
 652         [RDMA_USER_CM_CMD_RESOLVE_ROUTE] = { sol_ucma_resolve_route,
 653             sizeof (sol_ucma_resolve_route_t),
 654             0 },
 655         [RDMA_USER_CM_CMD_QUERY_ROUTE]  = { sol_ucma_query_route,
 656             sizeof (sol_ucma_query_route_t),
 657             sizeof (sol_ucma_query_route_resp_t) },
 658         [RDMA_USER_CM_CMD_CONNECT]      = { sol_ucma_connect,
 659             sizeof (sol_ucma_connect_t),
 660             0 },
 661         [RDMA_USER_CM_CMD_LISTEN]       = { sol_ucma_listen,
 662             sizeof (sol_ucma_listen_t),
 663             0 },
 664         [RDMA_USER_CM_CMD_ACCEPT]       = { sol_ucma_accept,
 665             sizeof (sol_ucma_accept_t),
 666             0 },
 667         [RDMA_USER_CM_CMD_REJECT]       = { sol_ucma_reject,
 668             sizeof (sol_ucma_reject_t),
 669             0 },
 670         [RDMA_USER_CM_CMD_DISCONNECT]   = { sol_ucma_disconnect,
 671             sizeof (sol_ucma_disconnect_t),
 672             0 },
 673         [RDMA_USER_CM_CMD_INIT_QP_ATTR] = { sol_ucma_init_qp_attr,
 674             sizeof (sol_ucma_init_qp_attr_t),
 675             sizeof (struct ib_uverbs_qp_attr) },
 676         [RDMA_USER_CM_CMD_GET_EVENT]    = { sol_ucma_get_event,
 677             sizeof (sol_ucma_get_event_t),
 678             sizeof (sol_ucma_event_resp_t) },
 679         [RDMA_USER_CM_CMD_GET_OPTION]   = { NULL,
 680             0,
 681             0 },
 682         [RDMA_USER_CM_CMD_SET_OPTION]   = { sol_ucma_set_option,
 683             sizeof (sol_ucma_set_option_t),
 684             0 },
 685         [RDMA_USER_CM_CMD_NOTIFY]       = { sol_ucma_notify,
 686             sizeof (sol_ucma_notify_t),
 687             0 },
 688         [RDMA_USER_CM_CMD_JOIN_MCAST]   = { sol_ucma_join_mcast,
 689             sizeof (sol_ucma_join_mcast_t),
 690             sizeof (sol_ucma_create_id_resp_t) },
 691         [RDMA_USER_CM_CMD_LEAVE_MCAST]  = { sol_ucma_leave_mcast,
 692             sizeof (sol_ucma_destroy_id_t),
 693             sizeof (sol_ucma_destroy_id_resp_t) }
 694 };
 695 
 696 #define SOL_UCMA_MAX_CMD_DATA    512
 697 static int
 698 sol_ucma_write(dev_t dev, struct uio *uio,  cred_t *credp)
 699 {
 700         sol_ucma_cmd_hdr_t      *user_hdrp;
 701         int                     ret;
 702         void                    *data_buf = NULL;
 703         char                    uio_data[SOL_UCMA_MAX_CMD_DATA];
 704         size_t                  uio_data_len = uio->uio_resid;
 705 
 706         SOL_OFS_DPRINTF_L5(sol_ucma_dbg_str, "write(%x, %p, %p)",
 707             dev, uio, credp);
 708 
 709         ret = uiomove((caddr_t)&uio_data, uio_data_len, UIO_WRITE, uio);
 710         user_hdrp = (sol_ucma_cmd_hdr_t *)uio_data;
 711 
 712         if (ret != 0) {
 713                 SOL_OFS_DPRINTF_L2(sol_ucma_dbg_str, "write: uiomove failed");