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
next 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.