Lines Matching refs:work

185 	struct delayed_work work;  member
196 struct cm_work work; /* Must be first. */ member
248 static void cm_work_handler(struct work_struct *work);
537 __be32 remote_id = timewait_info->work.remote_id; in cm_insert_remote_id()
543 if (be32_lt(remote_id, cur_timewait_info->work.remote_id)) in cm_insert_remote_id()
545 else if (be32_gt(remote_id, cur_timewait_info->work.remote_id)) in cm_insert_remote_id()
569 if (be32_lt(remote_id, timewait_info->work.remote_id)) in cm_find_remote_id()
571 else if (be32_gt(remote_id, timewait_info->work.remote_id)) in cm_find_remote_id()
692 struct cm_work *work; in cm_dequeue_work() local
697 work = list_entry(cm_id_priv->work_list.next, struct cm_work, list); in cm_dequeue_work()
698 list_del(&work->list); in cm_dequeue_work()
699 return work; in cm_dequeue_work()
702 static void cm_free_work(struct cm_work *work) in cm_free_work() argument
704 if (work->mad_recv_wc) in cm_free_work()
705 ib_free_recv_mad(work->mad_recv_wc); in cm_free_work()
706 kfree(work); in cm_free_work()
755 timewait_info->work.local_id = local_id; in cm_create_timewait_info()
756 INIT_DELAYED_WORK(&timewait_info->work.work, cm_work_handler); in cm_create_timewait_info()
757 timewait_info->work.cm_event.event = IB_CM_TIMEWAIT_EXIT; in cm_create_timewait_info()
787 queue_delayed_work(cm.wq, &cm_id_priv->timewait_info->work.work, in cm_enter_timewait()
811 struct cm_work *work; in cm_destroy_id() local
898 while ((work = cm_dequeue_work(cm_id_priv)) != NULL) in cm_destroy_id()
899 cm_free_work(work); in cm_destroy_id()
1341 static u16 cm_get_bth_pkey(struct cm_work *work) in cm_get_bth_pkey() argument
1343 struct ib_device *ib_dev = work->port->cm_dev->ib_device; in cm_get_bth_pkey()
1344 u8 port_num = work->port->port_num; in cm_get_bth_pkey()
1345 u16 pkey_index = work->mad_recv_wc->wc->pkey_index; in cm_get_bth_pkey()
1359 static void cm_format_req_event(struct cm_work *work, in cm_format_req_event() argument
1366 req_msg = (struct cm_req_msg *)work->mad_recv_wc->recv_buf.mad; in cm_format_req_event()
1367 param = &work->cm_event.param.req_rcvd; in cm_format_req_event()
1369 param->bth_pkey = cm_get_bth_pkey(work); in cm_format_req_event()
1371 param->primary_path = &work->path[0]; in cm_format_req_event()
1373 param->alternate_path = &work->path[1]; in cm_format_req_event()
1391 work->cm_event.private_data = &req_msg->private_data; in cm_format_req_event()
1395 struct cm_work *work) in cm_process_work() argument
1400 ret = cm_id_priv->id.cm_handler(&cm_id_priv->id, &work->cm_event); in cm_process_work()
1401 cm_free_work(work); in cm_process_work()
1405 work = cm_dequeue_work(cm_id_priv); in cm_process_work()
1407 BUG_ON(!work); in cm_process_work()
1409 &work->cm_event); in cm_process_work()
1410 cm_free_work(work); in cm_process_work()
1473 static void cm_dup_req_handler(struct cm_work *work, in cm_dup_req_handler() argument
1479 atomic_long_inc(&work->port->counter_group[CM_RECV_DUPLICATES]. in cm_dup_req_handler()
1486 ret = cm_alloc_response_msg(work->port, work->mad_recv_wc, &msg); in cm_dup_req_handler()
1516 static struct cm_id_private * cm_match_req(struct cm_work *work, in cm_match_req() argument
1523 req_msg = (struct cm_req_msg *)work->mad_recv_wc->recv_buf.mad; in cm_match_req()
1529 cur_cm_id_priv = cm_get_id(timewait_info->work.local_id, in cm_match_req()
1530 timewait_info->work.remote_id); in cm_match_req()
1533 cm_dup_req_handler(work, cur_cm_id_priv); in cm_match_req()
1544 cm_issue_rej(work->port, work->mad_recv_wc, in cm_match_req()
1556 cm_issue_rej(work->port, work->mad_recv_wc, in cm_match_req()
1598 static int cm_req_handler(struct cm_work *work) in cm_req_handler() argument
1605 req_msg = (struct cm_req_msg *)work->mad_recv_wc->recv_buf.mad; in cm_req_handler()
1607 cm_id = ib_create_cm_id(work->port->cm_dev->ib_device, NULL, NULL); in cm_req_handler()
1613 cm_init_av_for_response(work->port, work->mad_recv_wc->wc, in cm_req_handler()
1614 work->mad_recv_wc->recv_buf.grh, in cm_req_handler()
1622 cm_id_priv->timewait_info->work.remote_id = req_msg->local_comm_id; in cm_req_handler()
1626 listen_cm_id_priv = cm_match_req(work, cm_id_priv); in cm_req_handler()
1638 cm_process_routed_req(req_msg, work->mad_recv_wc->wc); in cm_req_handler()
1639 cm_format_paths_from_req(req_msg, &work->path[0], &work->path[1]); in cm_req_handler()
1641 memcpy(work->path[0].dmac, cm_id_priv->av.ah_attr.dmac, ETH_ALEN); in cm_req_handler()
1642 ret = cm_init_av_by_path(&work->path[0], &cm_id_priv->av); in cm_req_handler()
1644 ib_get_cached_gid(work->port->cm_dev->ib_device, in cm_req_handler()
1645 work->port->port_num, 0, &work->path[0].sgid, in cm_req_handler()
1648 &work->path[0].sgid, sizeof work->path[0].sgid, in cm_req_handler()
1653 ret = cm_init_av_by_path(&work->path[1], &cm_id_priv->alt_av); in cm_req_handler()
1656 &work->path[0].sgid, in cm_req_handler()
1657 sizeof work->path[0].sgid, NULL, 0); in cm_req_handler()
1675 cm_format_req_event(work, cm_id_priv, &listen_cm_id_priv->id); in cm_req_handler()
1676 cm_process_work(cm_id_priv, work); in cm_req_handler()
1831 static void cm_format_rep_event(struct cm_work *work, enum ib_qp_type qp_type) in cm_format_rep_event() argument
1836 rep_msg = (struct cm_rep_msg *)work->mad_recv_wc->recv_buf.mad; in cm_format_rep_event()
1837 param = &work->cm_event.param.rep_rcvd; in cm_format_rep_event()
1849 work->cm_event.private_data = &rep_msg->private_data; in cm_format_rep_event()
1852 static void cm_dup_rep_handler(struct cm_work *work) in cm_dup_rep_handler() argument
1859 rep_msg = (struct cm_rep_msg *) work->mad_recv_wc->recv_buf.mad; in cm_dup_rep_handler()
1865 atomic_long_inc(&work->port->counter_group[CM_RECV_DUPLICATES]. in cm_dup_rep_handler()
1867 ret = cm_alloc_response_msg(work->port, work->mad_recv_wc, &msg); in cm_dup_rep_handler()
1895 static int cm_rep_handler(struct cm_work *work) in cm_rep_handler() argument
1901 rep_msg = (struct cm_rep_msg *)work->mad_recv_wc->recv_buf.mad; in cm_rep_handler()
1904 cm_dup_rep_handler(work); in cm_rep_handler()
1908 cm_format_rep_event(work, cm_id_priv->qp_type); in cm_rep_handler()
1921 cm_id_priv->timewait_info->work.remote_id = rep_msg->local_comm_id; in cm_rep_handler()
1940 cm_issue_rej(work->port, work->mad_recv_wc, in cm_rep_handler()
1968 list_add_tail(&work->list, &cm_id_priv->work_list); in cm_rep_handler()
1972 cm_process_work(cm_id_priv, work); in cm_rep_handler()
1982 static int cm_establish_handler(struct cm_work *work) in cm_establish_handler() argument
1988 cm_id_priv = cm_acquire_id(work->local_id, work->remote_id); in cm_establish_handler()
2001 list_add_tail(&work->list, &cm_id_priv->work_list); in cm_establish_handler()
2005 cm_process_work(cm_id_priv, work); in cm_establish_handler()
2014 static int cm_rtu_handler(struct cm_work *work) in cm_rtu_handler() argument
2020 rtu_msg = (struct cm_rtu_msg *)work->mad_recv_wc->recv_buf.mad; in cm_rtu_handler()
2026 work->cm_event.private_data = &rtu_msg->private_data; in cm_rtu_handler()
2032 atomic_long_inc(&work->port->counter_group[CM_RECV_DUPLICATES]. in cm_rtu_handler()
2041 list_add_tail(&work->list, &cm_id_priv->work_list); in cm_rtu_handler()
2045 cm_process_work(cm_id_priv, work); in cm_rtu_handler()
2204 static int cm_dreq_handler(struct cm_work *work) in cm_dreq_handler() argument
2211 dreq_msg = (struct cm_dreq_msg *)work->mad_recv_wc->recv_buf.mad; in cm_dreq_handler()
2215 atomic_long_inc(&work->port->counter_group[CM_RECV_DUPLICATES]. in cm_dreq_handler()
2217 cm_issue_drep(work->port, work->mad_recv_wc); in cm_dreq_handler()
2221 work->cm_event.private_data = &dreq_msg->private_data; in cm_dreq_handler()
2240 atomic_long_inc(&work->port->counter_group[CM_RECV_DUPLICATES]. in cm_dreq_handler()
2242 if (cm_alloc_response_msg(work->port, work->mad_recv_wc, &msg)) in cm_dreq_handler()
2254 atomic_long_inc(&work->port->counter_group[CM_RECV_DUPLICATES]. in cm_dreq_handler()
2264 list_add_tail(&work->list, &cm_id_priv->work_list); in cm_dreq_handler()
2268 cm_process_work(cm_id_priv, work); in cm_dreq_handler()
2278 static int cm_drep_handler(struct cm_work *work) in cm_drep_handler() argument
2284 drep_msg = (struct cm_drep_msg *)work->mad_recv_wc->recv_buf.mad; in cm_drep_handler()
2290 work->cm_event.private_data = &drep_msg->private_data; in cm_drep_handler()
2303 list_add_tail(&work->list, &cm_id_priv->work_list); in cm_drep_handler()
2307 cm_process_work(cm_id_priv, work); in cm_drep_handler()
2377 static void cm_format_rej_event(struct cm_work *work) in cm_format_rej_event() argument
2382 rej_msg = (struct cm_rej_msg *)work->mad_recv_wc->recv_buf.mad; in cm_format_rej_event()
2383 param = &work->cm_event.param.rej_rcvd; in cm_format_rej_event()
2387 work->cm_event.private_data = &rej_msg->private_data; in cm_format_rej_event()
2407 (timewait_info->work.local_id ^ in cm_acquire_rejected_id()
2424 static int cm_rej_handler(struct cm_work *work) in cm_rej_handler() argument
2430 rej_msg = (struct cm_rej_msg *)work->mad_recv_wc->recv_buf.mad; in cm_rej_handler()
2435 cm_format_rej_event(work); in cm_rej_handler()
2477 list_add_tail(&work->list, &cm_id_priv->work_list); in cm_rej_handler()
2481 cm_process_work(cm_id_priv, work); in cm_rej_handler()
2582 static int cm_mra_handler(struct cm_work *work) in cm_mra_handler() argument
2588 mra_msg = (struct cm_mra_msg *)work->mad_recv_wc->recv_buf.mad; in cm_mra_handler()
2593 work->cm_event.private_data = &mra_msg->private_data; in cm_mra_handler()
2594 work->cm_event.param.mra_rcvd.service_timeout = in cm_mra_handler()
2621 atomic_long_inc(&work->port-> in cm_mra_handler()
2630 atomic_long_inc(&work->port->counter_group[CM_RECV_DUPLICATES]. in cm_mra_handler()
2641 list_add_tail(&work->list, &cm_id_priv->work_list); in cm_mra_handler()
2645 cm_process_work(cm_id_priv, work); in cm_mra_handler()
2763 static int cm_lap_handler(struct cm_work *work) in cm_lap_handler() argument
2772 lap_msg = (struct cm_lap_msg *)work->mad_recv_wc->recv_buf.mad; in cm_lap_handler()
2778 param = &work->cm_event.param.lap_rcvd; in cm_lap_handler()
2779 param->alternate_path = &work->path[0]; in cm_lap_handler()
2781 work->cm_event.private_data = &lap_msg->private_data; in cm_lap_handler()
2792 atomic_long_inc(&work->port->counter_group[CM_RECV_DUPLICATES]. in cm_lap_handler()
2794 if (cm_alloc_response_msg(work->port, work->mad_recv_wc, &msg)) in cm_lap_handler()
2808 atomic_long_inc(&work->port->counter_group[CM_RECV_DUPLICATES]. in cm_lap_handler()
2817 cm_init_av_for_response(work->port, work->mad_recv_wc->wc, in cm_lap_handler()
2818 work->mad_recv_wc->recv_buf.grh, in cm_lap_handler()
2823 list_add_tail(&work->list, &cm_id_priv->work_list); in cm_lap_handler()
2827 cm_process_work(cm_id_priv, work); in cm_lap_handler()
2903 static int cm_apr_handler(struct cm_work *work) in cm_apr_handler() argument
2909 apr_msg = (struct cm_apr_msg *)work->mad_recv_wc->recv_buf.mad; in cm_apr_handler()
2915 work->cm_event.param.apr_rcvd.ap_status = apr_msg->ap_status; in cm_apr_handler()
2916 work->cm_event.param.apr_rcvd.apr_info = &apr_msg->info; in cm_apr_handler()
2917 work->cm_event.param.apr_rcvd.info_len = apr_msg->info_length; in cm_apr_handler()
2918 work->cm_event.private_data = &apr_msg->private_data; in cm_apr_handler()
2933 list_add_tail(&work->list, &cm_id_priv->work_list); in cm_apr_handler()
2937 cm_process_work(cm_id_priv, work); in cm_apr_handler()
2946 static int cm_timewait_handler(struct cm_work *work) in cm_timewait_handler() argument
2952 timewait_info = (struct cm_timewait_info *)work; in cm_timewait_handler()
2957 cm_id_priv = cm_acquire_id(timewait_info->work.local_id, in cm_timewait_handler()
2958 timewait_info->work.remote_id); in cm_timewait_handler()
2971 list_add_tail(&work->list, &cm_id_priv->work_list); in cm_timewait_handler()
2975 cm_process_work(cm_id_priv, work); in cm_timewait_handler()
3048 static void cm_format_sidr_req_event(struct cm_work *work, in cm_format_sidr_req_event() argument
3055 work->mad_recv_wc->recv_buf.mad; in cm_format_sidr_req_event()
3056 param = &work->cm_event.param.sidr_req_rcvd; in cm_format_sidr_req_event()
3060 param->bth_pkey = cm_get_bth_pkey(work); in cm_format_sidr_req_event()
3061 param->port = work->port->port_num; in cm_format_sidr_req_event()
3062 work->cm_event.private_data = &sidr_req_msg->private_data; in cm_format_sidr_req_event()
3065 static int cm_sidr_req_handler(struct cm_work *work) in cm_sidr_req_handler() argument
3072 cm_id = ib_create_cm_id(work->port->cm_dev->ib_device, NULL, NULL); in cm_sidr_req_handler()
3079 work->mad_recv_wc->recv_buf.mad; in cm_sidr_req_handler()
3080 wc = work->mad_recv_wc->wc; in cm_sidr_req_handler()
3083 cm_init_av_for_response(work->port, work->mad_recv_wc->wc, in cm_sidr_req_handler()
3084 work->mad_recv_wc->recv_buf.grh, in cm_sidr_req_handler()
3094 atomic_long_inc(&work->port->counter_group[CM_RECV_DUPLICATES]. in cm_sidr_req_handler()
3115 cm_format_sidr_req_event(work, &cur_cm_id_priv->id); in cm_sidr_req_handler()
3116 cm_process_work(cm_id_priv, work); in cm_sidr_req_handler()
3192 static void cm_format_sidr_rep_event(struct cm_work *work) in cm_format_sidr_rep_event() argument
3198 work->mad_recv_wc->recv_buf.mad; in cm_format_sidr_rep_event()
3199 param = &work->cm_event.param.sidr_rep_rcvd; in cm_format_sidr_rep_event()
3205 work->cm_event.private_data = &sidr_rep_msg->private_data; in cm_format_sidr_rep_event()
3208 static int cm_sidr_rep_handler(struct cm_work *work) in cm_sidr_rep_handler() argument
3214 work->mad_recv_wc->recv_buf.mad; in cm_sidr_rep_handler()
3228 cm_format_sidr_rep_event(work); in cm_sidr_rep_handler()
3229 cm_process_work(cm_id_priv, work); in cm_sidr_rep_handler()
3331 struct cm_work *work = container_of(_work, struct cm_work, work.work); in cm_work_handler() local
3334 switch (work->cm_event.event) { in cm_work_handler()
3336 ret = cm_req_handler(work); in cm_work_handler()
3339 ret = cm_mra_handler(work); in cm_work_handler()
3342 ret = cm_rej_handler(work); in cm_work_handler()
3345 ret = cm_rep_handler(work); in cm_work_handler()
3348 ret = cm_rtu_handler(work); in cm_work_handler()
3351 ret = cm_establish_handler(work); in cm_work_handler()
3354 ret = cm_dreq_handler(work); in cm_work_handler()
3357 ret = cm_drep_handler(work); in cm_work_handler()
3360 ret = cm_sidr_req_handler(work); in cm_work_handler()
3363 ret = cm_sidr_rep_handler(work); in cm_work_handler()
3366 ret = cm_lap_handler(work); in cm_work_handler()
3369 ret = cm_apr_handler(work); in cm_work_handler()
3372 ret = cm_timewait_handler(work); in cm_work_handler()
3379 cm_free_work(work); in cm_work_handler()
3385 struct cm_work *work; in cm_establish() local
3394 work = kmalloc(sizeof *work, GFP_ATOMIC); in cm_establish()
3395 if (!work) in cm_establish()
3416 kfree(work); in cm_establish()
3426 INIT_DELAYED_WORK(&work->work, cm_work_handler); in cm_establish()
3427 work->local_id = cm_id->local_id; in cm_establish()
3428 work->remote_id = cm_id->remote_id; in cm_establish()
3429 work->mad_recv_wc = NULL; in cm_establish()
3430 work->cm_event.event = IB_CM_USER_ESTABLISHED; in cm_establish()
3435 queue_delayed_work(cm.wq, &work->work, 0); in cm_establish()
3437 kfree(work); in cm_establish()
3488 struct cm_work *work; in cm_recv_handler() local
3540 work = kmalloc(sizeof *work + sizeof(struct ib_sa_path_rec) * paths, in cm_recv_handler()
3542 if (!work) { in cm_recv_handler()
3547 INIT_DELAYED_WORK(&work->work, cm_work_handler); in cm_recv_handler()
3548 work->cm_event.event = event; in cm_recv_handler()
3549 work->mad_recv_wc = mad_recv_wc; in cm_recv_handler()
3550 work->port = port; in cm_recv_handler()
3555 queue_delayed_work(cm.wq, &work->work, 0); in cm_recv_handler()
3561 kfree(work); in cm_recv_handler()
4020 cancel_delayed_work(&timewait_info->work.work); in ib_cm_cleanup()