* [PATCH 1/2] mm: remove arguments of show_mem()
@ 2023-06-29 10:43 Kefeng Wang
2023-06-29 10:43 ` [PATCH 2/2] mm: make show_free_areas() static Kefeng Wang
2023-06-29 15:17 ` [PATCH 1/2] mm: remove arguments of show_mem() Matthew Wilcox
0 siblings, 2 replies; 7+ messages in thread
From: Kefeng Wang @ 2023-06-29 10:43 UTC (permalink / raw)
To: Andrew Morton
Cc: linux-kernel, linux-mm, linuxppc-dev, Greg Kroah-Hartman,
Michael Ellerman, Nicholas Piggin, Christophe Leroy, Kefeng Wang
Directly call __show_mem(0, NULL, MAX_NR_ZONES - 1) in show_mem()
to remove the arguments of show_mem().
Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com>
---
arch/powerpc/xmon/xmon.c | 2 +-
drivers/tty/sysrq.c | 2 +-
drivers/tty/vt/keyboard.c | 2 +-
include/linux/mm.h | 4 ++--
init/initramfs.c | 2 +-
kernel/panic.c | 2 +-
6 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c
index fae747cc57d2..ee17270d35d0 100644
--- a/arch/powerpc/xmon/xmon.c
+++ b/arch/powerpc/xmon/xmon.c
@@ -1084,7 +1084,7 @@ cmds(struct pt_regs *excp)
memzcan();
break;
case 'i':
- show_mem(0, NULL);
+ show_mem();
break;
default:
termch = cmd;
diff --git a/drivers/tty/sysrq.c b/drivers/tty/sysrq.c
index b6e70c5cfa17..e1df63a88aac 100644
--- a/drivers/tty/sysrq.c
+++ b/drivers/tty/sysrq.c
@@ -342,7 +342,7 @@ static const struct sysrq_key_op sysrq_ftrace_dump_op = {
static void sysrq_handle_showmem(int key)
{
- show_mem(0, NULL);
+ show_mem();
}
static const struct sysrq_key_op sysrq_showmem_op = {
.handler = sysrq_handle_showmem,
diff --git a/drivers/tty/vt/keyboard.c b/drivers/tty/vt/keyboard.c
index be8313cdbac3..358f216c6cd6 100644
--- a/drivers/tty/vt/keyboard.c
+++ b/drivers/tty/vt/keyboard.c
@@ -606,7 +606,7 @@ static void fn_scroll_back(struct vc_data *vc)
static void fn_show_mem(struct vc_data *vc)
{
- show_mem(0, NULL);
+ show_mem();
}
static void fn_show_state(struct vc_data *vc)
diff --git a/include/linux/mm.h b/include/linux/mm.h
index eef34f6a0351..ddb140e14f3a 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -3047,9 +3047,9 @@ extern void mem_init(void);
extern void __init mmap_init(void);
extern void __show_mem(unsigned int flags, nodemask_t *nodemask, int max_zone_idx);
-static inline void show_mem(unsigned int flags, nodemask_t *nodemask)
+static inline void show_mem(void)
{
- __show_mem(flags, nodemask, MAX_NR_ZONES - 1);
+ __show_mem(0, NULL, MAX_NR_ZONES - 1);
}
extern long si_mem_available(void);
extern void si_meminfo(struct sysinfo * val);
diff --git a/init/initramfs.c b/init/initramfs.c
index e7a01c2ccd1b..8d0fd946cdd2 100644
--- a/init/initramfs.c
+++ b/init/initramfs.c
@@ -61,7 +61,7 @@ static void __init error(char *x)
}
#define panic_show_mem(fmt, ...) \
- ({ show_mem(0, NULL); panic(fmt, ##__VA_ARGS__); })
+ ({ show_mem(); panic(fmt, ##__VA_ARGS__); })
/* link hash */
diff --git a/kernel/panic.c b/kernel/panic.c
index 10effe40a3fa..07239d4ad81e 100644
--- a/kernel/panic.c
+++ b/kernel/panic.c
@@ -216,7 +216,7 @@ static void panic_print_sys_info(bool console_flush)
show_state();
if (panic_print & PANIC_PRINT_MEM_INFO)
- show_mem(0, NULL);
+ show_mem();
if (panic_print & PANIC_PRINT_TIMER_INFO)
sysrq_timer_list_show();
--
2.41.0
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 2/2] mm: make show_free_areas() static
2023-06-29 10:43 [PATCH 1/2] mm: remove arguments of show_mem() Kefeng Wang
@ 2023-06-29 10:43 ` Kefeng Wang
2023-06-29 15:00 ` kernel test robot
2023-06-29 15:10 ` kernel test robot
2023-06-29 15:17 ` [PATCH 1/2] mm: remove arguments of show_mem() Matthew Wilcox
1 sibling, 2 replies; 7+ messages in thread
From: Kefeng Wang @ 2023-06-29 10:43 UTC (permalink / raw)
To: Andrew Morton
Cc: linux-kernel, linux-mm, linuxppc-dev, Greg Kroah-Hartman,
Michael Ellerman, Nicholas Piggin, Christophe Leroy, Kefeng Wang
Directly use show_mem() instead of show_free_areas(0, NULL), then
make show_free_areas() a static function.
Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com>
---
arch/sparc/kernel/setup_32.c | 2 +-
include/linux/mm.h | 12 ------------
mm/internal.h | 6 ++++++
mm/nommu.c | 6 +++---
mm/show_mem.c | 4 ++--
5 files changed, 12 insertions(+), 18 deletions(-)
diff --git a/arch/sparc/kernel/setup_32.c b/arch/sparc/kernel/setup_32.c
index 1adf5c1c16b8..34ef7febf0d5 100644
--- a/arch/sparc/kernel/setup_32.c
+++ b/arch/sparc/kernel/setup_32.c
@@ -83,7 +83,7 @@ static void prom_sync_me(void)
"nop\n\t" : : "r" (&trapbase));
prom_printf("PROM SYNC COMMAND...\n");
- show_free_areas(0, NULL);
+ show_mem();
if (!is_idle_task(current)) {
local_irq_enable();
ksys_sync();
diff --git a/include/linux/mm.h b/include/linux/mm.h
index ddb140e14f3a..0a1314a3ffae 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -2218,18 +2218,6 @@ extern void pagefault_out_of_memory(void);
#define offset_in_thp(page, p) ((unsigned long)(p) & (thp_size(page) - 1))
#define offset_in_folio(folio, p) ((unsigned long)(p) & (folio_size(folio) - 1))
-/*
- * Flags passed to show_mem() and show_free_areas() to suppress output in
- * various contexts.
- */
-#define SHOW_MEM_FILTER_NODES (0x0001u) /* disallowed nodes */
-
-extern void __show_free_areas(unsigned int flags, nodemask_t *nodemask, int max_zone_idx);
-static void __maybe_unused show_free_areas(unsigned int flags, nodemask_t *nodemask)
-{
- __show_free_areas(flags, nodemask, MAX_NR_ZONES - 1);
-}
-
/*
* Parameter block passed down to zap_pte_range in exceptional cases.
*/
diff --git a/mm/internal.h b/mm/internal.h
index a7d9e980429a..721ed07d7fd6 100644
--- a/mm/internal.h
+++ b/mm/internal.h
@@ -61,6 +61,12 @@ void page_writeback_init(void);
#define COMPOUND_MAPPED 0x800000
#define FOLIO_PAGES_MAPPED (COMPOUND_MAPPED - 1)
+/*
+ * Flags passed to __show_mem() and show_free_areas() to suppress output in
+ * various contexts.
+ */
+#define SHOW_MEM_FILTER_NODES (0x0001u) /* disallowed nodes */
+
/*
* How many individual pages have an elevated _mapcount. Excludes
* the folio's entire_mapcount.
diff --git a/mm/nommu.c b/mm/nommu.c
index f670d9979a26..5b179234ce89 100644
--- a/mm/nommu.c
+++ b/mm/nommu.c
@@ -990,7 +990,7 @@ static int do_mmap_private(struct vm_area_struct *vma,
enomem:
pr_err("Allocation of length %lu from process %d (%s) failed\n",
len, current->pid, current->comm);
- show_free_areas(0, NULL);
+ show_mem();
return -ENOMEM;
}
@@ -1223,13 +1223,13 @@ unsigned long do_mmap(struct file *file,
kmem_cache_free(vm_region_jar, region);
pr_warn("Allocation of vma for %lu byte allocation from process %d failed\n",
len, current->pid);
- show_free_areas(0, NULL);
+ show_mem();
return -ENOMEM;
error_getting_region:
pr_warn("Allocation of vm region for %lu byte allocation from process %d failed\n",
len, current->pid);
- show_free_areas(0, NULL);
+ show_mem();
return -ENOMEM;
error_vma_iter_prealloc:
diff --git a/mm/show_mem.c b/mm/show_mem.c
index 01f8e9905817..09c7d036d49e 100644
--- a/mm/show_mem.c
+++ b/mm/show_mem.c
@@ -186,7 +186,7 @@ static bool node_has_managed_zones(pg_data_t *pgdat, int max_zone_idx)
* SHOW_MEM_FILTER_NODES: suppress nodes that are not allowed by current's
* cpuset.
*/
-void __show_free_areas(unsigned int filter, nodemask_t *nodemask, int max_zone_idx)
+static void show_free_areas(unsigned int filter, nodemask_t *nodemask, int max_zone_idx)
{
unsigned long free_pcp = 0;
int cpu, nid;
@@ -406,7 +406,7 @@ void __show_mem(unsigned int filter, nodemask_t *nodemask, int max_zone_idx)
struct zone *zone;
printk("Mem-Info:\n");
- __show_free_areas(filter, nodemask, max_zone_idx);
+ show_free_areas(filter, nodemask, max_zone_idx);
for_each_populated_zone(zone) {
--
2.41.0
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 2/2] mm: make show_free_areas() static
2023-06-29 10:43 ` [PATCH 2/2] mm: make show_free_areas() static Kefeng Wang
@ 2023-06-29 15:00 ` kernel test robot
2023-06-30 0:55 ` Kefeng Wang
2023-06-29 15:10 ` kernel test robot
1 sibling, 1 reply; 7+ messages in thread
From: kernel test robot @ 2023-06-29 15:00 UTC (permalink / raw)
To: Kefeng Wang, Andrew Morton
Cc: oe-kbuild-all, Linux Memory Management List, linux-kernel,
linuxppc-dev, Greg Kroah-Hartman, Michael Ellerman,
Nicholas Piggin, Christophe Leroy, Kefeng Wang
Hi Kefeng,
kernel test robot noticed the following build errors:
[auto build test ERROR on akpm-mm/mm-everything]
url: https://github.com/intel-lab-lkp/linux/commits/Kefeng-Wang/mm-make-show_free_areas-static/20230629-182958
base: https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-everything
patch link: https://lore.kernel.org/r/20230629104357.35455-2-wangkefeng.wang%40huawei.com
patch subject: [PATCH 2/2] mm: make show_free_areas() static
config: sh-allmodconfig (https://download.01.org/0day-ci/archive/20230629/202306292240.Rj0DlHfI-lkp@intel.com/config)
compiler: sh4-linux-gcc (GCC) 12.3.0
reproduce: (https://download.01.org/0day-ci/archive/20230629/202306292240.Rj0DlHfI-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/202306292240.Rj0DlHfI-lkp@intel.com/
All errors (new ones prefixed by >>):
mm/nommu.c: In function 'do_mmap':
>> mm/nommu.c:1239:9: error: implicit declaration of function 'show_free_areas' [-Werror=implicit-function-declaration]
1239 | show_free_areas(0, NULL);
| ^~~~~~~~~~~~~~~
cc1: some warnings being treated as errors
vim +/show_free_areas +1239 mm/nommu.c
^1da177e4c3f41 Linus Torvalds 2005-04-16 996
^1da177e4c3f41 Linus Torvalds 2005-04-16 997 /*
^1da177e4c3f41 Linus Torvalds 2005-04-16 998 * handle mapping creation for uClinux
^1da177e4c3f41 Linus Torvalds 2005-04-16 999 */
1fcfd8db7f82fa Oleg Nesterov 2015-09-09 1000 unsigned long do_mmap(struct file *file,
^1da177e4c3f41 Linus Torvalds 2005-04-16 1001 unsigned long addr,
^1da177e4c3f41 Linus Torvalds 2005-04-16 1002 unsigned long len,
^1da177e4c3f41 Linus Torvalds 2005-04-16 1003 unsigned long prot,
^1da177e4c3f41 Linus Torvalds 2005-04-16 1004 unsigned long flags,
bebeb3d68b24bb Michel Lespinasse 2013-02-22 1005 unsigned long pgoff,
897ab3e0c49e24 Mike Rapoport 2017-02-24 1006 unsigned long *populate,
897ab3e0c49e24 Mike Rapoport 2017-02-24 1007 struct list_head *uf)
^1da177e4c3f41 Linus Torvalds 2005-04-16 1008 {
8feae13110d60c David Howells 2009-01-08 1009 struct vm_area_struct *vma;
8feae13110d60c David Howells 2009-01-08 1010 struct vm_region *region;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1011 struct rb_node *rb;
45e55300f11495 Peter Collingbourne 2020-08-06 1012 vm_flags_t vm_flags;
1fcfd8db7f82fa Oleg Nesterov 2015-09-09 1013 unsigned long capabilities, result;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1014 int ret;
47d9644de92c1a Liam R. Howlett 2023-01-20 1015 VMA_ITERATOR(vmi, current->mm, 0);
^1da177e4c3f41 Linus Torvalds 2005-04-16 1016
41badc15cbad03 Michel Lespinasse 2013-02-22 1017 *populate = 0;
bebeb3d68b24bb Michel Lespinasse 2013-02-22 1018
^1da177e4c3f41 Linus Torvalds 2005-04-16 1019 /* decide whether we should attempt the mapping, and if so what sort of
^1da177e4c3f41 Linus Torvalds 2005-04-16 1020 * mapping */
^1da177e4c3f41 Linus Torvalds 2005-04-16 1021 ret = validate_mmap_request(file, addr, len, prot, flags, pgoff,
^1da177e4c3f41 Linus Torvalds 2005-04-16 1022 &capabilities);
22cc877b32202b Leon Romanovsky 2015-06-24 1023 if (ret < 0)
^1da177e4c3f41 Linus Torvalds 2005-04-16 1024 return ret;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1025
06aab5a3084e1d David Howells 2009-09-24 1026 /* we ignore the address hint */
06aab5a3084e1d David Howells 2009-09-24 1027 addr = 0;
f67d9b1576c1c6 Bob Liu 2011-05-24 1028 len = PAGE_ALIGN(len);
06aab5a3084e1d David Howells 2009-09-24 1029
^1da177e4c3f41 Linus Torvalds 2005-04-16 1030 /* we've determined that we can make the mapping, now translate what we
^1da177e4c3f41 Linus Torvalds 2005-04-16 1031 * now know into VMA flags */
45e55300f11495 Peter Collingbourne 2020-08-06 1032 vm_flags = determine_vm_flags(file, prot, flags, capabilities);
^1da177e4c3f41 Linus Torvalds 2005-04-16 1033
8220543df1489e Matthew Wilcox (Oracle 2022-09-06 1034)
8feae13110d60c David Howells 2009-01-08 1035 /* we're going to need to record the mapping */
8feae13110d60c David Howells 2009-01-08 1036 region = kmem_cache_zalloc(vm_region_jar, GFP_KERNEL);
8feae13110d60c David Howells 2009-01-08 1037 if (!region)
8feae13110d60c David Howells 2009-01-08 1038 goto error_getting_region;
8feae13110d60c David Howells 2009-01-08 1039
490fc053865c9c Linus Torvalds 2018-07-21 1040 vma = vm_area_alloc(current->mm);
8feae13110d60c David Howells 2009-01-08 1041 if (!vma)
8feae13110d60c David Howells 2009-01-08 1042 goto error_getting_vma;
8feae13110d60c David Howells 2009-01-08 1043
47d9644de92c1a Liam R. Howlett 2023-01-20 1044 if (vma_iter_prealloc(&vmi))
47d9644de92c1a Liam R. Howlett 2023-01-20 1045 goto error_vma_iter_prealloc;
8220543df1489e Matthew Wilcox (Oracle 2022-09-06 1046)
1e2ae599d37e60 David Howells 2010-01-15 1047 region->vm_usage = 1;
8feae13110d60c David Howells 2009-01-08 1048 region->vm_flags = vm_flags;
8feae13110d60c David Howells 2009-01-08 1049 region->vm_pgoff = pgoff;
8feae13110d60c David Howells 2009-01-08 1050
1c71222e5f2393 Suren Baghdasaryan 2023-01-26 1051 vm_flags_init(vma, vm_flags);
8feae13110d60c David Howells 2009-01-08 1052 vma->vm_pgoff = pgoff;
8feae13110d60c David Howells 2009-01-08 1053
8feae13110d60c David Howells 2009-01-08 1054 if (file) {
cb0942b8124979 Al Viro 2012-08-27 1055 region->vm_file = get_file(file);
cb0942b8124979 Al Viro 2012-08-27 1056 vma->vm_file = get_file(file);
8feae13110d60c David Howells 2009-01-08 1057 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 1058
8feae13110d60c David Howells 2009-01-08 1059 down_write(&nommu_region_sem);
^1da177e4c3f41 Linus Torvalds 2005-04-16 1060
8feae13110d60c David Howells 2009-01-08 1061 /* if we want to share, we need to check for regions created by other
^1da177e4c3f41 Linus Torvalds 2005-04-16 1062 * mmap() calls that overlap with our proposed mapping
8feae13110d60c David Howells 2009-01-08 1063 * - we can only share with a superset match on most regular files
^1da177e4c3f41 Linus Torvalds 2005-04-16 1064 * - shared mappings on character devices and memory backed files are
^1da177e4c3f41 Linus Torvalds 2005-04-16 1065 * permitted to overlap inexactly as far as we are concerned for in
^1da177e4c3f41 Linus Torvalds 2005-04-16 1066 * these cases, sharing is handled in the driver or filesystem rather
^1da177e4c3f41 Linus Torvalds 2005-04-16 1067 * than here
^1da177e4c3f41 Linus Torvalds 2005-04-16 1068 */
fc4f4be9b5271e David Hildenbrand 2023-01-02 1069 if (is_nommu_shared_mapping(vm_flags)) {
8feae13110d60c David Howells 2009-01-08 1070 struct vm_region *pregion;
8feae13110d60c David Howells 2009-01-08 1071 unsigned long pglen, rpglen, pgend, rpgend, start;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1072
8feae13110d60c David Howells 2009-01-08 1073 pglen = (len + PAGE_SIZE - 1) >> PAGE_SHIFT;
8feae13110d60c David Howells 2009-01-08 1074 pgend = pgoff + pglen;
165b239270be61 David Howells 2007-03-22 1075
8feae13110d60c David Howells 2009-01-08 1076 for (rb = rb_first(&nommu_region_tree); rb; rb = rb_next(rb)) {
8feae13110d60c David Howells 2009-01-08 1077 pregion = rb_entry(rb, struct vm_region, vm_rb);
^1da177e4c3f41 Linus Torvalds 2005-04-16 1078
fc4f4be9b5271e David Hildenbrand 2023-01-02 1079 if (!is_nommu_shared_mapping(pregion->vm_flags))
^1da177e4c3f41 Linus Torvalds 2005-04-16 1080 continue;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1081
^1da177e4c3f41 Linus Torvalds 2005-04-16 1082 /* search for overlapping mappings on the same file */
496ad9aa8ef448 Al Viro 2013-01-23 1083 if (file_inode(pregion->vm_file) !=
496ad9aa8ef448 Al Viro 2013-01-23 1084 file_inode(file))
^1da177e4c3f41 Linus Torvalds 2005-04-16 1085 continue;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1086
8feae13110d60c David Howells 2009-01-08 1087 if (pregion->vm_pgoff >= pgend)
^1da177e4c3f41 Linus Torvalds 2005-04-16 1088 continue;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1089
8feae13110d60c David Howells 2009-01-08 1090 rpglen = pregion->vm_end - pregion->vm_start;
8feae13110d60c David Howells 2009-01-08 1091 rpglen = (rpglen + PAGE_SIZE - 1) >> PAGE_SHIFT;
8feae13110d60c David Howells 2009-01-08 1092 rpgend = pregion->vm_pgoff + rpglen;
8feae13110d60c David Howells 2009-01-08 1093 if (pgoff >= rpgend)
^1da177e4c3f41 Linus Torvalds 2005-04-16 1094 continue;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1095
8feae13110d60c David Howells 2009-01-08 1096 /* handle inexactly overlapping matches between
8feae13110d60c David Howells 2009-01-08 1097 * mappings */
8feae13110d60c David Howells 2009-01-08 1098 if ((pregion->vm_pgoff != pgoff || rpglen != pglen) &&
8feae13110d60c David Howells 2009-01-08 1099 !(pgoff >= pregion->vm_pgoff && pgend <= rpgend)) {
8feae13110d60c David Howells 2009-01-08 1100 /* new mapping is not a subset of the region */
b4caecd48005fb Christoph Hellwig 2015-01-14 1101 if (!(capabilities & NOMMU_MAP_DIRECT))
^1da177e4c3f41 Linus Torvalds 2005-04-16 1102 goto sharing_violation;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1103 continue;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1104 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 1105
8feae13110d60c David Howells 2009-01-08 1106 /* we've found a region we can share */
1e2ae599d37e60 David Howells 2010-01-15 1107 pregion->vm_usage++;
8feae13110d60c David Howells 2009-01-08 1108 vma->vm_region = pregion;
8feae13110d60c David Howells 2009-01-08 1109 start = pregion->vm_start;
8feae13110d60c David Howells 2009-01-08 1110 start += (pgoff - pregion->vm_pgoff) << PAGE_SHIFT;
8feae13110d60c David Howells 2009-01-08 1111 vma->vm_start = start;
8feae13110d60c David Howells 2009-01-08 1112 vma->vm_end = start + len;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1113
22cc877b32202b Leon Romanovsky 2015-06-24 1114 if (pregion->vm_flags & VM_MAPPED_COPY)
1c71222e5f2393 Suren Baghdasaryan 2023-01-26 1115 vm_flags_set(vma, VM_MAPPED_COPY);
22cc877b32202b Leon Romanovsky 2015-06-24 1116 else {
8feae13110d60c David Howells 2009-01-08 1117 ret = do_mmap_shared_file(vma);
8feae13110d60c David Howells 2009-01-08 1118 if (ret < 0) {
8feae13110d60c David Howells 2009-01-08 1119 vma->vm_region = NULL;
8feae13110d60c David Howells 2009-01-08 1120 vma->vm_start = 0;
8feae13110d60c David Howells 2009-01-08 1121 vma->vm_end = 0;
1e2ae599d37e60 David Howells 2010-01-15 1122 pregion->vm_usage--;
8feae13110d60c David Howells 2009-01-08 1123 pregion = NULL;
8feae13110d60c David Howells 2009-01-08 1124 goto error_just_free;
8feae13110d60c David Howells 2009-01-08 1125 }
8feae13110d60c David Howells 2009-01-08 1126 }
8feae13110d60c David Howells 2009-01-08 1127 fput(region->vm_file);
8feae13110d60c David Howells 2009-01-08 1128 kmem_cache_free(vm_region_jar, region);
8feae13110d60c David Howells 2009-01-08 1129 region = pregion;
8feae13110d60c David Howells 2009-01-08 1130 result = start;
8feae13110d60c David Howells 2009-01-08 1131 goto share;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1132 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 1133
^1da177e4c3f41 Linus Torvalds 2005-04-16 1134 /* obtain the address at which to make a shared mapping
^1da177e4c3f41 Linus Torvalds 2005-04-16 1135 * - this is the hook for quasi-memory character devices to
^1da177e4c3f41 Linus Torvalds 2005-04-16 1136 * tell us the location of a shared mapping
^1da177e4c3f41 Linus Torvalds 2005-04-16 1137 */
b4caecd48005fb Christoph Hellwig 2015-01-14 1138 if (capabilities & NOMMU_MAP_DIRECT) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 1139 addr = file->f_op->get_unmapped_area(file, addr, len,
^1da177e4c3f41 Linus Torvalds 2005-04-16 1140 pgoff, flags);
bb005a59e08733 Namhyung Kim 2011-05-24 1141 if (IS_ERR_VALUE(addr)) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 1142 ret = addr;
bb005a59e08733 Namhyung Kim 2011-05-24 1143 if (ret != -ENOSYS)
8feae13110d60c David Howells 2009-01-08 1144 goto error_just_free;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1145
^1da177e4c3f41 Linus Torvalds 2005-04-16 1146 /* the driver refused to tell us where to site
^1da177e4c3f41 Linus Torvalds 2005-04-16 1147 * the mapping so we'll have to attempt to copy
^1da177e4c3f41 Linus Torvalds 2005-04-16 1148 * it */
bb005a59e08733 Namhyung Kim 2011-05-24 1149 ret = -ENODEV;
b4caecd48005fb Christoph Hellwig 2015-01-14 1150 if (!(capabilities & NOMMU_MAP_COPY))
8feae13110d60c David Howells 2009-01-08 1151 goto error_just_free;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1152
b4caecd48005fb Christoph Hellwig 2015-01-14 1153 capabilities &= ~NOMMU_MAP_DIRECT;
8feae13110d60c David Howells 2009-01-08 1154 } else {
8feae13110d60c David Howells 2009-01-08 1155 vma->vm_start = region->vm_start = addr;
8feae13110d60c David Howells 2009-01-08 1156 vma->vm_end = region->vm_end = addr + len;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1157 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 1158 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 1159 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 1160
8feae13110d60c David Howells 2009-01-08 1161 vma->vm_region = region;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1162
645d83c5db970a David Howells 2009-09-24 1163 /* set up the mapping
b4caecd48005fb Christoph Hellwig 2015-01-14 1164 * - the region is filled in if NOMMU_MAP_DIRECT is still set
645d83c5db970a David Howells 2009-09-24 1165 */
^1da177e4c3f41 Linus Torvalds 2005-04-16 1166 if (file && vma->vm_flags & VM_SHARED)
8feae13110d60c David Howells 2009-01-08 1167 ret = do_mmap_shared_file(vma);
^1da177e4c3f41 Linus Torvalds 2005-04-16 1168 else
645d83c5db970a David Howells 2009-09-24 1169 ret = do_mmap_private(vma, region, len, capabilities);
^1da177e4c3f41 Linus Torvalds 2005-04-16 1170 if (ret < 0)
645d83c5db970a David Howells 2009-09-24 1171 goto error_just_free;
645d83c5db970a David Howells 2009-09-24 1172 add_nommu_region(region);
8feae13110d60c David Howells 2009-01-08 1173
ea637639591def Jie Zhang 2009-12-14 1174 /* clear anonymous mappings that don't ask for uninitialized data */
0bf5f9492389aa Christoph Hellwig 2019-07-16 1175 if (!vma->vm_file &&
0bf5f9492389aa Christoph Hellwig 2019-07-16 1176 (!IS_ENABLED(CONFIG_MMAP_ALLOW_UNINITIALIZED) ||
0bf5f9492389aa Christoph Hellwig 2019-07-16 1177 !(flags & MAP_UNINITIALIZED)))
ea637639591def Jie Zhang 2009-12-14 1178 memset((void *)region->vm_start, 0,
ea637639591def Jie Zhang 2009-12-14 1179 region->vm_end - region->vm_start);
ea637639591def Jie Zhang 2009-12-14 1180
^1da177e4c3f41 Linus Torvalds 2005-04-16 1181 /* okay... we have a mapping; now we have to register it */
8feae13110d60c David Howells 2009-01-08 1182 result = vma->vm_start;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1183
^1da177e4c3f41 Linus Torvalds 2005-04-16 1184 current->mm->total_vm += len >> PAGE_SHIFT;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1185
8feae13110d60c David Howells 2009-01-08 1186 share:
07f1bc5ad79833 Liam R. Howlett 2023-01-20 1187 BUG_ON(!vma->vm_region);
07f1bc5ad79833 Liam R. Howlett 2023-01-20 1188 setup_vma_to_mm(vma, current->mm);
07f1bc5ad79833 Liam R. Howlett 2023-01-20 1189 current->mm->map_count++;
07f1bc5ad79833 Liam R. Howlett 2023-01-20 1190 /* add the VMA to the tree */
07f1bc5ad79833 Liam R. Howlett 2023-01-20 1191 vma_iter_store(&vmi, vma);
^1da177e4c3f41 Linus Torvalds 2005-04-16 1192
cfe79c00a2f4f6 Mike Frysinger 2010-01-06 1193 /* we flush the region from the icache only when the first executable
cfe79c00a2f4f6 Mike Frysinger 2010-01-06 1194 * mapping of it is made */
cfe79c00a2f4f6 Mike Frysinger 2010-01-06 1195 if (vma->vm_flags & VM_EXEC && !region->vm_icache_flushed) {
a75a2df68f87c4 Christoph Hellwig 2020-06-07 1196 flush_icache_user_range(region->vm_start, region->vm_end);
cfe79c00a2f4f6 Mike Frysinger 2010-01-06 1197 region->vm_icache_flushed = true;
cfe79c00a2f4f6 Mike Frysinger 2010-01-06 1198 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 1199
cfe79c00a2f4f6 Mike Frysinger 2010-01-06 1200 up_write(&nommu_region_sem);
^1da177e4c3f41 Linus Torvalds 2005-04-16 1201
8feae13110d60c David Howells 2009-01-08 1202 return result;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1203
8feae13110d60c David Howells 2009-01-08 1204 error_just_free:
8feae13110d60c David Howells 2009-01-08 1205 up_write(&nommu_region_sem);
8feae13110d60c David Howells 2009-01-08 1206 error:
47d9644de92c1a Liam R. Howlett 2023-01-20 1207 vma_iter_free(&vmi);
89a8640279f8bb David Howells 2009-10-30 1208 if (region->vm_file)
8feae13110d60c David Howells 2009-01-08 1209 fput(region->vm_file);
8feae13110d60c David Howells 2009-01-08 1210 kmem_cache_free(vm_region_jar, region);
89a8640279f8bb David Howells 2009-10-30 1211 if (vma->vm_file)
8feae13110d60c David Howells 2009-01-08 1212 fput(vma->vm_file);
3928d4f5ee37cd Linus Torvalds 2018-07-21 1213 vm_area_free(vma);
^1da177e4c3f41 Linus Torvalds 2005-04-16 1214 return ret;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1215
^1da177e4c3f41 Linus Torvalds 2005-04-16 1216 sharing_violation:
8feae13110d60c David Howells 2009-01-08 1217 up_write(&nommu_region_sem);
22cc877b32202b Leon Romanovsky 2015-06-24 1218 pr_warn("Attempt to share mismatched mappings\n");
8feae13110d60c David Howells 2009-01-08 1219 ret = -EINVAL;
8feae13110d60c David Howells 2009-01-08 1220 goto error;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1221
^1da177e4c3f41 Linus Torvalds 2005-04-16 1222 error_getting_vma:
8feae13110d60c David Howells 2009-01-08 1223 kmem_cache_free(vm_region_jar, region);
22cc877b32202b Leon Romanovsky 2015-06-24 1224 pr_warn("Allocation of vma for %lu byte allocation from process %d failed\n",
^1da177e4c3f41 Linus Torvalds 2005-04-16 1225 len, current->pid);
7c669cfbec1271 Kefeng Wang 2023-06-29 1226 show_mem();
^1da177e4c3f41 Linus Torvalds 2005-04-16 1227 return -ENOMEM;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1228
8feae13110d60c David Howells 2009-01-08 1229 error_getting_region:
22cc877b32202b Leon Romanovsky 2015-06-24 1230 pr_warn("Allocation of vm region for %lu byte allocation from process %d failed\n",
^1da177e4c3f41 Linus Torvalds 2005-04-16 1231 len, current->pid);
7c669cfbec1271 Kefeng Wang 2023-06-29 1232 show_mem();
^1da177e4c3f41 Linus Torvalds 2005-04-16 1233 return -ENOMEM;
8220543df1489e Matthew Wilcox (Oracle 2022-09-06 1234)
47d9644de92c1a Liam R. Howlett 2023-01-20 1235 error_vma_iter_prealloc:
8220543df1489e Matthew Wilcox (Oracle 2022-09-06 1236) kmem_cache_free(vm_region_jar, region);
8220543df1489e Matthew Wilcox (Oracle 2022-09-06 1237) vm_area_free(vma);
8220543df1489e Matthew Wilcox (Oracle 2022-09-06 1238) pr_warn("Allocation of vma tree for process %d failed\n", current->pid);
8220543df1489e Matthew Wilcox (Oracle 2022-09-06 @1239) show_free_areas(0, NULL);
8220543df1489e Matthew Wilcox (Oracle 2022-09-06 1240) return -ENOMEM;
8220543df1489e Matthew Wilcox (Oracle 2022-09-06 1241)
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 2/2] mm: make show_free_areas() static
2023-06-29 10:43 ` [PATCH 2/2] mm: make show_free_areas() static Kefeng Wang
2023-06-29 15:00 ` kernel test robot
@ 2023-06-29 15:10 ` kernel test robot
1 sibling, 0 replies; 7+ messages in thread
From: kernel test robot @ 2023-06-29 15:10 UTC (permalink / raw)
To: Kefeng Wang, Andrew Morton
Cc: llvm, oe-kbuild-all, Linux Memory Management List, linux-kernel,
linuxppc-dev, Greg Kroah-Hartman, Michael Ellerman,
Nicholas Piggin, Christophe Leroy, Kefeng Wang
Hi Kefeng,
kernel test robot noticed the following build errors:
[auto build test ERROR on akpm-mm/mm-everything]
url: https://github.com/intel-lab-lkp/linux/commits/Kefeng-Wang/mm-make-show_free_areas-static/20230629-182958
base: https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-everything
patch link: https://lore.kernel.org/r/20230629104357.35455-2-wangkefeng.wang%40huawei.com
patch subject: [PATCH 2/2] mm: make show_free_areas() static
config: riscv-randconfig-r042-20230629 (https://download.01.org/0day-ci/archive/20230629/202306292233.w0XhREe0-lkp@intel.com/config)
compiler: clang version 17.0.0 (https://github.com/llvm/llvm-project.git 4a5ac14ee968ff0ad5d2cc1ffa0299048db4c88a)
reproduce: (https://download.01.org/0day-ci/archive/20230629/202306292233.w0XhREe0-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/202306292233.w0XhREe0-lkp@intel.com/
All errors (new ones prefixed by >>):
In file included from include/linux/interrupt.h:11:
In file included from include/linux/hardirq.h:11:
In file included from ./arch/riscv/include/generated/asm/hardirq.h:1:
In file included from include/asm-generic/hardirq.h:17:
In file included from include/linux/irq.h:20:
In file included from include/linux/io.h:13:
In file included from arch/riscv/include/asm/io.h:136:
include/asm-generic/io.h:751:2: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
751 | insw(addr, buffer, count);
| ^~~~~~~~~~~~~~~~~~~~~~~~~
arch/riscv/include/asm/io.h:105:53: note: expanded from macro 'insw'
105 | #define insw(addr, buffer, count) __insw(PCI_IOBASE + (addr), buffer, count)
| ~~~~~~~~~~ ^
In file included from mm/nommu.c:23:
In file included from include/linux/swap.h:9:
In file included from include/linux/memcontrol.h:13:
In file included from include/linux/cgroup.h:26:
In file included from include/linux/kernel_stat.h:9:
In file included from include/linux/interrupt.h:11:
In file included from include/linux/hardirq.h:11:
In file included from ./arch/riscv/include/generated/asm/hardirq.h:1:
In file included from include/asm-generic/hardirq.h:17:
In file included from include/linux/irq.h:20:
In file included from include/linux/io.h:13:
In file included from arch/riscv/include/asm/io.h:136:
include/asm-generic/io.h:759:2: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
759 | insl(addr, buffer, count);
| ^~~~~~~~~~~~~~~~~~~~~~~~~
arch/riscv/include/asm/io.h:106:53: note: expanded from macro 'insl'
106 | #define insl(addr, buffer, count) __insl(PCI_IOBASE + (addr), buffer, count)
| ~~~~~~~~~~ ^
In file included from mm/nommu.c:23:
In file included from include/linux/swap.h:9:
In file included from include/linux/memcontrol.h:13:
In file included from include/linux/cgroup.h:26:
In file included from include/linux/kernel_stat.h:9:
In file included from include/linux/interrupt.h:11:
In file included from include/linux/hardirq.h:11:
In file included from ./arch/riscv/include/generated/asm/hardirq.h:1:
In file included from include/asm-generic/hardirq.h:17:
In file included from include/linux/irq.h:20:
In file included from include/linux/io.h:13:
In file included from arch/riscv/include/asm/io.h:136:
include/asm-generic/io.h:768:2: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
768 | outsb(addr, buffer, count);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
arch/riscv/include/asm/io.h:118:55: note: expanded from macro 'outsb'
118 | #define outsb(addr, buffer, count) __outsb(PCI_IOBASE + (addr), buffer, count)
| ~~~~~~~~~~ ^
In file included from mm/nommu.c:23:
In file included from include/linux/swap.h:9:
In file included from include/linux/memcontrol.h:13:
In file included from include/linux/cgroup.h:26:
In file included from include/linux/kernel_stat.h:9:
In file included from include/linux/interrupt.h:11:
In file included from include/linux/hardirq.h:11:
In file included from ./arch/riscv/include/generated/asm/hardirq.h:1:
In file included from include/asm-generic/hardirq.h:17:
In file included from include/linux/irq.h:20:
In file included from include/linux/io.h:13:
In file included from arch/riscv/include/asm/io.h:136:
include/asm-generic/io.h:777:2: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
777 | outsw(addr, buffer, count);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
arch/riscv/include/asm/io.h:119:55: note: expanded from macro 'outsw'
119 | #define outsw(addr, buffer, count) __outsw(PCI_IOBASE + (addr), buffer, count)
| ~~~~~~~~~~ ^
In file included from mm/nommu.c:23:
In file included from include/linux/swap.h:9:
In file included from include/linux/memcontrol.h:13:
In file included from include/linux/cgroup.h:26:
In file included from include/linux/kernel_stat.h:9:
In file included from include/linux/interrupt.h:11:
In file included from include/linux/hardirq.h:11:
In file included from ./arch/riscv/include/generated/asm/hardirq.h:1:
In file included from include/asm-generic/hardirq.h:17:
In file included from include/linux/irq.h:20:
In file included from include/linux/io.h:13:
In file included from arch/riscv/include/asm/io.h:136:
include/asm-generic/io.h:786:2: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
786 | outsl(addr, buffer, count);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
arch/riscv/include/asm/io.h:120:55: note: expanded from macro 'outsl'
120 | #define outsl(addr, buffer, count) __outsl(PCI_IOBASE + (addr), buffer, count)
| ~~~~~~~~~~ ^
In file included from mm/nommu.c:23:
In file included from include/linux/swap.h:9:
In file included from include/linux/memcontrol.h:13:
In file included from include/linux/cgroup.h:26:
In file included from include/linux/kernel_stat.h:9:
In file included from include/linux/interrupt.h:11:
In file included from include/linux/hardirq.h:11:
In file included from ./arch/riscv/include/generated/asm/hardirq.h:1:
In file included from include/asm-generic/hardirq.h:17:
In file included from include/linux/irq.h:20:
In file included from include/linux/io.h:13:
In file included from arch/riscv/include/asm/io.h:136:
include/asm-generic/io.h:1134:55: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
1134 | return (port > MMIO_UPPER_LIMIT) ? NULL : PCI_IOBASE + port;
| ~~~~~~~~~~ ^
>> mm/nommu.c:1239:2: error: call to undeclared function 'show_free_areas'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
1239 | show_free_areas(0, NULL);
| ^
13 warnings and 1 error generated.
vim +/show_free_areas +1239 mm/nommu.c
^1da177e4c3f41 Linus Torvalds 2005-04-16 996
^1da177e4c3f41 Linus Torvalds 2005-04-16 997 /*
^1da177e4c3f41 Linus Torvalds 2005-04-16 998 * handle mapping creation for uClinux
^1da177e4c3f41 Linus Torvalds 2005-04-16 999 */
1fcfd8db7f82fa Oleg Nesterov 2015-09-09 1000 unsigned long do_mmap(struct file *file,
^1da177e4c3f41 Linus Torvalds 2005-04-16 1001 unsigned long addr,
^1da177e4c3f41 Linus Torvalds 2005-04-16 1002 unsigned long len,
^1da177e4c3f41 Linus Torvalds 2005-04-16 1003 unsigned long prot,
^1da177e4c3f41 Linus Torvalds 2005-04-16 1004 unsigned long flags,
bebeb3d68b24bb Michel Lespinasse 2013-02-22 1005 unsigned long pgoff,
897ab3e0c49e24 Mike Rapoport 2017-02-24 1006 unsigned long *populate,
897ab3e0c49e24 Mike Rapoport 2017-02-24 1007 struct list_head *uf)
^1da177e4c3f41 Linus Torvalds 2005-04-16 1008 {
8feae13110d60c David Howells 2009-01-08 1009 struct vm_area_struct *vma;
8feae13110d60c David Howells 2009-01-08 1010 struct vm_region *region;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1011 struct rb_node *rb;
45e55300f11495 Peter Collingbourne 2020-08-06 1012 vm_flags_t vm_flags;
1fcfd8db7f82fa Oleg Nesterov 2015-09-09 1013 unsigned long capabilities, result;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1014 int ret;
47d9644de92c1a Liam R. Howlett 2023-01-20 1015 VMA_ITERATOR(vmi, current->mm, 0);
^1da177e4c3f41 Linus Torvalds 2005-04-16 1016
41badc15cbad03 Michel Lespinasse 2013-02-22 1017 *populate = 0;
bebeb3d68b24bb Michel Lespinasse 2013-02-22 1018
^1da177e4c3f41 Linus Torvalds 2005-04-16 1019 /* decide whether we should attempt the mapping, and if so what sort of
^1da177e4c3f41 Linus Torvalds 2005-04-16 1020 * mapping */
^1da177e4c3f41 Linus Torvalds 2005-04-16 1021 ret = validate_mmap_request(file, addr, len, prot, flags, pgoff,
^1da177e4c3f41 Linus Torvalds 2005-04-16 1022 &capabilities);
22cc877b32202b Leon Romanovsky 2015-06-24 1023 if (ret < 0)
^1da177e4c3f41 Linus Torvalds 2005-04-16 1024 return ret;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1025
06aab5a3084e1d David Howells 2009-09-24 1026 /* we ignore the address hint */
06aab5a3084e1d David Howells 2009-09-24 1027 addr = 0;
f67d9b1576c1c6 Bob Liu 2011-05-24 1028 len = PAGE_ALIGN(len);
06aab5a3084e1d David Howells 2009-09-24 1029
^1da177e4c3f41 Linus Torvalds 2005-04-16 1030 /* we've determined that we can make the mapping, now translate what we
^1da177e4c3f41 Linus Torvalds 2005-04-16 1031 * now know into VMA flags */
45e55300f11495 Peter Collingbourne 2020-08-06 1032 vm_flags = determine_vm_flags(file, prot, flags, capabilities);
^1da177e4c3f41 Linus Torvalds 2005-04-16 1033
8220543df1489e Matthew Wilcox (Oracle 2022-09-06 1034)
8feae13110d60c David Howells 2009-01-08 1035 /* we're going to need to record the mapping */
8feae13110d60c David Howells 2009-01-08 1036 region = kmem_cache_zalloc(vm_region_jar, GFP_KERNEL);
8feae13110d60c David Howells 2009-01-08 1037 if (!region)
8feae13110d60c David Howells 2009-01-08 1038 goto error_getting_region;
8feae13110d60c David Howells 2009-01-08 1039
490fc053865c9c Linus Torvalds 2018-07-21 1040 vma = vm_area_alloc(current->mm);
8feae13110d60c David Howells 2009-01-08 1041 if (!vma)
8feae13110d60c David Howells 2009-01-08 1042 goto error_getting_vma;
8feae13110d60c David Howells 2009-01-08 1043
47d9644de92c1a Liam R. Howlett 2023-01-20 1044 if (vma_iter_prealloc(&vmi))
47d9644de92c1a Liam R. Howlett 2023-01-20 1045 goto error_vma_iter_prealloc;
8220543df1489e Matthew Wilcox (Oracle 2022-09-06 1046)
1e2ae599d37e60 David Howells 2010-01-15 1047 region->vm_usage = 1;
8feae13110d60c David Howells 2009-01-08 1048 region->vm_flags = vm_flags;
8feae13110d60c David Howells 2009-01-08 1049 region->vm_pgoff = pgoff;
8feae13110d60c David Howells 2009-01-08 1050
1c71222e5f2393 Suren Baghdasaryan 2023-01-26 1051 vm_flags_init(vma, vm_flags);
8feae13110d60c David Howells 2009-01-08 1052 vma->vm_pgoff = pgoff;
8feae13110d60c David Howells 2009-01-08 1053
8feae13110d60c David Howells 2009-01-08 1054 if (file) {
cb0942b8124979 Al Viro 2012-08-27 1055 region->vm_file = get_file(file);
cb0942b8124979 Al Viro 2012-08-27 1056 vma->vm_file = get_file(file);
8feae13110d60c David Howells 2009-01-08 1057 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 1058
8feae13110d60c David Howells 2009-01-08 1059 down_write(&nommu_region_sem);
^1da177e4c3f41 Linus Torvalds 2005-04-16 1060
8feae13110d60c David Howells 2009-01-08 1061 /* if we want to share, we need to check for regions created by other
^1da177e4c3f41 Linus Torvalds 2005-04-16 1062 * mmap() calls that overlap with our proposed mapping
8feae13110d60c David Howells 2009-01-08 1063 * - we can only share with a superset match on most regular files
^1da177e4c3f41 Linus Torvalds 2005-04-16 1064 * - shared mappings on character devices and memory backed files are
^1da177e4c3f41 Linus Torvalds 2005-04-16 1065 * permitted to overlap inexactly as far as we are concerned for in
^1da177e4c3f41 Linus Torvalds 2005-04-16 1066 * these cases, sharing is handled in the driver or filesystem rather
^1da177e4c3f41 Linus Torvalds 2005-04-16 1067 * than here
^1da177e4c3f41 Linus Torvalds 2005-04-16 1068 */
fc4f4be9b5271e David Hildenbrand 2023-01-02 1069 if (is_nommu_shared_mapping(vm_flags)) {
8feae13110d60c David Howells 2009-01-08 1070 struct vm_region *pregion;
8feae13110d60c David Howells 2009-01-08 1071 unsigned long pglen, rpglen, pgend, rpgend, start;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1072
8feae13110d60c David Howells 2009-01-08 1073 pglen = (len + PAGE_SIZE - 1) >> PAGE_SHIFT;
8feae13110d60c David Howells 2009-01-08 1074 pgend = pgoff + pglen;
165b239270be61 David Howells 2007-03-22 1075
8feae13110d60c David Howells 2009-01-08 1076 for (rb = rb_first(&nommu_region_tree); rb; rb = rb_next(rb)) {
8feae13110d60c David Howells 2009-01-08 1077 pregion = rb_entry(rb, struct vm_region, vm_rb);
^1da177e4c3f41 Linus Torvalds 2005-04-16 1078
fc4f4be9b5271e David Hildenbrand 2023-01-02 1079 if (!is_nommu_shared_mapping(pregion->vm_flags))
^1da177e4c3f41 Linus Torvalds 2005-04-16 1080 continue;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1081
^1da177e4c3f41 Linus Torvalds 2005-04-16 1082 /* search for overlapping mappings on the same file */
496ad9aa8ef448 Al Viro 2013-01-23 1083 if (file_inode(pregion->vm_file) !=
496ad9aa8ef448 Al Viro 2013-01-23 1084 file_inode(file))
^1da177e4c3f41 Linus Torvalds 2005-04-16 1085 continue;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1086
8feae13110d60c David Howells 2009-01-08 1087 if (pregion->vm_pgoff >= pgend)
^1da177e4c3f41 Linus Torvalds 2005-04-16 1088 continue;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1089
8feae13110d60c David Howells 2009-01-08 1090 rpglen = pregion->vm_end - pregion->vm_start;
8feae13110d60c David Howells 2009-01-08 1091 rpglen = (rpglen + PAGE_SIZE - 1) >> PAGE_SHIFT;
8feae13110d60c David Howells 2009-01-08 1092 rpgend = pregion->vm_pgoff + rpglen;
8feae13110d60c David Howells 2009-01-08 1093 if (pgoff >= rpgend)
^1da177e4c3f41 Linus Torvalds 2005-04-16 1094 continue;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1095
8feae13110d60c David Howells 2009-01-08 1096 /* handle inexactly overlapping matches between
8feae13110d60c David Howells 2009-01-08 1097 * mappings */
8feae13110d60c David Howells 2009-01-08 1098 if ((pregion->vm_pgoff != pgoff || rpglen != pglen) &&
8feae13110d60c David Howells 2009-01-08 1099 !(pgoff >= pregion->vm_pgoff && pgend <= rpgend)) {
8feae13110d60c David Howells 2009-01-08 1100 /* new mapping is not a subset of the region */
b4caecd48005fb Christoph Hellwig 2015-01-14 1101 if (!(capabilities & NOMMU_MAP_DIRECT))
^1da177e4c3f41 Linus Torvalds 2005-04-16 1102 goto sharing_violation;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1103 continue;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1104 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 1105
8feae13110d60c David Howells 2009-01-08 1106 /* we've found a region we can share */
1e2ae599d37e60 David Howells 2010-01-15 1107 pregion->vm_usage++;
8feae13110d60c David Howells 2009-01-08 1108 vma->vm_region = pregion;
8feae13110d60c David Howells 2009-01-08 1109 start = pregion->vm_start;
8feae13110d60c David Howells 2009-01-08 1110 start += (pgoff - pregion->vm_pgoff) << PAGE_SHIFT;
8feae13110d60c David Howells 2009-01-08 1111 vma->vm_start = start;
8feae13110d60c David Howells 2009-01-08 1112 vma->vm_end = start + len;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1113
22cc877b32202b Leon Romanovsky 2015-06-24 1114 if (pregion->vm_flags & VM_MAPPED_COPY)
1c71222e5f2393 Suren Baghdasaryan 2023-01-26 1115 vm_flags_set(vma, VM_MAPPED_COPY);
22cc877b32202b Leon Romanovsky 2015-06-24 1116 else {
8feae13110d60c David Howells 2009-01-08 1117 ret = do_mmap_shared_file(vma);
8feae13110d60c David Howells 2009-01-08 1118 if (ret < 0) {
8feae13110d60c David Howells 2009-01-08 1119 vma->vm_region = NULL;
8feae13110d60c David Howells 2009-01-08 1120 vma->vm_start = 0;
8feae13110d60c David Howells 2009-01-08 1121 vma->vm_end = 0;
1e2ae599d37e60 David Howells 2010-01-15 1122 pregion->vm_usage--;
8feae13110d60c David Howells 2009-01-08 1123 pregion = NULL;
8feae13110d60c David Howells 2009-01-08 1124 goto error_just_free;
8feae13110d60c David Howells 2009-01-08 1125 }
8feae13110d60c David Howells 2009-01-08 1126 }
8feae13110d60c David Howells 2009-01-08 1127 fput(region->vm_file);
8feae13110d60c David Howells 2009-01-08 1128 kmem_cache_free(vm_region_jar, region);
8feae13110d60c David Howells 2009-01-08 1129 region = pregion;
8feae13110d60c David Howells 2009-01-08 1130 result = start;
8feae13110d60c David Howells 2009-01-08 1131 goto share;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1132 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 1133
^1da177e4c3f41 Linus Torvalds 2005-04-16 1134 /* obtain the address at which to make a shared mapping
^1da177e4c3f41 Linus Torvalds 2005-04-16 1135 * - this is the hook for quasi-memory character devices to
^1da177e4c3f41 Linus Torvalds 2005-04-16 1136 * tell us the location of a shared mapping
^1da177e4c3f41 Linus Torvalds 2005-04-16 1137 */
b4caecd48005fb Christoph Hellwig 2015-01-14 1138 if (capabilities & NOMMU_MAP_DIRECT) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 1139 addr = file->f_op->get_unmapped_area(file, addr, len,
^1da177e4c3f41 Linus Torvalds 2005-04-16 1140 pgoff, flags);
bb005a59e08733 Namhyung Kim 2011-05-24 1141 if (IS_ERR_VALUE(addr)) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 1142 ret = addr;
bb005a59e08733 Namhyung Kim 2011-05-24 1143 if (ret != -ENOSYS)
8feae13110d60c David Howells 2009-01-08 1144 goto error_just_free;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1145
^1da177e4c3f41 Linus Torvalds 2005-04-16 1146 /* the driver refused to tell us where to site
^1da177e4c3f41 Linus Torvalds 2005-04-16 1147 * the mapping so we'll have to attempt to copy
^1da177e4c3f41 Linus Torvalds 2005-04-16 1148 * it */
bb005a59e08733 Namhyung Kim 2011-05-24 1149 ret = -ENODEV;
b4caecd48005fb Christoph Hellwig 2015-01-14 1150 if (!(capabilities & NOMMU_MAP_COPY))
8feae13110d60c David Howells 2009-01-08 1151 goto error_just_free;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1152
b4caecd48005fb Christoph Hellwig 2015-01-14 1153 capabilities &= ~NOMMU_MAP_DIRECT;
8feae13110d60c David Howells 2009-01-08 1154 } else {
8feae13110d60c David Howells 2009-01-08 1155 vma->vm_start = region->vm_start = addr;
8feae13110d60c David Howells 2009-01-08 1156 vma->vm_end = region->vm_end = addr + len;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1157 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 1158 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 1159 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 1160
8feae13110d60c David Howells 2009-01-08 1161 vma->vm_region = region;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1162
645d83c5db970a David Howells 2009-09-24 1163 /* set up the mapping
b4caecd48005fb Christoph Hellwig 2015-01-14 1164 * - the region is filled in if NOMMU_MAP_DIRECT is still set
645d83c5db970a David Howells 2009-09-24 1165 */
^1da177e4c3f41 Linus Torvalds 2005-04-16 1166 if (file && vma->vm_flags & VM_SHARED)
8feae13110d60c David Howells 2009-01-08 1167 ret = do_mmap_shared_file(vma);
^1da177e4c3f41 Linus Torvalds 2005-04-16 1168 else
645d83c5db970a David Howells 2009-09-24 1169 ret = do_mmap_private(vma, region, len, capabilities);
^1da177e4c3f41 Linus Torvalds 2005-04-16 1170 if (ret < 0)
645d83c5db970a David Howells 2009-09-24 1171 goto error_just_free;
645d83c5db970a David Howells 2009-09-24 1172 add_nommu_region(region);
8feae13110d60c David Howells 2009-01-08 1173
ea637639591def Jie Zhang 2009-12-14 1174 /* clear anonymous mappings that don't ask for uninitialized data */
0bf5f9492389aa Christoph Hellwig 2019-07-16 1175 if (!vma->vm_file &&
0bf5f9492389aa Christoph Hellwig 2019-07-16 1176 (!IS_ENABLED(CONFIG_MMAP_ALLOW_UNINITIALIZED) ||
0bf5f9492389aa Christoph Hellwig 2019-07-16 1177 !(flags & MAP_UNINITIALIZED)))
ea637639591def Jie Zhang 2009-12-14 1178 memset((void *)region->vm_start, 0,
ea637639591def Jie Zhang 2009-12-14 1179 region->vm_end - region->vm_start);
ea637639591def Jie Zhang 2009-12-14 1180
^1da177e4c3f41 Linus Torvalds 2005-04-16 1181 /* okay... we have a mapping; now we have to register it */
8feae13110d60c David Howells 2009-01-08 1182 result = vma->vm_start;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1183
^1da177e4c3f41 Linus Torvalds 2005-04-16 1184 current->mm->total_vm += len >> PAGE_SHIFT;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1185
8feae13110d60c David Howells 2009-01-08 1186 share:
07f1bc5ad79833 Liam R. Howlett 2023-01-20 1187 BUG_ON(!vma->vm_region);
07f1bc5ad79833 Liam R. Howlett 2023-01-20 1188 setup_vma_to_mm(vma, current->mm);
07f1bc5ad79833 Liam R. Howlett 2023-01-20 1189 current->mm->map_count++;
07f1bc5ad79833 Liam R. Howlett 2023-01-20 1190 /* add the VMA to the tree */
07f1bc5ad79833 Liam R. Howlett 2023-01-20 1191 vma_iter_store(&vmi, vma);
^1da177e4c3f41 Linus Torvalds 2005-04-16 1192
cfe79c00a2f4f6 Mike Frysinger 2010-01-06 1193 /* we flush the region from the icache only when the first executable
cfe79c00a2f4f6 Mike Frysinger 2010-01-06 1194 * mapping of it is made */
cfe79c00a2f4f6 Mike Frysinger 2010-01-06 1195 if (vma->vm_flags & VM_EXEC && !region->vm_icache_flushed) {
a75a2df68f87c4 Christoph Hellwig 2020-06-07 1196 flush_icache_user_range(region->vm_start, region->vm_end);
cfe79c00a2f4f6 Mike Frysinger 2010-01-06 1197 region->vm_icache_flushed = true;
cfe79c00a2f4f6 Mike Frysinger 2010-01-06 1198 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 1199
cfe79c00a2f4f6 Mike Frysinger 2010-01-06 1200 up_write(&nommu_region_sem);
^1da177e4c3f41 Linus Torvalds 2005-04-16 1201
8feae13110d60c David Howells 2009-01-08 1202 return result;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1203
8feae13110d60c David Howells 2009-01-08 1204 error_just_free:
8feae13110d60c David Howells 2009-01-08 1205 up_write(&nommu_region_sem);
8feae13110d60c David Howells 2009-01-08 1206 error:
47d9644de92c1a Liam R. Howlett 2023-01-20 1207 vma_iter_free(&vmi);
89a8640279f8bb David Howells 2009-10-30 1208 if (region->vm_file)
8feae13110d60c David Howells 2009-01-08 1209 fput(region->vm_file);
8feae13110d60c David Howells 2009-01-08 1210 kmem_cache_free(vm_region_jar, region);
89a8640279f8bb David Howells 2009-10-30 1211 if (vma->vm_file)
8feae13110d60c David Howells 2009-01-08 1212 fput(vma->vm_file);
3928d4f5ee37cd Linus Torvalds 2018-07-21 1213 vm_area_free(vma);
^1da177e4c3f41 Linus Torvalds 2005-04-16 1214 return ret;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1215
^1da177e4c3f41 Linus Torvalds 2005-04-16 1216 sharing_violation:
8feae13110d60c David Howells 2009-01-08 1217 up_write(&nommu_region_sem);
22cc877b32202b Leon Romanovsky 2015-06-24 1218 pr_warn("Attempt to share mismatched mappings\n");
8feae13110d60c David Howells 2009-01-08 1219 ret = -EINVAL;
8feae13110d60c David Howells 2009-01-08 1220 goto error;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1221
^1da177e4c3f41 Linus Torvalds 2005-04-16 1222 error_getting_vma:
8feae13110d60c David Howells 2009-01-08 1223 kmem_cache_free(vm_region_jar, region);
22cc877b32202b Leon Romanovsky 2015-06-24 1224 pr_warn("Allocation of vma for %lu byte allocation from process %d failed\n",
^1da177e4c3f41 Linus Torvalds 2005-04-16 1225 len, current->pid);
7c669cfbec1271 Kefeng Wang 2023-06-29 1226 show_mem();
^1da177e4c3f41 Linus Torvalds 2005-04-16 1227 return -ENOMEM;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1228
8feae13110d60c David Howells 2009-01-08 1229 error_getting_region:
22cc877b32202b Leon Romanovsky 2015-06-24 1230 pr_warn("Allocation of vm region for %lu byte allocation from process %d failed\n",
^1da177e4c3f41 Linus Torvalds 2005-04-16 1231 len, current->pid);
7c669cfbec1271 Kefeng Wang 2023-06-29 1232 show_mem();
^1da177e4c3f41 Linus Torvalds 2005-04-16 1233 return -ENOMEM;
8220543df1489e Matthew Wilcox (Oracle 2022-09-06 1234)
47d9644de92c1a Liam R. Howlett 2023-01-20 1235 error_vma_iter_prealloc:
8220543df1489e Matthew Wilcox (Oracle 2022-09-06 1236) kmem_cache_free(vm_region_jar, region);
8220543df1489e Matthew Wilcox (Oracle 2022-09-06 1237) vm_area_free(vma);
8220543df1489e Matthew Wilcox (Oracle 2022-09-06 1238) pr_warn("Allocation of vma tree for process %d failed\n", current->pid);
8220543df1489e Matthew Wilcox (Oracle 2022-09-06 @1239) show_free_areas(0, NULL);
8220543df1489e Matthew Wilcox (Oracle 2022-09-06 1240) return -ENOMEM;
8220543df1489e Matthew Wilcox (Oracle 2022-09-06 1241)
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 1/2] mm: remove arguments of show_mem()
2023-06-29 10:43 [PATCH 1/2] mm: remove arguments of show_mem() Kefeng Wang
2023-06-29 10:43 ` [PATCH 2/2] mm: make show_free_areas() static Kefeng Wang
@ 2023-06-29 15:17 ` Matthew Wilcox
2023-06-30 0:53 ` Kefeng Wang
1 sibling, 1 reply; 7+ messages in thread
From: Matthew Wilcox @ 2023-06-29 15:17 UTC (permalink / raw)
To: Kefeng Wang
Cc: Andrew Morton, linux-kernel, linux-mm, linuxppc-dev,
Greg Kroah-Hartman, Michael Ellerman, Nicholas Piggin,
Christophe Leroy
On Thu, Jun 29, 2023 at 06:43:56PM +0800, Kefeng Wang wrote:
> Directly call __show_mem(0, NULL, MAX_NR_ZONES - 1) in show_mem()
> to remove the arguments of show_mem().
Do you mean, "All callers of show_mem() pass 0 and NULL, so we can
remove the two arguments"?
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 1/2] mm: remove arguments of show_mem()
2023-06-29 15:17 ` [PATCH 1/2] mm: remove arguments of show_mem() Matthew Wilcox
@ 2023-06-30 0:53 ` Kefeng Wang
0 siblings, 0 replies; 7+ messages in thread
From: Kefeng Wang @ 2023-06-30 0:53 UTC (permalink / raw)
To: Matthew Wilcox
Cc: Andrew Morton, linux-kernel, linux-mm, linuxppc-dev,
Greg Kroah-Hartman, Michael Ellerman, Nicholas Piggin,
Christophe Leroy
On 2023/6/29 23:17, Matthew Wilcox wrote:
> On Thu, Jun 29, 2023 at 06:43:56PM +0800, Kefeng Wang wrote:
>> Directly call __show_mem(0, NULL, MAX_NR_ZONES - 1) in show_mem()
>> to remove the arguments of show_mem().
>
> Do you mean, "All callers of show_mem() pass 0 and NULL, so we can
> remove the two arguments"?
Yes, will update with above to make it clear, thanks Matthew.
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 2/2] mm: make show_free_areas() static
2023-06-29 15:00 ` kernel test robot
@ 2023-06-30 0:55 ` Kefeng Wang
0 siblings, 0 replies; 7+ messages in thread
From: Kefeng Wang @ 2023-06-30 0:55 UTC (permalink / raw)
To: kernel test robot, Andrew Morton
Cc: oe-kbuild-all, Linux Memory Management List, linux-kernel,
linuxppc-dev, Greg Kroah-Hartman, Michael Ellerman,
Nicholas Piggin, Christophe Leroy
Thanks,
On 2023/6/29 23:00, kernel test robot wrote:
> Hi Kefeng,
>
> kernel test robot noticed the following build errors:
>
> [auto build test ERROR on akpm-mm/mm-everything]
>
> url: https://github.com/intel-lab-lkp/linux/commits/Kefeng-Wang/mm-make-show_free_areas-static/20230629-182958
> base: https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-everything
> patch link: https://lore.kernel.org/r/20230629104357.35455-2-wangkefeng.wang%40huawei.com
> patch subject: [PATCH 2/2] mm: make show_free_areas() static
> config: sh-allmodconfig (https://download.01.org/0day-ci/archive/20230629/202306292240.Rj0DlHfI-lkp@intel.com/config)
> compiler: sh4-linux-gcc (GCC) 12.3.0
> reproduce: (https://download.01.org/0day-ci/archive/20230629/202306292240.Rj0DlHfI-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/202306292240.Rj0DlHfI-lkp@intel.com/
>
> All errors (new ones prefixed by >>):
>
> mm/nommu.c: In function 'do_mmap':
>>> mm/nommu.c:1239:9: error: implicit declaration of function 'show_free_areas' [-Werror=implicit-function-declaration]
> 1239 | show_free_areas(0, NULL);
> | ^~~~~~~~~~~~~~~
> cc1: some warnings being treated as errors
>
>
Missing this one in patch-1, will update
> vim +/show_free_areas +1239 mm/nommu.c
>
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2023-06-30 0:55 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-06-29 10:43 [PATCH 1/2] mm: remove arguments of show_mem() Kefeng Wang
2023-06-29 10:43 ` [PATCH 2/2] mm: make show_free_areas() static Kefeng Wang
2023-06-29 15:00 ` kernel test robot
2023-06-30 0:55 ` Kefeng Wang
2023-06-29 15:10 ` kernel test robot
2023-06-29 15:17 ` [PATCH 1/2] mm: remove arguments of show_mem() Matthew Wilcox
2023-06-30 0:53 ` Kefeng Wang
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox