| 1483 | } |
| 1484 | |
| 1485 | static void krping_test_client(struct krping_cb *cb) |
| 1486 | { |
| 1487 | int ping, start, cc, i, ret; |
| 1488 | struct ib_send_wr *bad_wr; |
| 1489 | unsigned char c; |
| 1490 | |
| 1491 | start = 65; |
| 1492 | for (ping = 0; !cb->count || ping < cb->count; ping++) { |
| 1493 | cb->state = RDMA_READ_ADV; |
| 1494 | |
| 1495 | /* Put some ascii text in the buffer. */ |
| 1496 | cc = sprintf(cb->start_buf, "rdma-ping-%d: ", ping); |
| 1497 | for (i = cc, c = start; i < cb->size; i++) { |
| 1498 | cb->start_buf[i] = c; |
| 1499 | c++; |
| 1500 | if (c > 122) |
| 1501 | c = 65; |
| 1502 | } |
| 1503 | start++; |
| 1504 | if (start > 122) |
| 1505 | start = 65; |
| 1506 | cb->start_buf[cb->size - 1] = 0; |
| 1507 | |
| 1508 | krping_format_send(cb, cb->start_dma_addr); |
| 1509 | if (cb->state == ERROR) { |
| 1510 | printk(KERN_ERR PFX "krping_format_send failed\n"); |
| 1511 | break; |
| 1512 | } |
| 1513 | ret = ib_post_send(cb->qp, &cb->sq_wr, &bad_wr); |
| 1514 | if (ret) { |
| 1515 | printk(KERN_ERR PFX "post send error %d\n", ret); |
| 1516 | break; |
| 1517 | } |
| 1518 | |
| 1519 | /* Wait for server to ACK */ |
| 1520 | wait_event_interruptible(cb->sem, cb->state >= RDMA_WRITE_ADV); |
| 1521 | if (cb->state != RDMA_WRITE_ADV) { |
| 1522 | printk(KERN_ERR PFX |
| 1523 | "wait for RDMA_WRITE_ADV state %d\n", |
| 1524 | cb->state); |
| 1525 | break; |
| 1526 | } |
| 1527 | |
| 1528 | krping_format_send(cb, cb->rdma_dma_addr); |
| 1529 | ret = ib_post_send(cb->qp, &cb->sq_wr, &bad_wr); |
| 1530 | if (ret) { |
| 1531 | printk(KERN_ERR PFX "post send error %d\n", ret); |
| 1532 | break; |
| 1533 | } |
| 1534 | |
| 1535 | /* Wait for the server to say the RDMA Write is complete. */ |
| 1536 | wait_event_interruptible(cb->sem, |
| 1537 | cb->state >= RDMA_WRITE_COMPLETE); |
| 1538 | if (cb->state != RDMA_WRITE_COMPLETE) { |
| 1539 | printk(KERN_ERR PFX |
| 1540 | "wait for RDMA_WRITE_COMPLETE state %d\n", |
| 1541 | cb->state); |
| 1542 | break; |
no test coverage detected