| .. | .. |
|---|
| 43 | 43 | void rds_inc_init(struct rds_incoming *inc, struct rds_connection *conn, |
|---|
| 44 | 44 | struct in6_addr *saddr) |
|---|
| 45 | 45 | { |
|---|
| 46 | | - int i; |
|---|
| 47 | | - |
|---|
| 48 | 46 | refcount_set(&inc->i_refcount, 1); |
|---|
| 49 | 47 | INIT_LIST_HEAD(&inc->i_item); |
|---|
| 50 | 48 | inc->i_conn = conn; |
|---|
| 51 | 49 | inc->i_saddr = *saddr; |
|---|
| 52 | | - inc->i_rdma_cookie = 0; |
|---|
| 53 | | - inc->i_rx_tstamp.tv_sec = 0; |
|---|
| 54 | | - inc->i_rx_tstamp.tv_usec = 0; |
|---|
| 50 | + inc->i_usercopy.rdma_cookie = 0; |
|---|
| 51 | + inc->i_usercopy.rx_tstamp = ktime_set(0, 0); |
|---|
| 55 | 52 | |
|---|
| 56 | | - for (i = 0; i < RDS_RX_MAX_TRACES; i++) |
|---|
| 57 | | - inc->i_rx_lat_trace[i] = 0; |
|---|
| 53 | + memset(inc->i_rx_lat_trace, 0, sizeof(inc->i_rx_lat_trace)); |
|---|
| 58 | 54 | } |
|---|
| 59 | 55 | EXPORT_SYMBOL_GPL(rds_inc_init); |
|---|
| 60 | 56 | |
|---|
| .. | .. |
|---|
| 66 | 62 | inc->i_conn = cp->cp_conn; |
|---|
| 67 | 63 | inc->i_conn_path = cp; |
|---|
| 68 | 64 | inc->i_saddr = *saddr; |
|---|
| 69 | | - inc->i_rdma_cookie = 0; |
|---|
| 70 | | - inc->i_rx_tstamp.tv_sec = 0; |
|---|
| 71 | | - inc->i_rx_tstamp.tv_usec = 0; |
|---|
| 65 | + inc->i_usercopy.rdma_cookie = 0; |
|---|
| 66 | + inc->i_usercopy.rx_tstamp = ktime_set(0, 0); |
|---|
| 72 | 67 | } |
|---|
| 73 | 68 | EXPORT_SYMBOL_GPL(rds_inc_path_init); |
|---|
| 74 | 69 | |
|---|
| .. | .. |
|---|
| 191 | 186 | case RDS_EXTHDR_RDMA_DEST: |
|---|
| 192 | 187 | /* We ignore the size for now. We could stash it |
|---|
| 193 | 188 | * somewhere and use it for error checking. */ |
|---|
| 194 | | - inc->i_rdma_cookie = rds_rdma_make_cookie( |
|---|
| 189 | + inc->i_usercopy.rdma_cookie = rds_rdma_make_cookie( |
|---|
| 195 | 190 | be32_to_cpu(buffer.rdma_dest.h_rdma_rkey), |
|---|
| 196 | 191 | be32_to_cpu(buffer.rdma_dest.h_rdma_offset)); |
|---|
| 197 | 192 | |
|---|
| .. | .. |
|---|
| 385 | 380 | be32_to_cpu(inc->i_hdr.h_len), |
|---|
| 386 | 381 | inc->i_hdr.h_dport); |
|---|
| 387 | 382 | if (sock_flag(sk, SOCK_RCVTSTAMP)) |
|---|
| 388 | | - do_gettimeofday(&inc->i_rx_tstamp); |
|---|
| 383 | + inc->i_usercopy.rx_tstamp = ktime_get_real(); |
|---|
| 389 | 384 | rds_inc_addref(inc); |
|---|
| 390 | 385 | inc->i_rx_lat_trace[RDS_MSG_RX_END] = local_clock(); |
|---|
| 391 | 386 | list_add_tail(&inc->i_item, &rs->rs_recv_queue); |
|---|
| .. | .. |
|---|
| 546 | 541 | { |
|---|
| 547 | 542 | int ret = 0; |
|---|
| 548 | 543 | |
|---|
| 549 | | - if (inc->i_rdma_cookie) { |
|---|
| 544 | + if (inc->i_usercopy.rdma_cookie) { |
|---|
| 550 | 545 | ret = put_cmsg(msg, SOL_RDS, RDS_CMSG_RDMA_DEST, |
|---|
| 551 | | - sizeof(inc->i_rdma_cookie), &inc->i_rdma_cookie); |
|---|
| 546 | + sizeof(inc->i_usercopy.rdma_cookie), |
|---|
| 547 | + &inc->i_usercopy.rdma_cookie); |
|---|
| 552 | 548 | if (ret) |
|---|
| 553 | 549 | goto out; |
|---|
| 554 | 550 | } |
|---|
| 555 | 551 | |
|---|
| 556 | | - if ((inc->i_rx_tstamp.tv_sec != 0) && |
|---|
| 552 | + if ((inc->i_usercopy.rx_tstamp != 0) && |
|---|
| 557 | 553 | sock_flag(rds_rs_to_sk(rs), SOCK_RCVTSTAMP)) { |
|---|
| 558 | | - ret = put_cmsg(msg, SOL_SOCKET, SCM_TIMESTAMP, |
|---|
| 559 | | - sizeof(struct timeval), |
|---|
| 560 | | - &inc->i_rx_tstamp); |
|---|
| 554 | + struct __kernel_old_timeval tv = |
|---|
| 555 | + ns_to_kernel_old_timeval(inc->i_usercopy.rx_tstamp); |
|---|
| 556 | + |
|---|
| 557 | + if (!sock_flag(rds_rs_to_sk(rs), SOCK_TSTAMP_NEW)) { |
|---|
| 558 | + ret = put_cmsg(msg, SOL_SOCKET, SO_TIMESTAMP_OLD, |
|---|
| 559 | + sizeof(tv), &tv); |
|---|
| 560 | + } else { |
|---|
| 561 | + struct __kernel_sock_timeval sk_tv; |
|---|
| 562 | + |
|---|
| 563 | + sk_tv.tv_sec = tv.tv_sec; |
|---|
| 564 | + sk_tv.tv_usec = tv.tv_usec; |
|---|
| 565 | + |
|---|
| 566 | + ret = put_cmsg(msg, SOL_SOCKET, SO_TIMESTAMP_NEW, |
|---|
| 567 | + sizeof(sk_tv), &sk_tv); |
|---|
| 568 | + } |
|---|
| 569 | + |
|---|
| 561 | 570 | if (ret) |
|---|
| 562 | 571 | goto out; |
|---|
| 563 | 572 | } |
|---|
| .. | .. |
|---|
| 776 | 785 | |
|---|
| 777 | 786 | minfo.seq = be64_to_cpu(inc->i_hdr.h_sequence); |
|---|
| 778 | 787 | minfo.len = be32_to_cpu(inc->i_hdr.h_len); |
|---|
| 788 | + minfo.tos = inc->i_conn->c_tos; |
|---|
| 779 | 789 | |
|---|
| 780 | 790 | if (flip) { |
|---|
| 781 | 791 | minfo.laddr = daddr; |
|---|
| .. | .. |
|---|
| 804 | 814 | |
|---|
| 805 | 815 | minfo6.seq = be64_to_cpu(inc->i_hdr.h_sequence); |
|---|
| 806 | 816 | minfo6.len = be32_to_cpu(inc->i_hdr.h_len); |
|---|
| 807 | | - minfo6.tos = 0; |
|---|
| 817 | + minfo6.tos = inc->i_conn->c_tos; |
|---|
| 808 | 818 | |
|---|
| 809 | 819 | if (flip) { |
|---|
| 810 | 820 | minfo6.laddr = *daddr; |
|---|