Lines Matching refs:image

142 static struct page *kimage_alloc_page(struct kimage *image,
146 int sanity_check_segment_list(struct kimage *image) in sanity_check_segment_list() argument
149 unsigned long nr_segments = image->nr_segments; in sanity_check_segment_list()
168 mstart = image->segment[i].mem; in sanity_check_segment_list()
169 mend = mstart + image->segment[i].memsz; in sanity_check_segment_list()
186 mstart = image->segment[i].mem; in sanity_check_segment_list()
187 mend = mstart + image->segment[i].memsz; in sanity_check_segment_list()
191 pstart = image->segment[j].mem; in sanity_check_segment_list()
192 pend = pstart + image->segment[j].memsz; in sanity_check_segment_list()
206 if (image->segment[i].bufsz > image->segment[i].memsz) in sanity_check_segment_list()
220 if (image->type == KEXEC_TYPE_CRASH) { in sanity_check_segment_list()
225 mstart = image->segment[i].mem; in sanity_check_segment_list()
226 mend = mstart + image->segment[i].memsz - 1; in sanity_check_segment_list()
239 struct kimage *image; in do_kimage_alloc_init() local
242 image = kzalloc(sizeof(*image), GFP_KERNEL); in do_kimage_alloc_init()
243 if (!image) in do_kimage_alloc_init()
246 image->head = 0; in do_kimage_alloc_init()
247 image->entry = &image->head; in do_kimage_alloc_init()
248 image->last_entry = &image->head; in do_kimage_alloc_init()
249 image->control_page = ~0; /* By default this does not apply */ in do_kimage_alloc_init()
250 image->type = KEXEC_TYPE_DEFAULT; in do_kimage_alloc_init()
253 INIT_LIST_HEAD(&image->control_pages); in do_kimage_alloc_init()
256 INIT_LIST_HEAD(&image->dest_pages); in do_kimage_alloc_init()
259 INIT_LIST_HEAD(&image->unusable_pages); in do_kimage_alloc_init()
261 return image; in do_kimage_alloc_init()
264 int kimage_is_destination_range(struct kimage *image, in kimage_is_destination_range() argument
270 for (i = 0; i < image->nr_segments; i++) { in kimage_is_destination_range()
273 mstart = image->segment[i].mem; in kimage_is_destination_range()
274 mend = mstart + image->segment[i].memsz; in kimage_is_destination_range()
324 static struct page *kimage_alloc_normal_control_pages(struct kimage *image, in kimage_alloc_normal_control_pages() argument
361 kimage_is_destination_range(image, addr, eaddr)) { in kimage_alloc_normal_control_pages()
369 list_add(&pages->lru, &image->control_pages); in kimage_alloc_normal_control_pages()
390 static struct page *kimage_alloc_crash_control_pages(struct kimage *image, in kimage_alloc_crash_control_pages() argument
419 hole_start = (image->control_page + (size - 1)) & ~(size - 1); in kimage_alloc_crash_control_pages()
427 for (i = 0; i < image->nr_segments; i++) { in kimage_alloc_crash_control_pages()
430 mstart = image->segment[i].mem; in kimage_alloc_crash_control_pages()
431 mend = mstart + image->segment[i].memsz - 1; in kimage_alloc_crash_control_pages()
440 if (i == image->nr_segments) { in kimage_alloc_crash_control_pages()
442 image->control_page = hole_end; in kimage_alloc_crash_control_pages()
451 struct page *kimage_alloc_control_pages(struct kimage *image, in kimage_alloc_control_pages() argument
456 switch (image->type) { in kimage_alloc_control_pages()
458 pages = kimage_alloc_normal_control_pages(image, order); in kimage_alloc_control_pages()
461 pages = kimage_alloc_crash_control_pages(image, order); in kimage_alloc_control_pages()
468 static int kimage_add_entry(struct kimage *image, kimage_entry_t entry) in kimage_add_entry() argument
470 if (*image->entry != 0) in kimage_add_entry()
471 image->entry++; in kimage_add_entry()
473 if (image->entry == image->last_entry) { in kimage_add_entry()
477 page = kimage_alloc_page(image, GFP_KERNEL, KIMAGE_NO_DEST); in kimage_add_entry()
482 *image->entry = virt_to_phys(ind_page) | IND_INDIRECTION; in kimage_add_entry()
483 image->entry = ind_page; in kimage_add_entry()
484 image->last_entry = ind_page + in kimage_add_entry()
487 *image->entry = entry; in kimage_add_entry()
488 image->entry++; in kimage_add_entry()
489 *image->entry = 0; in kimage_add_entry()
494 static int kimage_set_destination(struct kimage *image, in kimage_set_destination() argument
500 result = kimage_add_entry(image, destination | IND_DESTINATION); in kimage_set_destination()
506 static int kimage_add_page(struct kimage *image, unsigned long page) in kimage_add_page() argument
511 result = kimage_add_entry(image, page | IND_SOURCE); in kimage_add_page()
517 static void kimage_free_extra_pages(struct kimage *image) in kimage_free_extra_pages() argument
520 kimage_free_page_list(&image->dest_pages); in kimage_free_extra_pages()
523 kimage_free_page_list(&image->unusable_pages); in kimage_free_extra_pages()
526 void kimage_terminate(struct kimage *image) in kimage_terminate() argument
528 if (*image->entry != 0) in kimage_terminate()
529 image->entry++; in kimage_terminate()
531 *image->entry = IND_DONE; in kimage_terminate()
534 #define for_each_kimage_entry(image, ptr, entry) \ argument
535 for (ptr = &image->head; (entry = *ptr) && !(entry & IND_DONE); \
547 void kimage_free(struct kimage *image) in kimage_free() argument
552 if (!image) in kimage_free()
555 kimage_free_extra_pages(image); in kimage_free()
556 for_each_kimage_entry(image, ptr, entry) { in kimage_free()
573 machine_kexec_cleanup(image); in kimage_free()
576 kimage_free_page_list(&image->control_pages); in kimage_free()
582 if (image->file_mode) in kimage_free()
583 kimage_file_post_load_cleanup(image); in kimage_free()
585 kfree(image); in kimage_free()
588 static kimage_entry_t *kimage_dst_used(struct kimage *image, in kimage_dst_used() argument
594 for_each_kimage_entry(image, ptr, entry) { in kimage_dst_used()
607 static struct page *kimage_alloc_page(struct kimage *image, in kimage_alloc_page() argument
636 list_for_each_entry(page, &image->dest_pages, lru) { in kimage_alloc_page()
654 list_add(&page->lru, &image->unusable_pages); in kimage_alloc_page()
664 if (!kimage_is_destination_range(image, addr, in kimage_alloc_page()
673 old = kimage_dst_used(image, addr); in kimage_alloc_page()
698 list_add(&page->lru, &image->dest_pages); in kimage_alloc_page()
704 static int kimage_load_normal_segment(struct kimage *image, in kimage_load_normal_segment() argument
714 if (image->file_mode) in kimage_load_normal_segment()
722 result = kimage_set_destination(image, maddr); in kimage_load_normal_segment()
731 page = kimage_alloc_page(image, GFP_HIGHUSER, maddr); in kimage_load_normal_segment()
736 result = kimage_add_page(image, page_to_pfn(page) in kimage_load_normal_segment()
750 if (image->file_mode) in kimage_load_normal_segment()
761 if (image->file_mode) in kimage_load_normal_segment()
771 static int kimage_load_crash_segment(struct kimage *image, in kimage_load_crash_segment() argument
785 if (image->file_mode) in kimage_load_crash_segment()
813 if (image->file_mode) in kimage_load_crash_segment()
825 if (image->file_mode) in kimage_load_crash_segment()
835 int kimage_load_segment(struct kimage *image, in kimage_load_segment() argument
840 switch (image->type) { in kimage_load_segment()
842 result = kimage_load_normal_segment(image, segment); in kimage_load_segment()
845 result = kimage_load_crash_segment(image, segment); in kimage_load_segment()