Lines Matching +full:segment +full:- +full:0

1 // SPDX-License-Identifier: GPL-2.0-only
13 #include <linux/page-flags.h>
29 * kexec_image_info - For debugging output.
37 kexec_dprintk(" type: %d\n", kimage->type); in _kexec_image_info()
38 kexec_dprintk(" head: %lx\n", kimage->head); in _kexec_image_info()
39 kexec_dprintk(" kern_reloc: %pa\n", &kimage->arch.kern_reloc); in _kexec_image_info()
40 kexec_dprintk(" el2_vectors: %pa\n", &kimage->arch.el2_vectors); in _kexec_image_info()
49 * machine_kexec_prepare - Prepare for a kexec reboot.
57 if (kimage->type != KEXEC_TYPE_CRASH && cpus_are_stuck_in_kernel()) { in machine_kexec_prepare()
59 return -EBUSY; in machine_kexec_prepare()
62 return 0; in machine_kexec_prepare()
66 * kexec_segment_flush - Helper to flush the kimage segments to PoC.
74 for (i = 0; i < kimage->nr_segments; i++) { in kexec_segment_flush()
75 pr_debug(" segment[%lu]: %016lx - %016lx, 0x%lx bytes, %lu pages\n", in kexec_segment_flush()
77 kimage->segment[i].mem, in kexec_segment_flush()
78 kimage->segment[i].mem + kimage->segment[i].memsz, in kexec_segment_flush()
79 kimage->segment[i].memsz, in kexec_segment_flush()
80 kimage->segment[i].memsz / PAGE_SIZE); in kexec_segment_flush()
83 (unsigned long)phys_to_virt(kimage->segment[i].mem), in kexec_segment_flush()
84 (unsigned long)phys_to_virt(kimage->segment[i].mem) + in kexec_segment_flush()
85 kimage->segment[i].memsz); in kexec_segment_flush()
93 struct page *page = kimage_alloc_control_pages(kimage, 0); in kexec_page_alloc()
100 memset(vaddr, 0, PAGE_SIZE); in kexec_page_alloc()
109 void *reloc_code = page_to_virt(kimage->control_code_page); in machine_kexec_post_load()
117 if (kimage->head & IND_DONE) { in machine_kexec_post_load()
120 return 0; in machine_kexec_post_load()
123 kimage->arch.el2_vectors = 0; in machine_kexec_post_load()
126 &kimage->arch.el2_vectors); in machine_kexec_post_load()
134 return -ENOMEM; in machine_kexec_post_load()
138 kimage->arch.ttbr1 = __pa(trans_pgd); in machine_kexec_post_load()
139 kimage->arch.zero_page = __pa_symbol(empty_zero_page); in machine_kexec_post_load()
141 reloc_size = __relocate_new_kernel_end - __relocate_new_kernel_start; in machine_kexec_post_load()
143 kimage->arch.kern_reloc = __pa(reloc_code); in machine_kexec_post_load()
144 rc = trans_pgd_idmap_page(&info, &kimage->arch.ttbr0, in machine_kexec_post_load()
145 &kimage->arch.t0sz, reloc_code); in machine_kexec_post_load()
148 kimage->arch.phys_offset = virt_to_phys(kimage) - (long)kimage; in machine_kexec_post_load()
157 return 0; in machine_kexec_post_load()
161 * machine_kexec - Do the kexec reboot.
185 * In kexec case, kimage->start points to purgatory assuming that in machine_kexec()
187 * userspace (kexec-tools). in machine_kexec()
190 if (kimage->head & IND_DONE) { in machine_kexec()
195 restart(is_hyp_nvhe(), kimage->start, kimage->arch.dtb_mem, in machine_kexec()
196 0, 0); in machine_kexec()
201 __hyp_set_vectors(kimage->arch.el2_vectors); in machine_kexec()
202 cpu_install_ttbr0(kimage->arch.ttbr0, kimage->arch.t0sz); in machine_kexec()
203 kernel_reloc = (void *)kimage->arch.kern_reloc; in machine_kexec()
211 * machine_crash_shutdown - shutdown non-crashing cpus and save registers
217 /* shutdown non-crashing cpus */ in machine_crash_shutdown()
280 for (i = 0; i < kexec_crash_image->nr_segments; i++) in crash_is_nosave()
281 if (addr >= kexec_crash_image->segment[i].mem && in crash_is_nosave()
282 addr < (kexec_crash_image->segment[i].mem + in crash_is_nosave()
283 kexec_crash_image->segment[i].memsz)) in crash_is_nosave()