On Fri, 8 Mar 2013 08:41:41 -0700 Toshi Kani <toshi.kani@xxxxxx> wrote: > remove_memory() calls walk_memory_range() with [start_pfn, end_pfn), > where end_pfn is exclusive in this range. Therefore, end_pfn needs > to be set to the next page of the end address. > > ... > > --- a/mm/memory_hotplug.c > +++ b/mm/memory_hotplug.c > @@ -1801,7 +1801,7 @@ int __ref remove_memory(int nid, u64 start, u64 size) > int retry = 1; > > start_pfn = PFN_DOWN(start); > - end_pfn = start_pfn + PFN_DOWN(size); > + end_pfn = PFN_UP(start + size - 1); > > /* > * When CONFIG_MEMCG is on, one memory block may be used by other That looks right, although these rounding/boundary things are always hard. I wonder if `start' and `size' are ever not multiples of PAGE_SIZE.. How did you discover this? Code inspection, or some runtime malfunction? Please always include this info when fixing bugs. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>