Re: [PATCH V2 1/2] soc: qcom: smem: map only partitions used by local HOST

From: kernel test robot
Date: Thu Jul 08 2021 - 19:19:01 EST


Hi Deepak,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on linus/master]
[also build test WARNING on v5.13 next-20210708]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url: https://github.com/0day-ci/linux/commits/Deepak-Kumar-Singh/smem-partition-remap-and-bound-check-changes/20210709-010025
base: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git e9f1cbc0c4114880090c7a578117d3b9cf184ad4
config: x86_64-randconfig-s021-20210707 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
reproduce:
# apt-get install sparse
# sparse version: v0.6.3-341-g8af24329-dirty
# https://github.com/0day-ci/linux/commit/33e2ecba1aca3061ac33cb9665f417a76902abaa
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Deepak-Kumar-Singh/smem-partition-remap-and-bound-check-changes/20210709-010025
git checkout 33e2ecba1aca3061ac33cb9665f417a76902abaa
# save the attached .config to linux build tree
make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=x86_64

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@xxxxxxxxx>


sparse warnings: (new ones prefixed by >>)
>> drivers/soc/qcom/smem.c:370:14: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct smem_partition_header *phdr @@ got void [noderef] __iomem *virt_base @@
drivers/soc/qcom/smem.c:370:14: sparse: expected struct smem_partition_header *phdr
drivers/soc/qcom/smem.c:370:14: sparse: got void [noderef] __iomem *virt_base
drivers/soc/qcom/smem.c:421:16: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct smem_header *header @@ got void [noderef] __iomem *virt_base @@
drivers/soc/qcom/smem.c:421:16: sparse: expected struct smem_header *header
drivers/soc/qcom/smem.c:421:16: sparse: got void [noderef] __iomem *virt_base
drivers/soc/qcom/smem.c:506:16: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct smem_header *header @@ got void [noderef] __iomem *virt_base @@
drivers/soc/qcom/smem.c:506:16: sparse: expected struct smem_header *header
drivers/soc/qcom/smem.c:506:16: sparse: got void [noderef] __iomem *virt_base
drivers/soc/qcom/smem.c:519:50: sparse: sparse: incorrect type in return expression (different address spaces) @@ expected void * @@ got void [noderef] __iomem * @@
drivers/soc/qcom/smem.c:519:50: sparse: expected void *
drivers/soc/qcom/smem.c:519:50: sparse: got void [noderef] __iomem *
drivers/soc/qcom/smem.c:534:14: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct smem_partition_header *phdr @@ got void [noderef] __iomem *virt_base @@
drivers/soc/qcom/smem.c:534:14: sparse: expected struct smem_partition_header *phdr
drivers/soc/qcom/smem.c:534:14: sparse: got void [noderef] __iomem *virt_base
drivers/soc/qcom/smem.c:647:22: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct smem_partition_header *phdr @@ got void [noderef] __iomem *virt_base @@
drivers/soc/qcom/smem.c:647:22: sparse: expected struct smem_partition_header *phdr
drivers/soc/qcom/smem.c:647:22: sparse: got void [noderef] __iomem *virt_base
drivers/soc/qcom/smem.c:652:22: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct smem_partition_header *phdr @@ got void [noderef] __iomem *virt_base @@
drivers/soc/qcom/smem.c:652:22: sparse: expected struct smem_partition_header *phdr
drivers/soc/qcom/smem.c:652:22: sparse: got void [noderef] __iomem *virt_base
drivers/soc/qcom/smem.c:656:24: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct smem_header *header @@ got void [noderef] __iomem *virt_base @@
drivers/soc/qcom/smem.c:656:24: sparse: expected struct smem_header *header
drivers/soc/qcom/smem.c:656:24: sparse: got void [noderef] __iomem *virt_base
drivers/soc/qcom/smem.c:666:30: sparse: sparse: incompatible types in comparison expression (different address spaces):
drivers/soc/qcom/smem.c:666:30: sparse: void *
drivers/soc/qcom/smem.c:666:30: sparse: void [noderef] __iomem *
drivers/soc/qcom/smem.c:687:36: sparse: sparse: subtraction of different types can't work (different address spaces)
drivers/soc/qcom/smem.c:696:28: sparse: sparse: subtraction of different types can't work (different address spaces)
drivers/soc/qcom/smem.c:705:36: sparse: sparse: subtraction of different types can't work (different address spaces)
drivers/soc/qcom/smem.c:720:16: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct smem_header *header @@ got void [noderef] __iomem *virt_base @@
drivers/soc/qcom/smem.c:720:16: sparse: expected struct smem_header *header
drivers/soc/qcom/smem.c:720:16: sparse: got void [noderef] __iomem *virt_base
drivers/soc/qcom/smem.c:753:57: sparse: sparse: restricted __le32 degrades to integer
drivers/soc/qcom/smem.c:774:16: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct smem_partition_header *header @@ got void [noderef] __iomem * @@
drivers/soc/qcom/smem.c:774:16: sparse: expected struct smem_partition_header *header
drivers/soc/qcom/smem.c:774:16: sparse: got void [noderef] __iomem *
drivers/soc/qcom/smem.c:971:22: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct smem_ptable *ptable @@ got void [noderef] __iomem * @@
drivers/soc/qcom/smem.c:971:22: sparse: expected struct smem_ptable *ptable
drivers/soc/qcom/smem.c:971:22: sparse: got void [noderef] __iomem *
drivers/soc/qcom/smem.c:986:16: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct smem_header *header @@ got void [noderef] __iomem *virt_base @@
drivers/soc/qcom/smem.c:986:16: sparse: expected struct smem_header *header
drivers/soc/qcom/smem.c:986:16: sparse: got void [noderef] __iomem *virt_base
>> drivers/soc/qcom/smem.c:987:14: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] size @@ got restricted __le32 [usertype] available @@
drivers/soc/qcom/smem.c:987:14: sparse: expected unsigned int [usertype] size
drivers/soc/qcom/smem.c:987:14: sparse: got restricted __le32 [usertype] available
drivers/soc/qcom/smem.c:1028:16: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct smem_header *header @@ got void [noderef] __iomem *virt_base @@
drivers/soc/qcom/smem.c:1028:16: sparse: expected struct smem_header *header
drivers/soc/qcom/smem.c:1028:16: sparse: got void [noderef] __iomem *virt_base

