From: kernel test robot <lkp@intel.com>
To: kernel@openeuler.org, Yang Yingliang <yangyingliang@huawei.com>
Cc: oe-kbuild-all@lists.linux.dev
Subject: [openeuler:openEuler-1.0-LTS 1932/1932] drivers/char/svm.c:366:43: sparse: sparse: incorrect type in argument 1 (different address spaces)
Date: Thu, 6 Nov 2025 07:49:51 +0800 [thread overview]
Message-ID: <202511060739.4h8XJsMM-lkp@intel.com> (raw)
tree: https://gitee.com/openeuler/kernel.git openEuler-1.0-LTS
head: 27e321784c005c852ca4b3a2d146547deac0698f
commit: 51d0e1a742714b2599d54fd92a71bd2998b01084 [1932/1932] support multiple node for getting phys interface
config: arm64-randconfig-r132-20251106 (https://download.01.org/0day-ci/archive/20251106/202511060739.4h8XJsMM-lkp@intel.com/config)
compiler: aarch64-linux-gcc (GCC) 11.5.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20251106/202511060739.4h8XJsMM-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/202511060739.4h8XJsMM-lkp@intel.com/
sparse warnings: (new ones prefixed by >>)
drivers/char/svm.c:248:20: sparse: sparse: symbol 'svm_find_mem_reg_node' was not declared. Should it be static?
drivers/char/svm.c:325:14: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct svm_va2pa_slot *slot @@ got void [noderef] <asn:2> * @@
drivers/char/svm.c:325:14: sparse: expected struct svm_va2pa_slot *slot
drivers/char/svm.c:325:14: sparse: got void [noderef] <asn:2> *
>> drivers/char/svm.c:366:43: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void volatile [noderef] <asn:2> *addr @@ got struct svm_va2pa_slot *slots @@
drivers/char/svm.c:366:43: sparse: expected void volatile [noderef] <asn:2> *addr
drivers/char/svm.c:366:43: sparse: got struct svm_va2pa_slot *slots
drivers/char/svm.c:449:6: sparse: sparse: symbol 'sysrq_sched_debug_show_export' was not declared. Should it be static?
drivers/char/svm.c:1272:35: sparse: sparse: Using plain integer as NULL pointer
drivers/char/svm.c:248:21: warning: no previous prototype for 'svm_find_mem_reg_node' [-Wmissing-prototypes]
248 | struct device_node *svm_find_mem_reg_node(struct device *dev, const char *compat)
| ^~~~~~~~~~~~~~~~~~~~~
drivers/char/svm.c:449:6: warning: no previous prototype for 'sysrq_sched_debug_show_export' [-Wmissing-prototypes]
449 | void sysrq_sched_debug_show_export(void)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/char/svm.c:1476:5: warning: no previous prototype for 'svm_get_pasid' [-Wmissing-prototypes]
1476 | int svm_get_pasid(pid_t vpid, int dev_id __maybe_unused)
| ^~~~~~~~~~~~~
drivers/char/svm.c:2269:36: warning: 'svm_acpi_match' defined but not used [-Wunused-const-variable=]
2269 | static const struct acpi_device_id svm_acpi_match[] = {
| ^~~~~~~~~~~~~~
In file included from arch/arm64/include/asm/atomic.h:34,
from include/linux/atomic.h:7,
from include/asm-generic/bitops/atomic.h:5,
from arch/arm64/include/asm/bitops.h:37,
from include/linux/bitops.h:19,
from include/linux/kernel.h:11,
from include/asm-generic/bug.h:18,
from arch/arm64/include/asm/bug.h:37,
from arch/arm64/include/asm/memory.h:27,
from arch/arm64/include/asm/esr.h:21,
from drivers/char/svm.c:10:
drivers/char/svm.c: In function 'svm_proc_load_flag':
arch/arm64/include/asm/atomic_lse.h:492:9: warning: array subscript 'long unsigned int[0]' is partly outside array bounds of 'atomic_t[1]' [-Warray-bounds]
492 | asm volatile( 37- | ^~~
arch/arm64/include/asm/atomic_lse.h:523:1: note: in expansion of macro '__CMPXCHG_CASE'
523 | __CMPXCHG_CASE(w, , mb_4, al, "memory")
| ^~~~~~~~~~~~~~
drivers/char/svm.c:1796:25: note: while referencing 'l2buf_load_flag'
1796 | static atomic_t l2buf_load_flag = ATOMIC_INIT(0);
| ^~~~~~~~~~~~~~~
In file included from arch/arm64/include/asm/atomic.h:34,
from include/linux/atomic.h:7,
from include/asm-generic/bitops/atomic.h:5,
from arch/arm64/include/asm/bitops.h:37,
from include/linux/bitops.h:19,
from include/linux/kernel.h:11,
from include/asm-generic/bug.h:18,
from arch/arm64/include/asm/bug.h:37,
from arch/arm64/include/asm/memory.h:27,
from arch/arm64/include/asm/esr.h:21,
from drivers/char/svm.c:10:
arch/arm64/include/asm/atomic_lse.h:492:9: warning: array subscript 'long unsigned int[0]' is partly outside array bounds of 'atomic_t[1]' [-Warray-bounds]
492 | asm volatile( 57- | ^~~
arch/arm64/include/asm/atomic_lse.h:523:1: note: in expansion of macro '__CMPXCHG_CASE'
523 | __CMPXCHG_CASE(w, , mb_4, al, "memory")
| ^~~~~~~~~~~~~~
drivers/char/svm.c:1796:25: note: while referencing 'l2buf_load_flag'
1796 | static atomic_t l2buf_load_flag = ATOMIC_INIT(0);
| ^~~~~~~~~~~~~~~
vim +366 drivers/char/svm.c
247
> 248 struct device_node *svm_find_mem_reg_node(struct device *dev, const char *compat)
249 {
250 int index = 0;
251 struct device_node *tmp = NULL;
252 struct device_node *np = dev->of_node;
253
254 for (; ; index++) {
255 tmp = of_parse_phandle(np, "memory-region", index);
256 if (!tmp)
257 break;
258
259 if (of_device_is_compatible(tmp, compat))
260 return tmp;
261
262 of_node_put(tmp);
263 }
264
265 return NULL;
266 }
267
268 static int svm_parse_trunk_memory(struct device *dev)
269 {
270 int err, count;
271 struct resource r;
272 struct device_node *trunk = NULL;
273
274 trunk = svm_find_mem_reg_node(dev, SVM_MEM_REG);
275 if (!trunk) {
276 dev_err(dev, "Didn't find reserved memory\n");
277 return -EINVAL;
278 }
279
280 for (count = 0; count < SVM_VA2PA_TRUNK_COUNT_MAX; count++) {
281 err = of_address_to_resource(trunk, count, &r);
282 if (err)
283 break;
284
285 va2pa_trunk[count].base = r.start;
286 va2pa_trunk[count].size = resource_size(&r);
287 }
288
289 if (!count) {
290 dev_err(dev, "Couldn't address to resource for reserved memory\n");
291 return -ENODEV;
292 }
293
294 return 0;
295 }
296
297 static int __svm_setup_trunk(struct device *dev, struct svm_va2pa_trunk *trunk)
298 {
299 int slot_total;
300 unsigned long *bitmap = NULL;
301 struct svm_va2pa_slot *slot = NULL;
302 phys_addr_t base = trunk->base;
303 unsigned long size = trunk->size;
304
305 if (!IS_ALIGNED(base, SVM_VA2PA_MEMORY_ALIGN)) {
306 dev_err(dev, "Didn't aligned to %u\n", SVM_VA2PA_MEMORY_ALIGN);
307 return -EINVAL;
308 }
309
310 if ((size == 0) || (size > SVM_VA2PA_TRUNK_SIZE_MAX)) {
311 dev_err(dev, "Size of reserved memory is not right\n");
312 return -EINVAL;
313 }
314
315 slot_total = size / SVM_VA2PA_SLOT_SIZE;
316 if (slot_total < BITS_PER_LONG)
317 return -EINVAL;
318
319 bitmap = kvcalloc(slot_total / BITS_PER_LONG, sizeof(unsigned long), GFP_KERNEL);
320 if (!bitmap) {
321 dev_err(dev, "alloc memory failed\n");
322 return -ENOMEM;
323 }
324
325 slot = ioremap(base, size);
326 if (!slot) {
327 kvfree(bitmap);
328 dev_err(dev, "Ioremap trunk failed\n");
329 return -ENXIO;
330 }
331
332 trunk->slots = slot;
333 trunk->slot_used = 0;
334 trunk->slot_total = slot_total;
335 trunk->bitmap = bitmap;
336 mutex_init(&trunk->mutex);
337
338 return 0;
339 }
340
341 static int svm_setup_trunk(struct device *dev)
342 {
343 int err = 0;
344 int count;
345
346 for (count = 0; count < SVM_VA2PA_TRUNK_COUNT_MAX; count++) {
347 if (!va2pa_trunk[count].base)
348 break;
349
350 err = __svm_setup_trunk(dev, &va2pa_trunk[count]);
351 if (err)
352 break;
353 }
354
355 return err;
356 }
357
358 static void svm_remove_trunk(struct device *dev)
359 {
360 int count;
361
362 for (count = 0; count < SVM_VA2PA_TRUNK_COUNT_MAX; count++) {
363 if (!va2pa_trunk[count].base)
364 break;
365
> 366 iounmap(va2pa_trunk[count].slots);
367 kvfree(va2pa_trunk[count].bitmap);
368 va2pa_trunk[count].slots = NULL;
369 va2pa_trunk[count].bitmap = NULL;
370 }
371 }
372
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
reply other threads:[~2025-11-05 23:50 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
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=202511060739.4h8XJsMM-lkp@intel.com \
--to=lkp@intel.com \
--cc=kernel@openeuler.org \
--cc=oe-kbuild-all@lists.linux.dev \
--cc=yangyingliang@huawei.com \
/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.