All of lore.kernel.org
 help / color / mirror / Atom feed
* [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.