• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500-V1.0.1.40_1.0.68/src/linux/linux-2.6/drivers/infiniband/core/

Lines Matching defs:cm_id_priv

89 static struct iwcm_work *get_work(struct iwcm_id_private *cm_id_priv)
93 if (list_empty(&cm_id_priv->work_free_list))
95 work = list_entry(cm_id_priv->work_free_list.next, struct iwcm_work,
106 static void dealloc_work_entries(struct iwcm_id_private *cm_id_priv)
110 list_for_each_safe(e, tmp, &cm_id_priv->work_free_list)
114 static int alloc_work_entries(struct iwcm_id_private *cm_id_priv, int count)
118 BUG_ON(!list_empty(&cm_id_priv->work_free_list));
122 dealloc_work_entries(cm_id_priv);
125 work->cm_id = cm_id_priv;
148 static void free_cm_id(struct iwcm_id_private *cm_id_priv)
150 dealloc_work_entries(cm_id_priv);
151 kfree(cm_id_priv);
159 static int iwcm_deref_id(struct iwcm_id_private *cm_id_priv)
161 BUG_ON(atomic_read(&cm_id_priv->refcount)==0);
162 if (atomic_dec_and_test(&cm_id_priv->refcount)) {
163 BUG_ON(!list_empty(&cm_id_priv->work_list));
164 complete(&cm_id_priv->destroy_comp);
173 struct iwcm_id_private *cm_id_priv;
174 cm_id_priv = container_of(cm_id, struct iwcm_id_private, id);
175 atomic_inc(&cm_id_priv->refcount);
180 struct iwcm_id_private *cm_id_priv;
181 cm_id_priv = container_of(cm_id, struct iwcm_id_private, id);
182 if (iwcm_deref_id(cm_id_priv) &&
183 test_bit(IWCM_F_CALLBACK_DESTROY, &cm_id_priv->flags)) {
184 BUG_ON(!list_empty(&cm_id_priv->work_list));
185 free_cm_id(cm_id_priv);
195 struct iwcm_id_private *cm_id_priv;
197 cm_id_priv = kzalloc(sizeof(*cm_id_priv), GFP_KERNEL);
198 if (!cm_id_priv)
201 cm_id_priv->state = IW_CM_STATE_IDLE;
202 cm_id_priv->id.device = device;
203 cm_id_priv->id.cm_handler = cm_handler;
204 cm_id_priv->id.context = context;
205 cm_id_priv->id.event_handler = cm_event_handler;
206 cm_id_priv->id.add_ref = add_ref;
207 cm_id_priv->id.rem_ref = rem_ref;
208 spin_lock_init(&cm_id_priv->lock);
209 atomic_set(&cm_id_priv->refcount, 1);
210 init_waitqueue_head(&cm_id_priv->connect_wait);
211 init_completion(&cm_id_priv->destroy_comp);
212 INIT_LIST_HEAD(&cm_id_priv->work_list);
213 INIT_LIST_HEAD(&cm_id_priv->work_free_list);
215 return &cm_id_priv->id;
258 struct iwcm_id_private *cm_id_priv;
263 cm_id_priv = container_of(cm_id, struct iwcm_id_private, id);
265 wait_event(cm_id_priv->connect_wait,
266 !test_bit(IWCM_F_CONNECT_WAIT, &cm_id_priv->flags));
268 spin_lock_irqsave(&cm_id_priv->lock, flags);
269 switch (cm_id_priv->state) {
271 cm_id_priv->state = IW_CM_STATE_CLOSING;
274 if (cm_id_priv->qp)
275 qp = cm_id_priv->qp;
298 spin_unlock_irqrestore(&cm_id_priv->lock, flags);
325 struct iwcm_id_private *cm_id_priv;
329 cm_id_priv = container_of(cm_id, struct iwcm_id_private, id);
334 wait_event(cm_id_priv->connect_wait,
335 !test_bit(IWCM_F_CONNECT_WAIT, &cm_id_priv->flags));
337 spin_lock_irqsave(&cm_id_priv->lock, flags);
338 switch (cm_id_priv->state) {
340 cm_id_priv->state = IW_CM_STATE_DESTROYING;
341 spin_unlock_irqrestore(&cm_id_priv->lock, flags);
344 spin_lock_irqsave(&cm_id_priv->lock, flags);
347 cm_id_priv->state = IW_CM_STATE_DESTROYING;
348 spin_unlock_irqrestore(&cm_id_priv->lock, flags);
350 (void)iwcm_modify_qp_err(cm_id_priv->qp);
351 spin_lock_irqsave(&cm_id_priv->lock, flags);
355 cm_id_priv->state = IW_CM_STATE_DESTROYING;
364 cm_id_priv->state = IW_CM_STATE_DESTROYING;
372 if (cm_id_priv->qp) {
373 cm_id_priv->id.device->iwcm->rem_ref(cm_id_priv->qp);
374 cm_id_priv->qp = NULL;
376 spin_unlock_irqrestore(&cm_id_priv->lock, flags);
378 (void)iwcm_deref_id(cm_id_priv);
389 struct iwcm_id_private *cm_id_priv;
391 cm_id_priv = container_of(cm_id, struct iwcm_id_private, id);
392 BUG_ON(test_bit(IWCM_F_CALLBACK_DESTROY, &cm_id_priv->flags));
396 wait_for_completion(&cm_id_priv->destroy_comp);
398 free_cm_id(cm_id_priv);
410 struct iwcm_id_private *cm_id_priv;
414 cm_id_priv = container_of(cm_id, struct iwcm_id_private, id);
416 ret = alloc_work_entries(cm_id_priv, backlog);
420 spin_lock_irqsave(&cm_id_priv->lock, flags);
421 switch (cm_id_priv->state) {
423 cm_id_priv->state = IW_CM_STATE_LISTEN;
424 spin_unlock_irqrestore(&cm_id_priv->lock, flags);
427 cm_id_priv->state = IW_CM_STATE_IDLE;
428 spin_lock_irqsave(&cm_id_priv->lock, flags);
433 spin_unlock_irqrestore(&cm_id_priv->lock, flags);
448 struct iwcm_id_private *cm_id_priv;
452 cm_id_priv = container_of(cm_id, struct iwcm_id_private, id);
453 set_bit(IWCM_F_CONNECT_WAIT, &cm_id_priv->flags);
455 spin_lock_irqsave(&cm_id_priv->lock, flags);
456 if (cm_id_priv->state != IW_CM_STATE_CONN_RECV) {
457 spin_unlock_irqrestore(&cm_id_priv->lock, flags);
458 clear_bit(IWCM_F_CONNECT_WAIT, &cm_id_priv->flags);
459 wake_up_all(&cm_id_priv->connect_wait);
462 cm_id_priv->state = IW_CM_STATE_IDLE;
463 spin_unlock_irqrestore(&cm_id_priv->lock, flags);
468 clear_bit(IWCM_F_CONNECT_WAIT, &cm_id_priv->flags);
469 wake_up_all(&cm_id_priv->connect_wait);
485 struct iwcm_id_private *cm_id_priv;
490 cm_id_priv = container_of(cm_id, struct iwcm_id_private, id);
491 set_bit(IWCM_F_CONNECT_WAIT, &cm_id_priv->flags);
493 spin_lock_irqsave(&cm_id_priv->lock, flags);
494 if (cm_id_priv->state != IW_CM_STATE_CONN_RECV) {
495 spin_unlock_irqrestore(&cm_id_priv->lock, flags);
496 clear_bit(IWCM_F_CONNECT_WAIT, &cm_id_priv->flags);
497 wake_up_all(&cm_id_priv->connect_wait);
503 spin_unlock_irqrestore(&cm_id_priv->lock, flags);
507 cm_id_priv->qp = qp;
508 spin_unlock_irqrestore(&cm_id_priv->lock, flags);
513 BUG_ON(cm_id_priv->state != IW_CM_STATE_CONN_RECV);
514 cm_id_priv->state = IW_CM_STATE_IDLE;
515 spin_lock_irqsave(&cm_id_priv->lock, flags);
516 if (cm_id_priv->qp) {
518 cm_id_priv->qp = NULL;
520 spin_unlock_irqrestore(&cm_id_priv->lock, flags);
521 clear_bit(IWCM_F_CONNECT_WAIT, &cm_id_priv->flags);
522 wake_up_all(&cm_id_priv->connect_wait);
538 struct iwcm_id_private *cm_id_priv;
543 cm_id_priv = container_of(cm_id, struct iwcm_id_private, id);
545 ret = alloc_work_entries(cm_id_priv, 4);
549 set_bit(IWCM_F_CONNECT_WAIT, &cm_id_priv->flags);
550 spin_lock_irqsave(&cm_id_priv->lock, flags);
552 if (cm_id_priv->state != IW_CM_STATE_IDLE) {
553 spin_unlock_irqrestore(&cm_id_priv->lock, flags);
554 clear_bit(IWCM_F_CONNECT_WAIT, &cm_id_priv->flags);
555 wake_up_all(&cm_id_priv->connect_wait);
562 spin_unlock_irqrestore(&cm_id_priv->lock, flags);
566 cm_id_priv->qp = qp;
567 cm_id_priv->state = IW_CM_STATE_CONN_SENT;
568 spin_unlock_irqrestore(&cm_id_priv->lock, flags);
572 spin_lock_irqsave(&cm_id_priv->lock, flags);
573 if (cm_id_priv->qp) {
575 cm_id_priv->qp = NULL;
577 spin_unlock_irqrestore(&cm_id_priv->lock, flags);
578 BUG_ON(cm_id_priv->state != IW_CM_STATE_CONN_SENT);
579 cm_id_priv->state = IW_CM_STATE_IDLE;
580 clear_bit(IWCM_F_CONNECT_WAIT, &cm_id_priv->flags);
581 wake_up_all(&cm_id_priv->connect_wait);
608 struct iwcm_id_private *cm_id_priv;
639 cm_id_priv = container_of(cm_id, struct iwcm_id_private, id);
640 cm_id_priv->state = IW_CM_STATE_CONN_RECV;
642 ret = alloc_work_entries(cm_id_priv, 3);
653 set_bit(IWCM_F_CALLBACK_DESTROY, &cm_id_priv->flags);
655 if (atomic_read(&cm_id_priv->refcount)==0)
656 free_cm_id(cm_id_priv);
676 static int cm_conn_est_handler(struct iwcm_id_private *cm_id_priv,
682 spin_lock_irqsave(&cm_id_priv->lock, flags);
689 clear_bit(IWCM_F_CONNECT_WAIT, &cm_id_priv->flags);
690 BUG_ON(cm_id_priv->state != IW_CM_STATE_CONN_RECV);
691 cm_id_priv->state = IW_CM_STATE_ESTABLISHED;
692 spin_unlock_irqrestore(&cm_id_priv->lock, flags);
693 ret = cm_id_priv->id.cm_handler(&cm_id_priv->id, iw_event);
694 wake_up_all(&cm_id_priv->connect_wait);
706 static int cm_conn_rep_handler(struct iwcm_id_private *cm_id_priv,
712 spin_lock_irqsave(&cm_id_priv->lock, flags);
717 clear_bit(IWCM_F_CONNECT_WAIT, &cm_id_priv->flags);
718 BUG_ON(cm_id_priv->state != IW_CM_STATE_CONN_SENT);
720 cm_id_priv->id.local_addr = iw_event->local_addr;
721 cm_id_priv->id.remote_addr = iw_event->remote_addr;
722 cm_id_priv->state = IW_CM_STATE_ESTABLISHED;
725 cm_id_priv->id.device->iwcm->rem_ref(cm_id_priv->qp);
726 cm_id_priv->qp = NULL;
727 cm_id_priv->state = IW_CM_STATE_IDLE;
729 spin_unlock_irqrestore(&cm_id_priv->lock, flags);
730 ret = cm_id_priv->id.cm_handler(&cm_id_priv->id, iw_event);
736 wake_up_all(&cm_id_priv->connect_wait);
746 static void cm_disconnect_handler(struct iwcm_id_private *cm_id_priv,
751 spin_lock_irqsave(&cm_id_priv->lock, flags);
752 if (cm_id_priv->state == IW_CM_STATE_ESTABLISHED)
753 cm_id_priv->state = IW_CM_STATE_CLOSING;
754 spin_unlock_irqrestore(&cm_id_priv->lock, flags);
768 static int cm_close_handler(struct iwcm_id_private *cm_id_priv,
773 spin_lock_irqsave(&cm_id_priv->lock, flags);
775 if (cm_id_priv->qp) {
776 cm_id_priv->id.device->iwcm->rem_ref(cm_id_priv->qp);
777 cm_id_priv->qp = NULL;
779 switch (cm_id_priv->state) {
782 cm_id_priv->state = IW_CM_STATE_IDLE;
783 spin_unlock_irqrestore(&cm_id_priv->lock, flags);
784 ret = cm_id_priv->id.cm_handler(&cm_id_priv->id, iw_event);
785 spin_lock_irqsave(&cm_id_priv->lock, flags);
792 spin_unlock_irqrestore(&cm_id_priv->lock, flags);
797 static int process_event(struct iwcm_id_private *cm_id_priv,
804 cm_conn_req_handler(cm_id_priv, iw_event);
807 ret = cm_conn_rep_handler(cm_id_priv, iw_event);
810 ret = cm_conn_est_handler(cm_id_priv, iw_event);
813 cm_disconnect_handler(cm_id_priv, iw_event);
816 ret = cm_close_handler(cm_id_priv, iw_event);
838 struct iwcm_id_private *cm_id_priv = work->cm_id;
843 spin_lock_irqsave(&cm_id_priv->lock, flags);
844 empty = list_empty(&cm_id_priv->work_list);
846 work = list_entry(cm_id_priv->work_list.next,
849 empty = list_empty(&cm_id_priv->work_list);
852 spin_unlock_irqrestore(&cm_id_priv->lock, flags);
854 ret = process_event(cm_id_priv, &levent);
856 set_bit(IWCM_F_CALLBACK_DESTROY, &cm_id_priv->flags);
857 destroy_cm_id(&cm_id_priv->id);
859 BUG_ON(atomic_read(&cm_id_priv->refcount)==0);
860 if (iwcm_deref_id(cm_id_priv)) {
862 &cm_id_priv->flags)) {
863 BUG_ON(!list_empty(&cm_id_priv->work_list));
864 free_cm_id(cm_id_priv);
868 spin_lock_irqsave(&cm_id_priv->lock, flags);
870 spin_unlock_irqrestore(&cm_id_priv->lock, flags);
892 struct iwcm_id_private *cm_id_priv;
896 cm_id_priv = container_of(cm_id, struct iwcm_id_private, id);
898 spin_lock_irqsave(&cm_id_priv->lock, flags);
899 work = get_work(cm_id_priv);
906 work->cm_id = cm_id_priv;
919 atomic_inc(&cm_id_priv->refcount);
920 if (list_empty(&cm_id_priv->work_list)) {
921 list_add_tail(&work->list, &cm_id_priv->work_list);
924 list_add_tail(&work->list, &cm_id_priv->work_list);
926 spin_unlock_irqrestore(&cm_id_priv->lock, flags);
930 static int iwcm_init_qp_init_attr(struct iwcm_id_private *cm_id_priv,
937 spin_lock_irqsave(&cm_id_priv->lock, flags);
938 switch (cm_id_priv->state) {
953 spin_unlock_irqrestore(&cm_id_priv->lock, flags);
957 static int iwcm_init_qp_rts_attr(struct iwcm_id_private *cm_id_priv,
964 spin_lock_irqsave(&cm_id_priv->lock, flags);
965 switch (cm_id_priv->state) {
977 spin_unlock_irqrestore(&cm_id_priv->lock, flags);
985 struct iwcm_id_private *cm_id_priv;
988 cm_id_priv = container_of(cm_id, struct iwcm_id_private, id);
992 ret = iwcm_init_qp_init_attr(cm_id_priv,
996 ret = iwcm_init_qp_rts_attr(cm_id_priv,