* [jgunthorpe:iommu_pt 47/47] drivers/iommu/generic_pt/kunit_iommu_cmp.h: linux/timekeeping.h is included more than once.
@ 2024-08-31 14:28 kernel test robot
0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2024-08-31 14:28 UTC (permalink / raw)
To: oe-kbuild; +Cc: lkp
::::::
:::::: Manual check reason: "low confidence bisect report"
::::::
BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
TO: Alejandro Jimenez <alejandro.j.jimenez@oracle.com>
CC: Jason Gunthorpe <jgg@ziepe.ca>
tree: https://github.com/jgunthorpe/linux iommu_pt
head: 5a40c5df4fb5f5a12ee01c506d5f8585105d2aff
commit: 5a40c5df4fb5f5a12ee01c506d5f8585105d2aff [47/47] iommupt: Add kunit test to benchmark page table operations
:::::: branch date: 3 days ago
:::::: commit date: 3 days ago
compiler: clang version 18.1.5 (https://github.com/llvm/llvm-project 617a15a9eac96088ae5e9134248d8236e34b91b1)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/r/202408312207.ht9iffbD-lkp@intel.com/
includecheck warnings: (new ones prefixed by >>)
>> drivers/iommu/generic_pt/kunit_iommu_cmp.h: linux/timekeeping.h is included more than once.
vim +27 drivers/iommu/generic_pt/kunit_iommu_cmp.h
25
26 /* ktime related definitions */
> 27 #include <linux/timekeeping.h>
28
29 struct compare_map_timings {
30 ktime_t map_genpt_ns;
31 ktime_t map_iopt_ns;
32 };
33
34 struct compare_unmap_timings {
35 ktime_t unmap_genpt_ns;
36 ktime_t unmap_iopt_ns;
37 };
38
39 struct compare_timings {
40 struct compare_map_timings map_time;
41 struct compare_unmap_timings unmap_time;
42 };
43
44 #endif
45
46 struct compare_tables {
47 struct kunit *test;
48 struct pt_range ref_range;
49 struct pt_table_p *ref_table;
50 };
51
52 static int __compare_tables(struct pt_range *range, void *arg,
53 unsigned int level, struct pt_table_p *table)
54 {
55 struct pt_state pts = pt_init(range, level, table);
56 struct compare_tables *cmp = arg;
57 struct pt_state ref_pts =
58 pt_init(&cmp->ref_range, level, cmp->ref_table);
59 struct kunit *test = cmp->test;
60 int ret;
61
62 for_each_pt_level_item(&pts) {
63 u64 entry, ref_entry;
64
65 cmp->ref_range.va = range->va;
66 ref_pts.index = pts.index;
67 pt_load_entry(&ref_pts);
68
69 entry = pt_kunit_cmp_mask_entry(&pts);
70 ref_entry = pt_kunit_cmp_mask_entry(&ref_pts);
71
72 /*if (entry != 0 || ref_entry != 0)
73 printk("Check %llx Level %u index %u ptr %px refptr %px: %llx (%llx) %llx (%llx)\n",
74 pts.range->va, pts.level, pts.index,
75 pts.table,
76 ref_pts.table,
77 pts.entry, entry,
78 ref_pts.entry, ref_entry);*/
79
80 KUNIT_ASSERT_EQ(test, pts.type, ref_pts.type);
81 KUNIT_ASSERT_EQ(test, entry, ref_entry);
82 if (entry != ref_entry)
83 return 0;
84
85 if (pts.type == PT_ENTRY_TABLE) {
86 cmp->ref_table = ref_pts.table_lower;
87 ret = pt_descend(&pts, arg, __compare_tables);
88 if (ret)
89 return ret;
90 }
91
92 /* Defeat contiguous entry aggregation */
93 pts.type = PT_ENTRY_EMPTY;
94 }
95
96 return 0;
97 }
98
99 static void compare_tables(struct kunit *test)
100 {
101 struct kunit_iommu_cmp_priv *cmp_priv = test->priv;
102 struct kunit_iommu_priv *priv = &cmp_priv->fmt;
103 struct pt_range range = pt_top_range(priv->common);
104 struct compare_tables cmp = {
105 .test = test,
106 };
107 struct pt_state pts = pt_init_top(&range);
108 struct pt_state ref_pts;
109
110 pt_iommu_setup_ref_table(&cmp_priv->ref_table, cmp_priv->pgtbl_ops);
111 cmp.ref_range =
112 pt_top_range(common_from_iommu(&cmp_priv->ref_table.iommu));
113 ref_pts = pt_init_top(&cmp.ref_range);
114 KUNIT_ASSERT_EQ(test, pts.level, ref_pts.level);
115
116 cmp.ref_table = ref_pts.table;
117 KUNIT_ASSERT_EQ(test, pt_walk_range(&range, __compare_tables, &cmp), 0);
118 }
119
120 static void test_cmp_init(struct kunit *test)
121 {
122 struct kunit_iommu_cmp_priv *cmp_priv = test->priv;
123 struct kunit_iommu_priv *priv = &cmp_priv->fmt;
124 struct io_pgtable_cfg *pgtbl_cfg =
125 &io_pgtable_ops_to_pgtable(cmp_priv->pgtbl_ops)->cfg;
126
127 /* Fixture does the setup */
128 KUNIT_ASSERT_NE(test, priv->info.pgsize_bitmap, 0);
129
130 /* pt_iommu has a superset of page sizes (ARM supports contiguous) */
131 KUNIT_ASSERT_EQ(test,
132 priv->info.pgsize_bitmap & pgtbl_cfg->pgsize_bitmap,
133 pgtbl_cfg->pgsize_bitmap);
134
135 /* Empty compare works */
136 compare_tables(test);
137 }
138
139 static void do_cmp_map(struct kunit *test, pt_vaddr_t va, pt_oaddr_t pa,
140 pt_oaddr_t len, unsigned int prot)
141 {
142 struct kunit_iommu_cmp_priv *cmp_priv = test->priv;
143 struct kunit_iommu_priv *priv = &cmp_priv->fmt;
144 const struct pt_iommu_ops *ops = priv->iommu->ops;
145 size_t mapped;
146 int ret;
147
148 /* This lacks pagination, must call with perfectly aligned everything */
149 if (sizeof(unsigned long) == 8) {
150 KUNIT_ASSERT_EQ(test, va % len, 0);
151 KUNIT_ASSERT_EQ(test, pa % len, 0);
152 }
153
154 mapped = 0;
155 ret = ops->map_pages(priv->iommu, va, pa, len, prot, GFP_KERNEL,
156 &mapped, NULL);
157 KUNIT_ASSERT_EQ(test, ret, 0);
158 KUNIT_ASSERT_EQ(test, mapped, len);
159
160 mapped = 0;
161 ret = cmp_priv->pgtbl_ops->map_pages(cmp_priv->pgtbl_ops, va, pa, len,
162 1, prot, GFP_KERNEL, &mapped);
163 KUNIT_ASSERT_EQ(test, ret, 0);
164 KUNIT_ASSERT_EQ(test, mapped, len);
165 }
166
167 static void do_cmp_unmap(struct kunit *test, pt_vaddr_t va, pt_vaddr_t len)
168 {
169 struct kunit_iommu_cmp_priv *cmp_priv = test->priv;
170 struct kunit_iommu_priv *priv = &cmp_priv->fmt;
171 const struct pt_iommu_ops *ops = priv->iommu->ops;
172 size_t ret;
173
174 KUNIT_ASSERT_EQ(test, va % len, 0);
175
176 ret = ops->unmap_pages(priv->iommu, va, len, NULL);
177 KUNIT_ASSERT_EQ(test, ret, len);
178 ret = cmp_priv->pgtbl_ops->unmap_pages(cmp_priv->pgtbl_ops, va, len, 1,
179 NULL);
180 KUNIT_ASSERT_EQ(test, ret, len);
181 }
182
183 #if IS_ENABLED(CONFIG_IOMMU_PT_KUNIT_BENCHMARK)
184
> 185 #include <linux/timekeeping.h>
186
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2024-08-31 14:28 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-08-31 14:28 [jgunthorpe:iommu_pt 47/47] drivers/iommu/generic_pt/kunit_iommu_cmp.h: linux/timekeeping.h is included more than once kernel test robot
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.