Question about kimage_alloc_page in kexec.c, bug?
wilbur.chan
wilbur512 at gmail.com
Mon Oct 11 11:02:06 EDT 2010
Hi all !
I have a question on kimage_alloc_page:
page = kimage_alloc_pages(gfp_mask, 0);
...
/* If the page cannot be used file it away */
if (page_to_pfn(page) > (KEXEC_SOURCE_MEMORY_LIMIT >> PAGE_SHIFT)) {
list_add(&page->lru, &image->unuseable_pages);
continue;
}
If a page frame is right at physical address 0x20000000 , then when calling
machine_kexec , the following code:
*ptr = (unsigned long) phys_to_virt(*ptr);
will generate an virtual address of 0xa0000000 = 0x20000000+0x80000000 , which
results in physical address 0.
should it be like this? :
--- kexec.c 2010-08-27 07:47:12.000000000 +0800
+++ kexec.changed.c 2010-10-11 22:04:08.000000000 +0800
@@ -723,7 +723,7 @@
if (!page)
return NULL;
/* If the page cannot be used file it away */
- if (page_to_pfn(page) >
+ if (page_to_pfn(page) >=
(KEXEC_SOURCE_MEMORY_LIMIT >> PAGE_SHIFT)) {
list_add(&page->lru, &image->unuseable_pages);
continue;
Thank you
More information about the kexec
mailing list