| 1329 | } |
| 1330 | |
| 1331 | static void krping_bw_test_server(struct krping_cb *cb) |
| 1332 | { |
| 1333 | struct ib_send_wr *bad_wr; |
| 1334 | struct ib_wc wc; |
| 1335 | int ret; |
| 1336 | |
| 1337 | /* Spin waiting for client's Start STAG/TO/Len */ |
| 1338 | while (cb->state < RDMA_READ_ADV) { |
| 1339 | krping_cq_event_handler(cb->cq, cb); |
| 1340 | } |
| 1341 | |
| 1342 | /* Send STAG/TO/Len to client */ |
| 1343 | krping_format_send(cb, cb->start_dma_addr); |
| 1344 | ret = ib_post_send(cb->qp, &cb->sq_wr, &bad_wr); |
| 1345 | if (ret) { |
| 1346 | printk(KERN_ERR PFX "post send error %d\n", ret); |
| 1347 | return; |
| 1348 | } |
| 1349 | |
| 1350 | /* Spin waiting for send completion */ |
| 1351 | while ((ret = ib_poll_cq(cb->cq, 1, &wc) == 0)); |
| 1352 | if (ret < 0) { |
| 1353 | printk(KERN_ERR PFX "poll error %d\n", ret); |
| 1354 | return; |
| 1355 | } |
| 1356 | if (wc.status) { |
| 1357 | printk(KERN_ERR PFX "send completiong error %d\n", wc.status); |
| 1358 | return; |
| 1359 | } |
| 1360 | |
| 1361 | if (cb->duplex) |
| 1362 | bw_test(cb); |
| 1363 | wait_event_interruptible(cb->sem, cb->state == ERROR); |
| 1364 | } |
| 1365 | |
| 1366 | static int reg_supported(struct ib_device *dev) |
| 1367 | { |
no test coverage detected