All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: cros-kernel-buildreports@googlegroups.com
Cc: oe-kbuild-all@lists.linux.dev
Subject: [android-common:android16-6.12-lts 1/1] arch/arm64/kvm/iommu.c:153:58: sparse: sparse: Using plain integer as NULL pointer
Date: Tue, 15 Sep 2026 16:35:36 +0800	[thread overview]
Message-ID: <202609151626.e4d1AZ0S-lkp@intel.com> (raw)

tree:   https://android.googlesource.com/kernel/common android16-6.12-lts
head:   57041e4a7e52342473871000827584f966d8cbd3
commit: 9dabecc2a2c31f11239b0853839bfc860de071e0 [1/1] ANDROID: KVM: arm64: iommu: Add memcache for guest pvIOMMU
config: arm64-randconfig-r123-20260910 (https://download.01.org/0day-ci/archive/20260915/202609151626.e4d1AZ0S-lkp@intel.com/config)
compiler: clang version 24.0.0git (https://github.com/llvm/llvm-project d3db069999553568848400c84cbf815c03f5470f)
sparse: v0.6.5-rc1
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260915/202609151626.e4d1AZ0S-lkp@intel.com/reproduce)

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/oe-kbuild-all/202609151626.e4d1AZ0S-lkp@intel.com/

sparse warnings: (new ones prefixed by >>)
>> arch/arm64/kvm/iommu.c:153:58: sparse: sparse: Using plain integer as NULL pointer
   arch/arm64/kvm/iommu.c:162:50: sparse: sparse: Using plain integer as NULL pointer

vim +153 arch/arm64/kvm/iommu.c

    12	
  > 13	struct kvm_iommu_driver *iommu_driver;
    14	extern struct kvm_iommu_ops *kvm_nvhe_sym(kvm_iommu_ops);
    15	
    16	int kvm_iommu_register_driver(struct kvm_iommu_driver *kern_ops)
    17	{
    18		if (WARN_ON(!kern_ops))
    19			return -EINVAL;
    20	
    21		/*
    22		 * Paired with smp_load_acquire(&iommu_driver)
    23		 * Ensure memory stores happening during a driver
    24		 * init are observed before executing kvm iommu callbacks.
    25		 */
    26		return cmpxchg_release(&iommu_driver, NULL, kern_ops) ? -EBUSY : 0;
    27	}
    28	EXPORT_SYMBOL(kvm_iommu_register_driver);
    29	
    30	int kvm_iommu_init_hyp(struct kvm_iommu_ops *hyp_ops,
    31			       struct kvm_hyp_memcache *atomic_mc)
    32	{
    33		if (!hyp_ops)
    34			return -EINVAL;
    35	
    36		return kvm_call_hyp_nvhe(__pkvm_iommu_init, hyp_ops,
    37					 atomic_mc->head, atomic_mc->nr_pages);
    38	}
    39	EXPORT_SYMBOL(kvm_iommu_init_hyp);
    40	
    41	int kvm_iommu_init_driver(void)
    42	{
    43		if (!smp_load_acquire(&iommu_driver) || !iommu_driver->get_iommu_id_by_of) {
    44			kvm_err("pKVM enabled without an IOMMU driver, do not run confidential workloads in virtual machines\n");
    45			return 0;
    46		}
    47	
    48		kvm_hyp_iommu_domains = (void *)__get_free_pages(GFP_KERNEL | __GFP_ZERO,
    49					get_order(KVM_IOMMU_DOMAINS_ROOT_SIZE));
    50		if (!kvm_hyp_iommu_domains)
    51			return -ENOMEM;
    52	
    53		kvm_hyp_iommu_domains = kern_hyp_va(kvm_hyp_iommu_domains);
    54	
    55		return iommu_driver->init_driver();
    56	}
    57	EXPORT_SYMBOL(kvm_iommu_init_driver);
    58	
    59	void kvm_iommu_remove_driver(void)
    60	{
    61		if (smp_load_acquire(&iommu_driver))
    62			iommu_driver->remove_driver();
    63	}
    64	
    65	
    66	pkvm_handle_t kvm_get_iommu_id_by_of(struct device_node *np)
    67	{
    68		if (!iommu_driver)
    69			return 0;
    70	
    71		return iommu_driver->get_iommu_id_by_of(np);
    72	}
    73	
    74	static pkvm_handle_t kvm_get_iommu_id(struct device *dev)
    75	{
    76		return kvm_get_iommu_id_by_of(dev_of_node(dev));
    77	}
    78	
    79	int pkvm_iommu_suspend(struct device *dev)
    80	{
    81		int device_id = kvm_get_iommu_id(dev);
    82	
    83		return kvm_call_hyp_nvhe(__pkvm_host_hvc_pd, device_id, 0);
    84	}
    85	EXPORT_SYMBOL(pkvm_iommu_suspend);
    86	
    87	int pkvm_iommu_resume(struct device *dev)
    88	{
    89		int device_id = kvm_get_iommu_id(dev);
    90	
    91		return kvm_call_hyp_nvhe(__pkvm_host_hvc_pd, device_id, 1);
    92	}
    93	EXPORT_SYMBOL(pkvm_iommu_resume);
    94	
    95	int kvm_iommu_share_hyp_sg(struct kvm_iommu_sg *sg, unsigned int nents)
    96	{
    97		size_t nr_pages = PAGE_ALIGN(sizeof(*sg) * nents) >> PAGE_SHIFT;
    98		phys_addr_t sg_pfn = virt_to_phys(sg) >> PAGE_SHIFT;
    99		int i;
   100		int ret;
   101	
   102		for (i = 0 ; i < nr_pages ; ++i) {
   103			ret = kvm_call_hyp_nvhe(__pkvm_host_share_hyp, sg_pfn + i);
   104			if (ret)
   105				return ret;
   106		}
   107	
   108		return 0;
   109	}
   110	EXPORT_SYMBOL(kvm_iommu_share_hyp_sg);
   111	
   112	int kvm_iommu_unshare_hyp_sg(struct kvm_iommu_sg *sg, unsigned int nents)
   113	{
   114		size_t nr_pages = PAGE_ALIGN(sizeof(*sg) * nents) >> PAGE_SHIFT;
   115		phys_addr_t sg_pfn = virt_to_phys(sg) >> PAGE_SHIFT;
   116		int i;
   117		int ret;
   118	
   119		for (i = 0 ; i < nr_pages ; ++i) {
   120			ret = kvm_call_hyp_nvhe(__pkvm_host_unshare_hyp, sg_pfn + i);
   121			if (ret)
   122				return ret;
   123		}
   124	
   125		return 0;
   126	}
   127	EXPORT_SYMBOL(kvm_iommu_unshare_hyp_sg);
   128	
   129	int kvm_iommu_device_num_ids(struct device *dev)
   130	{
   131		if (iommu_driver->get_device_iommu_num_ids)
   132			return iommu_driver->get_device_iommu_num_ids(dev);
   133		return 0;
   134	}
   135	EXPORT_SYMBOL_GPL(kvm_iommu_device_num_ids);
   136	
   137	int kvm_iommu_device_id(struct device *dev, u32 idx,
   138				pkvm_handle_t *out_iommu, u32 *out_sid)
   139	{
   140		if (iommu_driver->get_device_iommu_id)
   141			return iommu_driver->get_device_iommu_id(dev, idx, out_iommu, out_sid);
   142		return -ENODEV;
   143	}
   144	EXPORT_SYMBOL_GPL(kvm_iommu_device_id);
   145	
   146	int kvm_iommu_guest_alloc_mc(struct kvm_hyp_memcache *mc, u32 pgsize, u32 nr_pages)
   147	{
   148		u8 order = get_order(pgsize);
   149	
   150		/* Driver might have dedicated allocator especially if it needs large pages. */
   151		if (iommu_driver && iommu_driver->guest_alloc && iommu_driver->guest_free)
   152			return __topup_hyp_memcache(mc, nr_pages, iommu_driver->guest_alloc,
 > 153						    kvm_host_pa, 0, order);
   154	
   155		return topup_hyp_memcache(mc, nr_pages, order);
   156	}
   157	

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

             reply	other threads:[~2026-09-15  8:36 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-15  8:35 kernel test robot [this message]
  -- strict thread matches above, loose matches on Subject: below --
2026-09-18  8:17 [android-common:android16-6.12-lts 1/1] arch/arm64/kvm/iommu.c:153:58: sparse: sparse: Using plain integer as NULL pointer kernel test robot

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202609151626.e4d1AZ0S-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=cros-kernel-buildreports@googlegroups.com \
    --cc=oe-kbuild-all@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.