2023-07-25 15:00:52

by Binglei Wang

[permalink] [raw]
Subject: [PATCH v2] cma: check for memory region overlapping

From: l3b2w1 <[email protected]>

Add a overlapping check in the program flow of paring dts.
Check if cma area overlaps with memblock-reserved areas
(kenrel code area for example)before calling
early_init_fdt_scan_reserved_mem.

Signed-off-by: l3b2w1 <[email protected]>
---

Notes:
v2: delete the logic code for handling return EBUSY.

v1: return EBUSY when detect overlapping and handle the return case.

kernel/dma/contiguous.c | 5 +++++
1 file changed, 5 insertions(+)

diff --git a/kernel/dma/contiguous.c b/kernel/dma/contiguous.c
index 6ea80ae42..20ebbcefd 100644
--- a/kernel/dma/contiguous.c
+++ b/kernel/dma/contiguous.c
@@ -410,6 +410,11 @@ static int __init rmem_cma_setup(struct reserved_mem *rmem)
return -EBUSY;
}

+ if (memblock_is_region_reserved(rmem->base, rmem->size)) {
+ pr_info("Reserved memory: overlap with other memblock reserved region\n",
+ return -EBUSY;
+ }
+
if (!of_get_flat_dt_prop(node, "reusable", NULL) ||
of_get_flat_dt_prop(node, "no-map", NULL))
return -EINVAL;
--
2.39.0



2023-07-25 18:29:48

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH v2] cma: check for memory region overlapping

Hi Binglei,

kernel test robot noticed the following build errors:

