mirror of
				https://github.com/torvalds/linux.git
				synced 2025-10-31 16:48:26 +02:00 
			
		
		
		
	kdump: add missing RAM resource in crash_shrink_memory()
When shrinking crashkernel memory using /sys/kernel/kexec_crash_size for
the newly added memory no RAM resource is created at the moment.
Example:
  $ cat /proc/iomem
  00000000-bfffffff : System RAM
    00000000-005b7ac3 : Kernel code
    005b7ac4-009743bf : Kernel data
    009bb000-00a85c33 : Kernel bss
  c0000000-cfffffff : Crash kernel
  d0000000-ffffffff : System RAM
  $ echo 0 > /sys/kernel/kexec_crash_size
  $ cat /proc/iomem
  00000000-bfffffff : System RAM
    00000000-005b7ac3 : Kernel code
    005b7ac4-009743bf : Kernel data
    009bb000-00a85c33 : Kernel bss
                                   <<-- here is System RAM missing
  d0000000-ffffffff : System RAM
One result of this bug is that the memory chunk can never be set offline
using memory hotplug.  With this patch I insert a new "System RAM"
resource for the released memory.  Then the upper example looks like the
following:
  $ echo 0 > /sys/kernel/kexec_crash_size
  $ cat /proc/iomem
  00000000-bfffffff : System RAM
    00000000-005b7ac3 : Kernel code
    005b7ac4-009743bf : Kernel data
    009bb000-00a85c33 : Kernel bss
  c0000000-cfffffff : System RAM   <<-- new rescoure
  d0000000-ffffffff : System RAM
And now I can set chunk c0000000-cfffffff offline.
Signed-off-by: Michael Holzheu <holzheu@linux.vnet.ibm.com>
Cc: Vivek Goyal <vgoyal@redhat.com>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
			
			
This commit is contained in:
		
							parent
							
								
									a3dd332305
								
							
						
					
					
						commit
						6480e5a092
					
				
					 1 changed files with 15 additions and 0 deletions
				
			
		|  | @ -1129,6 +1129,7 @@ int crash_shrink_memory(unsigned long new_size) | ||||||
| { | { | ||||||
| 	int ret = 0; | 	int ret = 0; | ||||||
| 	unsigned long start, end; | 	unsigned long start, end; | ||||||
|  | 	struct resource *ram_res; | ||||||
| 
 | 
 | ||||||
| 	mutex_lock(&kexec_mutex); | 	mutex_lock(&kexec_mutex); | ||||||
| 
 | 
 | ||||||
|  | @ -1146,6 +1147,12 @@ int crash_shrink_memory(unsigned long new_size) | ||||||
| 		goto unlock; | 		goto unlock; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	ram_res = kzalloc(sizeof(*ram_res), GFP_KERNEL); | ||||||
|  | 	if (!ram_res) { | ||||||
|  | 		ret = -ENOMEM; | ||||||
|  | 		goto unlock; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	start = roundup(start, KEXEC_CRASH_MEM_ALIGN); | 	start = roundup(start, KEXEC_CRASH_MEM_ALIGN); | ||||||
| 	end = roundup(start + new_size, KEXEC_CRASH_MEM_ALIGN); | 	end = roundup(start + new_size, KEXEC_CRASH_MEM_ALIGN); | ||||||
| 
 | 
 | ||||||
|  | @ -1154,7 +1161,15 @@ int crash_shrink_memory(unsigned long new_size) | ||||||
| 
 | 
 | ||||||
| 	if ((start == end) && (crashk_res.parent != NULL)) | 	if ((start == end) && (crashk_res.parent != NULL)) | ||||||
| 		release_resource(&crashk_res); | 		release_resource(&crashk_res); | ||||||
|  | 
 | ||||||
|  | 	ram_res->start = end; | ||||||
|  | 	ram_res->end = crashk_res.end; | ||||||
|  | 	ram_res->flags = IORESOURCE_BUSY | IORESOURCE_MEM; | ||||||
|  | 	ram_res->name = "System RAM"; | ||||||
|  | 
 | ||||||
| 	crashk_res.end = end - 1; | 	crashk_res.end = end - 1; | ||||||
|  | 
 | ||||||
|  | 	insert_resource(&iomem_resource, ram_res); | ||||||
| 	crash_unmap_reserved_pages(); | 	crash_unmap_reserved_pages(); | ||||||
| 
 | 
 | ||||||
| unlock: | unlock: | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Michael Holzheu
						Michael Holzheu