vim +370 drivers/soc/qcom/smem.c

359
360 static int qcom_smem_alloc_private(struct qcom_smem *smem,
361 struct smem_partition *part,
362 unsigned item,
363 size_t size)
364 {
365 struct smem_private_entry *hdr, *end;
366 struct smem_partition_header *phdr;
367 size_t alloc_size;
368 void *cached;
369
> 370 phdr = part->virt_base;
371
372 hdr = phdr_to_first_uncached_entry(phdr);
373 end = phdr_to_last_uncached_entry(phdr);
374 cached = phdr_to_last_cached_entry(phdr);
375
376 while (hdr < end) {
377 if (hdr->canary != SMEM_PRIVATE_CANARY)
378 goto bad_canary;
379 if (le16_to_cpu(hdr->item) == item)
380 return -EEXIST;
381
382 hdr = uncached_entry_next(hdr);
383 }
384
385 /* Check that we don't grow into the cached region */
386 alloc_size = sizeof(*hdr) + ALIGN(size, 8);
387 if ((void *)hdr + alloc_size > cached) {
388 dev_err(smem->dev, "Out of memory\n");
389 return -ENOSPC;
390 }
391
392 hdr->canary = SMEM_PRIVATE_CANARY;
393 hdr->item = cpu_to_le16(item);
394 hdr->size = cpu_to_le32(ALIGN(size, 8));
395 hdr->padding_data = cpu_to_le16(le32_to_cpu(hdr->size) - size);
396 hdr->padding_hdr = 0;
397
398 /*
399 * Ensure the header is written before we advance the free offset, so
400 * that remote processors that does not take the remote spinlock still
401 * gets a consistent view of the linked list.
402 */
403 wmb();
404 le32_add_cpu(&phdr->offset_free_uncached, alloc_size);
405
406 return 0;
407 bad_canary:
408 dev_err(smem->dev, "Found invalid canary in hosts %hu:%hu partition\n",
409 le16_to_cpu(phdr->host0), le16_to_cpu(phdr->host1));
410
411 return -EINVAL;
412 }
413

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx

Attachment: .config.gz
Description: application/gzip