[auto build test ERROR on linus/master]
[also build test ERROR on v6.5-rc3 next-20230725]
[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#_base_tree_information]

url: https://github.com/intel-lab-lkp/linux/commits/Binglei-Wang/cma-check-for-memory-region-overlapping/20230725-222426
base: linus/master
patch link: https://lore.kernel.org/r/20230725141602.7759-1-l3b2w1%40gmail.com
patch subject: [PATCH v2] cma: check for memory region overlapping
config: loongarch-allyesconfig (https://download.01.org/0day-ci/archive/20230726/[email protected]/config)
compiler: loongarch64-linux-gcc (GCC) 12.3.0
reproduce: (https://download.01.org/0day-ci/archive/20230726/[email protected]/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 <[email protected]>
| Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/

All errors (new ones prefixed by >>):

In file included from include/linux/dma-map-ops.h:9,
from kernel/dma/contiguous.c:51:
include/linux/dma-mapping.h: In function 'rmem_cma_setup':
>> include/linux/dma-mapping.h:336:8: error: unterminated argument list invoking macro "pr_info"
336 | return dma_map_page_attrs(dev, virt_to_page(ptr), offset_in_page(ptr),
| ^ ~~~~~~~~~~~~~~~~~
>> kernel/dma/contiguous.c:414:17: error: 'pr_info' undeclared (first use in this function); did you mean 'qc_info'?
414 | pr_info("Reserved memory: overlap with other memblock reserved region\n",
| ^~~~~~~
| qc_info
kernel/dma/contiguous.c:414:17: note: each undeclared identifier is reported only once for each function it appears in
>> kernel/dma/contiguous.c:414:24: error: expected ';' at end of input
414 | pr_info("Reserved memory: overlap with other memblock reserved region\n",
| ^
| ;
......
>> kernel/dma/contiguous.c:414:17: error: expected declaration or statement at end of input
414 | pr_info("Reserved memory: overlap with other memblock reserved region\n",
| ^~~~~~~
>> kernel/dma/contiguous.c:414:17: error: expected declaration or statement at end of input
kernel/dma/contiguous.c:405:13: warning: unused variable 'err' [-Wunused-variable]
405 | int err;
| ^~~
kernel/dma/contiguous.c:404:21: warning: unused variable 'cma' [-Wunused-variable]
404 | struct cma *cma;
| ^~~
kernel/dma/contiguous.c: At top level:
kernel/dma/contiguous.c:400:19: warning: 'rmem_cma_setup' defined but not used [-Wunused-function]
400 | static int __init rmem_cma_setup(struct reserved_mem *rmem)
| ^~~~~~~~~~~~~~
kernel/dma/contiguous.c:395:38: warning: 'rmem_cma_ops' defined but not used [-Wunused-const-variable=]
395 | static const struct reserved_mem_ops rmem_cma_ops = {
| ^~~~~~~~~~~~


vim +/pr_info +336 include/linux/dma-mapping.h

0d71675f87dc40 Christoph Hellwig 2020-09-01 327
2e05ea5cdc1ac5 Christoph Hellwig 2018-12-25 328 static inline dma_addr_t dma_map_single_attrs(struct device *dev, void *ptr,
2e05ea5cdc1ac5 Christoph Hellwig 2018-12-25 329 size_t size, enum dma_data_direction dir, unsigned long attrs)
2e05ea5cdc1ac5 Christoph Hellwig 2018-12-25 330 {
4544b9f25e70ea Kees Cook 2019-10-29 331 /* DMA must never operate on areas that might be remapped. */
4544b9f25e70ea Kees Cook 2019-10-29 332 if (dev_WARN_ONCE(dev, is_vmalloc_addr(ptr),
4544b9f25e70ea Kees Cook 2019-10-29 333 "rejecting DMA map of vmalloc memory\n"))
4544b9f25e70ea Kees Cook 2019-10-29 334 return DMA_MAPPING_ERROR;
2e05ea5cdc1ac5 Christoph Hellwig 2018-12-25 335 debug_dma_map_single(dev, ptr, size);
2e05ea5cdc1ac5 Christoph Hellwig 2018-12-25 @336 return dma_map_page_attrs(dev, virt_to_page(ptr), offset_in_page(ptr),
2e05ea5cdc1ac5 Christoph Hellwig 2018-12-25 337 size, dir, attrs);
2e05ea5cdc1ac5 Christoph Hellwig 2018-12-25 338 }
2e05ea5cdc1ac5 Christoph Hellwig 2018-12-25 339

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

2023-07-25 18:32:59

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH v2] cma: check for memory region overlapping

Hi Binglei,

kernel test robot noticed the following build errors:

[auto build test ERROR on linus/master]
[also build test ERROR on v6.5-rc3 next-20230725]
[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#_base_tree_information]

url: https://github.com/intel-lab-lkp/linux/commits/Binglei-Wang/cma-check-for-memory-region-overlapping/20230725-222426
base: linus/master
patch link: https://lore.kernel.org/r/20230725141602.7759-1-l3b2w1%40gmail.com
patch subject: [PATCH v2] cma: check for memory region overlapping
config: riscv-randconfig-r042-20230725 (https://download.01.org/0day-ci/archive/20230726/[email protected]/config)
compiler: riscv32-linux-gcc (GCC) 12.3.0
reproduce: (https://download.01.org/0day-ci/archive/20230726/[email protected]/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 <[email protected]>
| Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/

All errors (new ones prefixed by >>):

In file included from arch/riscv/include/asm/elf.h:12,
from include/linux/elf.h:6,
from include/linux/module.h:19,
from include/linux/device/driver.h:21,
from include/linux/device.h:32,
from include/linux/dma-mapping.h:8,
from include/linux/dma-map-ops.h:9,
from kernel/dma/contiguous.c:51:
include/linux/compat.h: In function 'rmem_cma_setup':
>> include/linux/compat.h:510:32: error: unterminated argument list invoking macro "pr_info"
510 | unsafe_get_user(hi, &__c->sig[2], label); \
| ^
kernel/dma/contiguous.c:414:17: error: 'pr_info' undeclared (first use in this function); did you mean 'qc_info'?
414 | pr_info("Reserved memory: overlap with other memblock reserved region\n",
| ^~~~~~~
| qc_info
kernel/dma/contiguous.c:414:17: note: each undeclared identifier is reported only once for each function it appears in
kernel/dma/contiguous.c:414:24: error: expected ';' at end of input
414 | pr_info("Reserved memory: overlap with other memblock reserved region\n",
| ^
| ;
......
kernel/dma/contiguous.c:414:17: error: expected declaration or statement at end of input
414 | pr_info("Reserved memory: overlap with other memblock reserved region\n",
| ^~~~~~~
kernel/dma/contiguous.c:414:17: error: expected declaration or statement at end of input
kernel/dma/contiguous.c:405:13: warning: unused variable 'err' [-Wunused-variable]
405 | int err;
| ^~~
kernel/dma/contiguous.c:404:21: warning: unused variable 'cma' [-Wunused-variable]
404 | struct cma *cma;
| ^~~
kernel/dma/contiguous.c: At top level:
kernel/dma/contiguous.c:400:19: warning: 'rmem_cma_setup' defined but not used [-Wunused-function]
400 | static int __init rmem_cma_setup(struct reserved_mem *rmem)
| ^~~~~~~~~~~~~~
kernel/dma/contiguous.c:395:38: warning: 'rmem_cma_ops' defined but not used [-Wunused-const-variable=]
395 | static const struct reserved_mem_ops rmem_cma_ops = {
| ^~~~~~~~~~~~


vim +/pr_info +510 include/linux/compat.h

fb05121fd6a20f0 Christophe Leroy 2021-03-19 491
fb05121fd6a20f0 Christophe Leroy 2021-03-19 492 #define unsafe_get_compat_sigset(set, compat, label) do { \
fb05121fd6a20f0 Christophe Leroy 2021-03-19 493 const compat_sigset_t __user *__c = compat; \
fb05121fd6a20f0 Christophe Leroy 2021-03-19 494 compat_sigset_word hi, lo; \
fb05121fd6a20f0 Christophe Leroy 2021-03-19 495 sigset_t *__s = set; \
fb05121fd6a20f0 Christophe Leroy 2021-03-19 496 \
fb05121fd6a20f0 Christophe Leroy 2021-03-19 497 switch (_NSIG_WORDS) { \
fb05121fd6a20f0 Christophe Leroy 2021-03-19 498 case 4: \
fb05121fd6a20f0 Christophe Leroy 2021-03-19 499 unsafe_get_user(lo, &__c->sig[7], label); \
fb05121fd6a20f0 Christophe Leroy 2021-03-19 500 unsafe_get_user(hi, &__c->sig[6], label); \
fb05121fd6a20f0 Christophe Leroy 2021-03-19 501 __s->sig[3] = hi | (((long)lo) << 32); \
fb05121fd6a20f0 Christophe Leroy 2021-03-19 502 fallthrough; \
fb05121fd6a20f0 Christophe Leroy 2021-03-19 503 case 3: \
fb05121fd6a20f0 Christophe Leroy 2021-03-19 504 unsafe_get_user(lo, &__c->sig[5], label); \
fb05121fd6a20f0 Christophe Leroy 2021-03-19 505 unsafe_get_user(hi, &__c->sig[4], label); \
fb05121fd6a20f0 Christophe Leroy 2021-03-19 506 __s->sig[2] = hi | (((long)lo) << 32); \
fb05121fd6a20f0 Christophe Leroy 2021-03-19 507 fallthrough; \
fb05121fd6a20f0 Christophe Leroy 2021-03-19 508 case 2: \
fb05121fd6a20f0 Christophe Leroy 2021-03-19 509 unsafe_get_user(lo, &__c->sig[3], label); \
fb05121fd6a20f0 Christophe Leroy 2021-03-19 @510 unsafe_get_user(hi, &__c->sig[2], label); \
fb05121fd6a20f0 Christophe Leroy 2021-03-19 511 __s->sig[1] = hi | (((long)lo) << 32); \
fb05121fd6a20f0 Christophe Leroy 2021-03-19 512 fallthrough; \
fb05121fd6a20f0 Christophe Leroy 2021-03-19 513 case 1: \
fb05121fd6a20f0 Christophe Leroy 2021-03-19 514 unsafe_get_user(lo, &__c->sig[1], label); \
fb05121fd6a20f0 Christophe Leroy 2021-03-19 515 unsafe_get_user(hi, &__c->sig[0], label); \
fb05121fd6a20f0 Christophe Leroy 2021-03-19 516 __s->sig[0] = hi | (((long)lo) << 32); \
fb05121fd6a20f0 Christophe Leroy 2021-03-19 517 } \
fb05121fd6a20f0 Christophe Leroy 2021-03-19 518 } while (0)
14026b94ccfe626 Christophe Leroy 2020-08-18 519 #else
14026b94ccfe626 Christophe Leroy 2020-08-18 520 #define unsafe_put_compat_sigset(compat, set, label) do { \
14026b94ccfe626 Christophe Leroy 2020-08-18 521 compat_sigset_t __user *__c = compat; \
14026b94ccfe626 Christophe Leroy 2020-08-18 522 const sigset_t *__s = set; \
14026b94ccfe626 Christophe Leroy 2020-08-18 523 \
14026b94ccfe626 Christophe Leroy 2020-08-18 524 unsafe_copy_to_user(__c, __s, sizeof(*__c), label); \
14026b94ccfe626 Christophe Leroy 2020-08-18 525 } while (0)
fb05121fd6a20f0 Christophe Leroy 2021-03-19 526

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

2023-07-25 21:46:41

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH v2] cma: check for memory region overlapping

Hi Binglei,

kernel test robot noticed the following build warnings:

[auto build test WARNING on linus/master]
[also build test WARNING on v6.5-rc3 next-20230725]
[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#_base_tree_information]

url: https://github.com/intel-lab-lkp/linux/commits/Binglei-Wang/cma-check-for-memory-region-overlapping/20230725-222426
base: linus/master
patch link: https://lore.kernel.org/r/20230725141602.7759-1-l3b2w1%40gmail.com
patch subject: [PATCH v2] cma: check for memory region overlapping
config: i386-allyesconfig (https://download.01.org/0day-ci/archive/20230726/[email protected]/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce: (https://download.01.org/0day-ci/archive/20230726/[email protected]/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 <[email protected]>
| Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/

All warnings (new ones prefixed by >>):

In file included from include/linux/elf.h:6,
from include/linux/module.h:19,
from include/linux/device/driver.h:21,
from include/linux/device.h:32,
from include/linux/dma-mapping.h:8,
from include/linux/dma-map-ops.h:9,
from kernel/dma/contiguous.c:51:
arch/x86/include/asm/elf.h: In function 'rmem_cma_setup':
arch/x86/include/asm/elf.h:204:29: error: unterminated argument list invoking macro "pr_info"
204 | (pr_reg)[11] = (regs)->cx; \
| ^
kernel/dma/contiguous.c:414:17: error: 'pr_info' undeclared (first use in this function); did you mean 'pv_info'?
414 | pr_info("Reserved memory: overlap with other memblock reserved region\n",
| ^~~~~~~
| pv_info
kernel/dma/contiguous.c:414:17: note: each undeclared identifier is reported only once for each function it appears in
kernel/dma/contiguous.c:414:24: error: expected ';' at end of input
414 | pr_info("Reserved memory: overlap with other memblock reserved region\n",
| ^
| ;
......
kernel/dma/contiguous.c:414:17: error: expected declaration or statement at end of input
414 | pr_info("Reserved memory: overlap with other memblock reserved region\n",
| ^~~~~~~
kernel/dma/contiguous.c:414:17: error: expected declaration or statement at end of input
>> kernel/dma/contiguous.c:405:13: warning: unused variable 'err' [-Wunused-variable]
405 | int err;
| ^~~
>> kernel/dma/contiguous.c:404:21: warning: unused variable 'cma' [-Wunused-variable]
404 | struct cma *cma;
| ^~~
kernel/dma/contiguous.c: At top level:
>> kernel/dma/contiguous.c:400:19: warning: 'rmem_cma_setup' defined but not used [-Wunused-function]
400 | static int __init rmem_cma_setup(struct reserved_mem *rmem)
| ^~~~~~~~~~~~~~
>> kernel/dma/contiguous.c:395:38: warning: 'rmem_cma_ops' defined but not used [-Wunused-const-variable=]
395 | static const struct reserved_mem_ops rmem_cma_ops = {
| ^~~~~~~~~~~~


vim +/err +405 kernel/dma/contiguous.c

de9e14eebf33a6 drivers/base/dma-contiguous.c Marek Szyprowski 2014-10-13 394
de9e14eebf33a6 drivers/base/dma-contiguous.c Marek Szyprowski 2014-10-13 @395 static const struct reserved_mem_ops rmem_cma_ops = {
de9e14eebf33a6 drivers/base/dma-contiguous.c Marek Szyprowski 2014-10-13 396 .device_init = rmem_cma_device_init,
de9e14eebf33a6 drivers/base/dma-contiguous.c Marek Szyprowski 2014-10-13 397 .device_release = rmem_cma_device_release,
de9e14eebf33a6 drivers/base/dma-contiguous.c Marek Szyprowski 2014-10-13 398 };
de9e14eebf33a6 drivers/base/dma-contiguous.c Marek Szyprowski 2014-10-13 399
de9e14eebf33a6 drivers/base/dma-contiguous.c Marek Szyprowski 2014-10-13 @400 static int __init rmem_cma_setup(struct reserved_mem *rmem)
de9e14eebf33a6 drivers/base/dma-contiguous.c Marek Szyprowski 2014-10-13 401 {
de9e14eebf33a6 drivers/base/dma-contiguous.c Marek Szyprowski 2014-10-13 402 unsigned long node = rmem->fdt_node;
8c8c5a4994a306 kernel/dma/contiguous.c Nicolas Saenz Julienne 2020-01-10 403 bool default_cma = of_get_flat_dt_prop(node, "linux,cma-default", NULL);
de9e14eebf33a6 drivers/base/dma-contiguous.c Marek Szyprowski 2014-10-13 @404 struct cma *cma;
de9e14eebf33a6 drivers/base/dma-contiguous.c Marek Szyprowski 2014-10-13 @405 int err;

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