[openib-general] [PATCH 6/9] kDAPL: convert the psp and rsp lists to linux native
Tom Duffy
Tom.Duffy at Sun.COM
Mon Jun 13 17:18:09 PDT 2005
Signed-off-by: Tom Duffy <tduffy at sun.com>
diff -Nurp -X /home/tduffy/dontdiff linux-kernel-ll6/dat-provider/dapl.h linux-kernel-ll7/dat-provider/dapl.h
--- linux-kernel-ll6/dat-provider/dapl.h 2005-06-13 16:11:11.259003000 -0700
+++ linux-kernel-ll7/dat-provider/dapl.h 2005-06-13 16:36:22.902013000 -0700
@@ -159,8 +159,8 @@ struct dapl_ia {
struct list_head rmr_list; /* RMR queue */
struct list_head pz_list; /* PZ queue */
struct list_head evd_list; /* EVD queue */
- struct dapl_llist_entry *psp_list_head; /* PSP queue */
- struct dapl_llist_entry *rsp_list_head; /* RSP queue */
+ struct list_head psp_list; /* PSP queue */
+ struct list_head rsp_list; /* RSP queue */
struct dapl_llist_entry *srq_list_head; /* SRQ queue */
};
@@ -282,6 +282,7 @@ typedef enum dapl_sp_state {
struct dapl_sp {
struct dat_sp sp;
struct dapl_common common;
+ struct list_head list;
DAPL_SP_STATE state; /* type and queue of the SP */
/* PSP/RSP PARAM fields */
diff -Nurp -X /home/tduffy/dontdiff linux-kernel-ll6/dat-provider/dapl_ia.c linux-kernel-ll7/dat-provider/dapl_ia.c
--- linux-kernel-ll6/dat-provider/dapl_ia.c 2005-06-13 16:30:09.267002000 -0700
+++ linux-kernel-ll7/dat-provider/dapl_ia.c 2005-06-13 16:46:18.755001000 -0700
@@ -68,8 +68,8 @@ struct dapl_ia *dapl_ia_alloc(struct dat
INIT_LIST_HEAD(&ia->rmr_list);
INIT_LIST_HEAD(&ia->pz_list);
INIT_LIST_HEAD(&ia->evd_list);
- dapl_llist_init_head(&ia->rsp_list_head);
- dapl_llist_init_head(&ia->psp_list_head);
+ INIT_LIST_HEAD(&ia->rsp_list);
+ INIT_LIST_HEAD(&ia->psp_list);
dapl_hca_link_ia(hca, ia);
@@ -109,7 +109,7 @@ u32 dapl_ia_abrupt_close(struct dapl_ia
struct dapl_rmr *rmr;
struct dapl_pz *pz;
struct dapl_evd *evd;
- struct dapl_sp *sp, *next_sp; /* for PSP and RSP queues */
+ struct dapl_sp *sp; /* for PSP and RSP queues */
struct dapl_cr *cr;
struct dapl_hca *hca;
@@ -131,18 +131,12 @@ u32 dapl_ia_abrupt_close(struct dapl_ia
rmr, dat_status);
}
- sp = (dapl_llist_is_empty(&ia->rsp_list_head)
- ? NULL : dapl_llist_peek_head(&ia->rsp_list_head));
- while (sp != NULL) {
- next_sp = dapl_llist_next_entry(&ia->rsp_list_head,
- &sp->common.
- ia_list_entry);
+ list_for_each_entry(sp, &ia->rsp_list, list) {
dat_status = dapl_rsp_free((struct dat_sp *)sp);
if (dat_status != DAT_SUCCESS)
dapl_dbg_log(DAPL_DBG_TYPE_WARN,
"ia_close(ABRUPT): rsp_free(%p) returns %x\n",
sp, dat_status);
- sp = next_sp;
}
list_for_each_entry(ep, &ia->ep_list, list) {
@@ -180,9 +174,7 @@ u32 dapl_ia_abrupt_close(struct dapl_ia
lmr, dat_status);
}
- sp = (dapl_llist_is_empty(&ia->psp_list_head)
- ? NULL : dapl_llist_peek_head(&ia->psp_list_head));
- while (sp != NULL) {
+ list_for_each_entry(sp, &ia->psp_list, list) {
/*
* Shut down the PSP so we get no further callbacks. There
* should be no competing threads after this.
@@ -193,10 +185,6 @@ u32 dapl_ia_abrupt_close(struct dapl_ia
"ia_close(ABRUPT): psp cannot remove listener, returns %x\n",
dat_status);
- next_sp = dapl_llist_next_entry(&ia->psp_list_head,
- &sp->common.
- ia_list_entry);
-
/* Remove CR's from this PSP and clean them up */
list_for_each_entry(cr, &sp->cr_list, list) {
/* Remove the CR from the queue & cleanup */
@@ -214,8 +202,6 @@ u32 dapl_ia_abrupt_close(struct dapl_ia
dapl_dbg_log(DAPL_DBG_TYPE_WARN,
"ia_close(ABRUPT): psp_free(%p) returns %x\n",
sp, dat_status);
-
- sp = next_sp;
}
list_for_each_entry(pz, &ia->pz_list, list) {
@@ -294,10 +280,10 @@ u32 dapl_ia_graceful_close(struct dapl_i
struct dapl_hca *hca;
if (!list_empty(&ia->rmr_list) ||
- !dapl_llist_is_empty(&ia->rsp_list_head) ||
+ !list_empty(&ia->rsp_list) ||
!list_empty(&ia->ep_list) ||
!list_empty(&ia->lmr_list) ||
- !dapl_llist_is_empty(&ia->psp_list_head) ||
+ !list_empty(&ia->psp_list) ||
!list_empty(&ia->pz_list)) {
dat_status =
DAT_ERROR(DAT_INVALID_STATE, DAT_INVALID_STATE_IA_IN_USE);
@@ -390,8 +376,8 @@ void dapl_ia_free(struct dapl_ia *ia)
dapl_os_assert(list_empty(&ia->rmr_list));
dapl_os_assert(list_empty(&ia->ep_list));
dapl_os_assert(list_empty(&ia->evd_list));
- dapl_os_assert(dapl_llist_is_empty(&ia->psp_list_head));
- dapl_os_assert(dapl_llist_is_empty(&ia->rsp_list_head));
+ dapl_os_assert(list_empty(&ia->psp_list));
+ dapl_os_assert(list_empty(&ia->rsp_list));
dapl_hca_unlink_ia(ia->hca, ia);
/* no need to destroy ia->common.lock */
@@ -527,8 +513,7 @@ void dapl_ia_unlink_evd(struct dapl_ia *
void dapl_ia_link_psp(struct dapl_ia *ia, struct dapl_sp *sp)
{
spin_lock_irqsave(&ia->common.lock, ia->common.flags);
- dapl_llist_add_head(&ia->psp_list_head,
- &sp->common.ia_list_entry, sp);
+ list_add(&sp->list, &ia->psp_list);
spin_unlock_irqrestore(&ia->common.lock, ia->common.flags);
}
@@ -537,18 +522,8 @@ void dapl_ia_link_psp(struct dapl_ia *ia
*/
void dapl_ia_unlink_sp(struct dapl_ia *ia, struct dapl_sp *sp)
{
- struct dapl_llist_entry **list_head;
-
- if (sp->sp.type == DAT_SP_TYPE_PSP) {
- list_head = &ia->psp_list_head;
- } else {
- dapl_os_assert(sp->sp.type ==
- DAT_SP_TYPE_RSP);
- list_head = &ia->rsp_list_head;
- }
-
spin_lock_irqsave(&ia->common.lock, ia->common.flags);
- dapl_llist_remove_entry(list_head, &sp->common.ia_list_entry);
+ list_del(&sp->list);
spin_unlock_irqrestore(&ia->common.lock, ia->common.flags);
}
@@ -556,36 +531,30 @@ struct dapl_sp *dapl_ia_sp_search(struct
boolean_t is_psp)
{
struct dapl_sp *sp;
- struct dapl_llist_entry **list_head;
+ struct list_head *list_head;
if (is_psp)
- list_head = &ia->psp_list_head;
+ list_head = &ia->psp_list;
else
- list_head = &ia->rsp_list_head;
+ list_head = &ia->rsp_list;
spin_lock_irqsave(&ia->common.lock, ia->common.flags);
- sp = (dapl_llist_is_empty(list_head) ? NULL :
- dapl_llist_peek_head(list_head));
-
- while (sp != NULL) {
- if (sp->conn_qual == conn_qual)
- break;
-
- sp = dapl_llist_next_entry(list_head,
- &sp->common.ia_list_entry);
- }
+ list_for_each_entry(sp, list_head, list)
+ if (sp->conn_qual == conn_qual) {
+ spin_unlock_irqrestore(&ia->common.lock,
+ ia->common.flags);
+ return sp;
+ }
spin_unlock_irqrestore(&ia->common.lock, ia->common.flags);
-
- return sp;
+ return NULL;
}
void dapl_ia_link_rsp(struct dapl_ia *ia, struct dapl_sp *sp)
{
spin_lock_irqsave(&ia->common.lock, ia->common.flags);
- dapl_llist_add_head(&ia->rsp_list_head,
- &sp->common.ia_list_entry, sp);
+ list_add(&sp->list, &ia->rsp_list);
spin_unlock_irqrestore(&ia->common.lock, ia->common.flags);
}
More information about the general
mailing list