Lines Matching full:image
54 static void machine_kexec_free_page_tables(struct kimage *image) in machine_kexec_free_page_tables() argument
56 free_pages((unsigned long)image->arch.pgd, PGD_ALLOCATION_ORDER); in machine_kexec_free_page_tables()
57 image->arch.pgd = NULL; in machine_kexec_free_page_tables()
59 free_page((unsigned long)image->arch.pmd0); in machine_kexec_free_page_tables()
60 image->arch.pmd0 = NULL; in machine_kexec_free_page_tables()
61 free_page((unsigned long)image->arch.pmd1); in machine_kexec_free_page_tables()
62 image->arch.pmd1 = NULL; in machine_kexec_free_page_tables()
64 free_page((unsigned long)image->arch.pte0); in machine_kexec_free_page_tables()
65 image->arch.pte0 = NULL; in machine_kexec_free_page_tables()
66 free_page((unsigned long)image->arch.pte1); in machine_kexec_free_page_tables()
67 image->arch.pte1 = NULL; in machine_kexec_free_page_tables()
70 static int machine_kexec_alloc_page_tables(struct kimage *image) in machine_kexec_alloc_page_tables() argument
72 image->arch.pgd = (pgd_t *)__get_free_pages(GFP_KERNEL | __GFP_ZERO, in machine_kexec_alloc_page_tables()
75 image->arch.pmd0 = (pmd_t *)get_zeroed_page(GFP_KERNEL); in machine_kexec_alloc_page_tables()
76 image->arch.pmd1 = (pmd_t *)get_zeroed_page(GFP_KERNEL); in machine_kexec_alloc_page_tables()
78 image->arch.pte0 = (pte_t *)get_zeroed_page(GFP_KERNEL); in machine_kexec_alloc_page_tables()
79 image->arch.pte1 = (pte_t *)get_zeroed_page(GFP_KERNEL); in machine_kexec_alloc_page_tables()
80 if (!image->arch.pgd || in machine_kexec_alloc_page_tables()
82 !image->arch.pmd0 || !image->arch.pmd1 || in machine_kexec_alloc_page_tables()
84 !image->arch.pte0 || !image->arch.pte1) { in machine_kexec_alloc_page_tables()
111 static void machine_kexec_prepare_page_tables(struct kimage *image) in machine_kexec_prepare_page_tables() argument
116 control_page = page_address(image->control_code_page); in machine_kexec_prepare_page_tables()
118 pmd = image->arch.pmd0; in machine_kexec_prepare_page_tables()
121 image->arch.pgd, pmd, image->arch.pte0, in machine_kexec_prepare_page_tables()
124 pmd = image->arch.pmd1; in machine_kexec_prepare_page_tables()
127 image->arch.pgd, pmd, image->arch.pte1, in machine_kexec_prepare_page_tables()
133 * proposed image and prepare the control pages
138 * Do what every setup is needed on image and the
146 int machine_kexec_prepare(struct kimage *image) in machine_kexec_prepare() argument
150 set_memory_x((unsigned long)page_address(image->control_code_page), 1); in machine_kexec_prepare()
151 error = machine_kexec_alloc_page_tables(image); in machine_kexec_prepare()
154 machine_kexec_prepare_page_tables(image); in machine_kexec_prepare()
160 * when an image is freed.
162 void machine_kexec_cleanup(struct kimage *image) in machine_kexec_cleanup() argument
164 set_memory_nx((unsigned long)page_address(image->control_code_page), 1); in machine_kexec_cleanup()
165 machine_kexec_free_page_tables(image); in machine_kexec_cleanup()
172 void machine_kexec(struct kimage *image) in machine_kexec() argument
185 if (image->preserve_context) in machine_kexec()
195 if (image->preserve_context) { in machine_kexec()
208 control_page = page_address(image->control_code_page); in machine_kexec()
214 page_list[PA_PGD] = __pa(image->arch.pgd); in machine_kexec()
216 if (image->type == KEXEC_TYPE_DEFAULT) in machine_kexec()
217 page_list[PA_SWAP_PAGE] = (page_to_pfn(image->swap_page) in machine_kexec()
239 image->start = relocate_kernel_ptr((unsigned long)image->head, in machine_kexec()
241 image->start, in machine_kexec()
243 image->preserve_context); in machine_kexec()
246 if (image->preserve_context) in machine_kexec()