Skip to content

Commit f5f0da5

Browse files
sourabhjainsmpe
authored andcommitted
powerpc/kexec: move *_memory_ranges functions to ranges.c
Move the following functions form kexec/{file_load_64.c => ranges.c} and make them public so that components other than KEXEC_FILE can also use these functions. 1. get_exclude_memory_ranges 2. get_reserved_memory_ranges 3. get_crash_memory_ranges 4. get_usable_memory_ranges Later in the series get_crash_memory_ranges function is utilized for in-kernel updates to kdump image during CPU/Memory hotplug or online/offline events for both kexec_load and kexec_file_load syscalls. Since the above functions are moved to ranges.c, some of the helper functions in ranges.c are no longer required to be public. Mark them as static and removed them from kexec_ranges.h header file. Finally, remove the CONFIG_KEXEC_FILE build dependency for range.c because it is required for other config, such as CONFIG_CRASH_DUMP. No functional changes are intended. Signed-off-by: Sourabh Jain <[email protected]> Acked-by: Hari Bathini <[email protected]> Signed-off-by: Michael Ellerman <[email protected]> Link: https://msgid.link/[email protected]
1 parent 7936502 commit f5f0da5

File tree

4 files changed

+224
-216
lines changed

4 files changed

+224
-216
lines changed

arch/powerpc/include/asm/kexec_ranges.h

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,8 @@
77
void sort_memory_ranges(struct crash_mem *mrngs, bool merge);
88
struct crash_mem *realloc_mem_ranges(struct crash_mem **mem_ranges);
99
int add_mem_range(struct crash_mem **mem_ranges, u64 base, u64 size);
10-
int add_tce_mem_ranges(struct crash_mem **mem_ranges);
11-
int add_initrd_mem_range(struct crash_mem **mem_ranges);
12-
#ifdef CONFIG_PPC_64S_HASH_MMU
13-
int add_htab_mem_range(struct crash_mem **mem_ranges);
14-
#else
15-
static inline int add_htab_mem_range(struct crash_mem **mem_ranges)
16-
{
17-
return 0;
18-
}
19-
#endif
20-
int add_kernel_mem_range(struct crash_mem **mem_ranges);
21-
int add_rtas_mem_range(struct crash_mem **mem_ranges);
22-
int add_opal_mem_range(struct crash_mem **mem_ranges);
23-
int add_reserved_mem_ranges(struct crash_mem **mem_ranges);
24-
10+
int get_exclude_memory_ranges(struct crash_mem **mem_ranges);
11+
int get_reserved_memory_ranges(struct crash_mem **mem_ranges);
12+
int get_crash_memory_ranges(struct crash_mem **mem_ranges);
13+
int get_usable_memory_ranges(struct crash_mem **mem_ranges);
2514
#endif /* _ASM_POWERPC_KEXEC_RANGES_H */

arch/powerpc/kexec/Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33
# Makefile for the linux kernel.
44
#
55

6-
obj-y += core.o core_$(BITS).o
6+
obj-y += core.o core_$(BITS).o ranges.o
77

88
obj-$(CONFIG_PPC32) += relocate_32.o
99

10-
obj-$(CONFIG_KEXEC_FILE) += file_load.o ranges.o file_load_$(BITS).o elf_$(BITS).o
10+
obj-$(CONFIG_KEXEC_FILE) += file_load.o file_load_$(BITS).o elf_$(BITS).o
1111
obj-$(CONFIG_VMCORE_INFO) += vmcore_info.o
1212
obj-$(CONFIG_CRASH_DUMP) += crash.o
1313

arch/powerpc/kexec/file_load_64.c

Lines changed: 0 additions & 190 deletions
Original file line numberDiff line numberDiff line change
@@ -47,83 +47,6 @@ const struct kexec_file_ops * const kexec_file_loaders[] = {
4747
NULL
4848
};
4949

