• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500-V1.0.1.40_1.0.68/src/linux/linux-2.6/kernel/

Lines Matching defs:image

96 static int kimage_is_destination_range(struct kimage *image,
98 static struct page *kimage_alloc_page(struct kimage *image,
107 struct kimage *image;
113 image = kzalloc(sizeof(*image), GFP_KERNEL);
114 if (!image)
117 image->head = 0;
118 image->entry = &image->head;
119 image->last_entry = &image->head;
120 image->control_page = ~0; /* By default this does not apply */
121 image->start = entry;
122 image->type = KEXEC_TYPE_DEFAULT;
125 INIT_LIST_HEAD(&image->control_pages);
128 INIT_LIST_HEAD(&image->dest_pages);
131 INIT_LIST_HEAD(&image->unuseable_pages);
134 image->nr_segments = nr_segments;
136 result = copy_from_user(image->segment, segments, segment_bytes);
143 * the new image into invalid or reserved areas of RAM. This
157 mstart = image->segment[i].mem;
158 mend = mstart + image->segment[i].memsz;
175 mstart = image->segment[i].mem;
176 mend = mstart + image->segment[i].memsz;
179 pstart = image->segment[j].mem;
180 pend = pstart + image->segment[j].memsz;
194 if (image->segment[i].bufsz > image->segment[i].memsz)
201 *rimage = image;
203 kfree(image);
214 struct kimage *image;
217 image = NULL;
218 result = do_kimage_alloc(&image, entry, nr_segments, segments);
222 *rimage = image;
230 image->control_code_page = kimage_alloc_control_pages(image,
232 if (!image->control_code_page) {
240 *rimage = image;
242 kfree(image);
252 struct kimage *image;
255 image = NULL;
263 result = do_kimage_alloc(&image, entry, nr_segments, segments);
270 image->control_page = crashk_res.start;
271 image->type = KEXEC_TYPE_CRASH;
276 * attempt to load the new image into invalid or reserved
286 mstart = image->segment[i].mem;
287 mend = mstart + image->segment[i].memsz - 1;
299 image->control_code_page = kimage_alloc_control_pages(image,
301 if (!image->control_code_page) {
309 *rimage = image;
311 kfree(image);
316 static int kimage_is_destination_range(struct kimage *image,
322 for (i = 0; i < image->nr_segments; i++) {
325 mstart = image->segment[i].mem;
326 mend = mstart + image->segment[i].memsz;
375 static struct page *kimage_alloc_normal_control_pages(struct kimage *image,
389 * At worst this runs in O(N) of the image size.
412 kimage_is_destination_range(image, addr, eaddr)) {
420 list_add(&pages->lru, &image->control_pages);
426 * to give it an entry in image->segment[].
432 * page allocations, and add everyting to image->dest_pages.
441 static struct page *kimage_alloc_crash_control_pages(struct kimage *image,
470 hole_start = (image->control_page + (size - 1)) & ~(size - 1);
480 for (i = 0; i < image->nr_segments; i++) {
483 mstart = image->segment[i].mem;
484 mend = mstart + image->segment[i].memsz - 1;
493 if (i == image->nr_segments) {
499 image->control_page = hole_end;
505 struct page *kimage_alloc_control_pages(struct kimage *image,
510 switch (image->type) {
512 pages = kimage_alloc_normal_control_pages(image, order);
515 pages = kimage_alloc_crash_control_pages(image, order);
522 static int kimage_add_entry(struct kimage *image, kimage_entry_t entry)
524 if (*image->entry != 0)
525 image->entry++;
527 if (image->entry == image->last_entry) {
531 page = kimage_alloc_page(image, GFP_KERNEL, KIMAGE_NO_DEST);
536 *image->entry = virt_to_phys(ind_page) | IND_INDIRECTION;
537 image->entry = ind_page;
538 image->last_entry = ind_page +
541 *image->entry = entry;
542 image->entry++;
543 *image->entry = 0;
548 static int kimage_set_destination(struct kimage *image,
554 result = kimage_add_entry(image, destination | IND_DESTINATION);
556 image->destination = destination;
562 static int kimage_add_page(struct kimage *image, unsigned long page)
567 result = kimage_add_entry(image, page | IND_SOURCE);
569 image->destination += PAGE_SIZE;
575 static void kimage_free_extra_pages(struct kimage *image)
578 kimage_free_page_list(&image->dest_pages);
581 kimage_free_page_list(&image->unuseable_pages);
584 static int kimage_terminate(struct kimage *image)
586 if (*image->entry != 0)
587 image->entry++;
589 *image->entry = IND_DONE;
594 #define for_each_kimage_entry(image, ptr, entry) \
595 for (ptr = &image->head; (entry = *ptr) && !(entry & IND_DONE); \
607 static void kimage_free(struct kimage *image)
612 if (!image)
615 kimage_free_extra_pages(image);
616 for_each_kimage_entry(image, ptr, entry) {
634 machine_kexec_cleanup(image);
637 kimage_free_page_list(&image->control_pages);
638 kfree(image);
641 static kimage_entry_t *kimage_dst_used(struct kimage *image,
647 for_each_kimage_entry(image, ptr, entry) {
660 static struct page *kimage_alloc_page(struct kimage *image,
689 list_for_each_entry(page, &image->dest_pages, lru) {
707 list_add(&page->lru, &image->unuseable_pages);
717 if (!kimage_is_destination_range(image, addr,
726 old = kimage_dst_used(image, addr);
748 list_add(&page->lru, &image->dest_pages);
755 static int kimage_load_normal_segment(struct kimage *image,
769 result = kimage_set_destination(image, maddr);
778 page = kimage_alloc_page(image, GFP_HIGHUSER, maddr);
783 result = kimage_add_page(image, page_to_pfn(page)
815 static int kimage_load_crash_segment(struct kimage *image,
870 static int kimage_load_segment(struct kimage *image,
875 switch (image->type) {
877 result = kimage_load_normal_segment(image, segment);
880 result = kimage_load_crash_segment(image, segment);
901 * and the copies the image to it's final destination. And
902 * jumps into the image at entry.
920 struct kimage **dest_image, *image;
946 image = NULL;
969 result = kimage_normal_alloc(&image, entry,
977 result = kimage_crash_alloc(&image, entry,
983 result = machine_kexec_prepare(image);
988 result = kimage_load_segment(image, &image->segment[i]);
992 result = kimage_terminate(image);
997 image = xchg(dest_image, image);
1002 kimage_free(image);