• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /barrelfish-2018-10-04/lib/devif/backends/net/mlx4/drivers/infiniband/core/

Lines Matching defs:work

195 	struct delayed_work work;
206 struct cm_work work; /* Must be first. */
256 static void cm_work_handler(struct work_struct *work);
587 __be32 remote_id = timewait_info->work.remote_id;
593 if (be32_lt(remote_id, cur_timewait_info->work.remote_id))
595 else if (be32_gt(remote_id, cur_timewait_info->work.remote_id))
619 if (be32_lt(remote_id, timewait_info->work.remote_id))
621 else if (be32_gt(remote_id, timewait_info->work.remote_id))
742 struct cm_work *work;
747 work = list_entry(cm_id_priv->work_list.next, struct cm_work, list);
748 list_del(&work->list);
749 return work;
752 static void cm_free_work(struct cm_work *work)
754 if (work->mad_recv_wc)
755 ib_free_recv_mad(work->mad_recv_wc);
756 kfree(work);
805 timewait_info->work.local_id = local_id;
806 INIT_DELAYED_WORK(&timewait_info->work.work, cm_work_handler);
807 timewait_info->work.cm_event.event = IB_CM_TIMEWAIT_EXIT;
828 queue_delayed_work(cm.wq, &cm_id_priv->timewait_info->work.work,
850 struct cm_work *work;
924 while ((work = cm_dequeue_work(cm_id_priv)) != NULL)
925 cm_free_work(work);
1301 static void cm_format_req_event(struct cm_work *work,
1308 req_msg = (struct cm_req_msg *)work->mad_recv_wc->recv_buf.mad;
1309 param = &work->cm_event.param.req_rcvd;
1312 param->primary_path = &work->path[0];
1314 param->alternate_path = &work->path[1];
1332 work->cm_event.private_data = &req_msg->private_data;
1336 struct cm_work *work)
1341 ret = cm_id_priv->id.cm_handler(&cm_id_priv->id, &work->cm_event);
1342 cm_free_work(work);
1346 work = cm_dequeue_work(cm_id_priv);
1348 BUG_ON(!work);
1350 &work->cm_event);
1351 cm_free_work(work);
1414 static void cm_dup_req_handler(struct cm_work *work,
1420 atomic_long_inc(&work->port->counter_group[CM_RECV_DUPLICATES].
1427 ret = cm_alloc_response_msg(work->port, work->mad_recv_wc, &msg);
1457 static struct cm_id_private * cm_match_req(struct cm_work *work,
1464 req_msg = (struct cm_req_msg *)work->mad_recv_wc->recv_buf.mad;
1470 cur_cm_id_priv = cm_get_id(timewait_info->work.local_id,
1471 timewait_info->work.remote_id);
1474 cm_dup_req_handler(work, cur_cm_id_priv);
1485 cm_issue_rej(work->port, work->mad_recv_wc,
1498 cm_issue_rej(work->port, work->mad_recv_wc,
1515 * in the work completion.
1540 static int cm_req_handler(struct cm_work *work)
1547 req_msg = (struct cm_req_msg *)work->mad_recv_wc->recv_buf.mad;
1549 cm_id = ib_create_cm_id(work->port->cm_dev->ib_device, NULL, NULL);
1555 cm_init_av_for_response(work->port, work->mad_recv_wc->wc,
1556 work->mad_recv_wc->recv_buf.grh,
1564 cm_id_priv->timewait_info->work.remote_id = req_msg->local_comm_id;
1568 listen_cm_id_priv = cm_match_req(work, cm_id_priv);
1580 cm_process_routed_req(req_msg, work->mad_recv_wc->wc);
1581 cm_format_paths_from_req(req_msg, &work->path[0], &work->path[1]);
1582 ret = cm_init_av_by_path(&work->path[0], &cm_id_priv->av);
1584 ib_get_cached_gid(work->port->cm_dev->ib_device,
1585 work->port->port_num, 0, &work->path[0].sgid);
1587 &work->path[0].sgid, sizeof work->path[0].sgid,
1592 ret = cm_init_av_by_path(&work->path[1], &cm_id_priv->alt_av);
1595 &work->path[0].sgid,
1596 sizeof work->path[0].sgid, NULL, 0);
1621 cm_format_req_event(work, cm_id_priv, &listen_cm_id_priv->id);
1622 cm_process_work(cm_id_priv, work);
1771 static void cm_format_rep_event(struct cm_work *work)
1776 rep_msg = (struct cm_rep_msg *)work->mad_recv_wc->recv_buf.mad;
1777 param = &work->cm_event.param.rep_rcvd;
1789 work->cm_event.private_data = &rep_msg->private_data;
1792 static void cm_dup_rep_handler(struct cm_work *work)
1799 rep_msg = (struct cm_rep_msg *) work->mad_recv_wc->recv_buf.mad;
1805 atomic_long_inc(&work->port->counter_group[CM_RECV_DUPLICATES].
1807 ret = cm_alloc_response_msg(work->port, work->mad_recv_wc, &msg);
1835 static int cm_rep_handler(struct cm_work *work)
1841 rep_msg = (struct cm_rep_msg *)work->mad_recv_wc->recv_buf.mad;
1844 cm_dup_rep_handler(work);
1848 cm_format_rep_event(work);
1861 cm_id_priv->timewait_info->work.remote_id = rep_msg->local_comm_id;
1880 cm_issue_rej(work->port, work->mad_recv_wc,
1908 list_add_tail(&work->list, &cm_id_priv->work_list);
1912 cm_process_work(cm_id_priv, work);
1922 static int cm_establish_handler(struct cm_work *work)
1928 cm_id_priv = cm_acquire_id(work->local_id, work->remote_id);
1941 list_add_tail(&work->list, &cm_id_priv->work_list);
1945 cm_process_work(cm_id_priv, work);
1954 static int cm_rtu_handler(struct cm_work *work)
1960 rtu_msg = (struct cm_rtu_msg *)work->mad_recv_wc->recv_buf.mad;
1966 work->cm_event.private_data = &rtu_msg->private_data;
1972 atomic_long_inc(&work->port->counter_group[CM_RECV_DUPLICATES].
1981 list_add_tail(&work->list, &cm_id_priv->work_list);
1985 cm_process_work(cm_id_priv, work);
2140 static int cm_dreq_handler(struct cm_work *work)
2147 dreq_msg = (struct cm_dreq_msg *)work->mad_recv_wc->recv_buf.mad;
2151 atomic_long_inc(&work->port->counter_group[CM_RECV_DUPLICATES].
2153 cm_issue_drep(work->port, work->mad_recv_wc);
2157 work->cm_event.private_data = &dreq_msg->private_data;
2172 atomic_long_inc(&work->port->counter_group[CM_RECV_DUPLICATES].
2174 if (cm_alloc_response_msg(work->port, work->mad_recv_wc, &msg))
2186 atomic_long_inc(&work->port->counter_group[CM_RECV_DUPLICATES].
2196 list_add_tail(&work->list, &cm_id_priv->work_list);
2200 cm_process_work(cm_id_priv, work);
2210 static int cm_drep_handler(struct cm_work *work)
2216 drep_msg = (struct cm_drep_msg *)work->mad_recv_wc->recv_buf.mad;
2222 work->cm_event.private_data = &drep_msg->private_data;
2235 list_add_tail(&work->list, &cm_id_priv->work_list);
2239 cm_process_work(cm_id_priv, work);
2309 static void cm_format_rej_event(struct cm_work *work)
2314 rej_msg = (struct cm_rej_msg *)work->mad_recv_wc->recv_buf.mad;
2315 param = &work->cm_event.param.rej_rcvd;
2319 work->cm_event.private_data = &rej_msg->private_data;
2339 (timewait_info->work.local_id ^
2356 static int cm_rej_handler(struct cm_work *work)
2362 rej_msg = (struct cm_rej_msg *)work->mad_recv_wc->recv_buf.mad;
2367 cm_format_rej_event(work);
2400 list_add_tail(&work->list, &cm_id_priv->work_list);
2404 cm_process_work(cm_id_priv, work);
2505 static int cm_mra_handler(struct cm_work *work)
2511 mra_msg = (struct cm_mra_msg *)work->mad_recv_wc->recv_buf.mad;
2516 work->cm_event.private_data = &mra_msg->private_data;
2517 work->cm_event.param.mra_rcvd.service_timeout =
2550 atomic_long_inc(&work->port->
2559 atomic_long_inc(&work->port->counter_group[CM_RECV_DUPLICATES].
2570 list_add_tail(&work->list, &cm_id_priv->work_list);
2574 cm_process_work(cm_id_priv, work);
2692 static int cm_lap_handler(struct cm_work *work)
2701 lap_msg = (struct cm_lap_msg *)work->mad_recv_wc->recv_buf.mad;
2707 param = &work->cm_event.param.lap_rcvd;
2708 param->alternate_path = &work->path[0];
2710 work->cm_event.private_data = &lap_msg->private_data;
2721 atomic_long_inc(&work->port->counter_group[CM_RECV_DUPLICATES].
2723 if (cm_alloc_response_msg(work->port, work->mad_recv_wc, &msg))
2737 atomic_long_inc(&work->port->counter_group[CM_RECV_DUPLICATES].
2746 cm_init_av_for_response(work->port, work->mad_recv_wc->wc,
2747 work->mad_recv_wc->recv_buf.grh,
2752 list_add_tail(&work->list, &cm_id_priv->work_list);
2756 cm_process_work(cm_id_priv, work);
2832 static int cm_apr_handler(struct cm_work *work)
2838 apr_msg = (struct cm_apr_msg *)work->mad_recv_wc->recv_buf.mad;
2844 work->cm_event.param.apr_rcvd.ap_status = apr_msg->ap_status;
2845 work->cm_event.param.apr_rcvd.apr_info = &apr_msg->info;
2846 work->cm_event.param.apr_rcvd.info_len = apr_msg->info_length;
2847 work->cm_event.private_data = &apr_msg->private_data;
2862 list_add_tail(&work->list, &cm_id_priv->work_list);
2866 cm_process_work(cm_id_priv, work);
2875 static int cm_timewait_handler(struct cm_work *work)
2881 timewait_info = (struct cm_timewait_info *)work;
2886 cm_id_priv = cm_acquire_id(timewait_info->work.local_id,
2887 timewait_info->work.remote_id);
2900 list_add_tail(&work->list, &cm_id_priv->work_list);
2904 cm_process_work(cm_id_priv, work);
2983 static void cm_format_sidr_req_event(struct cm_work *work,
2990 work->mad_recv_wc->recv_buf.mad;
2991 param = &work->cm_event.param.sidr_req_rcvd;
2994 param->port = work->port->port_num;
2995 work->cm_event.private_data = &sidr_req_msg->private_data;
2998 static int cm_sidr_req_handler(struct cm_work *work)
3005 cm_id = ib_create_cm_id(work->port->cm_dev->ib_device, NULL, NULL);
3012 work->mad_recv_wc->recv_buf.mad;
3013 wc = work->mad_recv_wc->wc;
3016 cm_init_av_for_response(work->port, work->mad_recv_wc->wc,
3017 work->mad_recv_wc->recv_buf.grh,
3027 atomic_long_inc(&work->port->counter_group[CM_RECV_DUPLICATES].
3048 cm_format_sidr_req_event(work, &cur_cm_id_priv->id);
3049 cm_process_work(cm_id_priv, work);
3122 static void cm_format_sidr_rep_event(struct cm_work *work)
3128 work->mad_recv_wc->recv_buf.mad;
3129 param = &work->cm_event.param.sidr_rep_rcvd;
3135 work->cm_event.private_data = &sidr_rep_msg->private_data;
3138 static int cm_sidr_rep_handler(struct cm_work *work)
3144 work->mad_recv_wc->recv_buf.mad;
3158 cm_format_sidr_rep_event(work);
3159 cm_process_work(cm_id_priv, work);
3261 struct cm_work *work = container_of(_work, struct cm_work, work.work);
3264 switch (work->cm_event.event) {
3266 ret = cm_req_handler(work);
3269 ret = cm_mra_handler(work);
3272 ret = cm_rej_handler(work);
3275 ret = cm_rep_handler(work);
3278 ret = cm_rtu_handler(work);
3281 ret = cm_establish_handler(work);
3284 ret = cm_dreq_handler(work);
3287 ret = cm_drep_handler(work);
3290 ret = cm_sidr_req_handler(work);
3293 ret = cm_sidr_rep_handler(work);
3296 ret = cm_lap_handler(work);
3299 ret = cm_apr_handler(work);
3302 ret = cm_timewait_handler(work);
3309 cm_free_work(work);
3315 struct cm_work *work;
3319 work = kmalloc(sizeof *work, GFP_ATOMIC);
3320 if (!work)
3341 kfree(work);
3347 * can execute this work item. To prevent potential deadlock,
3351 INIT_DELAYED_WORK(&work->work, cm_work_handler);
3352 work->local_id = cm_id->local_id;
3353 work->remote_id = cm_id->remote_id;
3354 work->mad_recv_wc = NULL;
3355 work->cm_event.event = IB_CM_USER_ESTABLISHED;
3356 queue_delayed_work(cm.wq, &work->work, 0);
3403 struct cm_work *work;
3454 work = kmalloc(sizeof *work + sizeof(struct ib_sa_path_rec) * paths,
3456 if (!work) {
3461 INIT_DELAYED_WORK(&work->work, cm_work_handler);
3462 work->cm_event.event = event;
3463 work->mad_recv_wc = mad_recv_wc;
3464 work->port = port;
3465 queue_delayed_work(cm.wq, &work->work, 0);
3880 cancel_delayed_work(&timewait_info->work.work);