Source
508
508
}
509
509
#else
510
510
static int kexec_walk_memblock(struct kexec_buf *kbuf,
511
511
int (*func)(struct resource *, void *))
512
512
{
513
513
int ret = 0;
514
514
u64 i;
515
515
phys_addr_t mstart, mend;
516
516
struct resource res = { };
517
517
518
+
if (kbuf->image->type == KEXEC_TYPE_CRASH)
519
+
return func(&crashk_res, kbuf);
520
+
518
521
if (kbuf->top_down) {
519
-
for_each_free_mem_range_reverse(i, NUMA_NO_NODE, 0,
522
+
for_each_free_mem_range_reverse(i, NUMA_NO_NODE, MEMBLOCK_NONE,
520
523
&mstart, &mend, NULL) {
521
524
/*
522
525
* In memblock, end points to the first byte after the
523
526
* range while in kexec, end points to the last byte
524
527
* in the range.
525
528
*/
526
529
res.start = mstart;
527
530
res.end = mend - 1;
528
531
ret = func(&res, kbuf);
529
532
if (ret)
530
533
break;
531
534
}
532
535
} else {
533
-
for_each_free_mem_range(i, NUMA_NO_NODE, 0, &mstart, &mend,
534
-
NULL) {
536
+
for_each_free_mem_range(i, NUMA_NO_NODE, MEMBLOCK_NONE,
537
+
&mstart, &mend, NULL) {
535
538
/*
536
539
* In memblock, end points to the first byte after the
537
540
* range while in kexec, end points to the last byte
538
541
* in the range.
539
542
*/
540
543
res.start = mstart;
541
544
res.end = mend - 1;
542
545
ret = func(&res, kbuf);
543
546
if (ret)
544
547
break;