diff options
author | Paul Mackerras <paulus@samba.org> | 2007-05-07 23:37:51 -0400 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2007-05-07 23:37:51 -0400 |
commit | 02bbc0f09c90cefdb2837605c96a66c5ce4ba2e1 (patch) | |
tree | 04ef573cd4de095c500c9fc3477f4278c0b36300 /drivers/infiniband/hw/ehca | |
parent | 7487a2245b8841c77ba9db406cf99a483b9334e9 (diff) | |
parent | 5b94f675f57e4ff16c8fda09088d7480a84dcd91 (diff) |
Merge branch 'linux-2.6'
Diffstat (limited to 'drivers/infiniband/hw/ehca')
-rw-r--r-- | drivers/infiniband/hw/ehca/ehca_cq.c | 2 | ||||
-rw-r--r-- | drivers/infiniband/hw/ehca/ehca_iverbs.h | 4 | ||||
-rw-r--r-- | drivers/infiniband/hw/ehca/ehca_main.c | 3 | ||||
-rw-r--r-- | drivers/infiniband/hw/ehca/ehca_reqs.c | 14 | ||||
-rw-r--r-- | drivers/infiniband/hw/ehca/ipz_pt_fn.h | 8 |
5 files changed, 24 insertions, 7 deletions
diff --git a/drivers/infiniband/hw/ehca/ehca_cq.c b/drivers/infiniband/hw/ehca/ehca_cq.c index e2cdc1a16fe9..67f0670fe3b1 100644 --- a/drivers/infiniband/hw/ehca/ehca_cq.c +++ b/drivers/infiniband/hw/ehca/ehca_cq.c | |||
@@ -113,7 +113,7 @@ struct ehca_qp* ehca_cq_get_qp(struct ehca_cq *cq, int real_qp_num) | |||
113 | return ret; | 113 | return ret; |
114 | } | 114 | } |
115 | 115 | ||
116 | struct ib_cq *ehca_create_cq(struct ib_device *device, int cqe, | 116 | struct ib_cq *ehca_create_cq(struct ib_device *device, int cqe, int comp_vector, |
117 | struct ib_ucontext *context, | 117 | struct ib_ucontext *context, |
118 | struct ib_udata *udata) | 118 | struct ib_udata *udata) |
119 | { | 119 | { |
diff --git a/drivers/infiniband/hw/ehca/ehca_iverbs.h b/drivers/infiniband/hw/ehca/ehca_iverbs.h index 95fd59fb4528..e14b029332c8 100644 --- a/drivers/infiniband/hw/ehca/ehca_iverbs.h +++ b/drivers/infiniband/hw/ehca/ehca_iverbs.h | |||
@@ -123,7 +123,7 @@ int ehca_destroy_eq(struct ehca_shca *shca, struct ehca_eq *eq); | |||
123 | void *ehca_poll_eq(struct ehca_shca *shca, struct ehca_eq *eq); | 123 | void *ehca_poll_eq(struct ehca_shca *shca, struct ehca_eq *eq); |
124 | 124 | ||
125 | 125 | ||
126 | struct ib_cq *ehca_create_cq(struct ib_device *device, int cqe, | 126 | struct ib_cq *ehca_create_cq(struct ib_device *device, int cqe, int comp_vector, |
127 | struct ib_ucontext *context, | 127 | struct ib_ucontext *context, |
128 | struct ib_udata *udata); | 128 | struct ib_udata *udata); |
129 | 129 | ||
@@ -135,7 +135,7 @@ int ehca_poll_cq(struct ib_cq *cq, int num_entries, struct ib_wc *wc); | |||
135 | 135 | ||
136 | int ehca_peek_cq(struct ib_cq *cq, int wc_cnt); | 136 | int ehca_peek_cq(struct ib_cq *cq, int wc_cnt); |
137 | 137 | ||
138 | int ehca_req_notify_cq(struct ib_cq *cq, enum ib_cq_notify cq_notify); | 138 | int ehca_req_notify_cq(struct ib_cq *cq, enum ib_cq_notify_flags notify_flags); |
139 | 139 | ||
140 | struct ib_qp *ehca_create_qp(struct ib_pd *pd, | 140 | struct ib_qp *ehca_create_qp(struct ib_pd *pd, |
141 | struct ib_qp_init_attr *init_attr, | 141 | struct ib_qp_init_attr *init_attr, |
diff --git a/drivers/infiniband/hw/ehca/ehca_main.c b/drivers/infiniband/hw/ehca/ehca_main.c index 50e426592d02..fe90e7454560 100644 --- a/drivers/infiniband/hw/ehca/ehca_main.c +++ b/drivers/infiniband/hw/ehca/ehca_main.c | |||
@@ -313,6 +313,7 @@ int ehca_init_device(struct ehca_shca *shca) | |||
313 | 313 | ||
314 | shca->ib_device.node_type = RDMA_NODE_IB_CA; | 314 | shca->ib_device.node_type = RDMA_NODE_IB_CA; |
315 | shca->ib_device.phys_port_cnt = shca->num_ports; | 315 | shca->ib_device.phys_port_cnt = shca->num_ports; |
316 | shca->ib_device.num_comp_vectors = 1; | ||
316 | shca->ib_device.dma_device = &shca->ibmebus_dev->ofdev.dev; | 317 | shca->ib_device.dma_device = &shca->ibmebus_dev->ofdev.dev; |
317 | shca->ib_device.query_device = ehca_query_device; | 318 | shca->ib_device.query_device = ehca_query_device; |
318 | shca->ib_device.query_port = ehca_query_port; | 319 | shca->ib_device.query_port = ehca_query_port; |
@@ -375,7 +376,7 @@ static int ehca_create_aqp1(struct ehca_shca *shca, u32 port) | |||
375 | return -EPERM; | 376 | return -EPERM; |
376 | } | 377 | } |
377 | 378 | ||
378 | ibcq = ib_create_cq(&shca->ib_device, NULL, NULL, (void*)(-1), 10); | 379 | ibcq = ib_create_cq(&shca->ib_device, NULL, NULL, (void*)(-1), 10, 0); |
379 | if (IS_ERR(ibcq)) { | 380 | if (IS_ERR(ibcq)) { |
380 | ehca_err(&shca->ib_device, "Cannot create AQP1 CQ."); | 381 | ehca_err(&shca->ib_device, "Cannot create AQP1 CQ."); |
381 | return PTR_ERR(ibcq); | 382 | return PTR_ERR(ibcq); |
diff --git a/drivers/infiniband/hw/ehca/ehca_reqs.c b/drivers/infiniband/hw/ehca/ehca_reqs.c index 08d3f892d9f3..caec9dee09e1 100644 --- a/drivers/infiniband/hw/ehca/ehca_reqs.c +++ b/drivers/infiniband/hw/ehca/ehca_reqs.c | |||
@@ -634,11 +634,13 @@ poll_cq_exit0: | |||
634 | return ret; | 634 | return ret; |
635 | } | 635 | } |
636 | 636 | ||
637 | int ehca_req_notify_cq(struct ib_cq *cq, enum ib_cq_notify cq_notify) | 637 | int ehca_req_notify_cq(struct ib_cq *cq, enum ib_cq_notify_flags notify_flags) |
638 | { | 638 | { |
639 | struct ehca_cq *my_cq = container_of(cq, struct ehca_cq, ib_cq); | 639 | struct ehca_cq *my_cq = container_of(cq, struct ehca_cq, ib_cq); |
640 | unsigned long spl_flags; | ||
641 | int ret = 0; | ||
640 | 642 | ||
641 | switch (cq_notify) { | 643 | switch (notify_flags & IB_CQ_SOLICITED_MASK) { |
642 | case IB_CQ_SOLICITED: | 644 | case IB_CQ_SOLICITED: |
643 | hipz_set_cqx_n0(my_cq, 1); | 645 | hipz_set_cqx_n0(my_cq, 1); |
644 | break; | 646 | break; |
@@ -649,5 +651,11 @@ int ehca_req_notify_cq(struct ib_cq *cq, enum ib_cq_notify cq_notify) | |||
649 | return -EINVAL; | 651 | return -EINVAL; |
650 | } | 652 | } |
651 | 653 | ||
652 | return 0; | 654 | if (notify_flags & IB_CQ_REPORT_MISSED_EVENTS) { |
655 | spin_lock_irqsave(&my_cq->spinlock, spl_flags); | ||
656 | ret = ipz_qeit_is_valid(&my_cq->ipz_queue); | ||
657 | spin_unlock_irqrestore(&my_cq->spinlock, spl_flags); | ||
658 | } | ||
659 | |||
660 | return ret; | ||
653 | } | 661 | } |
diff --git a/drivers/infiniband/hw/ehca/ipz_pt_fn.h b/drivers/infiniband/hw/ehca/ipz_pt_fn.h index 8199c45768a3..57f141a36bce 100644 --- a/drivers/infiniband/hw/ehca/ipz_pt_fn.h +++ b/drivers/infiniband/hw/ehca/ipz_pt_fn.h | |||
@@ -140,6 +140,14 @@ static inline void *ipz_qeit_get_inc_valid(struct ipz_queue *queue) | |||
140 | return cqe; | 140 | return cqe; |
141 | } | 141 | } |
142 | 142 | ||
143 | static inline int ipz_qeit_is_valid(struct ipz_queue *queue) | ||
144 | { | ||
145 | struct ehca_cqe *cqe = ipz_qeit_get(queue); | ||
146 | u32 cqe_flags = cqe->cqe_flags; | ||
147 | |||
148 | return cqe_flags >> 7 == (queue->toggle_state & 1); | ||
149 | } | ||
150 | |||
143 | /* | 151 | /* |
144 | * returns and resets Queue Entry iterator | 152 | * returns and resets Queue Entry iterator |
145 | * returns address (kv) of first Queue Entry | 153 | * returns address (kv) of first Queue Entry |