diff options
author | Mike Marciniszyn <mike.marciniszyn@intel.com> | 2016-12-07 22:33:20 -0500 |
---|---|---|
committer | Doug Ledford <dledford@redhat.com> | 2016-12-11 15:29:42 -0500 |
commit | fcb29a6668a254104d38c0132d1853d0644af066 (patch) | |
tree | c16567008dca63a08b02bef18007fc398736212e /drivers/infiniband/sw/rdmavt | |
parent | 5213006ade47153f5f2c2e5a42e84312afccabfd (diff) |
IB/rdmavt: Add trace of MR segs
Add tracing of MR segment information.
Reviewed-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Mike Marciniszyn <mike.marciniszyn@intel.com>
Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
Diffstat (limited to 'drivers/infiniband/sw/rdmavt')
-rw-r--r-- | drivers/infiniband/sw/rdmavt/mr.c | 4 | ||||
-rw-r--r-- | drivers/infiniband/sw/rdmavt/trace.h | 1 | ||||
-rw-r--r-- | drivers/infiniband/sw/rdmavt/trace_mr.h | 112 |
3 files changed, 117 insertions, 0 deletions
diff --git a/drivers/infiniband/sw/rdmavt/mr.c b/drivers/infiniband/sw/rdmavt/mr.c index 4acf179adf3b..562cf78b6ae9 100644 --- a/drivers/infiniband/sw/rdmavt/mr.c +++ b/drivers/infiniband/sw/rdmavt/mr.c | |||
@@ -51,6 +51,7 @@ | |||
51 | #include <rdma/rdma_vt.h> | 51 | #include <rdma/rdma_vt.h> |
52 | #include "vt.h" | 52 | #include "vt.h" |
53 | #include "mr.h" | 53 | #include "mr.h" |
54 | #include "trace.h" | ||
54 | 55 | ||
55 | /** | 56 | /** |
56 | * rvt_driver_mr_init - Init MR resources per driver | 57 | * rvt_driver_mr_init - Init MR resources per driver |
@@ -403,6 +404,7 @@ struct ib_mr *rvt_reg_user_mr(struct ib_pd *pd, u64 start, u64 length, | |||
403 | } | 404 | } |
404 | mr->mr.map[m]->segs[n].vaddr = vaddr; | 405 | mr->mr.map[m]->segs[n].vaddr = vaddr; |
405 | mr->mr.map[m]->segs[n].length = umem->page_size; | 406 | mr->mr.map[m]->segs[n].length = umem->page_size; |
407 | trace_rvt_mr_user_seg(&mr->mr, m, n, vaddr, umem->page_size); | ||
406 | n++; | 408 | n++; |
407 | if (n == RVT_SEGSZ) { | 409 | if (n == RVT_SEGSZ) { |
408 | m++; | 410 | m++; |
@@ -507,6 +509,7 @@ static int rvt_set_page(struct ib_mr *ibmr, u64 addr) | |||
507 | n = mapped_segs % RVT_SEGSZ; | 509 | n = mapped_segs % RVT_SEGSZ; |
508 | mr->mr.map[m]->segs[n].vaddr = (void *)addr; | 510 | mr->mr.map[m]->segs[n].vaddr = (void *)addr; |
509 | mr->mr.map[m]->segs[n].length = ps; | 511 | mr->mr.map[m]->segs[n].length = ps; |
512 | trace_rvt_mr_page_seg(&mr->mr, m, n, (void *)addr, ps); | ||
510 | mr->mr.length += ps; | 513 | mr->mr.length += ps; |
511 | 514 | ||
512 | return 0; | 515 | return 0; |
@@ -693,6 +696,7 @@ int rvt_map_phys_fmr(struct ib_fmr *ibfmr, u64 *page_list, | |||
693 | for (i = 0; i < list_len; i++) { | 696 | for (i = 0; i < list_len; i++) { |
694 | fmr->mr.map[m]->segs[n].vaddr = (void *)page_list[i]; | 697 | fmr->mr.map[m]->segs[n].vaddr = (void *)page_list[i]; |
695 | fmr->mr.map[m]->segs[n].length = ps; | 698 | fmr->mr.map[m]->segs[n].length = ps; |
699 | trace_rvt_mr_fmr_seg(&fmr->mr, m, n, (void *)page_list[i], ps); | ||
696 | if (++n == RVT_SEGSZ) { | 700 | if (++n == RVT_SEGSZ) { |
697 | m++; | 701 | m++; |
698 | n = 0; | 702 | n = 0; |
diff --git a/drivers/infiniband/sw/rdmavt/trace.h b/drivers/infiniband/sw/rdmavt/trace.h index 11a2afbc8e76..e2d23acb6a7d 100644 --- a/drivers/infiniband/sw/rdmavt/trace.h +++ b/drivers/infiniband/sw/rdmavt/trace.h | |||
@@ -51,3 +51,4 @@ | |||
51 | #include "trace_rvt.h" | 51 | #include "trace_rvt.h" |
52 | #include "trace_qp.h" | 52 | #include "trace_qp.h" |
53 | #include "trace_tx.h" | 53 | #include "trace_tx.h" |
54 | #include "trace_mr.h" | ||
diff --git a/drivers/infiniband/sw/rdmavt/trace_mr.h b/drivers/infiniband/sw/rdmavt/trace_mr.h new file mode 100644 index 000000000000..3318a6c36373 --- /dev/null +++ b/drivers/infiniband/sw/rdmavt/trace_mr.h | |||
@@ -0,0 +1,112 @@ | |||
1 | /* | ||
2 | * Copyright(c) 2016 Intel Corporation. | ||
3 | * | ||
4 | * This file is provided under a dual BSD/GPLv2 license. When using or | ||
5 | * redistributing this file, you may do so under either license. | ||
6 | * | ||
7 | * GPL LICENSE SUMMARY | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | ||
10 | * it under the terms of version 2 of the GNU General Public License as | ||
11 | * published by the Free Software Foundation. | ||
12 | * | ||
13 | * This program is distributed in the hope that it will be useful, but | ||
14 | * WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
16 | * General Public License for more details. | ||
17 | * | ||
18 | * BSD LICENSE | ||
19 | * | ||
20 | * Redistribution and use in source and binary forms, with or without | ||
21 | * modification, are permitted provided that the following conditions | ||
22 | * are met: | ||
23 | * | ||
24 | * - Redistributions of source code must retain the above copyright | ||
25 | * notice, this list of conditions and the following disclaimer. | ||
26 | * - Redistributions in binary form must reproduce the above copyright | ||
27 | * notice, this list of conditions and the following disclaimer in | ||
28 | * the documentation and/or other materials provided with the | ||
29 | * distribution. | ||
30 | * - Neither the name of Intel Corporation nor the names of its | ||
31 | * contributors may be used to endorse or promote products derived | ||
32 | * from this software without specific prior written permission. | ||
33 | * | ||
34 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
35 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
36 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||
37 | * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||
38 | * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
39 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||
40 | * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||
41 | * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||
42 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
43 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||
44 | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
45 | * | ||
46 | */ | ||
47 | #if !defined(__RVT_TRACE_MR_H) || defined(TRACE_HEADER_MULTI_READ) | ||
48 | #define __RVT_TRACE_MR_H | ||
49 | |||
50 | #include <linux/tracepoint.h> | ||
51 | #include <linux/trace_seq.h> | ||
52 | |||
53 | #include <rdma/ib_verbs.h> | ||
54 | #include <rdma/rdma_vt.h> | ||
55 | #include <rdma/rdmavt_mr.h> | ||
56 | |||
57 | #undef TRACE_SYSTEM | ||
58 | #define TRACE_SYSTEM rvt_mr | ||
59 | DECLARE_EVENT_CLASS( | ||
60 | rvt_mr_template, | ||
61 | TP_PROTO(struct rvt_mregion *mr, u16 m, u16 n, void *v, size_t len), | ||
62 | TP_ARGS(mr, m, n, v, len), | ||
63 | TP_STRUCT__entry( | ||
64 | RDI_DEV_ENTRY(ib_to_rvt(mr->pd->device)) | ||
65 | __field(void *, vaddr) | ||
66 | __field(struct page *, page) | ||
67 | __field(size_t, len) | ||
68 | __field(u32, lkey) | ||
69 | __field(u16, m) | ||
70 | __field(u16, n) | ||
71 | ), | ||
72 | TP_fast_assign( | ||
73 | RDI_DEV_ASSIGN(ib_to_rvt(mr->pd->device)); | ||
74 | __entry->vaddr = v; | ||
75 | __entry->page = virt_to_page(v); | ||
76 | __entry->m = m; | ||
77 | __entry->n = n; | ||
78 | __entry->len = len; | ||
79 | ), | ||
80 | TP_printk( | ||
81 | "[%s] vaddr %p page %p m %u n %u len %ld", | ||
82 | __get_str(dev), | ||
83 | __entry->vaddr, | ||
84 | __entry->page, | ||
85 | __entry->m, | ||
86 | __entry->n, | ||
87 | __entry->len | ||
88 | ) | ||
89 | ); | ||
90 | |||
91 | DEFINE_EVENT( | ||
92 | rvt_mr_template, rvt_mr_page_seg, | ||
93 | TP_PROTO(struct rvt_mregion *mr, u16 m, u16 n, void *v, size_t len), | ||
94 | TP_ARGS(mr, m, n, v, len)); | ||
95 | |||
96 | DEFINE_EVENT( | ||
97 | rvt_mr_template, rvt_mr_fmr_seg, | ||
98 | TP_PROTO(struct rvt_mregion *mr, u16 m, u16 n, void *v, size_t len), | ||
99 | TP_ARGS(mr, m, n, v, len)); | ||
100 | |||
101 | DEFINE_EVENT( | ||
102 | rvt_mr_template, rvt_mr_user_seg, | ||
103 | TP_PROTO(struct rvt_mregion *mr, u16 m, u16 n, void *v, size_t len), | ||
104 | TP_ARGS(mr, m, n, v, len)); | ||
105 | |||
106 | #endif /* __RVT_TRACE_MR_H */ | ||
107 | |||
108 | #undef TRACE_INCLUDE_PATH | ||
109 | #undef TRACE_INCLUDE_FILE | ||
110 | #define TRACE_INCLUDE_PATH . | ||
111 | #define TRACE_INCLUDE_FILE trace_mr | ||
112 | #include <trace/define_trace.h> | ||