Message ID | 4A494E3C.70304@kernel.org (mailing list archive) |
---|---|
State | Not Applicable, archived |
Headers | show |
Yinghai Lu wrote: > continue; > @@ -1409,8 +1409,10 @@ void __init e820_reserve_resources_late( > end = round_up(start, ram_alignment(start)); > if (start == end) > continue; > - reserve_region_with_split(&iomem_resource, start, > - end - 1, "RAM buffer"); > + if (end != (resource_size_t)end) > + continue; > + reserve_region_with_split(&iomem_resource, (resource_size_t)start, > + (resource_size_t)(end - 1), "RAM buffer"); > } > } > That doesn't quite look right; for one thing it doesn't handle the (admittedly somewhat unlikely) case of end pointing to the end of the address space. Something like: if (start > (resource_size_t)end-1) continue; ... should work better. -hpa
Index: linux-2.6/arch/x86/kernel/e820.c =================================================================== --- linux-2.6.orig/arch/x86/kernel/e820.c +++ linux-2.6/arch/x86/kernel/e820.c @@ -1400,8 +1400,8 @@ void __init e820_reserve_resources_late( * avoid stolen RAM: */ for (i = 0; i < e820.nr_map; i++) { - struct e820entry *entry = &e820_saved.map[i]; - resource_size_t start, end; + struct e820entry *entry = &e820.map[i]; + u64 start, end; if (entry->type != E820_RAM) continue; @@ -1409,8 +1409,10 @@ void __init e820_reserve_resources_late( end = round_up(start, ram_alignment(start)); if (start == end) continue; - reserve_region_with_split(&iomem_resource, start, - end - 1, "RAM buffer"); + if (end != (resource_size_t)end) + continue; + reserve_region_with_split(&iomem_resource, (resource_size_t)start, + (resource_size_t)(end - 1), "RAM buffer"); } }