@@ -96,119 +96,6 @@ static int get_exclude_memory_ranges(struct crash_mem **mem_ranges)
96
96
return ret ;
97
97
}
98
98
99
- /**
100
- * get_usable_memory_ranges - Get usable memory ranges. This list includes
101
- * regions like crashkernel, opal/rtas & tce-table,
102
- * that kdump kernel could use.
103
- * @mem_ranges: Range list to add the memory ranges to.
104
- *
105
- * Returns 0 on success, negative errno on error.
106
- */
107
- static int get_usable_memory_ranges (struct crash_mem * * mem_ranges )
108
- {
109
- int ret ;
110
-
111
- /*
112
- * Early boot failure observed on guests when low memory (first memory
113
- * block?) is not added to usable memory. So, add [0, crashk_res.end]
114
- * instead of [crashk_res.start, crashk_res.end] to workaround it.
115
- * Also, crashed kernel's memory must be added to reserve map to
116
- * avoid kdump kernel from using it.
117
- */
118
- ret = add_mem_range (mem_ranges , 0 , crashk_res .end + 1 );
119
- if (ret )
120
- goto out ;
121
-
122
- ret = add_rtas_mem_range (mem_ranges );
123
- if (ret )
124
- goto out ;
125
-
126
- ret = add_opal_mem_range (mem_ranges );
127
- if (ret )
128
- goto out ;
129
-
130
- ret = add_tce_mem_ranges (mem_ranges );
131
- out :
132
- if (ret )
133
- pr_err ("Failed to setup usable memory ranges\n" );
134
- return ret ;
135
- }
136
-
137
- /**
138
- * get_crash_memory_ranges - Get crash memory ranges. This list includes
139
- * first/crashing kernel's memory regions that
140
- * would be exported via an elfcore.
141
- * @mem_ranges: Range list to add the memory ranges to.
142
- *
143
- * Returns 0 on success, negative errno on error.
144
- */
145
- static int get_crash_memory_ranges (struct crash_mem * * mem_ranges )
146
- {
147
- phys_addr_t base , end ;
148
- struct crash_mem * tmem ;
149
- u64 i ;
150
- int ret ;
151
-
152
- for_each_mem_range (i , & base , & end ) {
153
- u64 size = end - base ;
154
-
155
- /* Skip backup memory region, which needs a separate entry */
156
- if (base == BACKUP_SRC_START ) {
157
- if (size > BACKUP_SRC_SIZE ) {
158
- base = BACKUP_SRC_END + 1 ;
159
- size -= BACKUP_SRC_SIZE ;
160
- } else
161
- continue ;
162
- }
163
-
164
- ret = add_mem_range (mem_ranges , base , size );
165
- if (ret )
166
- goto out ;
167
-
168
- /* Try merging adjacent ranges before reallocation attempt */
169
- if ((* mem_ranges )-> nr_ranges == (* mem_ranges )-> max_nr_ranges )
170
- sort_memory_ranges (* mem_ranges , true);
171
- }
172
-
173
- /* Reallocate memory ranges if there is no space to split ranges */
174
- tmem = * mem_ranges ;
175
- if (tmem && (tmem -> nr_ranges == tmem -> max_nr_ranges )) {
176
- tmem = realloc_mem_ranges (mem_ranges );
177
- if (!tmem )
178
- goto out ;
179
- }
180
-
181
- /* Exclude crashkernel region */
182
- ret = crash_exclude_mem_range (tmem , crashk_res .start , crashk_res .end );
183
- if (ret )
184
- goto out ;
185
-
186
- /*
187
- * FIXME: For now, stay in parity with kexec-tools but if RTAS/OPAL
188
- * regions are exported to save their context at the time of
189
- * crash, they should actually be backed up just like the
190
- * first 64K bytes of memory.
191
- */
192
- ret = add_rtas_mem_range (mem_ranges );
193
- if (ret )
194
- goto out ;
195
-
196
- ret = add_opal_mem_range (mem_ranges );
197
- if (ret )
198
- goto out ;
199
-
200
- /* create a separate program header for the backup region */
201
- ret = add_mem_range (mem_ranges , BACKUP_SRC_START , BACKUP_SRC_SIZE );
202
- if (ret )
203
- goto out ;
204
-
205
- sort_memory_ranges (* mem_ranges , false);
206
- out :
207
- if (ret )
208
- pr_err ("Failed to setup crash memory ranges\n" );
209
- return ret ;
210
- }
211
-
212
99
/**
213
100
* get_reserved_memory_ranges - Get reserve memory ranges. This list includes
214
101
* memory regions that should be added to the
@@ -434,6 +321,120 @@ static int locate_mem_hole_bottom_up_ppc64(struct kexec_buf *kbuf,
434
321
return ret ;
435
322
}
436
323
324
+ #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
+
437
438
/**
438
439
* check_realloc_usable_mem - Reallocate buffer if it can't accommodate entries
439
440
* @um_info: Usable memory buffer and ranges info.
@@ -863,6 +864,7 @@ int load_crashdump_segments_ppc64(struct kimage *image,
863
864
864
865
return 0 ;
865
866
}
867
+ #endif
866
868
867
869
/**
868
870
* setup_purgatory_ppc64 - initialize PPC64 specific purgatory's global
@@ -972,26 +974,14 @@ static unsigned int cpu_node_size(void)
972
974
return size ;
973
975
}
974
976
975
- /**
976
- * kexec_extra_fdt_size_ppc64 - Return the estimated additional size needed to
977
- * setup FDT for kexec/kdump kernel.
978
- * @image: kexec image being loaded.
979
- *
980
- * Returns the estimated extra size needed for kexec/kdump kernel FDT.
981
- */
982
- unsigned int kexec_extra_fdt_size_ppc64 (struct kimage * image )
977
+ static unsigned int kdump_extra_fdt_size_ppc64 (struct kimage * image )
983
978
{
984
979
unsigned int cpu_nodes , extra_size = 0 ;
985
980
struct device_node * dn ;
986
981
u64 usm_entries ;
987
982
988
- // Budget some space for the password blob. There's already extra space
989
- // for the key name
990
- if (plpks_is_available ())
991
- extra_size += (unsigned int )plpks_get_passwordlen ();
992
-
993
- if (image -> type != KEXEC_TYPE_CRASH )
994
- return extra_size ;
983
+ if (!IS_ENABLED (CONFIG_CRASH_DUMP ) || image -> type != KEXEC_TYPE_CRASH )
984
+ return 0 ;
995
985
996
986
/*
997
987
* For kdump kernel, account for linux,usable-memory and
@@ -1019,6 +1009,25 @@ unsigned int kexec_extra_fdt_size_ppc64(struct kimage *image)
1019
1009
return extra_size ;
1020
1010
}
1021
1011
1012
+ /**
1013
+ * kexec_extra_fdt_size_ppc64 - Return the estimated additional size needed to
1014
+ * setup FDT for kexec/kdump kernel.
1015
+ * @image: kexec image being loaded.
1016
+ *
1017
+ * Returns the estimated extra size needed for kexec/kdump kernel FDT.
1018
+ */
1019
+ unsigned int kexec_extra_fdt_size_ppc64 (struct kimage * image )
1020
+ {
1021
+ unsigned int extra_size = 0 ;
1022
+
1023
+ // Budget some space for the password blob. There's already extra space
1024
+ // for the key name
1025
+ if (plpks_is_available ())
1026
+ extra_size += (unsigned int )plpks_get_passwordlen ();
1027
+
1028
+ return extra_size + kdump_extra_fdt_size_ppc64 (image );
1029
+ }
1030
+
1022
1031
/**
1023
1032
* add_node_props - Reads node properties from device node structure and add
1024
1033
* them to fdt.
@@ -1171,6 +1180,7 @@ int setup_new_fdt_ppc64(const struct kimage *image, void *fdt,
1171
1180
struct crash_mem * umem = NULL , * rmem = NULL ;
1172
1181
int i , nr_ranges , ret ;
1173
1182
1183
+ #ifdef CONFIG_CRASH_DUMP
1174
1184
/*
1175
1185
* Restrict memory usage for kdump kernel by setting up
1176
1186
* usable memory ranges and memory reserve map.
@@ -1207,6 +1217,7 @@ int setup_new_fdt_ppc64(const struct kimage *image, void *fdt,
1207
1217
goto out ;
1208
1218
}
1209
1219
}
1220
+ #endif
1210
1221
1211
1222
/* Update cpus nodes information to account hotplug CPUs. */
1212
1223
ret = update_cpus_node (fdt );
@@ -1278,7 +1289,7 @@ int arch_kexec_locate_mem_hole(struct kexec_buf *kbuf)
1278
1289
buf_min = kbuf -> buf_min ;
1279
1290
buf_max = kbuf -> buf_max ;
1280
1291
/* Segments for kdump kernel should be within crashkernel region */
1281
- if (kbuf -> image -> type == KEXEC_TYPE_CRASH ) {
1292
+ if (IS_ENABLED ( CONFIG_CRASH_DUMP ) && kbuf -> image -> type == KEXEC_TYPE_CRASH ) {
1282
1293
buf_min = (buf_min < crashk_res .start ?
1283
1294
crashk_res .start : buf_min );
1284
1295
buf_max = (buf_max > crashk_res .end ?
0 commit comments