50-
/**
51-
* get_exclude_memory_ranges - Get exclude memory ranges. This list includes
52-
* regions like opal/rtas, tce-table, initrd,
53-
* kernel, htab which should be avoided while
54-
* setting up kexec load segments.
55-
* @mem_ranges: Range list to add the memory ranges to.
56-
*
57-
* Returns 0 on success, negative errno on error.
58-
*/
59-
static int get_exclude_memory_ranges(struct crash_mem **mem_ranges)
60-
{
61-
int ret;
62-
63-
ret = add_tce_mem_ranges(mem_ranges);
64-
if (ret)
65-
goto out;
66-
67-
ret = add_initrd_mem_range(mem_ranges);
68-
if (ret)
69-
goto out;
70-
71-
ret = add_htab_mem_range(mem_ranges);
72-
if (ret)
73-
goto out;
74-
75-
ret = add_kernel_mem_range(mem_ranges);
76-
if (ret)
77-
goto out;
78-
79-
ret = add_rtas_mem_range(mem_ranges);
80-
if (ret)
81-
goto out;
82-
83-
ret = add_opal_mem_range(mem_ranges);
84-
if (ret)
85-
goto out;
86-
87-
ret = add_reserved_mem_ranges(mem_ranges);
88-
if (ret)
89-
goto out;
90-
91-
/* exclude memory ranges should be sorted for easy lookup */
92-
sort_memory_ranges(*mem_ranges, true);
93-
out:
94-
if (ret)
95-
pr_err("Failed to setup exclude memory ranges\n");
96-
return ret;
97-
}
98-
99-
/**
100-
* get_reserved_memory_ranges - Get reserve memory ranges. This list includes
101-
* memory regions that should be added to the
102-
* memory reserve map to ensure the region is
103-
* protected from any mischief.
104-
* @mem_ranges: Range list to add the memory ranges to.
105-
*
106-
* Returns 0 on success, negative errno on error.
107-
*/
108-
static int get_reserved_memory_ranges(struct crash_mem **mem_ranges)
109-
{
110-
int ret;
111-
112-
ret = add_rtas_mem_range(mem_ranges);
113-
if (ret)
114-
goto out;
115-
116-
ret = add_tce_mem_ranges(mem_ranges);
117-
if (ret)
118-
goto out;
119-
120-
ret = add_reserved_mem_ranges(mem_ranges);
121-
out:
122-
if (ret)
123-
pr_err("Failed to setup reserved memory ranges\n");
124-
return ret;
125-
}
126-
12750
/**
12851
* __locate_mem_hole_top_down - Looks top down for a large enough memory hole
12952
* in the memory regions between buf_min & buf_max
@@ -322,119 +245,6 @@ static int locate_mem_hole_bottom_up_ppc64(struct kexec_buf *kbuf,
322245
}
323246

324247
#ifdef CONFIG_CRASH_DUMP
325-
/**
326-
* get_usable_memory_ranges - Get usable memory ranges. This list includes
327-
* regions like crashkernel, opal/rtas & tce-table,
328-
* that kdump kernel could use.
329-
* @mem_ranges: Range list to add the memory ranges to.
330-
*
331-
* Returns 0 on success, negative errno on error.
332-
*/
333-
static int get_usable_memory_ranges(struct crash_mem **mem_ranges)
334-
{
335-
int ret;
336-
337-
/*
338-
* Early boot failure observed on guests when low memory (first memory
339-
* block?) is not added to usable memory. So, add [0, crashk_res.end]
340-
* instead of [crashk_res.start, crashk_res.end] to workaround it.
341-
* Also, crashed kernel's memory must be added to reserve map to
342-
* avoid kdump kernel from using it.
343-
*/
344-
ret = add_mem_range(mem_ranges, 0, crashk_res.end + 1);
345-
if (ret)
346-
goto out;
347-
348-
ret = add_rtas_mem_range(mem_ranges);
349-
if (ret)
350-
goto out;
351-
352-
ret = add_opal_mem_range(mem_ranges);
353-
if (ret)
354-
goto out;
355-
356-
ret = add_tce_mem_ranges(mem_ranges);
357-
out:
358-
if (ret)
359-
pr_err("Failed to setup usable memory ranges\n");
360-
return ret;
361-
}
362-
363-
/**
364-
* get_crash_memory_ranges - Get crash memory ranges. This list includes
365-
* first/crashing kernel's memory regions that
366-
* would be exported via an elfcore.
367-
* @mem_ranges: Range list to add the memory ranges to.
368-
*
369-
* Returns 0 on success, negative errno on error.
370-
*/
371-
static int get_crash_memory_ranges(struct crash_mem **mem_ranges)
372-
{
373-
phys_addr_t base, end;
374-
struct crash_mem *tmem;
375-
u64 i;
376-
int ret;
377-
378-
for_each_mem_range(i, &base, &end) {
379-
u64 size = end - base;
380-
381-
/* Skip backup memory region, which needs a separate entry */
382-
if (base == BACKUP_SRC_START) {
383-
if (size > BACKUP_SRC_SIZE) {
384-
base = BACKUP_SRC_END + 1;
385-
size -= BACKUP_SRC_SIZE;
386-
} else
387-
continue;
388-
}
389-
390-
ret = add_mem_range(mem_ranges, base, size);
391-
if (ret)
392-
goto out;
393-
394-
/* Try merging adjacent ranges before reallocation attempt */
395-
if ((*mem_ranges)->nr_ranges == (*mem_ranges)->max_nr_ranges)
396-
sort_memory_ranges(*mem_ranges, true);
397-
}
398-
399-
/* Reallocate memory ranges if there is no space to split ranges */
400-
tmem = *mem_ranges;
401-
if (tmem && (tmem->nr_ranges == tmem->max_nr_ranges)) {
402-
tmem = realloc_mem_ranges(mem_ranges);
403-
if (!tmem)
404-
goto out;
405-
}
406-
407-
/* Exclude crashkernel region */
408-
ret = crash_exclude_mem_range(tmem, crashk_res.start, crashk_res.end);
409-
if (ret)
410-
goto out;
411-
412-
/*
413-
* FIXME: For now, stay in parity with kexec-tools but if RTAS/OPAL
414-
* regions are exported to save their context at the time of
415-
* crash, they should actually be backed up just like the
416-
* first 64K bytes of memory.
417-
*/
418-
ret = add_rtas_mem_range(mem_ranges);
419-
if (ret)
420-
goto out;
421-
422-
ret = add_opal_mem_range(mem_ranges);
423-
if (ret)
424-
goto out;
425-
426-
/* create a separate program header for the backup region */
427-
ret = add_mem_range(mem_ranges, BACKUP_SRC_START, BACKUP_SRC_SIZE);
428-
if (ret)
429-
goto out;
430-
431-
sort_memory_ranges(*mem_ranges, false);
432-
out:
433-
if (ret)
434-
pr_err("Failed to setup crash memory ranges\n");
435-
return ret;
436-
}
437-
438248
/**
439249
* check_realloc_usable_mem - Reallocate buffer if it can't accommodate entries
440250
* @um_info: Usable memory buffer and ranges info.

0 commit comments

Comments
 (0)