public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] delete unnecessary bootmem struct page array
@ 2014-06-01 13:08 Real Name
  2014-06-01 13:08 ` Real Name
  0 siblings, 1 reply; 8+ messages in thread
From: Real Name @ 2014-06-01 13:08 UTC (permalink / raw)
  To: user-mode-linux-devel; +Cc: richard, linux-kernel, Honggang Li

From: Honggang Li <enjoymindful@gmail.com>

The patch based on linux-next-20140530.

Honggang Li (1):
  delete unnecessary bootmem struct page array

 arch/um/kernel/um_arch.c | 6 ------
 1 file changed, 6 deletions(-)

-- 
1.8.3.1


^ permalink raw reply	[flat|nested] 8+ messages in thread
* [PATCH v2] delete unnecessary bootmem struct page array
@ 2014-06-03  5:30 Real Name
  2014-06-03  5:30 ` [PATCH] " Real Name
  0 siblings, 1 reply; 8+ messages in thread
From: Real Name @ 2014-06-03  5:30 UTC (permalink / raw)
  To: user-mode-linux-devel; +Cc: richard, linux-kernel, Honggang Li

From: Honggang Li <enjoymindful@gmail.com>

The patch based on linux-next-2014-06-02.

The old init_maps function does two things:
1) allocates and initializes one struct page array for bootmem
2) count the number of total pages

After removed the source code related to the unnecessary array, the name 
'init_maps' is some kind of improper named, as it just count the number of
total page numbers. So, I renamed the function as 'mem_total_pages'.

I tested the patch through repeat reboot the uml kernel many times.
[real@name linux-next]$ make ARCH=um defconfig
[real@name linux-next]$ make ARCH=um linux
[real@name linux-next]$ file linux
linux: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, not stripped
[real@name linux-next]$ ./linux ubda=/home/real/linux-next/Fedora20-AMD64-root_fs mem=256m && sync && echo 1
[real@name linux-next]$ ./linux ubda=/home/real/linux-next/Fedora20-AMD64-root_fs mem=256m && sync && echo 2
(repeat reboot the uml kernel many times..)

Honggang Li (1):
  delete unnecessary bootmem struct page array

 arch/um/include/shared/mem_user.h |  2 +-
 arch/um/kernel/physmem.c          | 32 ++++++--------------------------
 arch/um/kernel/um_arch.c          |  7 +------
 3 files changed, 8 insertions(+), 33 deletions(-)

-- 
1.8.3.1


^ permalink raw reply	[flat|nested] 8+ messages in thread
* [PATCH] delete unnecessary bootmem struct page array
@ 2014-06-01  0:24 Real Name
  2014-06-01  7:54 ` Richard Weinberger
  0 siblings, 1 reply; 8+ messages in thread
From: Real Name @ 2014-06-01  0:24 UTC (permalink / raw)
  To: user-mode-linux-devel; +Cc: richard, linux-kernel, Real Name

1) uml kernel bootmem managed through bootmem_data->node_bootmem_map,
not struct page array, so it is unnecessary.

2) the struct page array allocate has been pointer by a *loacl* pointer
struct page *map in init_maps function. The array can't be access after
the init_maps exit. As a result, there is about 1% of total memory leak.
---
 arch/um/kernel/um_arch.c | 6 ------
 1 file changed, 6 deletions(-)

diff --git a/arch/um/kernel/um_arch.c b/arch/um/kernel/um_arch.c
index 016adf0..d4c98d1 100644
--- a/arch/um/kernel/um_arch.c
+++ b/arch/um/kernel/um_arch.c
@@ -348,12 +348,6 @@ int __init linux_main(int argc, char **argv)
 	start_vm = VMALLOC_START;
 
 	setup_physmem(uml_physmem, uml_reserved, physmem_size, highmem);
-	if (init_maps(physmem_size, iomem_size, highmem)) {
-		printf("Failed to allocate mem_map for %Lu bytes of physical "
-		       "memory and %Lu bytes of highmem\n", physmem_size,
-		       highmem);
-		exit(1);
-	}
 
 	virtmem_size = physmem_size;
 	stack = (unsigned long) argv;
-- 
1.8.3.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread
* [PATCH] delete unnecessary bootmem struct page array
@ 2014-05-31 23:34 Real Name
  2014-06-01  0:12 ` Real Name
  0 siblings, 1 reply; 8+ messages in thread
From: Real Name @ 2014-05-31 23:34 UTC (permalink / raw)
  To: user-mode-linux-devel; +Cc: richard, linux-kernel, Real Name

1) uml kernel bootmem managed through bootmem_data->node_bootmem_map,
not struct page array, so it is unnecessary.

2) the struct page array allocate has been pointer by a *loacl* pointer
struct page *map in init_maps function. The array can't be access after
the init_maps exit. As a result, there is about 1% of total memory leak.
---
 arch/um/kernel/um_arch.c | 5 -----
 1 file changed, 5 deletions(-)

diff --git a/arch/um/kernel/um_arch.c b/arch/um/kernel/um_arch.c
index 016adf0..9f3c6d1 100644
--- a/arch/um/kernel/um_arch.c
+++ b/arch/um/kernel/um_arch.c
@@ -309,11 +309,6 @@ int __init linux_main(int argc, char **argv)
 	 */
 
 	diff = UML_ROUND_UP(brk_start) - UML_ROUND_UP(&_end);
-	if (diff > 1024 * 1024) {
-		printf("Adding %ld bytes to physical memory to account for "
-		       "exec-shield gap\n", diff);
-		physmem_size += UML_ROUND_UP(brk_start) - UML_ROUND_UP(&_end);
-	}
 
 	uml_physmem = (unsigned long) &__binary_start & PAGE_MASK;
 
-- 
1.8.3.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2014-06-03  5:31 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-06-01 13:08 [PATCH] delete unnecessary bootmem struct page array Real Name
2014-06-01 13:08 ` Real Name
2014-06-01 13:57   ` Richard Weinberger
  -- strict thread matches above, loose matches on Subject: below --
2014-06-03  5:30 [PATCH v2] " Real Name
2014-06-03  5:30 ` [PATCH] " Real Name
2014-06-01  0:24 Real Name
2014-06-01  7:54 ` Richard Weinberger
2014-05-31 23:34 Real Name
2014-06-01  0:12 ` Real Name

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox