| 986 | } |
| 987 | |
| 988 | static void wlat_test(struct krping_cb *cb) |
| 989 | { |
| 990 | int ccnt, scnt, rcnt; |
| 991 | int iters=cb->count; |
| 992 | volatile char *poll_buf = (char *) cb->start_buf; |
| 993 | char *buf = (char *)cb->rdma_buf; |
| 994 | struct timeval start_tv, stop_tv; |
| 995 | cycles_t *post_cycles_start = NULL; |
| 996 | cycles_t *post_cycles_stop = NULL; |
| 997 | cycles_t *poll_cycles_start = NULL; |
| 998 | cycles_t *poll_cycles_stop = NULL; |
| 999 | cycles_t *last_poll_cycles_start = NULL; |
| 1000 | cycles_t sum_poll = 0, sum_post = 0, sum_last_poll = 0; |
| 1001 | int i; |
| 1002 | int cycle_iters = 1000; |
| 1003 | |
| 1004 | ccnt = 0; |
| 1005 | scnt = 0; |
| 1006 | rcnt = 0; |
| 1007 | |
| 1008 | post_cycles_start = kmalloc(cycle_iters * sizeof(cycles_t), GFP_KERNEL); |
| 1009 | if (!post_cycles_start) { |
| 1010 | printk(KERN_ERR PFX "%s kmalloc failed\n", __FUNCTION__); |
| 1011 | goto done; |
| 1012 | } |
| 1013 | post_cycles_stop = kmalloc(cycle_iters * sizeof(cycles_t), GFP_KERNEL); |
| 1014 | if (!post_cycles_stop) { |
| 1015 | printk(KERN_ERR PFX "%s kmalloc failed\n", __FUNCTION__); |
| 1016 | goto done; |
| 1017 | } |
| 1018 | poll_cycles_start = kmalloc(cycle_iters * sizeof(cycles_t), GFP_KERNEL); |
| 1019 | if (!poll_cycles_start) { |
| 1020 | printk(KERN_ERR PFX "%s kmalloc failed\n", __FUNCTION__); |
| 1021 | goto done; |
| 1022 | } |
| 1023 | poll_cycles_stop = kmalloc(cycle_iters * sizeof(cycles_t), GFP_KERNEL); |
| 1024 | if (!poll_cycles_stop) { |
| 1025 | printk(KERN_ERR PFX "%s kmalloc failed\n", __FUNCTION__); |
| 1026 | goto done; |
| 1027 | } |
| 1028 | last_poll_cycles_start = kmalloc(cycle_iters * sizeof(cycles_t), |
| 1029 | GFP_KERNEL); |
| 1030 | if (!last_poll_cycles_start) { |
| 1031 | printk(KERN_ERR PFX "%s kmalloc failed\n", __FUNCTION__); |
| 1032 | goto done; |
| 1033 | } |
| 1034 | cb->rdma_sq_wr.wr.opcode = IB_WR_RDMA_WRITE; |
| 1035 | cb->rdma_sq_wr.rkey = cb->remote_rkey; |
| 1036 | cb->rdma_sq_wr.remote_addr = cb->remote_addr; |
| 1037 | cb->rdma_sq_wr.wr.sg_list->length = cb->size; |
| 1038 | |
| 1039 | if (cycle_iters > iters) |
| 1040 | cycle_iters = iters; |
| 1041 | microtime(&start_tv); |
| 1042 | while (scnt < iters || ccnt < iters || rcnt < iters) { |
| 1043 | |
| 1044 | /* Wait till buffer changes. */ |
| 1045 | if (rcnt < iters && !(scnt < 1 && !cb->server)) { |
no test coverage detected